VanDyke VShell SFTP ログを収集する
このドキュメントでは、Syslog を使用した Bindplane またはログシッパーを使用した Amazon S3 のいずれかを使用して、VanDyke VShell SFTP ログを Google Security Operations に取り込む方法について説明します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- VanDyke VShell サーバーまたは管理コンソールへの特権アクセス権
- オプション 1 の場合: Bindplane エージェント用の
systemdを備えた Windows 2016 以降または Linux ホスト - オプション 2: S3 アクセス権を持つ AWS アカウントと、VShell サーバー上の NXLog/Fluent Bit
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM Settings] > [Collection Agents] に移動します。
- Ingestion Authentication File をダウンロードします。
- Bindplane をインストールするシステムまたはフィードを構成するシステムに、ファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
- [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
オプション 1: Bindplane と Syslog による統合
このオプションは、レイテンシを最小限に抑えたリアルタイム ログ ストリーミングを提供し、ほとんどのデプロイにおすすめです。
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
その他のインストール リソース
その他のインストール オプションについては、Bindplane エージェントのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように BindPlane エージェントを構成する
構成ファイルにアクセスします。
config.yamlファイルを見つけます。通常、Linux では/opt/observiq-otel-collector/ディレクトリに、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 アドレスを置き換えます。
YOUR_CUSTOMER_IDは、実際の顧客 ID に置き換えます。/path/to/ingestion-authentication-file.jsonを、認証ファイルが保存されたファイルパスに更新します。- UDP ではなく TCP の場合は、
udplogをtcplogに置き換えます。
Bindplane エージェントを再起動して変更を適用する
Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。
sudo systemctl restart observiq-otel-collectorWindows で Bindplane エージェントを再起動するには、サービス コンソールを使用するか、次のコマンドを入力します。
net stop observiq-otel-collector && net start observiq-otel-collector
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 ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成したユーザーを選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
- [ユースケース] で [サードパーティ サービス] を選択します。
- [Next] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [.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 設定] > [フィード] に移動します。
- [+ 新しいフィードを追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
VanDyke VShell SFTP logs)。 - [ソースタイプ] として [Amazon S3 V2] を選択します。
- [ログタイプ](カスタム)として [VanDyke SFTP] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- S3 URI:
s3://vandyke-sftp-logs/vshell/ - Source deletion options: 必要に応じて [Retain](推奨)または削除オプションを選択します。
- ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
- アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
- シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。
- Asset namespace: アセットの名前空間。
- 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 フィールドの値を直接マッピングします |
message |
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 のプロフェッショナルから回答を得ることができます。