
自動化された戦術・技術・手順
自動化された戦術・技術・手順(Automated Tactics Techniques & Procedures)。回帰テスト、製品評価、研究者向けのデータ生成などのために複雑なシーケンスを手動で再実行するのは面倒です。Empire(またはMetasploit(RPC)、Cobalt-StrikeなどのAPIを提供するフレームワーク/製品/ツールキット)を、Visual Studio Code(または同等のもの)のようなIDEを使って簡単にスクリプト化できないかと考えました。そこでAutoTTPの設計を始めました。これはまだ作業中の段階です。Empire 2.2でテスト済み。


私の場合、戦術は私の攻撃ライフサイクルモデルに従って整理されています。他にもLockheed MartinのKill-Chain(R)、Mandiantの攻撃ライフサイクル、MitreのATT&CKなどのモデルがあります。どのモデルであっても、「戦術(Tactic)」は基本的にテクニックをグループ化したものであり、例えばコード実行/ペイロードの実行は多くの方法で実現できます。

私は「ステージ(Stage)」を使用して、関連する「戦術」をグループ化しています。ソースツリーを見ると、フォルダ構成はマトリックスの戦術列を反映しています。マトリックスには各攻撃戦術に対する防御策も記載されています。これらのステージはどのようにして生まれたのでしょうか?

赤いサイクルの中央にあるベン図は、ダートマス大学の「セキュアなサイバー物理システムの設計と評価のための3つの原則」から引用したものです。これは、物理的/論理的攻撃が成功するための必要十分条件、すなわち要件を定義しています。私はベン図の周りに赤いリング(ステージ)を追加し、典型的な攻撃フローを示しています。これらは最終的に、情報の機密性、完全性、システムの可用性、あるいはサイバー物理(重要情報インフラを考えてください)に関連する場合は安全性への影響に至ります。
攻撃者はステージ1から開始し、例えば公開された管理ページのデフォルトの管理者認証情報を使って直接ステージ4に進むこともできます。必ずしも直線的(ステージ1→2→3→4)である必要はありません。初期侵入後、最初のマシンで特権を昇格させる前に内部情報収集(偵察)を行い、その後同じネットワーク内の別のターゲットマシンにリモートコマンドを発射することもできます。次の被害マシンにとっては、それはステージ2です。ペイロードの配信と実行が成功し、攻撃者がさらに別のマシンを制御できるようになります。

左側のファイルは手順スクリプト、右側はテクニックスクリプトです。手順スクリプトにはEmpire固有の詳細が多く含まれておらず、ほとんどの詳細はテクニックスクリプトにカプセル化されていることに注目してください。手順スクリプトは、資産情報(ホスト名/IP、ペイロードを送信するメールアドレス、使用するペイロードテクニックなど)を使用してテクニックの順序に焦点を当てるべきです。
*「is user admin?」*の例は、実際にはスクリプトのコメントに記載されているように少なくとも3つの可能性があるため、いくつかのステップから構成されています。もちろん、EmpireやMetasploitなどでカスタムの「マクロ」を作成することもできますが、それは特定のフレームワーク/製品に密接に統合されてしまいます。私たちは、既存のツールを活用し、再利用可能なテクニックをモジュールとして整理して、手順レベル(すなわち自動化)で組み合わせることができるようにしたいと考えています。

私はEmpireの構造化されたモジュールを利用して、自動補完用のPythonクラスを作成しました。モジュール名(例:powershell/situational_awareness....)をすべて入力する代わりに、IDEの自動補完機能を使用します。

各モジュールにはオプションがあります(ほとんどのフレームワークに当てはまります)。Empireの場合、REST/ヘッドレスモードで実行すると、モジュールのオプションを確認するコンソールがありません。自動補完ヘルパークラスでは、各モジュールにoptionsサブクラスがあります。上図のように必須オプションには接頭辞が付いているため、モジュールを呼び出す前にそれらのオプションに値を設定できます。

各モジュールの説明はPythonクラスのドキュメントの一部として含まれており、クラスにカーソルを合わせると表示されます。276個のモジュール(Empire 2.1時点)があるため、このヘルパークラスを作成するにはスクリプトが必要です! ソース:https://gist.github.com/jymcheong/22c2eede978c8eb694945e3347c20c6b
Visual Studio Code(または同等のIDE)を使用すると、デバッグ変数の監視、スクリプトのステップ実行、さらには戻り値の構造を確認した後にデバッグ中にスクリプトを修正することもできます。EmpireにはREST APIのドキュメントが用意されていますが、モジュールを実行するまで戻り値が正確にわからない場合もあります。そのため、次のトピックにつながります。
IDEですべてを行いたいと思う一方で、コンソールも必要になります。DeathStarの作者は、Empireを使用してドメイン管理者を乗っ取る自動化スクリプトを開発しているときに、すでにこれを認識していました。私は彼のアイデアを借用しましたが、彼のアプローチはリファクタリングされたstart restful api関数では機能しなかったため、Empire 2.1向けにスレッド化のアプローチを適応させました。ソース:https://gist.github.com/jymcheong/6a7668ecf73c29dd1d234d1c76ef438c
Empire 2.2ではRESTモード実行中にコマンドループハンドラが搭載されているため、エンパイアスクリプトをハックする必要はありません。ただし、APIを使用してエージェントの結果を取得する間は、エージェントと対話しないでください。
@radioboyQ氏(EmpireAPIWrapper)、@allfro氏および@Mikaayenson氏(pymetasploit)、@byt3bl33d3r氏、MTFBWUに感謝します。