C2回避テクニック:柔軟なC2プロファイルを理解する

2021年4月26日
Joshua St. Hilaire
Director of Security Research
C2回避テクニック:柔軟なC2プロファイルを理解する

今回は、コマンド&コントロール(C2)回避テクニック・シリーズの第2回で、可鍛性C2プロファイルについてお話しする。最初のブログ 最初のブログJA3シグネチャーのランダム化として知られる方法を検証している。

Malleable C2プロファイルは、ペンテスターやAdvanced Persistent Threat(APT)グループが使用する人気のフレームワークであるCobalt Strikeで広く採用され、使用されています。MalleableプロファイルはCobalt Strikeのユーザーにはおなじみだが、その採用が他のC2フレームワークにも広がり始めていることは注目に値する。この記事を書いている時点では、バージョン3.4のEmpire C2でもMalleableプロファイルが使われている。この開発をさらに興味深いものにしているのは、Empireチームが最近、人気のあるペンテスト用ディストリビューションであるKali Linuxとの提携を発表したことです。

回避のための柔軟なプロフィール

C2用の可鍛性プロファイルは、ネットワークベースの検知ツールだけでなく、エンドポイントセキュリティ製品からの検知を回避することを可能にする。Cobalt Strikeのオペレーターは、「可鍛性」のレベルにより、C2ビーコンの形状やタイミングを完全にカスタマイズできるだけでなく、プロセスインジェクションやインメモリ難読化手法のようなオンターゲット機能をカスタマイズすることもできる。ターゲット環境内でエージェントを実行する場合、運用上のセキュリティは常に懸念事項である。そのため、コマンド&コントロールでステルス性を維持する際には、ネットワークセキュリティの監視が常に考慮されます。攻撃者がネットワーク内の危険なマシンにエージェントをインストールし、これらのエージェントが C2 サーバに接続する際に生成するトラフィックが、同じか類似のユーザエージェント、URI、またはフラグを立てやすい他のアーティファクトを使用していたとします。繰り返し使用されるため、これらのアクティビティが事前に知られていた場合、検知されるリスクは非常に高くなります。そのため、「通常の」予想されるトラフィックに紛れ込ませるか、あるいは実行のたびに新しい値を使用するような方法で、トラフィックを変換または形成する必要がある。いずれのアプローチも、検知を回避するのに有効である。変更可能なプロファイルを採用するもう1つの動機は、既知の脅威に対してテストを行いたいという願望である。もしエージェントとC2サーバーをセットアップして、マルウェアがワイヤ越しに、あるいはターゲットのエンドポイント上でどのように見えるかを確認できれば、ネットワーク検知スタックやエンドポイント・セキュリティ・モニタリングがそのアクティビティにフラグを立てることができるかどうかを確認することができる。

ここで、可鍛性が活きてくる。C2をカスタマイズするために、オペレーターに提供されるオプションのいくつかを説明する価値がある。さらに、まとめとして、特にシグネチャ・ベースの検知戦略において、これらがいかに検知を困難にするかについて話す。機能の概要については、ネットワークとエンドポイントに分けて説明する。紹介するオプションは、決して網羅的なリストとはみなされない。

カスタマイズによる回避

ハイパーテキスト転送プロトコル(HTTP)や HTTPS などのネットワークプロトコルに関係なく、エージェントは指定された方法でサーバと通信します。HTTP を使用する場合、ネットワーク層の防御によって検査できる HTTP 会話の多くの部分があります。例えば、HTTP ヘッダ内の文字列は、十分ユニークなものであれば、防御側がワイヤ上の接続を検知するために使用することができます。ユニークなユーザーエージェント、カスタムのアクセプト文字列、ユニークなパス値のようなものは、すべて検査のためにオープンです 設定はまた、同様にサーバー側からヘッダー要素を変更するために使用することができます。

マリーブル・プロファイルを使用すると、HTTPヘッダー内の値など正当なプログラムの値をミラーリングするだけで、例えばMicrosoft Windowsアップデート・エージェントのような良性の接続と同じように見せることができます。以下のスクリーンショットは、Cobalt Strike Windows update malleableプロファイルを使用したHTTPセッションをWiresharkで再構築したものです。

図1:Cobalt Strike Windows Updateの可動プロファイル

送信前にデータをエンコードするためにデータ変換が利用可能であることは指摘しておく価値がある。明白ではないかもしれませんが、上のスクリーンショットの HTTP GET リクエストに続く Uniform Resource Identifier (URI) は、送信前に base 64 エンコードされ、サーバ側でデコードされます。以下のリストは Cobalt Strike で利用可能なデータ変換です。

表 1: コバルト・ストライクのデータ変換

さらに、複数の変換を同時に行うこともできる。例えば、base64とmaskを一緒に重ねることで、OPSECを強化することができる。

HTTPSが使用されている場合でも、SSL(Secure Sockets Layer)証明書などの値を操作することができる。以下のSSL証明書は、前述のWindowsアップデートプロファイルで使用されています:

コネクションの表示方法を細かく制御するだけでなく、クライアントがC2サーバーに接続するタイミングを制御する値も、変更可能なプロファイルによって操作できる。ジッターやディレイなどの値により、攻撃者はC2接続のタイミング間隔を変更することができる。

エンドポイント可変型

Malleableは、エージェントがネットワーク経由でデータを送信するときだけでなく、メモリ内の特性、プロセスへの注入方法、および侵入後のタスクを制御するときにも使用されます。これは、エンドポイント検知とレスポンス (EDR)とアンチウイルス検知を回避するのに便利です。以下の例では、エージェントがターゲットエンドポイント上でどのように動作するかに関連するオプションをいくつか示しています。

図2: Cobalt Strike havex プロファイルにおける、エンドポイントに関連する可鍛性オプションの例。

ステージブロックでは、エージェントがメモリにロードする方法を制御できます。名前、コンパイル時間、メモリパーミッション、難読化、ローダータイプなどを指定できます。しばしば、プロセスにロードされた悪意のあるコードを探すアナリストは、最初にメモリセグメントをチェックし、疑わしいメモリセグメントで RWX パーミッションでロードされたセグメントをキーにします。

プロセス注入オプションでは、注入されたコンテンツを形成することができます。変換オプションを使用してデータをパディングし、割り当て方法を設定し、パーミッションを制御することができます。最後に、使用する異なるパイプ名を選択したり、スマートインジェクションを使用したり、スポーンロケーションを指定することで、悪用後のタスクを制御することもできます。これはEDRソリューションの回避やテストに最適です。より詳細な概要については、Cobalt Strikesオンラインガイドを参照できる。

ディフェンダーにとっての課題

C2通信とステージング動作を制御するためにこのようなきめ細かさを許可することは、シグネチャによる防御と検知を困難なものにする。もう1つ強調すべき点は、Cobalt Strikeがしばらくの間、可変性を認めている一方で、Empire C2のような他の一般的なC2フレームワークも可変性のあるプロファイルを採用していることである。これは、APTやランサムウェアのアクターによる最近の侵入において、その使用が増加しているという事実と相まって、防御者にとってますます複雑なタスクとなっている。

ネットワークとエンドポイントの防御技術は、迅速に更新されるシグネチャを持つか、データの繰り返しパターンやビーコン活動に対応するタイミングシーケンスにさえ頼らない、コマンド&コントロールを検知するための他の調査方法を使用しなければならないだろう。

Vectra AI がどのようにAIを使い、検知 コマンド&コントロール・チャンネルを構築しているか、詳しくはこちらをご覧いただきたい。