[レポート]氷山全体を追跡する- 長期にわたるAPTマルウェア C2プロトコルのエミュレーションとスキャニング – CODE BLUE 2022 #codeblue_jp
CODE BLUE 2022 で行われた下記セッションのレポートです。
セッション概要
タイトル
氷山全体を追跡する- 長期にわたるAPTマルウェア C2プロトコルのエミュレーションとスキャニング
概要
マルウェアアナリストは通常、サンプルを分析することで、マルウェアのコマンド&コントロール(C2)サーバーのIPアドレスを入手する。この方法は、コモディティ化した攻撃では有効だ。しかし、APTマルウェアを利用した標的型攻撃では、アンチウイルス企業以外の組織で十分な数のサンプルを取得することは困難である。その結果、1つの組織が収集したマルウェアのC2 IOCは、氷山の一角に過ぎない。
私は長年にわたり、著名なAPTマルウェアファミリーのC2プロトコルをリバースエンジニアリングし、プロトコルをエミュレートすることでインターネット上のアクティブなC2サーバーを発見してきた。本発表では、中華人民共和国と連携しているサイバースパイ活動家が長期的に使用している2つのマルウェアのプロトコルをエミュレートする方法について説明する。名前は「Winnti 4.0」と「ShadowPad」
どちらのマルウェアも、TCP/TLS/HTTP/HTTPS/UDPといった複数のC2プロトコルをサポートしている。また、1つのマルウェアの中で、プロトコルごとに異なるデータ形式やエンコーディングアルゴリズムを持つことも一般的となっている。Winnti 4.0のサーバーモードやShadowPadの単一ポートでの複数プロトコルリスニングなど、独自の機能にも触れながら、プロトコルの詳細を解説していく。また、インターネット全体のC2スキャンとその限界に関する知見を共有する。
発表の後、140以上のC2 IOCを発見された日付範囲とともに公開予定。C2は通常ホストサーバーで発見されるため、これらの日付は単なるIPアドレスの情報よりも有用であり、C2が特定のIP上にごく限られた時間だけ存在する可能性があることを意味する。この文書の執筆時点で、これらのIOCの65%はVirusTotalで検出結果は0件となっている。
Presented by
春山 敬宏 - Takahiro Haruyama
レポート
- Motivation
- Virus Total で有害なサイトが無害なサイトとして表示されていた
- Virus Total は新しい悪意のあるサイトを見つけるのに有効でない場合がある
- 2019 年以降、アクティブな C2 サーバを検出するスキャンをしている
- 本セッションでは、どのように検出しているかを説明する
- Target
- Winnti 4.0
- ShadowPad
- ShadowPad の方が出版物が多く普及している
- Winnti 4.0 について
- 大規模攻撃の多くで観測できるマルウェアである
- (Wannti の歴史の説明)
- 2018 年に新しいワーカーコンポーネントを発見した
- 5 つのプロトコルがサポートされている
- TCP, (TLS), HTTP(S), UDP
- どのプロトコルも同じパケットを扱うが軽微な違いがある
- C2 サーバのスキャナーを開発した
- パケットのヘッダーとペイロードは暗号化されている
- 暗号化アルゴリズムは未知のもの
- (プロトコル、パケットや挙動の説明)
- 例えば、Cookie 以外は無作為に生成されており、この挙動はスキャンニングに活用できる、などの説明
- スキャナー実装
- ZMap → Stand-alone Python Script → IDAPython AppCall
- ZMap で、インプットポートスキャンデータを生成
- HTTP(S) の場合は、Get を送信して、デコードを行い、応答の Cookie をバリデーション
- HTTP(S) 以外の場合は、同じサイズ、異なるキーの不審な応答を確認
- 応答のカスタマイズされたパケットを復号化
- ヘッダーの署名とペイロードサイズをバリデーション
- スキャニングの結果
- 2019/12〜2022/9 の期間で、55 のサーバを特定した、43 個のユニーク IP アドレス
- TLS 35%、HTTPS 29%、HTTP 20%、TCP 11%, UDP 5%
- 公開報告書は 2 件のみだった(昨年に公開された)
- 引き続き、スキャニングしたい
- ShadowPad について
- 2015 年に出てきたマルウェア
- TCP, HTTP(S), UDP にフォーカスして確認
- 他のプロトコル(DNS など)はあまり利用されていないため
- 3 つのバリアントを分析
- (プロトコル、パケットや挙動の説明)
- スキャナー実装
- バリアント毎に実装する必要があった
- パケットエンコーディングで利用される Immediate value が異なったため
- ZMap → Stand-alone Python Script
- ZMap で、インプットポートスキャンデータを生成
- 応答を復号化して検証
- TCP の場合は、ペイロードサイズフィールド
- HTTP(S), UDP の場合は type と session_dst_id
- バリアント毎に実装する必要があった
- スキャニング結果
- 2021/9〜2022/9 の期間で、83 のサーバを特定した、75 個のユニーク IP アドレス
- スキャナーを改善し続けている
- Winnti 4.0 Worker と Spyder は 37% のコードの類似性がある
- インターネット上での C2 スキャニングの所見
- どうやってインプット(ポートスキャン)データを得るか
- 今回は ZMap を利用して、Shodan や CenSys のようなサードパーティのデータを購入していない
- UDP プロトコルのカスタマイズされたフォーマットを利用する必要があった
- Commercial なサービスは通常オプションを提供しない
- また、Commercial なサービスはマイナーなポートを活発にスキャンしない
- Anonymization (匿名化)
- スキャンニングは ISP 等により強制的に終了させられる場合があり、匿名化する必要がある
- Tor は無償だが TCP しかサポートされておらず、パブリックなためブロックされる可能性も高い
- そのため、Commercial な VPN サービスを利用
- どうやってインプット(ポートスキャン)データを得るか
- Anti Scanning Technique の説明
- 2020/2 より Cobalt Strike チームのサーバをスキャニングしている
- 有効な Anti Scanning Technique を発見した
- ReverseWindows に関する Anti Scanning Technique も発見した
- 2020/2 より Cobalt Strike チームのサーバをスキャニングしている
- このような研究の発表にはプラス面・マイナス面があり、共有すべきなのかどうか確信を持てない
- 過去の Cobalt Strike C2 スキャニングの研究発表ではプラス面があった
- Microsoft Azure のドメインフローティングを辞めさせることができた
- 継続中の攻撃キャンペーンを阻止できた
- 一方で、論文発表した際にマイナス面となることもあった
- 脅威アクターが、発表した DNS の内容に対するアップデートを行うことにつながった
- 過去の Cobalt Strike C2 スキャニングの研究発表ではプラス面があった
- まとめ
- C2 スキャニングにより Winnti 4.0 と ShadowPad に関する 140 以上の C2 サーバを発見した
- IOCs の 65% のサーバが Virus Total では検出が 0
- 10 台の C2 サーバは両方のマルウェアでアクティブ
- 偽陽性の可能性は低いと思われる
- C2 プロトコルのフォーマットとエンコーディングは特徴的なため
- C2 スキャニングは、最もプロアクティブな脅威検知アプローチとして、Game Changer となると考えている
- C2 スキャニングにより Winnti 4.0 と ShadowPad に関する 140 以上の C2 サーバを発見した
- さいごに C2 スキャナーのデモを実演
さいごに
マルウェアの挙動やエミュレートに関する内容も記載できればよかったのですが、私には難しいと感じる部分も多く、勉強が必要と感じるセションでした。