執筆:Jungsoo An、Wayne Lee、Vanja Svajcer
- Cisco Talos は、少なくとも 2021 年 3 月から継続していると思われる新たなステルス型のスパイ活動を発見しました。今回確認されたのはイスラム系の非営利団体に影響を与えている攻撃で、これまで報告されていなかったマルウェアファミリのバックドア「Zardoor」(Talos が命名)が使用されています。
- カスタムバックドア Zardoor を展開し、改変されたリバースプロキシツールを使用し、数年間にわたって検出を回避していることから、この攻撃を行っているのは高度な攻撃者であるというのが Talos の見解です。
- この攻撃では、バックドアの展開、コマンドアンドコントロール(C2)の確立、永続性の維持に環境寄生型バイナリ(LoLBin)が使用されています。
- 現時点では、Talos が侵害を確認した事例は 1 件だけですが、攻撃者は発見されずに標的のネットワークへのアクセスを長期にわたって維持できることから、他にも被害を受けた組織が存在する可能性があります。
- Talos とサードパーティの調査によると、リバースプロキシツールの使用は、一部の中国系の脅威グループが採用している TTP に通じるものがあります。とはいえ、オープンソースツールはどの攻撃者でも使用できるので、新たな攻撃者と既存の攻撃者との間に関係性がある可能性は低いと考えられます。今回侵害を受けた組織を見る限り、この標的設定は中国系の既知の攻撃者の目的に沿ったものではありません。
Talos は 2023 年 5 月、ある継続的なスパイ活動を発見しました。サウジアラビアのイスラム系非営利慈善団体を標的としたもので、月に 2 回ほどデータを流出させています。
初期アクセスの手法は不明ですが、Talos で「Zardoor」バックドアと呼んでいるマルウェアを実行して永続性を獲得していることが確認されました。続いて、Fast Reverse Proxy(FRP)、sSocks、Venom(元々ペネトレーションテスター向けに開発されたリバースプロキシ socks5 サーバークライアントツール)などオープンソースのリバースプロキシツールを使用して C2 を確立していることが観察されました。
攻撃者は sSocks をカスタマイズして Visual C ランタイムライブラリへの依存関係を削除していました。こうすることで WinAPI ライブラリのみに依存することになり、予期しないランタイムエラーを発生させずにツールを実行できるようになります。
接続が確立されると、攻撃者は Windows Management Instrumentation(WMI)を使用して横方向に移動し、標的のシステムでプロセスを生成し、C2 から受信したコマンドを実行することで Zardoor などのツールを拡散させていました。実行されたコマンドは以下のとおりです。
Zardoor バックドアの実行フロー
永続性を維持するために、攻撃者はこれまでに見つかったことのないバックドアファミリを展開しました。ファイル名が「zar32.dll」と「zor32.dll」だったことから、Talos ではこのバックドアを Zardoor と命名しました。「zar32.dll」はバックドアの主要コンポーネントで、攻撃者の C2 と通信するためのものであり、「zor32.dll」は「zar32.dll」が管理者権限で適切に展開されるようにするためのものです。この特定の攻撃で使用されたドロッパーのファイルサンプルは取得できていませんが、Talos が確認した悪意のあるアクティビティと実行シーケンスやファイル名が同じで、Talos が観察した攻撃に関連している可能性がある他のサンプルを入手できたので分析を行いました。
サンプル分析の結果、実行シーケンスは 2 つの部分で構成されていることがわかりました。
ドロッパーが悪意のある「oci.dll」をインストールして実行
このドロッパーの主な目的は、悪意のある「oci.dll」ペイロードをロードするように「msdtc.exe」を構成することです。攻撃対象 OS のアーキテクチャに応じて 32 ビットまたは 64 ビットの「oci.dll」を見つけ、システムファイルパス C:\Windows\System32\ にドロップします。次にドロッパーは、MSDTC サービスを停止し、「msdtc.exe」を使用して悪意のある「oci.dll」を管理者権限で登録しようとします。用いられるコマンドは「msdtc -install」です。
ドロッパーが OS のビット数に応じて異なるバージョンの oci.dll をドロップし、バッチファイルを使用して自身を削除
MSDTC サービスの停止に失敗した場合、ドロッパーは悪意のある「oci.dll」ファイルのバイナリにパッチを適用して文字列 1ISSYSTEM と 1ISAUTORUN を削除し、パッチを適用した DLL をファイルパス %TEMP%\win_oci_41aa0d5.dll に保存します。これらの文字列を削除すると、後で標的のコンピュータに「zar32.dll」と「zor32.dll」を保存する際に保存先を決定しやすくなります。
次に、攻撃者は Rundll32 を使用してパッチが適用された「oci.dll」を実行します。このときのコマンドは C:\Windows\System32\rundll32.exe %TEMP%\win_oci_41aa0d5.dll MainEntry です。パッチが適用されたこの「oci.dll」が「zar32.dll」と「zor32.dll」を一時ディレクトリに抽出し、「rundll32.exe」を使用して「zar32.dll MainEntry」を起動します。MSDTC サービスは、msdtc -install コマンドを使用して悪意のある「oci.dll」を登録します。
これら 2 つのアクションのいずれかが成功すると、ドロッパーは「oci.dll」をロードするように MSDTC サービスを構成し、DLL が実行されます。最後に、クリーンアップ用のバッチスクリプトが作成され、%TEMP%\xz330ksdfg.bat に保存されます。このバッチスクリプトはドロッパーを削除した後、自分自身も削除します。
悪意のある「oci.dll」ペイロード
悪意のあるローダー「oci.dll」のリソースセクションには、バックドアのペイロードである「zar32.dll」と「zor32.dll」が含まれています。oci.dll には 2 つのエクスポート関数が含まれています。バックドアモジュール(「zar32.dll」)を起動する ServiceMain() と、バックドアを標的のマシンにドロップする DllEntryPoint() です。
ServiceMain() のエクスポートは MSDTC サービスによって実行され、「rundll32.exe」を使用して「zar32.dll」のエクスポート関数 MainEntry を起動します。
DllEntryPoint() 関数は、「zar32.dll」と「zor32.dll」のダンプ先を決定する DLLMain 関数を呼び出します。ダンプ先は、文字列 1ISSYSTEM と 1ISAUTORUN を検索することで決定されます。「zar32.dll」で文字列 1ISSYSTEM が見つかった場合、DLLMain は「zar32.dll」と「zor32.dll」を System32 ディレクトリにドロップします。
文字列 1ISSYSTEM が見つからなかった場合、DLLMain は文字列 1ISAUTORUN を探し、見つかった場合は %userprofile% ディレクトリに「zar32.dll」と「zor32.dll」をドロップします。どちらの文字列も見つからない場合、DLLMain は「zar32.dll」と「zor32.dll」を「%TEMP%」ディレクトリにドロップします。ペイロードが保存された後で、DLL とそのエクスポート関数「MainEntry()」が「rundll32.exe」によって起動されます。
Zardoor の 2 つのコンポーネント zar32.dll と zor32.dll は oci.dll のリソースとして含まれている
「zar32.dll」を実行するために「msdtc.exe」によって「oci.dll」のエクスポート関数「ServiceMain()」が実行され、コマンド rundll32.exe C:\WINDOWS\system32\zar32.dll MainEntry を使用して「zar32.dll」がロードされます。続いて、同じエクスポート関数で「zor32.dll」がロードされます。使用されるコマンドは rundll32.exe C:\WINDOWS\system32\zor32.dll MainEntry です。
Zardoor モジュール
バックドアファイル「zar32.dll」と「zor32.dll」の分析
「zar32.dll」は HTTP/SSL リモートアクセスツール(RAT)です。暗号化されたデータを攻撃者の C2 に送信する機能、ファイルレスモードで PE ペイロードを実行する機能、セッション ID を検索する機能、リモートシェルコードを実行する機能、メモリ内で C2 の IP/ホスト名やポートを更新する機能があります。「zar32.dll」には、以下に示すようにハードコードされたデバッグシンボルパスが含まれており、MainEntry() および DllEntryPoint という 2 つのエクスポート関数があります。
PDB ファイルパス:’C:\\Users\\john\\Desktop\\RManager\\x64\\Release\\R_Run.pdb’
「zar32.dll」が展開されると、3e603a07-7b2d-4a15-afef-7e9a0841e4d5、ThreadMutex12453、rrx_%d という 3 つのミューテックスが作成されます。%d はランダムなシード値で、DLL の実行時間に基づきます。ミューテックス 3e603a07-7b2d-4a15-afef-7e9a0841e4d5 がすでに存在する場合は「zar32.dll」が正常に実行されているということなので、DLL は終了します。
「zar32.dll」が C2 接続を確立するには、ネットワーク アプリケーションが SOCKS または HTTPS プロキシ経由で動作できるようにするためのプログラムが必要です。この DLL は次の URL に接続します。
- 1.0.0[.]1/index.html
- 1.0.0[.]2/index.html
- 1.0.0[.]3/index.htm
上記の IP アドレスは DNS over HTTPS など Cloudflare の DNS サービスで使用されており、これらの IP アドレスへの通信は、DNS ベースの検出をバイパスして攻撃者が管理する C2 サーバーに接続しようとする試みを示している可能性があります。
「zar32.dll」は、次の HTTP ユーザーエージェントで SSL を使用して C2 サーバーに接続しようとします。
- 64 ビットアプリケーション:Mozilla/5.0 (Windows NT <os_majorver>.<os_minorver>; Trident/7.0; rv:11.0) like Gecko
- 64 ビット OS 上の 32 ビットアプリケーション: Mozilla/5.0 (Windows NT <os_majorver>.<os_minorver>; WOW64; Trident/7.0; rv:11.0) like Gecko
接続が正常に確立されると、「zar32.dll」は次の C2 コマンドをサポートします。
- データを暗号化して C2 に送信する。
- リモートで取得した PE ペイロードを実行する。
- セッション ID を検索する。
- プラグインを終了する。
- リモートシェルコードを実行する。
- この RAT を削除する。
- C2 の IP(IP/domain_name:port)を更新する。
- 何も実行しない。
Zardoor(zar32.dll)の C2 ルーチンが 8 種類の C2 コマンドを処理
続いて、マルウェアの実行ルーチンの依存関係を調べました。「zor32.dll」のインストール時に「zar32.dll」が実行されている場合、「zor32.dll」は「msdtc.exe」サービスインストーラをインストールします。
「zor32.dll」のインストール時に「zar32.dll」が実行されていない場合、「zor32.dll」は「msdtc.exe」サービスを起動し、6c2711b5-e736-4397-a883-0d181a3f85ae という名前のミューテックスを作成しようとします。
次に、「zor32.dll」は「oci.dll」ファイルが存在するかどうかを確認し、存在しない場合は実行を終了します。「oci.dll」が存在する場合、「zor32.dll」は 3e603a07-7b2d-4a15-afef-7e9a0841e4d5 という名前の別のミューテックスを作成しようとします。ミューテックスが存在する場合は「zar32.dll」が正常に実行されているので、DLL は終了します。
ミューテックスが存在しない場合、「zor32.dll」が「zar32.dll」の再起動を最大 10 回試行
プロセスに管理者権限がある場合は、「zor32.dll」が次の手順で永続性を維持するためのチェックを実行することも確認されました。
- MSDTC サービスが実行されていない場合、「zor32.dll」が msdtc -install コマンドを使用して MSDTC サービスを構成。インストールに失敗すると、最大 10 回試行。
- 「zor32.dll」が MSDTC サービスのステータスのクエリを試行し、失敗すると最大 10 回試行。
- MSDTC サービスが実行されている場合、「zor32.dll」がサービスの停止を試行。失敗すると、最大 10 回インストールを試行。
- MSDTC サービスが実行されていない場合、「zor32.dll」がサービスを開始。
永続性を維持するためにスケジュールされたタスク
永続性を維持するために、攻撃者はリバースプロキシをスケジュールされたタスクとして登録します。このタスクによってリバースプロキシが約 20 分ごとに実行され、攻撃者の C2 サーバーと通信します。これを実現するために、攻撃者はまず、標的のデバイスで「KasperskySecurity」または「Microsoft Security Essentialss」という名前のスケジュールされたタスクが実行されているかどうかを確認します。次に、スケジュールされた正規のタスクを削除し、同名の新しいタスクを作成してプロキシ「msbuildss.exe」が実行されるようにします。
Talos は 2023 年 7 月に、攻撃者が将来の攻撃のためにリモートサーバーの公開キーを保存していることを確認しました。これにより、攻撃者はリモート(セキュアシェル)SSH サーバーにアクセスしてリモート ポートフォワーディングを設定することができ、インターネット上のリモートサーバーとデバイスがプライベートネットワーク上のデバイスにアクセスできるようになります。
攻撃者は SSH 秘密キーをダウンロードし、「id_rsa」というファイル名でファイルパス c:\users\[ユーザー名]\.ssh\ に保存します。さらに、「known_hosts」というファイルも保存します。このファイルには、「id_rsa」に保存されている秘密キーを使用してアクセスできるホストの公開キーが含まれています。
攻撃者は上記のコマンドを使用して、まずファイル「2.vbs」をダウンロードして内容をチェックし、それが実行したいスクリプトであることを確認します。「2.vbs」ファイルの役割は、標的のデバイスのポート 443 から攻撃者のサーバーのポート 22 への、ユーザー名 root を使用した SSH リモート ポートフォワーディングを設定することです。SSH 転送サーバーが正常に設定されたことを確認するために、次の手順が実行されます。
- netstat -ano | findstr 70.34 を使用して、リモート IP アドレス 70[.]34[.]208[.]197 の一部を検索。
- 実行ファイル「shd.exe」が、ユーザー名 root とパスワード「3My[{BK)Ni8a」を使用して SSH 接続を開始。
- 標的のデバイスでポート 443 接続を探し、taskkill ユーティリティを使用して「ssh.exe」と「shd.exe」を強制終了。
攻撃に使用されるリバースプロキシツール
フォワードプロキシとは対照的に、プライベートネットワーク上のデバイスをインターネットサービス(通常は HTTP ベース)に接続するために使用されます。リバースプロキシを使用すると、インターネットに接続されたコンピュータにトンネルが作成され、ローカル プライベート ネットワーク上のサービスにリモートアクセスできるようになります。
複雑なシステムやアプリケーション アーキテクチャで正規のロードバランサとしてよく使用されるリバースプロキシですが、攻撃者は RDP サーバー、ドメインコントローラ、ファイル、データベースサーバーなど、通常は到達できないシステムとの通信を確立するためにリバースプロキシを使用しています。
Fast Reverse Proxy(FRP)
Fast Reverse Proxy(FRP)は、NAT やファイアウォールの背後にあるネットワークサービスにリモートからアクセスするために使用されるリバースプロキシツールです。FRP は、2 つの主要コンポーネントである FRP クライアントと FRP サーバーで構成されます。FRP クライアントはローカルリクエストを FRP サーバーに転送し、FRP サーバーはそれらのリクエストをインターネットにリダイレクトします。これにより、NAT やファイアウォールの背後にあるデバイスで実行されているアプリケーションに、外部ネットワークからアクセスできるようになります。
FRP サーバーコンポーネントで使用されるデフォルトのポートは 7000 です。ただし、これらのポートはユーザーのニーズに応じて設定できます。基本的なセットアップでは、パブリック IP を持つパブリックサーバーに FRP サーバーをインストールし、公開するマシンに FRP クライアントをインストールします。クライアントとサーバーは、それぞれの INI 設定ファイルで設定されます。クライアントとサーバーが適切に設定され、起動されると、サーバーのパブリック IP と指定されたポートを介してクライアントのマシン上のサービスにアクセスできるようになります。
FRP のコンポーネントと基本的な使用方法
Fast Reverse Proxy(FRP)は、主に中国の一部の攻撃者が、ネットワークセキュリティ対策をバイパスし、侵入したネットワーク内で永続性を維持するために使用することが報告されています。攻撃者は FRP を利用することで、侵入したネットワーク内のマシンから自身の管理下の外部サーバーへのトンネルを作成できます。これにより、検出を回避しながらデータを流出させたり、悪意のあるツールをさらに導入したり、その他のアクティビティを実行したりできるようになります。
FRP は広く使用されている合法的なツールなので、悪意のあるトラフィックを通常のネットワークトラフィックと区別することが難しくなり、攻撃のステルス性が高まります。合法的なツールとはいえ、通常は FRP が使用されない環境内に FRP クライアントが存在する場合は、ネットワークが侵害を受けた可能性を疑ったほうがよいでしょう。
VirusTotal にアップロードされた FRP クライアントの実行ファイル数の推移
この数年間で VirusTotal に送信される FRP ツールの数が増加していることから、FRP は一般的なツールであり、攻撃者がますます使用するようになっていることがわかります。
Venom プロキシ
Venom はレッドチームと侵入テスト用に設計されたマルチホッププロキシで、Go 言語で作成されています。これを使用すれば、管理者またはエージェントとして機能するプロキシノードのネットワークを作成できます。エージェントは別のエージェントか管理ノードに接続します。ネットワークの制御は管理ノードの制御を通じて行います。ユーザーはネットワークにエージェントを簡単に追加できます。
Venom を使用すると、攻撃者かもしれないユーザーがプロキシのボットネットを作成することができ、ノードのリモート制御、データの外部送信、追加のペイロードのインストールなどにこのボットが使用される可能性があります。
Venom の機能は次のとおりです。
- マルチホップ socks5 プロキシ
- マルチホップ ポートフォワーディング
- SSH トンネリング
- インタラクティブシェル
- ファイルのアップロードとダウンロード
- ネットワークトラフィックの暗号化
- 複数のプラットフォーム(Linux/Windows/MacOS)と複数のアーキテクチャ(x86/x64/ARM/MIPS)のサポート
その他のリバースプロキシツールと攻撃者による使用状況
使用されるのは FRP と Venom だけではありません。Talos の以前の調査と利用可能なオープンソースの脅威インテリジェンスによると、主に中国系の攻撃者が、リバースプロキシをサポートするツールを使用しています。最も一般的なのは次のようなツールです。
Talos は、活発な脅威グループと各グループが使用しているプロキシツールを示すマトリックスも作成しました。これらのツールは簡単に再利用することができ、どの攻撃グループも使用する可能性があるので、侵害されたシステム上でここに挙げているツールが 1 つ以上見つかった場合、確信はありませんが、特定のグループによる攻撃を受けた可能性があります。
プロキシツールとそれを悪用する攻撃グループ
高度な攻撃者による Zardoor を使用した攻撃
この攻撃を実行したのは、まだ知られていない高度な攻撃者だと Talos は考えています。今回の攻撃で確認されたツールや使用された C2 インフラストラクチャと、公に報告されている既知の攻撃者が使用するツールや C2 インフラストラクチャとの間に共通点はないので、現時点では、既知のどの攻撃者にも今回の攻撃を結びつけることはできません。
Zardoor バックドアのような新しいツールを作成することができ、オープンソースのプロキシツールをカスタマイズでき、「msdtc.exe」などの LoLBin を利用して検出を回避していることから、攻撃者は高度なスキルを持っていると考えられます。特に、MSDTC 経由で「oci.dll」に含まれるバックドアをサイドローディングすることは、長期間検出されないまま標的のネットワークにアクセスし続ける非常に効果的な方法です。
カバレッジ
今回の脅威は、以下の製品で検出してブロックすることが可能です。
Cisco Secure Endpoint(旧 AMP for Endpoints)は、この記事で説明したマルウェアの実行を阻止するのに最適です。Cisco Secure Endpoint の無料トライアルはこちらからお申し込みください。
Cisco Secure Email(旧 E メールセキュリティ)は、攻撃の一環として攻撃者が送りつける不正な電子メールをブロックします。Cisco Secure Email の無料トライアルはお申し込みください。
Threat Defense Virtual、適応型セキュリティアプライアンス、Meraki MX など、Cisco Secure Firewall(旧次世代ファイアウォールおよび Firepower NGFW)アプライアンスは、この脅威に関連する悪意のあるアクティビティを検出できます。
Cisco Secure Network/Cloud Analytics(Stealthwatch/Stealthwatch Cloud)は、ネットワークトラフィックを自動的に分析し、接続されているすべてのデバイスで、望ましくない可能性があるアクティビティをユーザーに警告します。
Cisco Secure Malware Analytics(旧 Threat Grid)は悪意のあるバイナリを特定し、Cisco Secure のすべての製品に保護機能を組み込みます。
Umbrella(シスコのセキュア インターネット ゲートウェイ(SIG))は、社内ネットワークの内外で悪意のあるドメイン、IP、URL への接続をブロックします。Umbrella の無料トライアルはこちらからお申し込みください。
Cisco Secure Web Appliance(旧 Web セキュリティアプライアンス)は、危険性のあるサイトを自動的にブロックし、ユーザーがアクセスする前に疑わしいサイトを検査します。
特定の環境および脅威データに対する追加の保護機能は、Firewall Management Center から入手できます。
Cisco Duo は、ユーザーに多要素認証を提供し、承認されたユーザーのみがネットワークにアクセスできるようにします。
オープンソースの Snort サブスクライバルールセットをお使いであれば、Snort.org で購入可能な最新のルールパックをダウンロードすることで、最新状態を維持できます。今回の脅威を検出するための Snort SID は 61913、61914、62371 ~ 62380 です。
今回の脅威に関連するマルウェアアーティファクトを検出するために、以下の ClamAV シグネチャがリリースされました。
- Win.Backdoor.Zardoor-10019732-0
- Win.Backdoor.ZardoorVMP-10019731-0
- Win.Backdoor.sSocksProxy-10019733-0
- Win.Backdoor.VenomProxy-10019734-0
MITRE ATT&CK の手法
コマンドアンドコントロール
- T1090.003 プロキシ:マルチホッププロキシ
- T1105 侵入ツールの転送の検出
- T1018 リモートシステムの検出
T1033 システムオーナー/ユーザーの検出 - T1049 システムネットワーク接続の検出
- T1057 プロセスの検出
- T1087.002 アカウントの検出:ドメインアカウント
永続化
- T1053.005 スケジュール設定されたタスク/ジョブ:スケジュール設定されたタスク
- T1574.002 ハイジャック実行フロー:DLL サイドローディング
実行
- T1047 Windows Management Instrumentation
- T1059.003 コマンドおよびスクリプトインタープリタ:Windows コマンドシェル
- T1204.002 ユーザーによる実行:悪意のあるファイル
- T1574.002 ハイジャック実行フロー:DLL サイドローディング
データ漏洩
- T1048 代替プロトコルを介したデータ漏洩
特権昇格
- T1055 プロセスインジェクション
T1574.002 ハイジャック実行フロー:DLL サイドローディング
防御の回避
- T1055.001 プロセスインジェクション:ダイナミックリンク ライブラリ インジェクション
- T1070.004 ファイルの削除
- T1574.002 ハイジャック実行フロー:DLL サイドローディング
IOC
この調査の IOC は、こちらの GitHub リポジトリでも提供しています。
本稿は 2024 年 02 月 08 日に Talos Group のブログに投稿された「New Zardoor backdoor used in long-term cyber espionage operation targeting an Islamic organization」の抄訳です。