3CXのソフトウェア・サプライチェーン侵害: 北朝鮮の攻撃者による過去のソフトウェア・サプライチェーン攻撃が発端となっている疑い
Mandiant
※この投稿は米国時間 2023 年 4 月 20 日に、Google Cloud blog に投稿されたものの抄訳です。
2023年3月、Mandiantコンサルティングは、3CX Desktop Appソフトウェアに関わるサプライチェーン侵害の調査に対応しました。この対応中、Mandiantは、3CXのネットワークへの初期侵入ベクターがTrading Technologies社のWebサイトからダウンロードされた不正ソフトウェア経由であることを確認しました。これは、Mandiantがソフトウェア・サプライチェーン攻撃から別のソフトウェア・サプライチェーン攻撃につながるのを観測した初めてのケースです。
概 要
3CX Desktop Appは、チャット、ビデオ通話、音声通話を含むコミュニケーションをユーザーに提供するエンタープライズソフトウェアです。2023年3月下旬、ソフトウェア・サプライチェーン侵害により、3CXの正規のソフトウェアをトロイの木馬化したバージョンを、3CXのWebサイトからダウンロードさせる手法でマルウェアが拡散されました。影響を受けたソフトウェアは3CX DesktopApp 18.12.416以前のもので、ダウンローダーであるSUDDENICONを実行する不正なコードが含まれており、GitHubでホストされている暗号化されたアイコンファイルから追加のコマンド&コントロール(C2)サーバーを受信しました。復号化されたC2サーバーは、ブラウザ情報を盗むデータマイナーであるICONICSTEALERとして特定された第3ステージをダウンロードするために使用されました。Mandiantはこの活動を、北朝鮮との関連性が疑われるクラスターであるUNC4736として追跡しています。
図1:3CXソフトウェアのサプライチェーン侵害とTrading Technologiesソフトウェアのサプライチェーン侵害の関連性
ソフトウエア・サプライチェーン・エクスプロイトの解説
Mandiantコンサルティングは、3CXのサプライチェーン侵害に関する調査を行い、初期侵入ベクターである、Trading Technologiesが提供するソフトウェアパッケージ「X_TRADER」の改ざんされたインストーラに始まる、過去のソフトウェア・サプライチェーン侵害を通じて配布されたマルウェア混入ソフトウェアパッケージを発見しました(図1)。Mandiantは、複雑なロードプロセスにより、多段式モジュラーバックドアであるVEILEDSIGNALとそのモジュールが展開されたことを突き止めました
VEILEDSIGNALバックドアの解析
Mandiant Consultingは、不正なモジュラーバックドア「VEILEDSIGNAL」の展開につながるX_TRADER_r7.17.90p608.exe
(MD5: ef4ab22e565684424b4142b1294f1f4d) というファイル名のインストーラーを特定しました。
X_TRADERプラットフォームは2020年に提供が終了したとされていますが、2022年になっても正規のTrading TechnologiesのWebサイトからダウンロードすることが可能でした。このファイルは、「Trading Technologies International, Inc」というサブジェクトで署名されており、同じデジタル証明書で署名された実行ファイルSetup.exeが含まれていました。不正なソフトウェアのデジタル署名に使用されたコード署名証明書は、2022年10月に期限切れとなるよう設定されていました。
インストーラには Setup.exe
が含まれており、実行すると2つのトロイの木馬化されたDLLと無害な実行ファイルをドロップします。Setup.exeは、無害な実行ファイルを使用して、不正なDLLの1つをサイドロードします。サイドローディングは、正規のWindows実行ファイルに依存して、正規の依存関係を装った不正なファイルをロードして実行するものです。ロードされた不正なDLLは、SIGFLIPとDAVESHELLを含み、それを使用して、もう一方のドロップされた不正な実行ファイルからペイロードを復号しメモリにロードします。SIGFLIPは、RC4ストリーム暗号に依存して選択したペイロードを復号化し、バイトシーケンスFEEDFACEを使用して、復号化の段階でシェルコード(この場合はDAVESHELL)を検出します。
SIGFLIPとDAVESHELLは、モジュール型バックドアであるVEILEDSIGNALと、それに対応する2つのモジュールを抽出し実行します。VEILEDSIGNALは、プロセスインジェクションとコマンド&コントロール(C2)サーバーとの通信のために、抽出された2つのモジュールに依存します。
VEILEDSIGNALと付随する2つのコンポーネントは、以下の機能を提供します
- VEILEDSIGNALバックドアは、インプラントデータの送信、シェルコードの実行、自己終了の3つのコマンドをサポートしています。
- プロセスインジェクションモジュールは、Chrome、Firefox、Edgeの最初に見つかったプロセスインスタンスにC2モジュールをインジェクションします。また、名前付きパイプを監視し、必要に応じて通信モジュールを再注入します。The process injection module injects the C2 module in the first found process instance of Chrome, Firefox, or Edge. It also monitors the named pipe and reinjects the communication module if necessary.
- C2モジュールは、Windowsの名前付きパイプを作成し、着信する通信をリスニングし、Galois Counter Mode(GCM)のAES-256で暗号化してC2サーバーに送信します。
特定されたVEILEDSIGNALのサンプル(MD5:c6441c961dcad0fe127514a918eaabd4)のC2コンフィグレーションは、以下のハードコードされたURLに依存していました: www.tradingtechnologies[.]com/trading/order-management
.
VEILEDSIGNAL の類似点とコード比較
侵害されたX_TRADERと3CXDesktopAppアプリケーションは、最終的なペイロードは異なるものの、どちらも同じ方法でペイロードを含み、抽出し、実行します。Mandiantはこれらのサンプルを分析し、以下のような類似点を確認しました
- ペイロードの暗号化と復号化に、SIGFLIPのツールコンフィグレーションで同じRC4キー
3jB(2bsG#@c7
を使用 - CVE-2013-3900(MS13-098)を活用したGitHubで公開されているプロジェクト、SIGFLIPを使用
- PE-COFFファイルを位置非依存コードまたはシェルコードに変換し、ペイロードをメモリにロードするために反射的ロード技術を活用する、一般に公開されているオープンソースプロジェクトであるDAVESHELへ依存
- ペイロードにハードコードされたCookie変数 __tutma を使用
- どちらのペイロードも、AES-256 GCM暗号でデータを暗号化
3CX構築環境の侵害
攻撃者は、公開されているFast Reverse Proxyプロジェクトのコンパイルバージョンを使用し、攻撃中に3CXの組織内で水平展開しました。ファイル file MsMpEng.exe
(MD5: 19dbffec4e359a198daf4ffca1ab9165) は、攻撃者によってC:◆Windows◆System32内にドロップされました。
Mandiantは、攻撃者が認証情報を取得し、水平展開しながら、環境全体を通して攻撃者の手順を再構築することができました。最終的に、攻撃者はWindowsとmacOSの両方の構築環境を侵害することができました。Windowsの構築環境では、攻撃者はTAXHAULランチャーとCOLDCATダウンローダーを展開し、IKEEXTサービスを通じてDLLのサイドローディングを実行し、LocalSystem権限で実行することで永続化しました。macOS の構築サーバーは、Launch Daemons を永続化メカニズムとして使用する POOLRAT バックドアで侵害されていました。
以前のレポートでは、macOSビルドサーバーがSIMPLESEAで侵害されていたことが報告されています。Mandiant Intelligenceはサンプルの分析を完了し、新しいマルウェアファミリーではなく、バックドアPOOLRATであると判断しました。
攻撃グループ: UNC4736
UNC4736は、Mandiant Intelligenceが追跡している複数の北朝鮮の攻撃者、特に金銭を動機とするサイバー犯罪活動に関与する工作員と、その重なりの程度は様々であることを示しています。これらのクラスターは、暗号通貨およびフィンテック関連サービスに長期にわたって持続的に焦点を当てていることを実証しています。
Mandiantは、UNC4736がCISAによって報告された金銭的動機のある北朝鮮の「AppleJeus」活動に関連していると中程度の確信を持って評価しています。これは、2022年2月に www.tradingtechnologies[.]com の侵害を報告したGoogle TAGの調査結果と一致し、同サイトから侵害されたX_TRADERアップデートの配布に先行してさらに裏付けされています。
- TAGは、Chromeのリモートコード実行の脆弱性CVE-2022-0609を悪用する北朝鮮の一連の活動を報告し、暗号通貨サービスを標的とする「AppleJeus」と重なることを特定しました。
- サイト
www.tradingtechnologies[.]com
は、トロイの木馬化したX_TRADERソフトウェアパッケージを配信することが知られていたわずか2ヶ月前に侵害され、サイトへの訪問者を不正利用する隠しIFRAMEをホストしていました。 - Mandiantは、3CX環境において、コンフィグレーションされたC2サーバーとして
journalide[.]org
を使用するPOOLRATバックドアを特定しました。 - POOLRATの古いサンプル(MD5: 451c23709ecd5a8461ad060f6346930c)は、AppleJeus作戦で使用されたトロイの木馬化CoinGoTradeアプリケーションの一部として過去に CISAによって報告されています(図2)。
- この古いサンプルのインフラは、同じくAppleJeusの下で追跡された、別のトロイの木馬化された取引アプリケーション、JMT Tradingとも関係があります。
図2: CoinGoTradeとJMT Trading Activity へのPOOLRATリンク
また、UNC4736とAPT43の活動と考えられる2つのクラスター、UNC3782とUNC4469の間には、脆弱なインフラの重複が確認されました。
- DNSの解決によって、UNC4736とAPT43につながる活動との関連性が中程度の信頼性を持って確認されています。(表1-3)
- APT43はしばしば、暗号通貨のユーザーや関連サービスを標的として活動しており、このことは北朝鮮につながるサイバー工作全体において広く行われていることがわかります。
展望と考察
今回確認されたソフトウェアサプライチェーンの侵害は、私たちが知る限り、ソフトウェアサプライチェーンの侵害を連鎖的に引き起こした初めての事例です。特に、今回の調査で明らかになったように、攻撃者が複数の侵入を連鎖させることができる場合、この種の侵害が広がる可能性があることを示しています。UNC4736の活動に関する研究によると、金銭的な動機を持つ北朝鮮の攻撃者と関連している可能性が高いことが示唆されています。連鎖的なソフトウェア・サプライチェーンの侵害は、北朝鮮のオペレーターが、マルウェアを開発・配布するために創造的な方法でネットワークアクセスを悪用し、北朝鮮の利益に沿った活動を行いながらターゲットネットワーク間を移動できることを証明しています。
マルウェアの定義
ICONICSTEALER
ICONICSTEALER は、アプリケーションのコンフィグレーションデータだけでなく、ブラウザの履歴も収集するC/C++データマイナーです。
DAVESHELL
DAVESHELL は、インメモリドロッパーとして機能するシェルコードです。埋め込まれたペイロードは、メモリにマッピングされ実行されます。
SIGFLIP
SigFlip は、authenticode署名されたPE-COFFファイルにパッチを当て、ファイルの署名に影響を与えたり破壊したりせずに任意のコードを注入するためのツールです。
POOLRAT
POOLRAT は、基本的なシステム情報を収集し、コマンドを実行することができるC/C++のmacOSバックドアです。実行されるコマンドは、任意のコマンドの実行、ファイルの安全な削除、ファイルの読み書き、設定の更新などです。
TAXHAUL
TAXHAUL は、実行されると C:\Windows\System32\config\TxR\.TxR.0.regtrans-ms
で予測するシェルコードペイロードを復号化するDLLです。Mandiantは、DLLサイドローディングによって TAXHAUL が持続することを確認しています。
COLDCAT
COLDCATは複雑なダウンローダーです。COLDCATはユニークなホスト識別子情報を生成し、CookieヘッダーのデータとともにPOSTリクエストで別ファイルで指定されたC2にビーコンします。短いハンドシェイクの後、マルウェアはレスポンスで実行されるbase64エンコードされたシェルコードを予測します。
VEILEDSIGNAL
VEILEDSIGNALは、C言語で書かれたバックドアで、シェルコードを実行し、自身を終了させることができます。さらに、VEILEDSIGNALは、Windowsの名前付きパイプを介して接続し、コマンド&コントロール(C2)インフラストラクチャと対話する追加モジュールに依存しています。
謝 辞
Michael Bailey、Willi Ballenthin、Michael Barnhart、Jakub Jozwiakの協力とレビューにf深く感謝します。また、Mandiantは、この研究に協力してくれたGoogle Threat Analysis Group (TAG)とMicrosoft Threat Intelligence Center (MSTIC)にも感謝したいと思います。
Technical Annex: MITRE ATT&CK
Resource Development
- T1588 Obtain Capabilities
- T1588.004 Digital Certificates
- T1608 Stage Capabilities
- T1608.003 Install Digital Certificate
Initial Access
- T1190 Exploit Public-Facing Application
- T1195 Supply Chain Compromise
- T1195.002 Compromise Software Supply Chain
Persistence
- T1574 Hijack Execution Flow
- T1574.002 DLL Side-Loading
Privilege Escalation
- T1055 Process Injection
- T1574 Hijack Execution Flow
- T1574.002 DLL Side-Loading
Defense Evasion
- T1027 Obfuscated Files or Information
- T1036 Masquerading
- T1036.001 Invalid Code Signature
- T1055 Process Injection
- T1070 Indicator Removal
- T1070.001 Clear Windows Event Logs
- T1070.004 File Deletion
- T1112 Modify Registry
- T1140 Deobfuscate/Decode Files or Information
- T1497 Virtualization/Sandbox Evasion
- T1497.001 System Checks
- T1574 Hijack Execution Flow
- T1574.002 DLL Side-Loading
- T1620 Reflective Code Loading
- T1622 Debugger Evasion
Discovery
- T1012 Query Registry
- T1082 System Information Discovery
- T1083 File and Directory Discovery
- T1497 Virtualization/Sandbox Evasion
- T1497.001 System Checks
- T1614 System Location Discovery
- T1614.001 System Language Discovery
- T1622 Debugger Evasion
Command and Control
- T1071 Application Layer Protocol
- T1071.001 Web Protocols
- T1071.004 DNS
- T1105 Ingress Tool Transfer
- T1573 Encrypted Channel
- T1573.002 Asymmetric Cryptography
Impact
- T1565 Data Manipulation
- T1565.001 Stored Data Manipulation
Technical Annex: Detection Rules
YARA Rules
rule M_Hunting_3CXDesktopApp_Key {
meta:
disclaimer = "This rule is meant for hunting and is not tested to run in a production environment"
description = "Detects a key found in a malicious 3CXDesktopApp file"
md5 = "74bc2d0b6680faa1a5a76b27e5479cbc"
date = "2023/03/29"
version = "1"
strings:
$key = "3jB(2bsG#@c7" wide ascii
condition:
$key
}
rule M_Hunting_3CXDesktopApp_Export
{
meta:
disclaimer = "This rule is meant for hunting and is not tested to run in a production environment"
description = "Detects an export used in 3CXDesktopApp malware"
md5 = "7faea2b01796b80d180399040bb69835"
date = "2023/03/31"
version = "1"
strings:
$str1 = "DllGetClassObject" wide ascii
$str2 = "3CXDesktopApp" wide ascii
condition:
all of ($str*)
}
rule TAXHAUL
{
meta:
author = "Mandiant"
created = "04/03/2023"
modified = "04/03/2023"
version = "1.0"
strings:
$p00_0 = {410f45fe4c8d3d[4]eb??4533f64c8d3d[4]eb??4533f64c8d3d[4]eb}
$p00_1 = {4d3926488b01400f94c6ff90[4]41b9[4]eb??8bde4885c074}
condition:
uint16(0) == 0x5A4D and any of them
}
rule M_Hunting_MSI_Installer_3CX_1
{
meta:
author = "Mandiant"
md5 = "0eeb1c0133eb4d571178b2d9d14ce3e9, f3d4144860ca10ba60f7ef4d176cc736"
strings:
$ss1 = { 20 00 5F 64 33 64 63 6F 6D 70 69 6C 65 72 5F 34 37 2E 64 6C 6C 5F }
$ss2 = { 20 00 5F 33 43 58 44 65 73 6B 74 6F 70 41 70 70 2E }
$ss3 = { 20 00 5F 66 66 6D 70 65 67 2E 64 6C 6C 5F }
$ss4 = "3CX Ltd1" ascii
$sc1 = { 1B 66 11 DF 9C 9A 4D 6E CC 8E D5 0C 9B 91 78 73 }
$sc2 = "202303" ascii
condition:
(uint32(0) == 0xE011CFD0) and filesize > 90MB and filesize < 105MB and all of them
}
rule M_Hunting_TAXHAUL_Hash_1
{
meta:
author = "Mandiant"
disclaimer = "This rule is meant for hunting and is not tested to run in a production environment"
description = "Rule looks for hardcoded value used in string hashing algorithm observed in instances of TAXHAUL."
md5 = "e424f4e52d21c3da1b08394b42bc0829"
strings:
$c_x64 = { 25 A3 87 DE [4-20] 25 A3 87 DE [4-20] 25 A3 87 DE }
condition:
filesize < 15MB and uint16(0) == 0x5a4d and uint32(uint32(0x3C)) == 0x00004550 and any of them
}
rule M_Hunting_SigFlip_SigLoader_Native
{
meta:
author = "Mandiant"
disclaimer = "This rule is meant for hunting and is not tested to run in a production environment"
description = "Rule looks for strings present in SigLoader (Native)"
md5 = "a3ccc48db9eabfed7245ad6e3a5b203f"
strings:
$s1 = "[*]: Basic Loader..." ascii wide
$s2 = "[!]: Missing PE path or Encryption Key..." ascii wide
$s3 = "[!]: Usage: %s <PE_PATH> <Encryption_Key>" ascii wide
$s4 = "[*]: Loading/Parsing PE File '%s'" ascii wide
$s5 = "[!]: Could not read file %s" ascii wide
$s6 = "[!]: '%s' is not a valid PE file" ascii wide
$s7 = "[+]: Certificate Table RVA %x" ascii wide
$s8 = "[+]: Certificate Table Size %d" ascii wide
$s9 = "[*]: Tag Found 0x%x%x%x%x" ascii wide
$s10 = "[!]: Could not locate data/shellcode" ascii wide
$s11 = "[+]: Encrypted/Decrypted Data Size %d" ascii wide
condition:
filesize < 15MB and uint16(0) == 0x5a4d and uint32(uint32(0x3C)) == 0x00004550 and 4 of ($s*)
}
Snort Rules
alert tcp any any -> any any (msg:"Possible malicious 3CXDesktopApp Identified"; content:"raw.githubusercontent.com/IconStorages/images/main/"; threshold:type limit, track by_src, count 1, seconds 3600; sid: 99999999;)
alert tcp any any -> any any (msg:"Possible malicious 3CXDesktopApp Identified"; content:"3cx_auth_id=%s\;3cx_auth_token_content=%s\;__tutma=true"; threshold:type limit, track by_src, count 1, seconds 3600; sid: 99999999;)
alert tcp any any -> any any (msg:"Possible malicious 3CXDesktopApp Identified"; content:"__tutma"; threshold:type limit, track by_src, count 1, seconds 3600; sid: 99999999;)
alert tcp any any -> any any (msg:"Possible malicious 3CXDesktopApp Identified"; content:"__tutmc"; threshold:type limit, track by_src, count 1, seconds 3600; sid: 99999999;)
Mandiant Security Validation
Organizations can validate their security controls using the following actions with Mandiant Security Validation.
※本ブログは、2023年4月20日に公開されたブログ「3CX Software Supply Chain Compromise Initiated by a Prior Software Supply Chain Compromise; Suspected North Korean Actor Responsible」の日本語抄訳版です。
-Mandiant, 作成者: Jeff Johnson, Fred Plan, Adrian Sanchez, Renato Fontana, Jake Nicastro, Dimiter Andonov, Marius Fodoreanu, Daniel Scott