
BRAWL自動敵対エミュレーション演習からのデータ
サイバーセキュリティ研究者が検出・対応能力を開発する際の課題の一つは、仮説や能力をテストするための現実的な環境を見つけることです。
最も安価な方法は、小規模なラボネットワークで能力をテストすることです。しかし、この環境には、実際のエンタープライズネットワークの規模や、現実環境のノイズが欠けており、検出がはるかに難しくなります。多くの点で、最適な環境は、制御された現実的な攻撃者と、ユーザー、システム管理者、サードパーティのソフトウェア/デバイスからの実際のノイズを伴う複数のエンタープライズ規模のネットワークでテストすることです。この環境でのテストの課題は、費用がかかり、シナリオによってはリスクが高いことです。
BRAWLは、クラウド環境内にエンタープライズネットワークを自動的に作成するシステムを作成することで、妥協点を見出すことを目指しています。OpenStackは現在サポートされている唯一の環境ですが、将来他のクラウド環境も容易にサポートできるように設計されています。BRAWLはまた、LogStashおよびKafkaを使用したデータ取り込み・処理パイプラインを含む分析ネットワークを構築します。分析ネットワークの一部として、ElasticsearchおよびKibanaを使用したイベントストレージ・検索システムを作成します。BRAWLはWindowsイメージを使用してエンタープライズネットワーク「ゲームボード」を起動します。これらのイメージにはMicrosoft Sysmonおよびその他のセンサーが既にインストール・設定され、ログをデータ取り込みフレームワークに転送するようになっています。
BRAWLにはまた、ボットの概念があり、Red、Blue、またはGrayのいずれかになります。Redボットは攻撃的、Blueボットは防御的、Grayボットは正当なユーザー行動をエミュレートしてノイズを提供し、検出をより困難にします。ユーザーが研究仮説をテストしたい場合、BRAWLボットを実装します。BRAWLボットはBRAWLコントローラーに自身を登録し、コントローラーはゲームボード上でBRAWLボット間のゲームを調整します。
注記: ファイルサイズとGitHubの割り当てに関する問題のため、すべてのファイルをプレーンテキストとしてgitリポジトリに残す代わりに、zipファイルにまとめています。すべてのデータはファイル内にあります。
このリリースは、BRAWLプロトタイプからのデータの一部で構成されています。以下に説明する小規模なエンタープライズネットワークを作成しました。その後、MITREのCALDERA研究プロジェクトをRedボットとして使用して、単一のゲームを実行しました。
CALDERAは、Adversarial Tactics, Techniques, and Common Knowledge (ATT&CK)モデルの情報に基づいて、敵対者エミュレーション活動を自動化する関連MITRE研究プロジェクトです。一連のATT&CK戦術と技術を実装し、計画システム(https://dl.acm.org/citation.cfm?id=2991111)を使用してそれらの技術の作動を自動化し、エンタープライズネットワーク内で侵害後の敵対者行動を生成します。
このデータはCreative Commons BY Licenseの下でリリースされています。
当社の小規模なエンタープライズネットワークは、ドメインコントローラー(dc.brawlco.com)と16台のワークステーションからなるフラットネットワークです。各PCには、PC名にプライマリユーザーの名前が含まれています(例:ユーザーbeaneは通常beane-pcにログインします)。そのユーザーはコンピューターのローカル管理者権限を持っています。
すべてのPCはWindows 8.1を実行しています。ドメインコントローラーはWindows Server 2012 R2を実行しています。
Windows 8 PCでは、次のレジストリコマンドを使用して、WDigestがLSASSのメモリにプレーンテキストのパスワードを保持するように変更を加えました: reg ADD HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\ /v UseLogonCredential /t REG_DWORD /d 1 /F
この演習では、CALDERAが唯一のBRAWLボットとして参加しました。概念的にはBRAWLはさまざまな攻撃者の行動や検出をテストするために使用できますが、MITREの研究の多くは「侵害を前提とする」哲学に従っています。そのため、演習開始時にCALDERAにネットワーク上のボックスのローカル管理者としての開始点を与えています。
また、異なるホスト間でログオンを行うGrayボットがないため、BRAWLゲームボードは、Redボットが盗んで使用できる資格情報の観点から無菌状態です。横方向の移動を可能にするために、BRAWLコントローラーはpsexecを使用して、ネットワーク上の他のユーザーの資格情報を使ってホストにログオンイベントを作成します。
CALDERAは演習中に以下のATT&CKテクニックを実行しました:
このリポジトリには5種類のデータがあります。それぞれがdata/フォルダ内の独自のファイルに含まれています。
| データタイプ | 説明 |
|---|---|
| game_metadata | BRAWLシナリオを記述するデータ |
| sysmon | 各ワークステーションで実行されているSysmonから収集されたデータ |
| win_event | Windowsイベントログ |
| computer_properties | カスタムスクリプトから収集されたデータで、ネットワーク内のコンピューターに関する情報を提供します |
| bsf | BRAWL共有形式(BSF)でのRedボットアクション |
RedボットとBlueボットは、活動または検出に関する情報をBRAWL共有形式(BSF)で記録することが推奨されます。これにより、Blueボットの検出/アクションとRedボットのアクションを比較しやすくすることが目的です。
この形式は現在開発中であり、将来のデータセットで変更される可能性があります。
BSFのフィールドについては、以下の「データソースの詳細」セクションで説明されています。
BRAWLの異なるイベントソースは時間の扱いが異なります。時間は、イベントがログ取り込みフレームワークに到達した時間、イベントがホスト/エンドポイントで生成された時間、またはネットワーク上のボットによって記録された時間のいずれかです。通常、これらの時間は互いに数ミリ秒以内であるべきです。可能な場合、ログ取り込みフレームワークは、イベントが取り込みノードに到達した時間ではなく、イベントに保存されているイベント時間を使用します。以下の表は、各データタイプに使用される方法を詳しく示しています。
| データソース | 時間に関する注記 |
|---|---|
| computer_properties | timeフィールドから |
| game_metadata | 取り込みフレームワークに到達した時間 |
| sysmon | utc_timeフィールドから |
| win_event | Windowsイベント時間から取得 |
| bsf | @timestampフィールドは、取り込みフレームワークに到達した時間です。ただし、時間関連のBSFフィールド(例:happened_after、happened_beforeなど)は、CALDERAのコマンド&コントロールサーバー上の時間に基づくイベントの開始または終了時間です。 |
| フィールド名 | 説明 |
|---|---|
| @timestamp | イベントに関連する時間。上記の時間に関する注記を参照してください。 |
| @uuid | 一意のイベントID |
| game_id | この演習の一意のゲームID。 |
| type | イベントタイプ。これらのレコードでは常にgame_metadata |
| hosts | 演習の一部であり、Redボットにとって「範囲内」であったホストのリスト |
| randomization_seed | BRAWLボット参加者がBRAWLの実行間で同じ「ランダム」な動作を実装するために使用できるシード |
| starting_host | Redボットが開始するホスト。 |
| フィールド名 | 説明 |
|---|---|
| @timestamp | イベントに関連する時間。上記の時間に関する注記を参照してください。 |
| @uuid | 一意のイベントID |
| type | イベントタイプ。これらのレコードでは常にsysmon |
| game_id | この演習の一意のゲームID。 |
| data_model.object | 作用されているCAR オブジェクト。 |
| data_model.action | オブジェクトに対して実行されているCAR アクション。このフィールドは配列です。一部のイベントはCARデータモデル内の複数のアクションに対応する可能性があるためです。その例として、リモートスレッド作成イベントがあります。 |
| data_model.fields.* | 指定されたオブジェクト/アクションのペアに関連するフィールド。 |
| game_id | この演習の一意のゲームID。 |
| host | イベントが記録されたホスト名。 |
Sysmon v3.11を使用しています。sysmon_config.txtには、構成の詳細を示すsysmon -cコマンドの出力が含まれています。
Sysmonはさまざまな種類のイベントを生成し、それらは異なるCARオブジェクト/アクションのペアにマッピングされます。各タイプのフィールドの詳細については、CAR Webサイトで詳しく説明されています: https://car.mitre.org/wiki/Data_Model
当社の構成でSysmonによって生成されるオブジェクト/アクションのペアは次のとおりです:
driver/loadfile/attr_modifyflow/startmodule/loadprocess/createprocess/terminatethread/createthreat/remote_createCARデータモデルを使用して、上記の各オブジェクト/アクションのペアについて、data_model.fields.*に含まれるフィールド名とセマンティクスを確認してください。
| フィールド名 | 説明 |
|---|---|
| @timestamp | イベントに関連する時間。各イベントの計算方法の詳細については、以下の各イベントを参照してください |
| @uuid | 一意のイベントID |
| type | イベントタイプ。これらのレコードでは常にwin_event |
| game_id | この演習の一意のゲームID。 |
| host | イベントを記録したホスト |
| raw | Windowsイベントログエントリの生のXML形式 |
| data_model.fields.log_name | Windowsログ名(Application、System、またはSecurity) |
| data_model.fields.log_type | 特定のlog_nameのログタイプ |