VanDyke VShell SFTP ログを収集する
このドキュメントでは、Syslog を使用した Bindplane またはログシッパーを使用した Amazon S3 を使用して、VanDyke VShell SFTP ログを Google Security Operations に取り込む方法について説明します。パーサーは、未加工ログを構造化 UDM 形式に変換します。JSON 形式と SYSLOG 形式の両方を処理し、IP アドレス、ポート、イベントの詳細などの関連フィールドを抽出し、プラットフォームの詳細やセキュリティの重大度などのコンテキスト情報でデータを拡充します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- VanDyke VShell サーバーまたは管理コンソールへの特権アクセス
- オプション 1 の場合: Bindplane エージェント用の
systemdを使用する Windows 2016 以降または Linux ホスト - オプション 2: S3 アクセス権限と VShell サーバー上の NXLog/Fluent Bit を持つ AWS アカウント
オプション 1: Bindplane と Syslog による統合
このオプションは、レイテンシを最小限に抑えたリアルタイム ログ ストリーミングを提供するため、ほとんどのデプロイにおすすめします。
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [コレクション エージェント] に移動します。
- Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステムまたはフィードを構成するシステムに、ファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
- [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
Bindplane エージェントをインストールする
次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。
Windows のインストール
- 管理者として コマンド プロンプトまたは PowerShell を開きます。
次のコマンドを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux のインストール
- root 権限または sudo 権限でターミナルを開きます。
次のコマンドを実行します。
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
その他のインストール リソース
- その他のインストール オプションについては、こちらのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
構成ファイルにアクセスします。
config.yamlファイルを見つけます。通常、Linux では/etc/bindplane-agent/ディレクトリに、Windows ではインストール ディレクトリにあります。- テキスト エディタ(
nano、vi、メモ帳など)を使用してファイルを開きます。
config.yamlファイルを次のように編集します。receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: YOUR_CUSTOMER_ID endpoint: malachiteingestion-pa.googleapis.com # Custom log type - requires parser extension log_type: 'VANDYKE_SFTP' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels- 自社のインフラストラクチャでの必要性に応じて、ポートと IP アドレスを置き換えます。
<customer_id>は、実際の顧客 ID に置き換えます。/path/to/ingestion-authentication-file.jsonの値を、Google SecOps の取り込み認証ファイルを取得するで認証ファイルを保存したパスに更新します。- UDP ではなく TCP の場合は、
udplogをtcplogに置き換えます。
Bindplane エージェントを再起動して変更を適用する
Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。
sudo systemctl restart bindplane-agentWindows で Bindplane エージェントを再起動するには、Services コンソールを使用するか、次のコマンドを入力します。
net stop BindPlaneAgent && net start BindPlaneAgent
VanDyke VShell で Syslog 転送を構成する
Windows 版 VShell の場合
- VShell コントロール パネルにログインします。
- [ロギング] 設定に移動します。
- リモート syslog ロギングを構成します。
- リモート syslog サーバーへのロギングを有効にします。
- サーバー アドレス: Bindplane エージェントの IP アドレスを入力します。
- ポート: 514(または構成済みのポート)を入力します。
- プロトコル: [UDP] を選択します(構成されている場合は TCP)。
- メッセージ グループ: [接続]、[認証]、[SFTP]、[FTPS]、[HTTPS]、[エラー]、[警告]、[情報] を選択します。
- [適用] > [OK] をクリックします。
Linux/macOS の VShell の場合
- vshelld_config ファイル(通常は
/etc/vshell/vshelld_config)を編集します。 次のパラメータを構成します。
SyslogFacility LOG_LOCAL3 LogLevel INFOLOG_LOCAL3 を Bindplane エージェントに転送するようにシステムの syslog を構成します。
/etc/rsyslog.confまたは/etc/syslog-ng/syslog-ng.confを編集します。- 追加:
local3.* @bindplane-agent-ip:514(UDP の場合)またはlocal3.* @@bindplane-agent-ip:514(TCP の場合)。
VShell サービスと syslog サービスを再起動します。
sudo systemctl restart vshelld sudo systemctl restart rsyslog
オプション 2: AWS S3 経由の統合
このオプションは、ログのアーカイブが必要な環境や、syslog の直接転送が実現できない環境で役立ちます。AWS Lambda はオンプレミス ファイルにアクセスできないため、これには VShell サーバーにログシッパーが必要です。
Google SecOps 用に AWS S3 バケットと IAM を構成する
- バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
- 後で参照できるように、バケットの名前とリージョンを保存します(例:
vandyke-sftp-logs)。 - IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成したユーザーを選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
- [ユースケース] で [サードパーティ サービス] を選択します。
- [次へ] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [CSV ファイルをダウンロード] をクリックし、[アクセスキー] と [シークレット アクセスキー] を保存して、今後の参照に備えます。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションで [権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーを検索します。
- ポリシーを選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
VShell サーバーにログ シッパーをインストールして構成する
オペレーティング システムに応じて、次のいずれかのオプションを選択します。
オプション A: NXLog を使用する(Windows)
- nxlog.co から NXLog Community Edition をダウンロードしてインストールします。
C:\Program Files\nxlog\conf\nxlog.confを編集します。<Extension json> Module xm_json </Extension> <Extension syslog> Module xm_syslog </Extension> <Input vshell_log> Module im_file File "C:\\Program Files\\VanDyke Software\\VShell\\Log\\VShell.log" SavePos TRUE <Exec> # Parse VShell log format if $raw_event =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) "(.*)"$/ { $EventTime = $1; $Protocol = $2; $EventType = $3; $SessionID = $4; $ClientIP = $5; $ClientPort = $6; $Username = $7; $Filename = $9; $BytesDown = $10; $BytesUp = $11; $ServerIP = $14; $ServerPort = $15; $EventMessage = $16; # Convert to JSON to_json(); } </Exec> </Input> <Output s3> Module om_exec Command C:\scripts\upload_to_s3.ps1 Args %FILEPATH% </Output> <Route vshell_to_s3> Path vshell_log => s3 </Route>PowerShell スクリプト
C:\scripts\upload_to_s3.ps1を作成します。param([string]$FilePath) $bucket = "vandyke-sftp-logs" $key = "vshell/$(Get-Date -Format 'yyyy/MM/dd/HH')/$(Get-Date -Format 'yyyyMMddHHmmss').json" # Batch logs $logs = Get-Content $FilePath | ConvertFrom-Json $jsonLines = $logs | ForEach-Object { $_ | ConvertTo-Json -Compress } $content = $jsonLines -join "`n" # Upload to S3 Write-S3Object -BucketName $bucket -Key $key -Content $content -ProfileName defaultAWS 認証情報プロファイルを作成します。
Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs default- タスク スケジューラを使用して、PowerShell スクリプトを 5 分ごとに実行するようにスケジュールします。
オプション B: Fluent Bit を使用する(Linux)
Fluent Bit をインストールします。
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh/etc/fluent-bit/fluent-bit.confを構成します。[SERVICE] Flush 5 Daemon On Log_Level info [INPUT] Name tail Path /var/log/vshell/vshell.log Parser vshell_parser Tag vshell.* Refresh_Interval 5 Mem_Buf_Limit 10MB [PARSER] Name vshell_parser Format regex Regex ^(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (?<protocol>\S+) (?<event_type>\S+) (?<session_id>\S+) (?<client_ip>\S+) (?<client_port>\S+) (?<username>\S+) (?<dash>\S+) (?<filename>\S+) (?<bytes_down>\S+) (?<bytes_up>\S+) (?<field1>\S+) (?<field2>\S+) (?<server_ip>\S+) (?<server_port>\S+) "(?<event_message>[^"]*)" [OUTPUT] Name s3 Match vshell.* bucket vandyke-sftp-logs region us-east-1 use_put_object On total_file_size 5M upload_timeout 10s compression gzip s3_key_format /vshell/%Y/%m/%d/%H/%{hostname}_%{uuid}.json.gzAWS 認証情報を構成します。
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEYFluent Bit を起動します。
sudo systemctl enable fluent-bit sudo systemctl start fluent-bit
VanDyke VShell のログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
VanDyke VShell SFTP logs)。 - [ソースタイプ] として [Amazon S3 V2] を選択します。
- [ログタイプ](カスタム)として [VanDyke SFTP] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- S3 URI:
s3://vandyke-sftp-logs/vshell/ - Source deletion options: 必要に応じて [Retain](推奨)または削除オプションを選択します。
- ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
- アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
- シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。
- アセットの名前空間: アセットの名前空間。
- Ingestion labels: このフィードのイベントに適用されるラベル。
- S3 URI:
- [次へ] をクリックします。
- [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| agent.id | read_only_udm.observer.asset_id | 「filebeat:」と agent.id フィールドの値を連結します。 |
| agent.type | read_only_udm.observer.application | agent.type フィールドの値を直接マッピングします |
| agent.version | read_only_udm.observer.platform_version | agent.version フィールドの値を直接マッピングします |
| ecs.version | read_only_udm.metadata.product_version | ecs.version フィールドの値を直接マッピングします |
| host.architecture | read_only_udm.target.asset.hardware.cpu_platform | host.architecture フィールドの値を直接マッピングします |
| host.hostname | read_only_udm.target.hostname | host.hostname フィールドの値を直接マッピングします |
| host.id | read_only_udm.principal.asset_id | 「VANDYKE_SFTP:」と host.id フィールドの値を連結します。 |
| host.ip | read_only_udm.target.ip | host.ip 配列内の各 IP アドレスを個別の read_only_udm.target.ip フィールドに直接マッピングします。 |
| host.mac | read_only_udm.target.mac | host.mac 配列内の各 MAC アドレスを個別の read_only_udm.target.mac フィールドに直接マッピングします。 |
| host.os.kernel | read_only_udm.target.platform_patch_level | host.os.kernel フィールドの値を直接マッピングします |
| host.os.platform | read_only_udm.target.platform | 値に基づいて host.os.platform の値を WINDOWS、LINUX、MAC、UNKNOWN_PLATFORM にマッピングします |
| host.os.version | read_only_udm.target.platform_version | host.os.version フィールドの値を直接マッピングします |
| log.file.path | read_only_udm.principal.process.file.full_path | log.file.path フィールドの値を直接マッピングします |
| logstash.collect.timestamp | read_only_udm.metadata.collected_timestamp | logstash.collect.timestamp フィールドからタイムスタンプを解析し、タイムスタンプ オブジェクトに変換します |
| logstash.irm_environment | read_only_udm.additional.fields.value.string_value | logstash.irm_environment フィールドの値を直接マッピングします。キーは「irm_environment」に設定されます。 |
| logstash.irm_region | read_only_udm.additional.fields.value.string_value | logstash.irm_region フィールドの値を直接マッピングします。キーは「irm_region」に設定されます。 |
| logstash.irm_site | read_only_udm.additional.fields.value.string_value | logstash.irm_site フィールドの値を直接マッピングします。キーは「irm_site」に設定されます。 |
| logstash.process.host | read_only_udm.observer.hostname | logstash.process.host フィールドの値を直接マッピングします |
| メッセージ | grok パターンと正規表現を使用してさまざまなフィールドを抽出するために使用されます | |
| read_only_udm.metadata.event_type | 「NETWORK_FTP」に設定 | |
| read_only_udm.metadata.log_type | 「VANDYKE_SFTP」に設定 | |
| read_only_udm.metadata.product_event_type | Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
| read_only_udm.metadata.product_name | 「VANDYKE_SFTP」に設定 | |
| read_only_udm.metadata.vendor_name | 「VANDYKE SOFTWARE」に設定 | |
| read_only_udm.network.application_protocol | 説明フィールドに「SSH2」または「SSH」が含まれている場合は「SSH」に設定します。それ以外で、メソッド フィールドが HTTP メソッドと一致する場合は「HTTP」に設定します。 | |
| read_only_udm.network.http.method | 一般的な HTTP メソッドと一致する場合にのみ、grok パターンを使用してメッセージ フィールドから抽出されます。 | |
| read_only_udm.network.http.referral_url | Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
| read_only_udm.network.http.response_code | Grok パターンを使用してメッセージ フィールドから抽出され、整数に変換されます。 | |
| read_only_udm.network.ip_protocol | 説明フィールドに「TCP」が含まれている場合は、「TCP」に設定します。 | |
| read_only_udm.principal.ip | Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
| read_only_udm.principal.port | Grok パターンを使用してメッセージ フィールドから抽出され、整数に変換されます。 | |
| read_only_udm.security_result.description | Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
| read_only_udm.security_result.severity | syslog_severity が「error」または「warning」の場合は「HIGH」、syslog_severity が「notice」の場合は「MEDIUM」、syslog_severity が「information」または「info」の場合は「LOW」に設定します。 | |
| read_only_udm.security_result.severity_details | syslog_severity フィールドの値を直接マッピングします | |
| read_only_udm.target.ip | Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
| read_only_udm.target.port | Grok パターンを使用してメッセージ フィールドから抽出され、整数に変換されます。 | |
| read_only_udm.target.process.pid | Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
| syslog_severity | security_result の重大度を判断するために使用されます |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。