Carbon Black EDR のログを収集する
このドキュメントでは、AWS S3 を使用してクラウド環境とオンプレミス環境から Carbon Black EDR ログを収集する方法について説明します。パーサーは、JSON、CSV、syslog 形式のメッセージからフィールドを抽出し、正規化して UDM にマッピングします。ネットワーク接続、プロセス イベント、ファイル変更、レジストリ変更、IOC ヒットなど、さまざまな Carbon Black イベントタイプを処理し、脅威インテリジェンスとデバイス情報でデータを拡充します。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス。
- AWS IAM と S3 への特権アクセス。
- Cloud またはオンプレミスの Carbon Black EDR への特権アクセス。
オンプレミスで Carbon Black EDR を構成する
オンプレミス用に Amazon S3 バケットを構成する
- バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
- 後で使用するために、バケットの名前とリージョンを保存します。
- IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成した [ユーザー] を選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
- [ユースケース] として [サードパーティ サービス] を選択します。
- [次へ] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [CSV ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、後で使用できるようにします。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションで、[権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーを検索して選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
オンプレミス EDR サーバーに cb-event-forwarder をインストールする
CbOpenSource リポジトリがまだ存在しない場合は、インストールします。
cd /etc/yum.repos.d curl -O https://opensource.carbonblack.com/release/x86_64/CbOpenSource.repo
YUM を使用して RPM をインストールします。
yum install cb-event-forwarder
EDR 7.1.0 以降を使用している場合は、次のスクリプトを実行して、EDR に必要な適切な権限を設定します。
/usr/share/cb/integrations/event-forwarder/cb-edr-fix-permissions.sh
JSON ログを出力するように cb-event-forwarder を構成する
構成ファイルを開きます。
sudo nano /etc/cb/integrations/event-forwarder/cb-event-forwarder.conf
次のパラメータを変更します。
[event_forwarder] output_format=json # Enable JSON format output_type=s3 # Send logs to AWS S3 s3_bucket_name=YOUR-S3-BUCKET-NAME s3_region=YOUR-S3-BUCKET-NAME s3_access_key_id=YOUR_AWS_ACCESS_KEY s3_secret_access_key=YOUR_AWS_SECRET_KEY s3_prefix=carbonblack/edr/logs
キーボードを使用して保存して終了するには:
- Ctrl+X、Y、Enter の順に押します。
cb-event-forwarder を起動します。
sudo systemctl enable cb-event-forwarder sudo systemctl restart cb-event-forwarder sudo systemctl status cb-event-forwarder
S3 用に Carbon Black Cloud Event Forwarder を構成する
AWS S3 バケットを作成する
- AWS Management Console にログインします。
- AWS リージョンがイベント転送ツールのリージョンと一致していることを確認します。
- AWS コンソール ページで、リージョンを見つけます。
- プルダウンを使用して、イベント フォワーダーの正しいリージョンを選択します。
- 次のリストに、各 Carbon Black EDR URL に適用される AWS リージョンを示します。
- "instance-alias".my.carbonblack.io - リージョン: US East(N. (バージニア州北部)(us-east-1)
- "instance-alias".my.cbcloud.de - リージョン: ヨーロッパ(フランクフルト)(eu-central-1)
- 「instance-alias」.my.cbcloud.sg リージョン: アジア太平洋(シンガポール)(ap-southeast-1)
- [サービス] を選択します。
- S3 コンソールに移動します。
- [バケットを作成] をクリックして、[バケットの作成] ウィザードを開きます。
- [バケット名] に、バケットの一意の名前(CB-EDR など)を入力します。
- [リージョン] が、先ほど選択したリージョンにデフォルト設定されていることを確認します。
- パブリック アクセスのブロックのデフォルトを更新して、パブリック アクセスを許可します(これは、ログを Google SecOps に取り込むために必要です)。
- [バケットを作成] を選択します。
イベント転送ツールがイベントを書き込めるように S3 バケットを構成する
- IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成した [ユーザー] を選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
- [ユースケース] として [サードパーティ サービス] を選択します。
- [次へ] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [CSV ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、後で使用できるようにします。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションで、[権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーを検索します。
- ポリシーを選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
EDR コンソールでイベント転送を構成する
- VMware Carbon Black Cloud にログインします。
- [イベント転送] タブに移動します。
- プロダクトが S3 にアップロードするイベントを有効にします。
- [Output and Type] に移動して、[S3] に設定します。
- S3 バケット名を
<region>:<bucket-name>
の形式で指定します(例:us-east-1:cb-edr
)。 - INI 形式の AWS 認証情報ファイルをアップロードします。
プロファイルの例を次に示します。
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-east-1
[保存] をクリックし、サービスを再起動して変更を有効にします。
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード]
- [Content Hub] > [Content Packs]
[SIEM 設定] > [フィード] でフィードを設定する
フィードを構成する手順は次のとおりです。
- [SIEM Settings] > [Feeds] に移動します。
- [Add New Feed] をクリックします。
- 次のページで [単一のフィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: Carbon Black EDR Logs)。
- [ソースタイプ] として [Amazon S3] を選択します。
- [ログタイプ] として [Carbon Black EDR] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- リージョン: Amazon S3 バケットが配置されているリージョン。
- S3 URI: バケット URI。
s3:/BUCKET_NAME
BUCKET_NAME
は、バケットの実際の名前に置き換えます。
- URI is a: ログストリームの構成([単一ファイル] | [ディレクトリ] | [サブディレクトリを含むディレクトリ])に応じて URI_TYPE を選択します。
- Source deletion options: 必要に応じて削除オプションを選択します。
- アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
- シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
コンテンツ ハブからフィードを設定する
次のフィールドに値を指定します。
- リージョン: Amazon S3 バケットが配置されているリージョン。
- S3 URI: バケット URI。
s3:/BUCKET_NAME
BUCKET_NAME
は、バケットの実際の名前に置き換えます。
- URI is a: ログストリームの構成([単一ファイル] | [ディレクトリ] | [サブディレクトリを含むディレクトリ])に応じて URI_TYPE を選択します。
- Source deletion options: 必要に応じて削除オプションを選択します。
- アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
- シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- ソースタイプ: Google SecOps にログを収集するために使用される方法。
- アセットの名前空間: フィードに関連付けられた名前空間。
- Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
action |
security_result.detection_fields[?key == 'action'].value |
未加工ログの action フィールドの値。 |
cb_server |
intermediary.hostname |
未加工ログの cb_server フィールドの値。 |
cb_version |
metadata.product_version |
未加工ログの cb_version フィールドの値。 |
child_pid |
target.process.pid (ingress.event.childproc イベントの場合) |
type が ingress.event.childproc の場合の未加工ログの child_pid フィールドの値。 |
child_process_guid |
target.process.product_specific_process_id (ingress.event.childproc イベントの場合) |
type が ingress.event.childproc の場合、未加工ログの child_process_guid フィールドの値と「CB:」が連結されます。 |
child_username |
target.user.userid (ingress.event.childproc イベントの場合) |
type が ingress.event.childproc の場合の未加工ログの child_username フィールドの値。 |
childproc_guid |
target.process.product_specific_process_id (endpoint.event.procstart イベントの場合) |
type が endpoint.event.procstart の場合、未加工ログの childproc_guid フィールドの値と「CB:」が連結されます。 |
childproc_hash.0 |
target.process.file.md5 (endpoint.event.procstart イベントの場合) |
type が endpoint.event.procstart の場合、未加工ログの childproc_hash 配列の最初の要素。 |
childproc_hash.1 |
target.process.file.sha256 (endpoint.event.procstart イベントの場合) |
type が endpoint.event.procstart の場合、未加工のログの childproc_hash 配列の 2 番目の要素。 |
childproc_name |
target.process.file.full_path (endpoint.event.procstart イベントの場合) |
type が endpoint.event.procstart の場合の未加工ログの childproc_name フィールドの値。 |
childproc_pid |
target.process.pid (endpoint.event.procstart イベントの場合) |
type が endpoint.event.procstart の場合の未加工ログの childproc_pid フィールドの値。 |
childproc_publisher.0.name |
security_result.detection_fields[?key == 'childproc_publisher_name'].value (endpoint.event.procstart イベントの場合) |
type が endpoint.event.procstart の場合、未加工ログの childproc_publisher.0.name の値と連結された「childproc_publisher_name:」。 |
childproc_publisher.0.state |
security_result.detection_fields[?key == 'childproc_publisher_state'].value (endpoint.event.procstart イベントの場合) |
type が endpoint.event.procstart の場合、未加工ログの childproc_publisher.0.state の値と連結された「childproc_publisher_state:」。 |
childproc_reputation |
security_result.detection_fields[?key == 'childproc_reputation'].value (endpoint.event.procstart イベントの場合) |
type が endpoint.event.procstart の場合の未加工ログの childproc_reputation フィールドの値。 |
childproc_username |
target.user.userid (endpoint.event.procstart イベントの場合) |
type が endpoint.event.procstart の場合の未加工ログの childproc_username フィールドの値。 |
clientIp |
principal.ip 、principal.asset.ip |
未加工ログの clientIp フィールドの値。 |
cmdline |
target.process.command_line (feed.query.hit.process イベントと feed.storage.hit.process イベントの場合)、additional.fields[?key == 'cmdline_*'].value.string_value (watchlist.storage.hit.process イベントの場合) |
type が feed.query.hit.process または feed.storage.hit.process の場合の未加工ログの cmdline フィールドの値。watchlist.storage.hit.process イベントの場合、キー「cmdline_*」で additional.fields に保存されます。 |
command_line |
target.process.command_line (ingress.event.procstart イベントの場合) |
type が ingress.event.procstart の場合の未加工ログの command_line フィールドの値。 |
comms_ip |
intermediary.ip |
未加工ログの comms_ip フィールドの値。 |
computer_name |
principal.hostname 、principal.asset.hostname |
未加工ログの computer_name フィールドの値。 |
crossproc_api |
additional.fields[?key == 'crossproc_api'].value.string_value (endpoint.event.apicall イベントの場合) |
type が endpoint.event.apicall の場合の未加工ログの crossproc_api フィールドの値。 |
crossproc_guid |
additional.fields[?key == 'crossproc_guid'].value.string_value (endpoint.event.crossproc イベントの場合) |
type が endpoint.event.crossproc の場合の未加工ログの crossproc_guid フィールドの値。 |
crossproc_hash.0 |
additional.fields[?key == 'crossproc_md5'].value.string_value (endpoint.event.crossproc イベントの場合) |
type が endpoint.event.crossproc の場合、未加工ログの crossproc_hash 配列の最初の要素。 |
crossproc_hash.1 |
additional.fields[?key == 'crossproc_sha256'].value.string_value (endpoint.event.crossproc イベントの場合) |
type が endpoint.event.crossproc の場合、未加工のログの crossproc_hash 配列の 2 番目の要素。 |
crossproc_name |
target.process.file.full_path (endpoint.event.crossproc イベントの場合) |
type が endpoint.event.crossproc の場合の未加工ログの crossproc_name フィールドの値。 |
crossproc_publisher.0.name |
security_result.detection_fields[?key == 'crossproc_publisher_name'].value (endpoint.event.crossproc イベントの場合) |
type が endpoint.event.crossproc の場合、未加工ログの crossproc_publisher.0.name の値と連結された「crossproc_publisher_name:」。 |
crossproc_publisher.0.state |
security_result.detection_fields[?key == 'crossproc_publisher_state'].value (endpoint.event.crossproc イベントの場合) |
type が endpoint.event.crossproc の場合、未加工ログの crossproc_publisher.0.state の値と連結された「crossproc_publisher_state:」。 |
crossproc_reputation |
additional.fields[?key == 'crossproc_reputation'].value.string_value (endpoint.event.crossproc イベントの場合) |
type が endpoint.event.crossproc の場合の未加工ログの crossproc_reputation フィールドの値。 |
crossproc_target |
additional.fields[?key == 'crossproc_target'].value.string_value (endpoint.event.crossproc イベントの場合) |
type が endpoint.event.crossproc の場合の未加工ログの crossproc_target フィールドの値。文字列「true」または「false」に変換されます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。