Cobalt Strike Beaconを検知するVolatility Plugin(2018-07-31)

JPCERT/CCでは、2017年7月頃から国内の組織に対して、Cobalt Strikeを悪用した攻撃が行われていることを確認しています。Cobalt Strikeは、標的型攻撃を模倣することができる商用製品[1]であり、インシデント対応演習などで利用されますが、攻撃者に悪用されるケースもあります。Cobalt Strikeを悪用する攻撃グループや、Cobalt Strikeの詳細については、株式会社ラック[2]やFireEye[3]、Cybereason[4]が公開している情報に詳しく記載されていますので、そちらをご覧ください。
Cobalt Strikeは、ダウンローダーとなるWord文書などを用いて、本体となるペイロード(Cobalt Strike Beacon)をダウンロードさせることで、メモリ上で実行されます。 Cobalt Strike Beaconはディスク上には保存されないため、ファイルの存在を持って感染の有無を確認することができません。そのため、メモリダンプを取得して調査するか、プロキシなどのネットワーク機器のログから調査する必要があります。
今回は、Cobalt Strike Beaconをメモリ上から検知するためのツールについて紹介します。
なお、ツールはGitHub上で公開していますので、以下のWebページからダウンロードしてご利用ください。

 JPCERTCC/aa-tools · GitHub
https://github.com/JPCERTCC/aa-tools/blob/master/cobaltstrikescan.py

ツールの詳細
このツールは、メモリフォレンジックツールであるThe Volatility Framework(以下Volatilityと略す)のPluginです。cobaltstrikescan.pyは、以下の機能を持っています。
 

  • cobaltstrikescan: メモリイメージからCobalt Strike Beaconを検知する
  • cobaltstrikeconfig: メモリイメージからCobalt Strike Beaconを検知し、設定情報を抽出する

実行する際は、cobaltstrikescan.pyをVolatility内の”contrib/plugins/malware”フォルダに保存し、以下のように実行します。

$python vol.py [cobaltstrikescan|cobaltstrikeconfig] –f <memory.image> ––profile=<profile>

図 1はcobaltstrikescanの実行結果の例です。マルウエアのインジェクト先プロセス名(Name)やプロセスID(PID)が表示されています。

図 1:cobaltstrikescan実行結果

図 2はcobaltstrikeconfigの実行結果の例です。Cobalt Strike Beaconの設定情報の詳細については、Appendix Aをご覧ください。

図 2:cobaltstrikeconfig実行結果

おわりに
Cobalt Strikeはこれまでに国内の組織に対して悪用されており、今後もこのCobalt Strikeを悪用した攻撃が行われる可能性があるため注意が必要です。

インシデントレスポンスグループ 遠藤 拓也

 

参考情報
[1] Strategic Cyber LLC:COBALT STRIKE ADVANCED THREAT TACTICS FOR PANETRATION TESTERS
https://www.cobaltstrike.com/

[2]株式会社ラック:APT攻撃者グループ menuPass(APT10) による新たな攻撃を確認
https://www.lac.co.jp/lacwatch/people/20180521_001638.html

[3] FireEye:Privileges and Credentials: Phished at the Request of Counsel
https://www.fireeye.com/blog/threat-research/2017/06/phished-at-the-request-of-counsel.html

[4] Cybereason:Operation Cobalt Kitty: A large-scale APT in Asia carried out by the OceanLotus Group
https://www.cybereason.com/blog/operation-cobalt-kitty-apt

 

Appendix A 設定情報

表 A: 設定情報の形式

オフセット 長さ(byte) 説明
0x00 2 index 詳細は表Bを参照
0x02 2

dataの長さを指定する値
1=2byte, 2=4byte, 3=オフセット0x04で指定の値

0x04 2 dataの長さ
0x06 0x04で指定の値 data

表 B: 設定情報の一覧

index 説明(byte) 備考
0x01 BeaconType 0=HTTP, 1=Hybrid HTTP and DNS, 8=HTTPS
0x02 ポート番号  
0x03 ポーリング時間  
0x04 不明  
0x05 Jitter ポーリング時間の揺らぎの割合(0-99%)
0x06 Maxdns DNS利用時のホスト名の最大長(0-255)
0x07 不明  
0x08 通信先  
0x09 ユーザーエージェント  
0x0a HTTP_Header2通信時のパス  
0x0b 不明  
0x0c HTTP_Header1  
0x0d HTTP_Header2  
0x0e インジェクションプロセス  
0x0f パイプ名  
0x10 Year Year, Month, Dayで設定した日付以降は動作しない
0x11 Month  
0x12 Day  
0x13 DNS_idle  
0x14 DNS_Sleep  
0x1a HTTP_Method1  
0x1b HTTP_Method2  
0x1c 不明  
0x1d 任意のシェルコードをインジェクションするプロセス(32bit)  
0x1e 任意のシェルコードをインジェクションするプロセス(64bit)  
0x1f 不明  
0x20 プロキシサーバー名  
0x21 プロキシユーザー名  
0x22 プロキシパスワード  
0x23 AccessType 1=プロキシサーバーを利用しない
2=レジストリ内のIEの設定を使用
4=プロキシサーバー経由で接続
0x24 create_remote_thread 他のプロセスでスレッド作成を許可するかどうかのフラグ
0x25 未使用  
≪ 前へ
トップに戻る
次へ ≫