
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/フォルダ内の独自のファイルに含まれています。
RedボットとBlueボットは、活動または検出に関する情報をBRAWL共有形式(BSF)で記録することが推奨されます。これにより、Blueボットの検出/アクションとRedボットのアクションを比較しやすくすることが目的です。
この形式は現在開発中であり、将来のデータセットで変更される可能性があります。
BSFのフィールドについては、以下の「データソースの詳細」セクションで説明されています。
BRAWLの異なるイベントソースは時間の扱いが異なります。時間は、イベントがログ取り込みフレームワークに到達した時間、イベントがホスト/エンドポイントで生成された時間、またはネットワーク上のボットによって記録された時間のいずれかです。通常、これらの時間は互いに数ミリ秒以内であるべきです。可能な場合、ログ取り込みフレームワークは、イベントが取り込みノードに到達した時間ではなく、イベントに保存されているイベント時間を使用します。以下の表は、各データタイプに使用される方法を詳しく示しています。
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.*に含まれるフィールド名とセマンティクスを確認してください。
このデータは、MITREのPowerShell Utilities for Security Situational Awarenessのunified_json.ps1モジュールを使用して定期的に収集されました。userinfoフィールドは、Mimikatzなどの資格情報ダンパーがシステム上で実行された場合に、どの資格情報が侵害された可能性があるかを判断するのに役立ちます。
bsf配列フィールド内のオブジェクトは、タイプoperation、step、またはeventです。すべてのオブジェクトには、オブジェクトタイプを判別するために使用できるnodetypeフィールドがあります。
event BSFオブジェクト必須フィールドとオプションフィールドのセマンティクスの詳細については、CARデータモデル内の関連オブジェクトを参照してください。
step BSFオブジェクトStepオブジェクトは、1つ以上のイベントをより高いレベルの活動グループに接続します。Stepオブジェクトはまた、BSFエミッターが活動にATT&CKラベルを付ける場所を提供します。
operation BSFオブジェクトOperationオブジェクトは複数のstepオブジェクトを接続します。ただし、このデータセットにはOperationオブジェクトは存在しません。
イベントフィールドの説明と注記(特に「少なくとも1つ」):1. Time fields.
eventオブジェクトで報告されなければなりません。他のフィールドはオプションですが、既知の場合は報告されるべきです。特に、ボットは正確な時間がなくても最善の推測として"time"の値を報告することが推奨されます。command_line、または実行されたexe / image_pathを提供できます。Hosts on our BRAWL network for this game:
| データタイプ |
|---|
| 説明 |
|---|
| game_metadata | BRAWLシナリオを記述するデータ |
| sysmon | 各ワークステーションで実行されているSysmonから収集されたデータ |
| win_event | Windowsイベントログ |
| computer_properties | カスタムスクリプトから収集されたデータで、ネットワーク内のコンピューターに関する情報を提供します |
| bsf | BRAWL共有形式(BSF)でのRedボットアクション |
| データソース | 時間に関する注記 |
|---|
| 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 | イベントが記録されたホスト名。 |
| フィールド名 | 説明 |
|---|
| @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のログタイプ |
| フィールド名 | 説明 |
|---|
| @timestamp | イベントに関連する時間。上記の時間に関する注記を参照してください。 |
| @uuid | 一意のイベントID |
| type | イベントタイプ。これらのレコードでは常にcomputer_properties |
| game_id | この演習の一意のゲームID。 |
| host | スクリプトが実行されたコンピューターの名前 |
| netinfo | netinfoオブジェクトのコレクション |
| netinfo.DNSServers | このホストに設定されたDNSリゾルバーのコレクション |
| netinfo.Gateway | このインターフェースのゲートウェイ |
| netinfo.IPAddress | このインターフェースのIPアドレス |
| netinfo.IsDHCPEnabled | DHCPは有効か? |
| netinfo.MACAddress | このインターフェースのMACアドレス |
| netinfo.SubnetMask | それぞれのIPアドレスのサブネットマスク |
| pcinfo | PCに関する情報を記述するオブジェクト |
| pcinfo.AssetTag | アセットタグ(アクセス可能な場合) |
| pcinfo.CPU | CPUに関する情報 |
| pcinfo.ChassisType | BRAWLでは使用されていません。"不明" |
| pcinfo.Disks | 接続されているディスクに関する情報 |
| pcinfo.DomainName | システムが属するドメイン |
| pcinfo.LastBootUpTime | システムの起動時間 |
| pcinfo.Memory | システム上のメモリに関する情報 |
| pcinfo.OS | 実行中のOSに関する情報 |
| pcinfo.SerialNumber | HWシリアル番号 |
| time | スクリプトが実行された時間 |
| userinfo | 前回の起動以降にシステムにログオンしたユーザーを記述するuserinfoオブジェクトを含む配列 |
| userinfo.AuthenticationPackage | 認証に使用された認証パッケージ |
| userinfo.Domain | アカウントが属するドメイン(またはローカルPC) |
| userinfo.LogonId | ログオンID |
| userinfo.LogonTime | ログオンの時間 |
| userinfo.LogonType | Windowsログオンタイプ定数 |
| userinfo.LogonTypeName | LogonTypeの説明 |
| userinfo.UserName | ログオンするプリンシパルのユーザー名 |
| フィールド名 | 説明 |
|---|
| @timestamp | イベントに関連する時間。上記の時間に関する注記を参照してください。 |
| @uuid | 一意のイベントID |
| type | イベントタイプ。これらのレコードでは常にbsf_events |
| game_id | この演習の一意のゲームID。 |
| bsf | ボットの活動を記述するBSFイベントの配列。この配列のフィールドについては、以下で詳細に説明します。 |
| bsf_version | bsfイベント配列に使用されるBSFスキーマのバージョン |
| producer_id | このBSFデータを生成したボット。 |
| フィールド | 説明 |
|---|
| id | 各イベントの一意の識別子。 |
| nodetype | このノードのタイプ。{"operation", "step", "event"}のいずれか。 |
| host | このイベントが実行/検出されたホスト名またはIP。 |
| time | 注: 以下の3つの時間フィールドのうち少なくとも1つ(すなわち、"time"、"happened_after"、または"happened_before")を報告する必要があります。"time"は特に望ましく、3つすべての報告が推奨されます。以下の一般的な注記の注1を参照してください。 時間形式に関する注記: すべての時間情報はISO 8601形式である必要があります。具体的には: 'yyyy-mm-ddThh:nn:ss.llll00'。ここで、yは年、mは月、dは日、hは時、nは分、sは秒、lはミリ秒(末尾に0が2つ続く)です。例: 2017-02-22T18:38:14.060000 オプション: このイベントが発生した時間の推定値。 |
| happened_after | オプション: "time"の不確実性に対する早期の境界("時間的左括弧")。 |
| happened_before | オプション: "time"の不確実性に対する後期の境界("時間的右括弧")。 |
| confidence | オプション: Blueボットがこのイベントと攻撃との関連性に対する信頼度(0.0から1.0の実数)を伝えることを可能にします。 |
| object | 作用されたオブジェクト。許容値については以下の表を参照。大まかにCARデータモデルに基づく |
| action | 特定のオブジェクトに対するアクション。大まかにCARデータモデルに基づく |
| specific_field_1 .. N | 1-N個の記述属性(以下を参照)。大まかにCARデータモデルに基づく |
| オブジェクト | アクション | 必須フィールド | オプションフィールド |
|---|
| process | create terminate scanned | 以下のうち少なくとも1つ: {pid, command_line, exe, image_path} | fqdn hostname md5_hash parent_exe parent_image_path ppid sha1_hash sha256_hash sid signer user |
| flow | start end message | 以下のうち少なくとも1つ: {src_hostname,src_ip} 以下のうち少なくとも1つ: {dest_hostname, dest_ip} 以下のうち少なくとも1つ: {src_port, dest_port, protocol} | content dest_fqdn exe flags fqdn hostname image_path packet_count pid ppid proto_info src_fqdn user |
| file | create delete modify read timestomp write | file_path | company file_name fqdn hostname image_path md5_hash pid ppid sha1_hash sha256_hash signer user |
| フィールド名 | 説明 |
|---|
| id | 操作ステップの一意の識別子。 |
| nodetype | このノードのタイプ。{"operation", "step", "event"}のいずれか。 |
| attack_info | テクニックオブジェクトの配列(以下の表で定義)、このステップがATT&CKタクソノミーにどのように関連するかを説明します。なぜ配列か?単一のテクニックがしばしばステップとそのすべてのイベントを説明しますが、場合によっては複数のテクニックが実装される可能性があります。 |
| attack_info.technique_id | このステップとその参照イベントで赤が使用した攻撃メカニズムを説明するATT&CKテクニックID(例:"T1059")。 |
| attack_info.technique_name | このテクニックを説明する人間が読める文字列(例:"Command-Line Interface")。 |
| attack_info.tactic | このテクニックの意図/戦略を説明する1つ以上のATT&CK戦術ラベルの配列。(単一のテクニックが複数の戦術を実行できることに注意。)例: ["Lateral Movement", "Execution"] |
| description | オプション: このステップのメモや注釈はここに入ります。 |
| events | このステップを構成するeventオブジェクトのidの配列。 |