PowerShell Empire フレームワークによる C2 検出のための ML (機械学習) ベースの堅牢な学習システムのトレーニング

A collage of icons in yellow, green and white. Graphs, warning signs, a lighbulb, and types of documentation. The Palo Alto Networks and Unit 42 logo lockup.

This post is also available in: English (英語)

概要

PowerShell Empire は攻撃者らに愛用されるポストエクスプロイト フレームワークで、いまも現役の脅威です。私たちはこの Empireのコマンド & コントロール (C2) トラフィックを検出する非常に効果的なシステムを、機械学習 (ML) と人工知能 (AI) 手法を使って開発しました。

本稿では、Empire フレームワークをレビューし、Empire C2 トラフィックを調査し、ML ベースの C2 検出に影響を与える問題について解説します。主な問題は敵対的攻撃と呼ばれるもので、これは攻撃者が ML ベース検出のポイズニングや回避に使う AI 攻撃カテゴリーの 1 つです。私たちは、敵対的トレーニングによって、より堅牢なモデルを使う学習システムを開発することで、この課題を解決しました。この堅牢な学習システムは、ML ベースの C2 検出を回避しようとする攻撃者の試みに効果的に反撃します。

ここでは、Empire C2 の堅牢な学習システムの背後にある概念をレビューし、現実世界のトラフィック データと AI が生成したデータの両方を使ってこのモデルをトレーニングすることの有効性について説明します。

パロアルトネットワークスのお客様は、Advanced Threat Prevention セキュリティ サブスクリプションを有効にした次世代ファイアウォールWildFireCortex XDRPrisma Cloud などにより保護を受けています。

関連する Unit 42 のトピック Malleable C2 Profile, Evasion, C2

目次

その脅威 PowerShell Empire
Empire C2 フレームワークに注目した理由
Empire C2 トラフィックの特徴
Malleable C2 プロファイルのフォーマット
Empire C2 トラフィックの例
ML ベースの Empire C2 トラフィック検出の課題
ML ベースの検出
敵対的攻撃による ML への反撃
攻撃者が検出回避に Empire フレームワークを使う方法
Empire C2 の堅牢な学習システム
Empire C2 ファザー
Empire C2 データ品質モニタリング
Empire C2 トラフィック生成エンジン
Empire C2 モデルのトレーニング
結論

その脅威 PowerShell Empire

2015 年に Bsides Las Vegas で初めて登場した PowerShell Empire はポストエクスプロイト フレームワークの 1 つで、レッドチーム担当者用につくられています。ペネトレーション テスターはこのフレームワークを使って敵対者の振る舞いをエミュレートしています。ほかのレッド チーム ツールでも見られるように、現実の敵対者らもEmpire フレームワークを使ってきました。オリジナルの Empire プロジェクトは 2019 年に開発を中止しましたが、少なくとも 1 つの組織が独自のフォークを維持していることから、Empire は依然として懸念材料となっています。

Empire C2 フレームワークに注目した理由

Empire は強力で柔軟性があって使いやすいことから、近年最も人気のある C2 フレームワークの 1 つです。これまでさまざまな脅威アクターが Empire を使っていることを公的に文書化されていますし、同フレームワークは注目度の高いランサムウェア事例にも関連付けられてきました。ネットワーク内にある Empire C2 を検出・阻止できない組織は、深刻な影響を受けるおそれがあります。

これらの要因を加味し、私たちは ML ベースの堅牢な学習システムを開発するさい、Empire C2 フレームワークに対するテストを行いました。それにくわえ、Empire C2 を効果的に検出できるなら、同様の C2 フレームワークにもうまく機能するはずです。

Empire C2 トラフィックの特徴

Empire C2 トラフィックは Web ベースで、このトラフィックの特性は Malleable C2 プロファイルによって定義されます。以前私たちは Cobalt Strike で使われている Malleable C2 プロファイルについてレビューしましたが、それと同じ概念が Empire にも当てはまります。ここでいう「Malleable (可鍛性のある)」とは、さまざまな要件を満たすために簡単に変更できることを意味しています。

Malleable C2 プロファイルは、容易にカスタマイズできるテンプレートを使います。これにより攻撃者は自分の用途にあった C2 トラフィックをピンポイントに仕立てることができます。Malleable C2 プロファイルがあれば、関連フレームワークやツールをさまざまな用途に使えるようになります。

Malleable C2 プロファイルのフォーマット

Malleable C2 プロファイルは、C2 通信で使われる変数を定義します。図 1 は Malleable C2 プロファイルのフォーマットを示しています。

画像 1 は、Malleable のコマンド & コントロール プロファイルを構成するコードのスクリーンショットです。
図 1. Malleable C2 プロファイルのフォーマット

Malleable C2 プロファイルと関連付けられている変数には、sleeptimeuseragenturi、クライアントとサーバーの両方が生成する Web トラフィックのさまざまなヘッダー行などがあります。図 2 は、Malleable C2 プロファイル (一部) で定義されているこれらの変数の例を示しています。

画像 2 は Malleable のコマンド & コントロール プロファイルを構成するコード (一部) のスクリーンショットです。これには、ヘッダー、サーバー、そのほかの情報が含まれます。
図 2. Malleable C2 プロファイル (一部)

図 2 に示した部分的なプロファイルでは、C2 の Web トラフィックで使われる HTTP GET リクエスト用の変数を定義しています。http-get で始まるセクションは、クライアントと C2 サーバー間のトラフィック特性を定義しています。

set uri 関数は、クライアントに生成されてサーバーに送られる URI を割り当てます。netbiosuuri-append という用語は、セッション キーの情報がエンコードされて HTTP リクエストの URI に追加されることを示しています。Cobalt Strike ユーザー ガイドは、Empireでも使われている Malleable C2 フォーマットの詳細をさらに提供しています。

Empire C2 トラフィックの例

以下の図 3 は、図 2 の Malleable C2 プロファイルを使って生成された HTTP トラフィックを示しています。

画像 3 は、2 つの別々のコード チャンクのスクリーンショットです。最初のものは赤で強調表示されています。2 番目は青で強調表示されています。これは、Malleable C2 プロファイルに基づいて Empire C2 が生成する HTTP トラフィックです。この情報には、サーバー、ユーザー エージェント、GET、日付などが含まれます。
図 3. Malleable C2 プロファイルに基づいて Empire C2 が生成する HTTP トラフィック

図 3 の最初の行は、HTTP リクエスト ヘッダーの GET リクエストです。この HTTP GET リクエストの URI の場合、/CWoNaJLBo/VTNeW11212/ という文字列と /UTWOqV132/ という文字列の間に ASCII 文字列としてセッション キーが埋め込まれていることがわかります。このセッション キーは、図 2 のMalleable C2 プロファイルで定義されているとおり、netbiosu によってエンコードされています。

ML ベースの Empire C2 トラフィック検出の課題

Empire C2 トラフィックを検出できる堅牢な学習システムを開発したければ、Empire の Malleable C2 プロファイルがどのように使われているのかを理解することが不可欠です。プロファイルは無限にカスタマイズ可能なので、シグネチャーベースのアプローチでは高い効果を見込めません。そこで私たちは Empire C2 検出用の ML ベースのモデルを開発しました。

ML ベースの検出

Empire C2 トラフィック用の ML ベースの検出モデルを開発するさい、私たちはさまざまなオプションを検討しました。セキュリティ防御側は C2 検出にますます ML/AI 技術を使う機会が増えています。

考えられるオプションの 1 つは、従来の ML ベース アプローチの利用です。従来のアプローチでは、ML はトラフィックから C2 アクティビティの特徴を抽出します。このプロセスは、特徴量エンジニアリングと呼ばれています。

たとえば、リサーチャーはネットワーク トラフィックから URI パラメータ、Cookie データ、さまざまな HTTP ヘッダーなどの特徴量 (feature) を抽出し、C2 トラフィックを識別することができます。ロジスティック回帰サポート ベクター マシン (SVM) のような伝統的 ML アルゴリズムを使い、これらの特徴量からモデルを構築し、悪意のある C2 トラフィックと良性トラフィックを区別することも可能でした。

このほかに取りうる C2 検出オプションとしてはディープ ラーニング (深層学習) があります。ディープ ラーニングは人工ニューラル ネットワークを使ってパフォーマンスを向上させる ML (機械学習) のサブセットで、大規模なデータセットの分析に効果的です。

しかし、C2 検出用の堅牢な学習システムを開発するには、最終的にどんな脆弱性をエクスプロイトしてくるかわからない敵対者に反撃する手段が必要です。

敵対的攻撃による ML への反撃

AI および ML システムにおける敵対的攻撃はとくに目新しいものではありません。より多くの AI システムが登場するにつれ、攻撃者は回避攻撃やポイズニング攻撃など、さまざまな手法でこれらのサービスをターゲットにしはじめています。様々な情報源が、最も一般的な AI 攻撃手法として回避をあげています。

回避攻撃は、AI モデルに誤った予測をさせるような入力を作ることで、オンラインの AI システムをターゲットにします。ML ベースの C2 検出器は回避攻撃に対してとくに脆弱です。柔軟に構成可能なオープンソース フレームワークを使えば、攻撃者が大量の入力を生成して、AI システムをバイパスできる入力を特定することは容易だからです。

攻撃者は、Malleable C2 プロファイルを使って回避攻撃を実行できます。これらのプロファイルを使うと、攻撃者はテスト環境で Empire C2 検出器の限界を探る大規模な回避攻撃をより簡単に開始できるようになります。脅威アクターは検出を回避できるプロファイルを発見してから実際のターゲットに対する攻撃を開始できます。

攻撃者が検出回避に Empire フレームワークを使う方法

以下は、Malleable C2 プロファイルが HTTP インジケーターを制御する方法の例です。

この場合、攻撃者は、図 4 に示すプロファイルを使って、被害者に対して特権昇格攻撃を開始することを意図しています。

画像 4 は、HTTP ヘッダーと mal.profile に対応する部分の図です。四角形と矢印がコードの /api/v1/user セクションを強調表示しています。ユーザー名は、コード内の base64 行と uri-append 行への矢印で強調表示されています。
図 4. HTTP ヘッダーと mal.profile の対応

図 4 は、プロファイル設定と C2 セッション中に生成される実際のトラフィックの両方を示しています。このプロファイルは、HTTP リクエストの URI を /api/v1/users という値に設定しています。またこのプロファイルは、セッション キーのエンコード アルゴリズムとして Base64 を設定し、それを URI に追加しています。

攻撃中、脅威アクターは、Malleable C2 プロファイルを定期的に更新することで、さまざまな HTTP リクエストを生成できます。たとえば、同じ攻撃で、以下の図 5 に示すプロファイルが使われる可能性があります。

画像 5 は、多数のコード行のスクリーンショットです。1 行は伏せてあります。情報の一部が、黒い矢印で示されているように、HTTP ヘッダーから mal.profile に対応しています。ここで伏せてある情報は /ucD 行に関連しています。
図 5. HTTP ヘッダーと mal.profile の対応を更新したところ

図 5 は、図 4 の例とはまったく異なる HTTP トラフィックを示します。この結果、シグネチャーベースのアプローチが図 4 に示した値に基づくシグネチャーのみに依存している場合、2 つめの攻撃を見逃してしまいます。

さいわい、十分なトレーニング データセットが提供されていれば、ML ベースのアプローチでこれらの差異を許容できる信頼性の高いモデルをトレーニングできます。これが、私たちが堅牢な学習システムに使ったアプローチです。

Empire C2 の堅牢な学習システム

弊社の Empire C2 用の堅牢な学習システムは、回避そのほかの潜在的な敵対的攻撃を阻止できる堅牢な検出モデルを提供します。私たちの Empire C2 検出は畳み込みニューラル ネットワーク (CNN) 上に構築されています。CNN は、入力を取り込み、入力のさまざまな側面に重要性を割り当て、一方を他方と区別できる深層学習アルゴリズムです。

私たちの学習システムは、敵対的攻撃をシミュレートする Empire C2 トラフィックを生成する、自社開発の Empire C2 ファザー (fuzzer) から始まります。ファザーが生成したトラフィックは、データ品質モニターによるレビューを受けます。

このトラフィックが品質チェックに合格すれば、その結果に基づいて私たちのモデルはトレーニングされます。最終的には、収集した Empire C2 トラフィックと、敵対的攻撃をシミュレートする内部で生成した Empire C2 トラフィックの両方で、モデルをトレーニングします。

図 6 は、Empire C2 用の堅牢な学習システムの概要を示しています。

画像 6 は、Empire C2 の堅牢な学習システムとそのしくみを示す図です。上のパネルは標準的なトレーニング方法です。野生の Empire C2 パケット キャプチャーがトレーニング/生成され、低い堅牢性を生み出します。中央のパネルは敵対的なトレーニング方法です。敵対的 Empire C2 パケット キャプチャーがトレーニングされ、高い堅牢性を生み出します。このトレーニングにはデータ品質モニターと Empire C2 ファザーが組み込まれています。
図 6. Empire C2 用の堅牢な学習システムの概要

このシステムの効果は Empire C2 ファザーに基づくものです。

Empire C2 ファザー

「ファジング (fuzzing)」は、自動ソフトウェア テストや脆弱性検出のアプローチの 1 つです。ファジングでは、システムにさまざまな入力を与えることで、障害 (テスト対象のシステムが意図通りに動作しなくなること) の原因となる入力を特定します。ここではファジングを利用して、堅牢な学習のために高品質の C2 プロファイルを多数生成しています。

私たちは Empire C2 フレームワークを使って Empire C2 ファザーを開発しました。私たちのファザーは、既知の Empire C2 プロファイルを入力として受け取り、Empire C2 フレームワークで適切な関数を実行することで、リスナー、ステージャー、関連 Empire C2 トラフィックを生成します。

より多様な結果を導くため、私たちのファザーはオリジナルのプロファイルにランダムなミューテーション (突然変異) とそれに似た技術を適用します。ランダムなミューテーションには、プロファイル内の選択したフィールドにランダム化した値を割り当てることも含みます。入力を操作することで、私たちのファザーは Empire C2 トラフィックのサンプルを多数生成し、敵対的攻撃を効果的にシミュレートできます。

Empire C2 のデータ品質モニタリング

Empire C2 ファザーのフィードバック メカニズムは、そのとき分析対象になっている C2 プロファイルに対するコード カバレッジを提供します。コード カバレッジとは、プロファイルの入力により Empire C2 ファザーによって実行されるコードの行数を測定するメトリクスです。

2 つのプロファイルのロジックが異なっていれば、トリガーされるコード ロジックも異なることから、コード カバレッジが異なるはずです。これは、これら 2 つのプロファイルによって生成される C2 トラフィックも異なるはず、ということを意味します。

私たちはこのコード カバレッジを使い、新たに生成されたプロファイルの品質を評価しています。品質チェックに合格したプロファイルは、コード カバレッジの変更をトリガーします。私たちはこれを「未知のプロファイル」と定義します。つまり、生成されたデータセットにとっては完全に新規のものということを意味します。私たちの目標は、Empire C2 検出モデルをトレーニングするため、できるだけ多くの未知のプロファイルを収集することです。

この目標を達成するため、Empire C2 のデータ品質モニタリング エンジンを使います。弊社のモニタリング エンジンは、未知の C2 プロファイル数を監視することで、モデルをいつ再トレーニングすべきかを決定します。未知のプロファイル数が一定の制限に達すると、品質モニタリング エンジンは再トレーニングの必要性を通知します。

Empire C2 トラフィック生成エンジン

私たちは、Empire C2 フレームワーク上に C2 トラフィック生成エンジンを構築しました。私たちはこのフレームワークを使ってデータセットの C2 トラフィックを生成しました。

弊社のトラフィック生成エンジンはクライアント環境をセットアップし、C2 サーバーとの C2 通信を模倣します。同時に、C2 トラフィック サンプルを収集し、モデル トレーニング用のパケット キャプチャー (pcap) ファイルとして保存します。

Empire C2 モデルのトレーニング

私たちが C2 検出能力を向上させる目的は 2 つあります。レッド チームの取り組みで使われるデフォルトの C2 プロファイルなど Empireのアクティビティの実事例を検出したいというのが 1 つ、前述したように敵対的設定をシミュレートする必要があるというのが 1 つです。

これらの目標を達成するため、私たちはデフォルトの C2 プロファイルを使ってオリジナルの Empire C2 データセットで初期トレーニングを実施しました。その後、Empire C2 ファザーを使って追加の Empire C2 トラフィックを収集し、それをトレーニング データセットに組み込んで、さまざまなオプティマイザーを使ってモデルの重みを更新しました。

私たちはデータセットを「benign (良性)」、「non-adv (非敵対的)」、「adv (敵対的)」の 3 つのラベルを使って分類します。

「benign (良性)」は、ペネトレーション テスト用の Empire C2 アクティビティなど、実使用からくる C2 トラフィックです。「non-adv (非敵対的)」は非敵対的攻撃を表し、データセットがデフォルトのプロファイルからのものであることを示します。最後に、「adv (敵対的)」データセットは、シミュレートされた敵対的攻撃プロファイルからのものです。

私たちは「non-adv」カテゴリーと「adv」カテゴリーの両方でモデル検出のバランスをとり、損失関数がこれらのラベルを考慮するよう設計しました。この損失関数は、私たちが生成する「adv」のサンプル数を増やすように設計されており、これにより敵対的攻撃の検出率が向上します。

また私たちは、データ品質モニタリング エンジンからのフィードバックに基づいて定期的にトレーニングを行うアプローチを採用しました。データ品質モニタリング エンジンが信号を生成するたび、私たちはモデルの再トレーニングのために新規に生成された C2 トラフィックをキャプチャーしました。

このモデルは、オリジナル データセットを使って新たな「adv」サンプルで再トレーニングされます。私たちの損失関数は「adv」サンプルにより多くの注意を払うため、再トレーニングされたモデルは敵対的 (「adv」) サンプルに対して良好な検出率を持つことが保証されます。

結論

Empire C2 は、レッド チーム担当者や悪意のある攻撃者によって広く使われているフレームワークです。Empire が Malleable C2 プロファイルをサポートしたことで、構成はより柔軟になり、検出はより困難になります。本稿で私たちは、Empire C2 がどのように機能するかを解説し、ML ベースの堅牢な学習システムの訓練用にこのフレームワークを選んだ理由を説明しました。

私たちのアプローチでは、現実世界の例とシミュレートされた敵対的攻撃の両方を使ってモデルをトレーニングし、Empire C2 検出の堅牢性を向上させます。

パロアルトネットワークスのお客様は、以下の方法で Empire C2 に基づく攻撃に対する保護と緩和を受けています。

  • Advanced Threat Prevention サブスクリプションを有効にした次世代ファイアウォール (NGFW) は、シグネチャー 86715、86720、8672、86732、86733 により、PowerShell Empire の HTTP による C2 リクエストを識別・ブロックします。
  • Advanced Threat Prevention サブスクリプションを有効にした次世代ファイアウォール (NGFW) は、カスタム プロファイルで生成された PowerShell Empire による HTTP C2 リクエストを識別・ブロックします。
  • Advanced WildFireCortex XDR は PowerShell Empire Beacon のバイナリーを識別・ブロックします。
  • Cortex XSOAR のレスポンス パックとプレイブックは緩和プロセスを自動化します。
  • Cortex XDR は関連するエクスプロイト試行を報告します。
  • Advanced URL Filtering には、悪意のある URL と IP アドレスを追加済みです。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、infojapan@paloaltonetworks.com までメールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。

  • 北米フリーダイヤル:866.486.4842 (866.4.UNIT42)
  • EMEA: +31.20.299.3130
  • APAC: +65.6983.8730
  • 日本: (+81) 50-1790-0200

パロアルトネットワークスは、これらの調査結果を Cyber Threat Alliance (CTA: サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使って、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細は Cyber Threat Alliance にてご確認ください。