APT&標的型攻撃
セキュリティ対策を妨害:攻撃グループ「Earth Longzhi」が新しい手口を用いて活動を再開
標的型攻撃(APT:Advanced Persistent Threat)で知られる「APT41」の子グループ「Earth Longzhi」が数ヶ月ぶりに活動を再開し、標的を感染させるために新しい技術を導入していることが判明しました。本稿では、Earth Longzhiによる新しい攻撃キャンペーンがもたらす脅威について、技術的な詳細を交えて解説します。
トレンドマイクロの調査により、標的型攻撃(APT:Advanced Persistent Threat)で知られる「APT41」の子グループ「Earth Longzhi」が、台湾、タイ、フィリピン、フィジーの企業や組織に対して新たな攻撃キャンペーンを展開していることが判明しました。前回の活動が休止してから数ヶ月後に再浮上した本攻撃キャンペーンでは、Windows Defenderの実行ファイルを不正使用することで、DLLサイドローディングを行います。また、「BYOVD(Bring Your Own Vulnerable Driver:脆弱なドライバを持ち込む)」の発想に基づき、脆弱性のあるドライバ「zamguard64.sys 」を標的環境内に持ち込み、これを不正使用することで、セキュリティ製品を無効化します。さらにEarth Longzhiは、セキュリティ製品を無効化する追加手段として、「イメージファイルの実行オプション(IFEO:Image File Execution Options)」を用いる手法を新規に導入しました。本手法は、新しいサービス拒否(DoS:Denial of Service)型攻撃の一種であり、弊社ではこれを「stack rumbling」と名付けました。
本攻撃キャンペーンでは、カーネルレベルのサービスとしてドライバをインストールする際に、通常のWindows API(Application Programming Interface)ではなく、Microsoft社のリモートプロシージャコール(RPC:Remote Procedure Call)を用いることが判明しました。これは、典型的なAPIの監視に基づくセキュリティ機能を回避する手段です。また、今回調査した検体の一部からは、Earth Longzhiが将来的に用いる手口や攻撃目標に関する情報が得られました。本稿では、Earth Longzhiの活動が依然として活発であり、TTPs(Tactics:戦略、Techniques:テクニック、Procedures:プロシージャ)も刷新され続けている状況について注意喚起すると同時に、使用された手口の内容について詳しく解説します。
攻撃経路
検体を分析したところ、今回の攻撃者は、メール経由でドキュメント型のマルウェアを標的に送りつける代わりに、外部公開されたアプリケーションやIIS(Internet Information Services)サーバ、Microsoft Exchangeサーバに不正アクセスし、有名なWebシェル「Behinder」を標的システムにインストールすることが分かりました。本攻撃キャンペーンからも示唆される通り、Behinderは強力なWebシェルの一種であり、ファイル操作、遠隔からのコマンド実行(RCE:Remote Command Execution)、対話型シェル、Socks5プロキシなど、さまざまなバックドア機能を備えています。
攻撃者は本Webシェルを用いてイントラネットの情報を取得する他、各種マルウェアやハッキングツールを標的端末上に展開します。
DLLサイドローディングの新手法
Earth Longzhiの新しい攻撃キャンペーンでは、ドキュメント型の検体ではなく、正規なWindows Defenderの実行ファイル「MpDlpCmd.exe」または「MpCmdRun.exe」によってマルウェアが起動されます。このマルウェアは、正規なDLL「MpClient.dll」に偽装され、Microsoft Defenderの実行ファイルからロードされます。今回の調査では、起動されたマルウェアの実体として、2種類が確認されました。1つ目は「CroxLoader」の新型亜種に相当します。2つ目はセキュリティ製品を無効化するためのツールであり、弊社ではこれを「SPHijacker」と名付けました。
CroxLoaderの新型亜種
Earth Longzhiの新しい攻撃キャンペーンでは、システムサービスとして起動されたWindows Defenderの実行ファイルが、CroxLoaderの新型亜種をロードします。このCroxLoaderは「MpClient.dll」に偽装され、起動するとまず、ペイロード「MpClient.bin」の読み込みと復号を行います。CroxLoaderの新型亜種は以前の亜種とほぼ同様に動作しますが、復号時のアルゴリズムに差異があります。具体的に、以前の亜種では復号時に「(SUB 0xA) XOR 0xCC」という計算が使用されたのに対し、、新型亜種では「(ADD 0x70) XOR 0xDD」という計算が使用されます。最終的なペイロードはCobalt Strike用ビーコンであり、トレンドマイクロでは以下の名称で検知します。
Backdoor.Win64.COBEACON.ZYKB
SPHijacker
SPHijackerはセキュリティ製品の停止を意図して作られた新規のツールであり、その目的を達成するために2つの機能が組み込まれています。第一の機能では、脆弱性「CVE-2018-5713」を含むZemanaのドライバ「zamguard64.sys」を用いて、セキュリティ製品のプロセスを停止します。第二の機能では、先述した新しい手口「stack rumbling」を使用してプロセスの起動自体を阻止します。「stack rumbling」の詳細については後述しますが、このような手口が実際の攻撃に使用されるのを確認したのは、今回が初めてのこととなります。
技術的な分析
分析結果によると、脆弱なドライバ「Zamguard64.sys」は、復号後に「mmmm.sys」の名前で標的端末内に作成され、後にサービスとして登録されます。図6の通り、サービスの作成と開始には、一般的なWindows APIではなく、RPCが使用されます。これは、一般的なAPI呼び出しに基づくセキュリティ監視機能の回避を狙ったものと考えられます。
サービスの起動に成功すると、SPHijackerは以下の名前でデバイスハンドルを取得し、稼働中のドライバにアクセスします。
\\.\ZemanaAntiMalware
この後、事前に定義済みのリストに基づき、セキュリティ製品を停止します。その際の具体的な手順を下記に示します。
- 図7に示すように、入出力コントロール(IOCTL:Input and Output Control)のコード「0x80002010」を送り、その際にSPHijacker自身のプロセスID(PID:Process ID)を指定する。これにより、ドライバによって信頼されるプロセスとして、SPHijacker自身が登録される。
- 停止対象プロセスの検索を行う。起動中のものがあれば、そのPIDを取得する。
- IOCTLのコード「0x80002048」を送る。この結果、図8のように、関数「ZwOpenProcess 」および「ZwTerminateProcess 」を通して対象プロセスが停止される。
停止対象プロセスのリストを下記に示します。この中には、各種セキュリティ製品が数多く含まれています。
- 360rp.exe
- 360rps.exe
- 360Safe.exe
- 360sd.exe
- 360tray.exe
- 360Tray.exe
- Aliyun_assist_service.exe
- AliYunDun.exe
- AliYunDunUpdate.exe
- cyserver.exe
- cytray.exe
- MpcmdRun.exe
- MsMpEng.exe
- NisSrv.exe
- SecurityHealthSystray.exe
- tlaworker.exe
- yunsuo_agent_daemon.exe
- Yunsuo_agent_service.exe
- ZhuDongFangYu.exe
プロセスの停止後、SPHijackerは、当該プロセスが再起動された際にもエラーで強制終了するように、「stack rumbling」の手口を実行します。この手口は、レジストリキー「IFEO」に含まれる以下の値を書き換えるものであり、一種のDoS攻撃に相当します。具体的な手順は下記の通りです。
MinimumStackCommitInBytes
- 以下のレジストリを変更する。
- 以下のレジストリ値を新規作成し、そのデータとして「0x88888888」を設定する。十分に大きな数値であれば、他の値でもよい。
- 対象プロセスが再度起動されるまで待機する。このタイミングは、対象プロセスがアンチウイルス関連であるかによって大きく異なる。アンチウイルス関連の場合、通常はオペレーティングシステム(OS)の再起動まで待つ必要がある。
- 対象プロセスが起動すると、すぐに「スタック・オーバーフロー」のエラーで強制終了する。
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\{対象のプロセス名}
MinimumStackCommitInBytes
対象の全プロセスを下記に示します。
- 360rps.exe
- 360Safe.exe
- 360sd.exe
- 360sdrun.exe
- 360tray.exe
- 360Tray.exe
- aliyun_assist_service.exe
- AliYunDun.exe
- AliYunDunUpdate.exe
- CNTAoSMgr.exe
- cyserver.exe
- cytray.exe
- mcafee-security.exe
- mcafee-security-ft.exe
- MpCmdRun.exe
- MsMpEng.exe
- NisSrv.exe
- NTRTScan.exe
- qmbsrv.exe
- QQPCRTP.exe
- QQPCTray.exe
- SecurityHealthSystray.exe
- tlaworker.exe
- TmCCSF.exe
- tmlisten.exe
- TmListen.exe
- yunsuo_agent_daemon.exe
- yunsuo_agent_service.exe
- ZhuDongFangYu.exe
IFEOに基づく「stack rumbling」の対象とされたプロセスは、起動しようとしても、すぐにエラーコード「0xC0000017(メモリ不足)」を出して強制終了するようになります。これは、高い権限で動作するプロセスについても同様です。
レジストリキー「IFEO」の內部には、プロセスの作成に関するさまざまな設定が含まれています。これらの設定は、実行ファイルにデバッガを付与する場合や、プロセスの実行フローに割り込み(IFEOインジェクション)をかける場合などに利用されます。今回の攻撃で利用された以下の設定値について、その仕様を完全に記載したオンラインのドキュメントやリソースは見つかりませんでした。
MinimumStackCommitInBytes
しかし、調査の結果、本レジストリ値は、プロセスの初期化時に以下の関数から読み込まれることが判明しました。以降、このntdllを解析した結果について詳しく説明します。
ntdll!LdrpInitializeExecutionOptions
以下の関数の疑似コードを見ると、
ntdll!LdrpInitializeExecutionOptions
以下の値として、
PEB->MinimumStackCommit
以下のIFEOレジストリ値を設定していることが分かります。
MinimumStackCommitInBytes
以下のこの仕様について、Microsoft社による説明はありません。そこで今回、デバッガを使用して当該値の使われ方を調べました。
PEB->MinimumStackCommit
「stack rumble」の対象となったプロセスを起動したところ、以下の関数の処理内でスタック・オーバーフローの例外が発生しました。デバッガがその例外を捕らえた(catch)際の状況を図12に示します。
ntdll!LdrpTouchThreadStack
例外の発生箇所となった以下の関数を解析したところ、
ntdll!LdrpTouchThreadStack
その引数として、先述した以下の関数によって
ntdll!LdrpInitializeExecutionOptions
以下の更新済みのを受け取ることが判明しました。
PEB->MinimumStackCommit
引数として渡された以下の値は、メインスレッドを初期化する際に、そのスタックとして割り当てるメモリ上のサイズを定義します。
PEB->MinimumStackCommit
ここで、スタック領域の上限を超える値が以下として設定された場合、Windows OSによってスタック・オーバーフローの例外が発行されます。
PEB->MinimumStackCommit
以下の関数の処理時に発生した本例外は、最終的には例外ハンドラによってcatchされ、エラーコード「0xC0000017(メモリ不足)」が返却されます。
ntdll!LdrpTouchThreadStack
以下の関数がエラーコードを返却すると、
ntdll!LdrpTouchThreadStack
ntdll.dllは以下の関数を呼び出し、その際に当該エラーコード(今回の場合は「メモリ不足」を意味する「0xC0000017」)を引数として渡します。
ZwTerminateProcess
以上をまとめると、プロセス別に設定されたレジストリキー「IFEO」の以下の値は、メインスレッドの初期化時に割り当てるスタックの最小サイズに相当します。
MinimumStackCommitInBytes
この値が大きすぎる場合、スタック・オーバーフローの例外が発生し、対象プロセスは強制的に終了させられます。「stack rumbling」の手口は、大きすぎる値を意図的に指定して上記の状況を作り出すものです。
脅威ハンティングによる他の発見事項
脅威ハンティングの実施時、サードパーティ製のマルウェアスキャンサービス上で、Earth Longzhiに関連する検体「Roxwrapper」が見つかりました。このRoxwrapperは正規のDLLファイル「srpapi.dll」に偽装され、ドロッパとして動作することが確認されました。また、ドロッパの內部に埋め込まれたデータを分析したところ、Earth Longzhiが前回の攻撃キャンペーンに用いたシェルコードローダ「BigpipeLoader」が発見されました。Roxwrapperにはより複雑な暗号化技術が使用されているため、攻撃者は、依然としてセキュリティ製品に対する回避性能の向上を図っていると推測されます。
表1に、Roxwrapperが標的システム上に作成する各コンポーネントとその内容を記載します。
実際の攻撃で使用されたDLL形式の検体にRoxwrapperが含まれていたわけではありませんが、上記の発見事項は、Earth Longzhiの攻撃目標を知る手がかりとして重要な意味を持つと考えられます。また、表1のdwm.exeは新規コンポーネントであり、タスクスケジューラを不正使用して権限昇格を行います。
埋め込まれたおとり文書
図16、17に示す通り、発見されたおとり文書はベトナム語やインドネシア語で書かれていました。この点より、攻撃者は、次の攻撃目標としてベトナムやインドネシアのユーザを狙っていると推測されます。
タスクスケジューラの不正使用による権限昇格
脅威ハンティングで発見されたもう1つの注目すべきコンポーネントとして、権限昇格用の新規ツール「dwm.exe」が挙げられます。本ツールはGitHubに公開されたオープンソースの概念実証をもとに実装されています。はじめにdwm.exeは、防御回避のためにイメージパス名(ImagePathName)とコマンドライン(CommandLine)の両データを以下に置き換えます。
C:\Windows\explorer.exe
次に、COM(Component Object Model)オブジェクトの以下を用いてWindowsのユーザアクセス制御(UAC:User Account Control)を回避し、指定のペイロードを最高権限で実行させるタスクスケジュールを登録します。
IElevatedFactoryServer
一連の操作は、指定の実行ファイルをシステム権限で起動させるための手段です。この比較的新しい攻撃法がEarth Longzhiによって利用されるのは、確認できている範囲で今回が初めてとなります。
図20に示す通り、作成されたタスクスケジュールにはシステム権限が設定され、正規のGoogleアップデート用タスクとして偽装されています。指定のペイロード「dllhost.exe」は、リモートサーバから追加のペイロードをさらにダウンロードする機能を備えています。
Earth Longzhiが狙う標的の傾向
収集した検体の詳細な解析結果として、Earth Longzhiによる新しい攻撃キャンペーンでは、主にフィリピン、タイ、台湾、フィジーの企業や組織が狙われる傾向にあります。標的の業界としては、行政機関、ヘルスケア、テクノロジー、製造業が挙げられます。フィリピン、タイ、台湾の3国は、前回のEarth Longzhiによる攻撃でも標的として狙われていました。しかし、フィジーが狙われるのは、トレンドマイクロの調査の中では今回が初めてのこととなります。検体に含まれていた文書の内容を踏まえると、次の攻撃では、ベトナムやインドネシアが狙われる可能性が考えられます。
結論
トレンドマイクロでは2022年の第四四半期に、APT41に属する新たな子グループ「Earth Longzhi」の存在を確認しました。調査の結果、当該グループは2020年から2022年にかけて、2種類の攻撃キャンペーンを実行したことが判明しました。前回の報告時と比べ、Earth Longzhiの活動が弱まる兆しは見られず、TTPsも刷新されていくことが見込まれます。本稿の狙いは、そうした点について周知、注意喚起することにあります。今回の調査では、攻撃者が「MpClient.dll」に偽装したファイルを用意し、これをWindows Defenderの署名付き実行ファイルから起動することで、検知の回避性能を高めていることが判明しました。Earth Longzhiがセキュリティ製品を回避または無効化する際に用いた手段を下記に示します。
- システムサービスを登録する際に、標準的なWindows APIではなく、Microsoft WindowsのRPCを使用する。
- 脆弱性のあるドライバ「zamguard64.sys」を不正使用することで、稼働中のセキュリティ製品を停止する。これは「BYOVD攻撃」の典型例と考えられる。
- セキュリティ製品の起動を妨害するために、レジストリキー「IFEO」の内容を変更する。
また、今回は脅威ハンティングによって得られた発見事項について解説しました。取得した検体はテスト用ファイルのようにも見えますが、Earth Longzhiによる将来的な攻撃目標や新たな技術を知る上で、有用な情報を提供すると考えられます。埋め込まれていたおとり文書の内容を踏まえると、次の攻撃では、ベトナムやインドネシアが狙われる可能性があります。特記事項として、先述したタスクスケジューラの不正使用に基づく権限昇格や永続化は比較的新しい手口であり、今後のEarth Longzhiによる攻撃キャンペーンで利用される可能性が考えられます。
もう1つの重要な知見として、Earth Longzhiは、オープンソースのプロジェクトを用いて自身のツールを開発する傾向が見られました。攻撃が止んでいた期間においても、当該グループが攻撃用ツールの整備や刷新を行っていたことを示す証跡が得られています。以上を踏まえ、企業や組織では、回避性能に優れた新しい攻撃手段がサイバー犯罪者の手によって次々と生み出され続けている状況について認識し、警戒を緩めないことが大切です。
MITRE ATT&CK Tactics and Techniques
MITRE ATT&CK Tactics and Techniquesはこちらで確認してください。
侵入の痕跡(Indicators of Compromise、IoC)
侵入の痕跡はこちらで確認してください。
参考記事:
Attack on Security Titans: Earth Longzhi Returns With New Tricks
By: Ted Lee, Hara Hiroaki
翻訳:清水 浩平(Core Technology Marketing, Trend Micro™ Research)