攻撃グループMirrorFaceの攻撃活動
JPCERT/CCでは、2019年ごろから継続してマルウェアLODEINFOやNOOPDOOR(2022年ごろから使用)を使用する攻撃グループMirrorFace(Earth Kashaとも呼ばれる)の活動を確認しています。この攻撃グループのターゲットは、当初はマスコミや政治団体、シンクタンク、大学などでしたが、2023年からは製造業や研究機関などを狙うようになりました。また、ネットワーク内部に侵入する方法として、当初は標的型攻撃メールを使用してターゲット組織に侵入する特徴がありましたが、2023年ごろから外部公開資産の脆弱性を悪用してネットワーク内に侵入するパターンも並行して使用するようになりました。図1に、MirrorFaceの攻撃活動の変遷を示します。
2023年11月にJPCERT/CCから注意喚起を公開した通り、この攻撃グループはArray AGやFortiGateの脆弱性を悪用していることを確認しています。Proselfの脆弱性も悪用されている可能性がありますが、本ブログでは上記2つの脆弱性が悪用された事案を分析対象としています。
今回は、この攻撃者が最近の攻撃で使用するマルウェアNOOPDOORおよび攻撃者が組織内ネットワーク内に侵入した際に使用する攻撃手法やツールについて解説します。
NOOPDOOR
NOOPDOOR実行までの流れ
NOOPDOORはShellcode形式のマルウェアで、正規のアプリケーションに自身をインジェクションすることで動作します。NOOPDOORの起動方法は、XMLファイルから起動する場合(Type1)とDLLファイルから起動する場合(Type2)の二種類が確認されています。それぞれの起動パターンを図2および図3に示します。
Type1では、XMLファイル内に難読化されたC#のコードが格納されており、MSBuildにてC#のコードをビルドし、NOOPDOORのローダー(以下、「NOOPLDR」という。)が実行されます。実行後、特定のデータファイルまたはレジストリの値を読み取り、実行されたマシン固有の値であるMachineIdとComputerNameの値をもとにAES(CBCモード)で読み込んだデータを復号し、正規のアプリケーションへコードインジェクションします。
Type2では、タスクから正規のアプリケーションを実行し、DLLサイドローディングによってDLLファイルであるNOOPLDRが正規のアプリケーションにロードされます。その後、Type1と同様にレジストリをロードし、正規のアプリケーションへ復号したコードをインジェクションします。NOOPDOORの実行後、Type1とType2の双方はコードを暗号化し、再実行した際にロードされるように指定のレジストリへ格納します。
NOOPLDRの種類
NOOPLDRはインジェクション先の違いやサービス登録機能の有無などさまざまな検体が確認されており、以下のような種類を確認しています。
実行方式 | インジェクション先プロセス名 | サービス登録機能 | 本体保存レジストリ |
XML | lsass.exe | - | HKLM\Software\License\{HEX}, HKCU\Software\License\{HEX} |
XML | tabcal.exe | - | HKLM\Software\License\{HEX}, HKCU\Software\License\{HEX} |
XML | rdrleakdiag.exe | - | HKLM\Software\License\{HEX}, HKCU\Software\License\{HEX} |
XML | svchost.exe | - | HKLM\Software\License\{HEX}, HKCU\Software\License\{HEX} |
XML | wuauclt.exe | - | HKLM\Software\License\{HEX}, HKCU\Software\License\{HEX} |
XML | vdsldr.exe | - | HKLM\Software\License\{HEX}, HKCU\Software\License\{HEX} |
XML | prevhost.exe | - | HKLM\Software\License\{HEX}, HKCU\Software\License\{HEX} |
DLL | wuauclt.exe | Yes | HKCU\Software\Microsoft\COM3\{HEX} |
DLL | None | - | HKCU\Software\Licenses\{HEX} |
DLL | svchost.exe | - | HKCU\Software\Licenses\{HEX} |
なお、Type2のサービス登録機能がある検体の一部については、次のコマンドを実行し、サービスを隠ぺいする機能があります。
sc start [SERVICE_NAME] && sc sdset [SERVICE_NAME] D:(D;;DCLCWPDTSD;;;IU)(D;;DCLCWPDTSD;;;SU)(D;;DCLCWPDTSD;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
NOOPLDRの難読化
NOOPLDR(Type2)では図4(左)のような制御フローを複雑にしてコードを読みづらくする難読化手法であるControl Flow Flattening(CFF)によってコードが読みづらくなっています。D810[3]などのCFF解除ツールを使用することで、ある程度難読化を解除することが可能ですが、NOOPLDRはCFFに加えて意味のないWindows API呼び出しが多数埋め込まれており、そのままではすべての難読化を解除することができません。そのため、JPCERT/CCで作成したツールを適用後、D810などを使用することで、図4(右)のようにCFFを解除することが可能です。
NOOPLDRの難読化解除を補助するツールをGitHub上で公開していますので、ご活用ください。
GitHub:JPCERTCC/aa-tools/Deob_NOOPLDR.py
https://github.com/JPCERTCC/aa-tools/blob/master/Deob_NOOPLDR.py
NOOPDOORの機能
NOOPDOORは、システムの現在時刻をもとに算出するDGAによって生成された通信先へポート443番で通信する機能や、TCPの47000ポートでリッスンし、コマンドを待ち受ける機能があります。また、NOOPDOORにはファイルのアップロード・ダウンロード、追加モジュールの実行など、マルウェアの機能として基本的なものから、ファイルのタイムスタンプを改ざんするコマンドも存在しており、フォレンジック時には注意が必要です。
NOOPDOORのコマンド体系や、詳しい挙動はJSAC2024にて発表されたDominik氏の講演資料[4]をご覧ください。
攻撃者のネットワーク内での活動
以降では、ネットワーク内に侵入した攻撃者が使用したコマンドやツール、防衛回避手法について解説します。
認証情報の取得
攻撃者は複数の方法を使用して、Windowsネットワークの認証情報の取得を試みます。
(1) Lsassメモリダンプからの認証情報の取得
- ツールを使用して、動作中のLsassプロセスのメモリダンプを取得し、内部に含まれるパスワード情報を抽出しようとします。
- Microsoft Defenderが動作している環境では、Lsassメモリダンプの取得を検知する可能性があります(イベントログ Windows Defender/Operational: イベントID 1011: 検知名 Trojan:Win32/LsassDump)。
(2) NTDS.ditからのパスワード取得
- ドメインコントローラーのデータベースファイル(NTDS.dit)を取得して、パスワード情報を抽出しようとします。
- Vssadminコマンドなどを使用してNTDS.ditにアクセスします。
- NTDS.ditを取得した痕跡はイベントログに記録されます。(詳しくは、JPCERT/CCが公開しているツール分析結果シートをご覧ください。[5] [6])
(3) レジストリハイブの取得
- SYSTEM、SAM、SECURITYのレジストリハイブを取得し、SAMデータベースから認証情報を取得しようとします。
EDR製品によっては、これらのアクティビティを検知できる可能性があります。
横展開(Lateral Movement)
攻撃者は、Windowsネットワークの管理者ユーザーを使って、多数のクライアントおよびサーバーにアクセスします。特にファイルサーバーやAD、ウイルス対策ソフトの管理サーバーなど権限の高いユーザーで管理しているサーバーには注意が必要です。攻撃者が、他のシステムに横展開する際はSMB経由でマルウェアをコピーし、タスク登録(schtasksコマンド)することでマルウェアに感染させます。
このアクティビティは、Windowsイベントログで記録・監視することが可能です。タスクスケジューラの登録はイベントログ(セキュリティ)のイベントID 4698で記録されます。さらに、監査イベント「詳細なファイル共有の監査」を有効にしていれば、SMB経由でマルウェアをコピーしたことをイベントログ(セキュリティ)のイベントID 5145で記録できます(詳しい設定方法については、Appendix Dをご覧ください)。以下は、攻撃者によってファイルがコピーされた際のイベントログ(イベントID 5145)の例です。
クライアントに必要なアクセスを付与できるかどうかについて、ネットワーク共有オブジェクトがチェックされました。 サブジェクト: セキュリティ ID: [ID] アカウント名: [User name] アカウント ドメイン: [Domain name] ログオン ID: [Logon ID] ネットワーク情報: オブジェクトの種類: File 送信元アドレス: [IP address] ソース ポート: [Port] 共有情報: 共有名: \\*\C$ 共有パス: \??\C:\ 相対ターゲット名: WINDOWS\SYSTEM32\UIANIMATION.XML アクセス要求情報: アクセス マスク: 0x120089 アクセス: READ_CONTROL SYNCHRONIZE ReadData (または ListDirectory) ReadEA ReadAttributes
探索コマンド
攻撃者は侵入後、Windowsの標準コマンドを使用して内部探索を行っていました。以下は攻撃者が実行したコマンドの例です。一般ユーザーが使用しないコマンドも含まれているため、このようなコマンドの実行を監視することで攻撃者のアクティビティを検知できる可能性があります。
at auditpol bitsadmin del dir dfsutil dsregcmd hostname ipconfig nbtstat net netstat ntfrsutl nslookup mountvol ping powercfg qprocess quser qwinsta reg sc setspn schtasks systeminfo tasklist vdsldr ver vssadmin wevtutil whoami wmic
情報窃取
攻撃者はNOOPDOORの他に、情報窃取のために以下のツールを使用していました。
- WinRAR
- SFTP
攻撃者は、システム内のファイルを一覧した後に、情報を持ち出そうとします。確認した事例では、ファイルサーバー上にあるファイルを列挙するためにdir /s
コマンドを実行し、その出力結果をRARファイルとして圧縮していました。その他にも、攻撃者は以下のようなコマンドでファイル一覧を取得しており、OneDriveやTeams、IISのフォルダーなども調査していることが分かります。
cmd.exe /c dir c:\ cmd.exe /c dir c:\users\ cmd.exe /c dir c:\users\\Desktop cmd.exe /c dir c:\users\ \Documents cmd.exe /c dir "c:\users\ \OneDrive" /s /a cmd.exe /c dir "c:\users\ \OneDrive\Microsoft Teams\" cmd.exe /c dir "c:\users\ \OneDrive\Microsoft Teams チャット ファイル\[redacted].docx" cmd.exe /c dir "c:\Program Files\" cmd.exe /c dir "c:\Program Files (x86)" cmd.exe /c dir c:\Intel cmd.exe /c dir c:\inetpub cmd.exe /c dir c:\inetpub\wwwroot
その他のツール
攻撃者は、LODEINFOおよびNOOPDOORのマルウェア以外にもツールを使用しています。複数の事案でHTTP/SOCKS5プロキシツールであるGO Simple Tunnel(GOST)が悪用されていることを確認しています。
GitHub:ginuerzh/gost
https://github.com/ginuerzh/gost
このツールがLinuxサーバー上でも動作していた事例を確認しています。その他にもLinuxサーバーでは、TinyShellベースのマルウェアが感染している場合があります。
防衛回避(Defense Evasion)
攻撃者は防衛回避としてさまざまな手法を用いていました。以下は確認した手法の例です。(各TTPsの詳細はAppendix Cをご確認ください。)
(1) MSBuildの悪用
- 正規ツールであるMSBuildを用いて、不正なコードが含まれるXMLファイル(NOOPLDR)を実行
(2) レジストリに不正なデータを格納
- 暗号化されたマルウェアのファイルを読み込んだ後、レジストリにデータを保存し、元のファイルは削除
(3) タイムスタンプ改ざん
- 攻撃者が設置したマルウェアやツールの作成日時がいずれも侵害日時よりも古い日時に改ざん
(4) ファイアウォールのルール追加
- Windows Firewallの除外リストに、NOOPDOORで使用する特定ポート宛ての通信を許可する設定を追加
- イベントログ Firewall With Advanced Security/Firewall:イベントID 2004で記録される
(5) 登録したサービスの隠蔽
- 登録したサービスが表示されないように、アクセス制御を設定
(6) Windowsイベントログの消去
- システムログの削除
- 各イベントログ:イベントID 1102で記録される
(7) Windows Defenderの停止
- イベントログ Windows Defender/Operational:イベントID 5001で記録される
(8) ファイルの削除
- 設置したマルウェアファイルを削除し、痕跡を消去
なお、攻撃者はシステム内の探索を一通り行った後、設置しているマルウェアの削除や自身のプロセスの停止を行っていました。これは組織内ネットワーク内での長期的な潜伏のため、痕跡の隠蔽を目的としていると思われます。
cmd.exe /c del c:\Windows\system32\UIAnimation.xml /f /q taskkill.exe
おわりに
攻撃グループMirrorFaceは、長期にわたり国内の組織に対する攻撃を続けています。このような攻撃は今後も継続する可能性が高いことから、引き続き注意が必要です。通信先などのインディケータ情報は、Appendix Aをご確認ください。また、JPCERT/CCから公開している注意喚起もあわせてご覧ください。
先日JPCERT/CCから公表したOperation Blotless攻撃キャンペーンに関する注意喚起において、IoCベースのアプローチの限界について触れましたが、本件も同様にIoCベースでの早期検知は難しい可能性があります。このようなインシデントをセキュリティ製品・サービスで早期に検知していくためには、セキュリティベンダー間でマルウェアの検出に必要な情報やマルウェア以外のTTPに関する情報がある程度共有される必要性があると考えます。今後も、JPCERT/CCではセキュリティインシデントの報告をくださる組織やセキュリティベンダーと協力しながら、攻撃者のアクティビティを素早く情報共有および公表できるように取り組んでまいります。
謝辞
本レポートを公開するにあたり、情報提供にご協力いただきました複数の組織のみなさま、セキュリティベンダーのみなさまに感謝申し上げます。
レポート作成協力セキュリティベンダー
- 伊藤忠サイバー&インテリジェンス株式会社
- 株式会社マクニカ
- セキュアワークス株式会社
また、下記のセキュリティベンダーから公開されているレポートを参考にさせていただきました。
- 株式会社ラック
- トレンドマイクロ株式会社
インシデントレスポンスグループ 増渕 維摩、喜野 孝太、朝長 秀誠
参考情報
[1] JSAC2024:Spot the Difference: An Analysis of the New LODEINFO Campaign by Earth Kasha
https://jsac.jpcert.or.jp/archive/2024/pdf/JSAC2024_2_7_hara_shoji_higashi_vickie-su_nick-dai_en.pdf
[2] ITOCHU Cyber & Intelligence Inc.:分析官と攻撃者の解析回避を巡る終わりなき戦い: LODEINFO v0.6.6 - v0.7.3 の解析から
https://blog.itochuci.co.jp/entry/2024/01/24/134047
[3] GitHub:D-810
https://github.com/joydo/d810
[4] JSAC2024:Unmasking HiddenFace: MirrorFace’s most complex backdoor yet
https://jsac.jpcert.or.jp/archive/2024/pdf/JSAC2024_2_8_Breitenbacher_en.pdf
[5] JPCERT/CC:ツール分析結果シート ntdsutil
https://jpcertcc.github.io/ToolAnalysisResultSheet_jp/details/ntdsutil.htm
[6] JPCERT/CC:ツール分析結果シート vssadmin
https://jpcertcc.github.io/ToolAnalysisResultSheet_jp/details/vssadmin.htm
Appendix A:通信先
- 45.66.217.106
- 89.233.109.69
- 45.77.12.212
- 108.160.130.45
- 207.148.97.235
- 95.85.91.15
- 64.176.214.51
- 168.100.8.103
- 45.76.222.130
- 45.77.183.161
- 207.148.90.45
- 207.148.103.42
- 2a12:a300:3600::31b5:2e02
- 2001:19f0:7001:2ae2:5400:4ff:fe0a:5566
- 2400:8902::f03c:93ff:fe8a:5327
- 2a12:a300:3700::5d9f:b451
Appendix B:マルウェアのハッシュ値
NOOPLDR Type1
- 93af6afb47f4c42bc0da3eedc6ecb9054134f4a47ef0add0d285404984011072
- bcd34d436cbac235b56ee5b7273baed62bf385ee13721c7fdcfc00af9ed63997
- 43349c97b59d8ba8e1147f911797220b1b7b87609fe4aaa7f1dbacc2c27b361d
- 4f932d6e21fdd0072aba61203c7319693e490adbd9e93a49b0fe870d4d0aed71
- 0d59734bdb0e6f4fe6a44312a2d55145e98b00f75a148394b2e4b86436c32f4c
- 9590646b32fec3aafd6c648f69ca9857fb4be2adfabf3bcaf321c8cd25ba7b83
- 572f6b98cc133b2d0c8a4fd8ff9d14ae36cdaa119086a5d56079354e49d2a7ce
NOOPLDR Type2
- 7a7e7e0d817042e54129697947dfb423b607692f4457163b5c62ffea69a8108d
- 5e7cd0461817b390cf05a7c874e017e9f44eef41e053da99b479a4dfa3a04512
- b07c7dfb3617cd40edc1ab309a68489a3aa4aa1e8fd486d047c155c952dc509e
Appendix C:MITRE ATT&CK
手法 | ID | 名前 | 説明 |
Initial Access | T1133 | External Remote Services | VPN機器の脆弱性を悪用して侵入 |
Execution | T1053.005 | Scheduled Task/Job: Scheduled Task | スケジュールタスク経由でNOOPLDRを実行 |
Persistence | T1053.005 | Scheduled Task/Job: Scheduled Task | スケジュールタスクを設定して自動起動 |
T1543.003 | Create or Modify System Process: Windows Service | サービス登録して自動起動 | |
Privilege Escalation | T1134.002 | Access Token Manipulation: Create Process with Token | アクセストークンを操作してプロセス生成 |
Defense Evasion | T1055 | Process Injection | C:\windows\system32配下にある正規のEXEファイルを使用し、復号したNOOPDOORをプロセスインジェクションして実行 |
T1070.001 | Clear Windows Event Logs | システムログの消去 | |
T1070.004 | File Deletion | 設置したマルウェア・ツール等の削除 | |
T1070.006 | Timestomp | 設置したファイルの作成日時を改ざん | |
T1112 | Modify Registry | レジストリにNOOPDOORを格納 | |
T1127.001 | Trusted Developer Utilities Proxy Execution: MSBuild | 正規のMSBuild.exeを用いて不正なXMLファイルを実行 | |
T1140 | Deobfuscate/Decode Files or Information | NOOPDOORを復号し、インジェクション先のプロセス内で実行 | |
T1562.001 | Disable or Modify Tools | Windows Defenderの停止 | |
T1562.004 | Disable or Modify System Firewall | NOOPDOORで使用するポート宛ての通信を許可するルールを追加 | |
T1564 | Hide Artifacts | NOOPDOORを自動実行するために登録したサービスが表示されないように、アクセス制御を設定 | |
Credential Access | T1003 | OS Credential Dumping | lsass、ntds.ditから認証情報をダンプ |
Discovery | T1087 | Account Discovery | アカウント情報を収集 |
T1083 | File and Directory Discovery | ファイル情報を収集 | |
Lateral Movement | T1021.002 | SMB/Windows Admin Shares | SMB経由で他のシステムにマルウェアを設置 |
Collection | T1560.001 | Archive Collected Data: Archive via Utility | WinRARを用いてデータを圧縮 |
T1039 | Data from Network Shared Drive | Network Shared Driveに保存されているデータの収集 | |
Command and Control | T1568.002 | Dynamic Resolution: Domain Generation Algorithms | DGAを用いて通信先を変更 |
Appendix D:監査イベント「詳細なファイル共有の監査」の有効化方法
Windows OSの監査設定は、グループ ポリシー エディター(gpedit.msc)から設定可能です。図5のとおり、[コンピューターの構成] -> [Windowsの設定] -> [セキュリティの設定] -> [監査ポリシーの詳細な構成] -> [オブジェクトアクセス] -> [詳細なファイル共有の監査] から有効にします。