エクスプロイト&脆弱性
サプライチェーン攻撃において悪用されたチャットアプリケーション
本記事では、チャット機能主体の顧客エンゲージメントプラットフォームのインストーラを利用したサプライチェーン攻撃における、感染チェーン及びマルウェアを検証します。攻撃者は、これらのインストーラをトロイの木馬に感染させ、攻撃を実行していました。
2022年9月下旬、トレンドマイクロの研究者は、顧客エンゲージメントアプリケーション 「Comm100 」のインストーラ(トロイの木馬に感染)を使用したサプライチェーン攻撃を確認しました。その後の関連調査により、同様な機能を持つ他のアプリケーションにおいても複数のバージョンが影響を受けていることが判明し、この攻撃の影響は当初研究者が考えていたよりもはるかに大きいことが確認されました。さらに、当初算出されていた2022年9月29日よりも早く攻撃が開始されていたことも確認されています。
トレンドマイクロが観測したテレメトリのデータによると、同様の顧客エンゲージメントソフトウェアである「LiveHelp100」の複数のバージョンも攻撃に使用されていることが示唆されました。「LiveHelp100」及び「Comm100」のオフィスは同じ住所にあり、両者とも同じ取締役となっています。2022年10月14日に開始された調査の結果、2022年8月8日以降、クライアントアプリケーションが攻撃者のインフラストラクチャからバックドアスクリプトをロードしていたことが判明しました。また、2022年2月時点において既に、「LiveHelp100」のWebアプリケーションにインジェクトされたJavaScriptバックドアが特定されています。トレンドマイクロは「LiveHelp100」に本件を連絡しましたが、返信はありませんでした。
しかしながら、トロイの木馬に感染した「LiveHelp100」のバージョンが 「Comm100」と同様に公式Webサイトにおいて「サプライチェーン攻撃の実施により拡散されたか否か」は、調査時においては断定することはできませんでした。これは、インストーラが公開されていなかったためです。なお、テレメトリにより「LiveHelp100」のクライアントによるJavaScript バックドアをロードするリクエストを検出しましたが、これは以前「Comm100」アプリケーションにおけるサプライチェーン攻撃で確認されたものと同一である可能性がありました。 このため、トレンドマイクロは感染経路をより詳しく調査し、攻撃者が使用したその他のマルウェアを特定するに至りました。
興味深いことに、このマルウェアのデプロイが進んだ段階で標的となった被害者の中には、複数のオンラインギャンブルプラットフォームの関係者がいることが判明しました。これらの被害者は、各プラットフォームが運営するウェブサイトの管理パネルへのアクセス権を持っていました。この管理パネルへのアクセスも、攻撃目的の一つである可能性が示唆されています。
JavaScriptバックドアの解析
Windows版及びmacOS版の「LiveHelp100」クライアントアプリケーションは、Electron.jsランタイムフレームワークを使用して開発されています。テレメトリのデータによると、このアプリケーションの「11.0.2」及び「11.0.3」の2つのバージョンが2022年8月8日以降、以下のURLに通信を試みていることが判明しました。
hxxp[:]//service[.]livehelpl00service[.]com/livehelp/collect
URLから返されるペイロードは、トロイの木馬に感染したElectron.jsアプリケーションにによって実行される「バックドア関数を持つ難読化されたJavaScriptコード」となります。URLの形式やバックドア関数は、先に引用した研究者の「Comm 100」攻撃に関する報告書で言及されているものと同様です。バックドアは、C&C(コマンド・アンド・コントロール)サーバ8[.]219[.]76[.]37との通信を開始するためにHTTP POSTリクエストを使用し、以下の被害者情報を送信します。
- コンピュータ名
- ユーザ名
- tasklistコマンドから抽出したプロセスリスト
- レジストリに保存されているプロダクトID値
- 「LiveHelp100」アプリケーションのデータファイルに保存されているメール情報
JavaScriptバックドアは、C&Cサーバからコマンドを受信します。そこでは、2種類のコマンドがサポートされています。1つ目はシェルコマンド(shell command)であり、これによって攻撃者は新たに生成された「cmd.exe」プロセスにおいてシェルコマンドを実行することが可能になります。2つ目は、被害者のマシン上で任意のJavaScriptコードを実行できるようにする実行コマンド(execute command)です。
また、トレンドマイクロの調査によると、被害者が以下のURLから第2段階のJavaScriptペイロードをロードするように指示されていたことがわかりました。
hxxp[:]//service[.]livehelpl00service[.]com/livehelp/init
第2段階のスクリプトは、元の「LiveHelp100」アプリケーションをトロイの木馬に感染させ、感染の次段階に繋がるマルウェアを作成する役割を担っています。
第2段階のスクリプトは、「LiveHelp100」アプリケーションのResourcesフォルダを確認します。このフォルダは、メインのElectron.jsアプリケーションコードを格納するために使用されます。「LiveHelp100」アプリケーションがトロイの木馬に未感染と判断された場合、以下の処理を行いアプリケーションのResourcesフォルダにファイルを作成します。
- メインアプリケーションスクリプトを含む「LiveHelp100」ASARパッケージ内の全てのNode.jsモジュールをコピー
- メインのElectron.jsスクリプトを「./index.js」に設定するために、新しいpackage.jsonファイルを作成
- JavaScriptバックドア(上述)をロードするためindex.jsスクリプトを作成し、「LiveHelp100」アプリケーションの実行を続行
アプリケーションをトロイの木馬に感染させた後、感染ルーチンの次段階においてバックドアをロードするため、スクリプトは複数のファイルを作成し実行します。バックドアの解析については、次章で解説します。
実行可能なバックドアの解析
第2段階のスクリプトは、3つのファイルを作成します。これらのファイルには、署名付きの正規実行ファイル「WebAccess.exe」、復号ツールであるDLLファイル「midlrtmd.dll」、そして暗号化されたバイナリファイル「Copyright.txt」が含まれています。スクリプトは、復号ツールであるDLLファイルをサイドロードするために実行ファイルを遂行します。そして、DLLファイルは「Copyright.txt」を復号化し、実行ファイルのペイロードの第1段階として復号化されたペイロードを遂行します。
第1段階の目的は、第2段階のペイロードをダウンロードし実行することです。第2段階とは、この記事で紹介したマルウェアと同様の関数を持つリファクタリングされたコードを指します。さらに、以下に記載されているURLから追加モジュールをロードするとともに、様々なマシン上の情報を収集します。
<C&C>:<port>/down/case/log.bsh
<C&C>:<port>/down/keeper/WindowsPlayer
<C&C>:<port>/down/keeper/midlrtmd
<C&C>:<port>/down/keeper/log.bsh
当記事が公開された時点では、このサーバは既にアクセス不可となっていたためペイロードは提供されていません。トレンドマイクロは、C&Cサーバを以下として追跡しました。
static-files[.]livedoorhellp[.]chat:888
また攻撃者が使用するファイル名「log.bsh」が固有であることを確認し、さらなる調査を試みました。その結果、Go言語で書かれたバックドアを発見するに至り、「LiveHelp100」攻撃と関連する可能性が示唆されています。
さらに、2022年10月8日から10月12日の間にデプロイされた、より新しいアクティブチェーンも発見されました。そして、トロイの木馬に感染した「LiveHelp100」アプリケーションにより感染した被害者が、配信サーバ「s[.]livehellp[.]chat」から以下のファイルをダウンロードし実行するよう指示されていることを確認しました。
hxxp[:]//<C&C>:<port>/sugrec
hxxp[:]//<C&C>:<port>/load.action/FixU
hxxp[:]//<C&C>:<port>/load.action/html.xml
hxxp[:]//<C&C>:<port>/load.action/kdump64
この新しいチェーンは3つのファイルから構成されます。まず、DLLサイドロードの脆弱性を有する署名付き正規の「rcmdhelper.exe」、そして復号ツール及びローダである「kdump64.dll」、そして実行可能なバックドアの第1段階として暗号化されたペイロードを含む「html.xml」により構成されます。
第1段階
攻撃者は、この段階を次段階のダウンローダとして使用します(ソケットを利用)。C&Cサーバ名は、サーバ名の各byteに一定の値を加えるのみで暗号化されます。
この場合、C&Cサーバへの通信は暗号化されておらず、第2段階をダウンロードするためのコマンド番号「0x09」のみが含まれています。
C&Cサーバから受け取るペイロードには、ペイロードのサイズ「first DWORD = 0x7a200」及びPE EXEマーカーとして「0x4d 0x5a」を使用した第2段階のペイロード自体が含まれています。
第2段階
感染チェーン(第2段階)は、特に複雑であり多くの関数を含みます。
- アンチデバッグ機能を持つスレッド(デバッガが検出されると終了)
- 以下のディレクトリからファイルを繰り返し削除するスレッド
- 下記のようなマシン情報を取得:
- IPアドレス
- デバイス名
- ユーザ名
- 実行プロセス名
- Windowsのプロダクト名
- 「イベントID 6005」のイベント(イベントログサービスの開始)、「イベントID 6006」のイベント(イベントログサービスの停止)
- ポート8090、8091、8092、8093、8094、8095、8096を待ち受けているTCPエンドポイント
- 8.218.67.52:18024とのセッションが確立されたTCPエンドポイント
- ウイルス対策製品名
- SkypeもしくはTelegramのインストールの有無
- 接続されたモニター数
- WindowsレジストリにおけるプロダクトID
- C&Cサーバからの応答に基づいて、第2段階は以下のうちいくつかの機能を実行する
%LOCALAPPDATA%\\Programs\\Comm100LiveChat\\resources\\app directory
これらマシン上の情報は暗号化されていないバイナリストラクチャとしてC&Cサーバに送信されます。
- ローカルポート(8090~8096)の利用可能性を確認:この関数は、ローカルホストのポートが他のプログラムによって使用されるのを防ぐために、それらのポートにバインドしようと試みます。これは、マシンにインストールされているWebブラウザにより判断されます。このタスクが成功した場合、指定されたポートがリモートブラウザのデバッグに使用できることを意味します。この目的のために、以下のブラウザを検出します。検出された場合、ポート8090~8096が使用可能かどうかを確認します。0="极速浏览器X" (translated as “360 fast browser X”); 1="360", 2="Microsoft Edge", 3="QQ", 4="傲游" (translated as “Maxthon browser”); 5="Chrome", 6="Opera"
- ブラウザ履歴及びCookieファイルを窃取:
- ブラウザのショートカットを変更:
\\Opera Software\\Opera Stable\\History -> C:\\ProgramData\\ohis
\\360ChromeX\\Chrome\\User Data\\Default\\Cookies -> C:\\ProgramData\\3phis
\\360se6\\User Data\\Default\\Cookies -> C:\\ProgramData\\3shis
\\Microsoft\\Edge\\User Data\\Default\\History -> C:\\ProgramData\\ehis
\\Tencent\\QQBrowser\\User Data\\Default\\History -> C:\\ProgramData\\qhis
\\Google\\Chrome\\User Data\\Default\\History -> C:\\ProgramData\\chis
\\Maxthon\\Application\\User Data\\Default\\History -> C:\\ProgramData\\mhis
Search shortcuts in \\AppData\\Roaming\\Microsoft\\Internet Explorer\\Quick Launch,
C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs,
C:\\Users\\Public\\Desktop; Desktop,
\\AppData\\Roaming\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\TaskBar,
and modify them to include parameter “--remote-debugging-port=<>”
Chromiumベースのブラウザにおいてリモートデバッグを有効にした上で実行し、指定されたポートにアクセスすると、そこで開かれたタブ及びURLのリストが表示されます。これにより、攻撃者は被害者のブラウジング活動を監視することができるようになります。
a. 以下をダウンロード、復号化し、ロードする。
http: //<C&C>:<port>/down/maisui module
b. 以下をダウンロード、復号化し、ロードする。
http:// <C&C>:<port>/down/webtoken module
c. 以下をダウンロード、復号化し、ロードする。
http:// <C&C>:<port>/down/webcallinfo module
d. 以下をダウンロード、復号化し、ロードする。
http:// <C&C>:<port>/down/webscreen module
e. 以下のパスからダウンロード、復号化し、ロードする。
http:// <C&C>:<port>/down/update/
f. 以下のダウンロードディレクトリからダウンロード、復号化し、ロードする。
http:// <C&C>:<port>/down/
トレンドマイクロのテストシナリオでは、以下のアドレスにおけるアップデートのダウンロードのみが観測されました。
http:// <C&C>:<port>/down/update/7.zip.
C&Cサーバ及びポートには、第2段階の実行可能なバイナリにハードコードされた以下の値(暗号化済み)が含まれています。
files[.]amazonawsgarages[.]com:888.
C&Cサーバから受け取ったアップデートされたパケットには、「/down/update/」ディレクトリからダウンロードされたアップデートファイル名「7.zip」が含まれています。このファイルパスは、ペイロードを以下に保存するために使用されています。パケットには、ダウンロード元及び保存先が更新されたファイルが含まれています。
C:\UsersPublicFolder.zip
ダウンロード後、アーカイブの内容が抽出され、パケット内の情報も含めてファイルとして保存されます。実行ファイルの名称は、以下として保存されます。パケットは、パケット長、「DWORD 0x384」から始まり、内部コマンドID、「update=DWORD 0x3ef」、そしてコマンドデータ自体の順番となります。
C:\Users\Public\Folder\RcmdHelper.exe
アップデート
アップデートされたパッケージは、第一段階のローダを修正したものです。ここでも、署名付き正規のEXEファイル(サイドローディングの脆弱性あり)、復号ツール及びローダとしてのDLLファイル、そして暗号化された内容を含むバイナリファイルの3つのファイルを使用します。
復号ツールは以下のように実行されるよう変更されました。
1. 暗号化された第1段階のデータがあればバイナリファイルから読み込み、RC4のようなカスタムアルゴリズムを使って復号化します。なお、パスワードはDLLファイルにハードコードされています。
2. コンピュータ名から派生したパスワードで再暗号化し、その暗号化したデータをレジストリに格納します。そして、3つ目のバイナリファイルを削除します。
3. これ以降の実行は、暗号化された第1段階のデータをレジストリから読み込み行います。
モジュール
トレンドマイクロは、Go言語を用いて開発された以下のモジュールを発見しました。ダウンロードしたモジュールは、ファイルの端から順に「XOR (n-1)th byte」及び「nth byte」を適用する単純なXORアルゴリズムで暗号化されています。
表1: Go言語で書かれた追加モジュール
SOCKS5プロキシモジュールは、ローカルホストのポート61182でリッスンを実施します。
「Webcallinfo」は、現在のユーザ、パブリックIPアドレス、プライベートIPアドレス、VPN IPアドレス、地域、MACアドレス、Wi-Fi情報、デバイス名、アイデンティティ、インストールされているチャットアプリケーション(Telegram、Skype等)、ブラウザのブックマーク、パスワード、そして履歴等様々な情報を窃取し「机器信息.html(machine information.html)」と呼ばれるファイルへ格納します。また、スクリーンショットの撮影を行い、「\\桌面文件(\\Desktop)」や「\\下载文件 (\\Downloads)」ディレクトリからファイルを窃取します。そして、取得した情報をZIPファイルに圧縮し「窮的吃土(qiongdechitu)」と呼ばれるAliyunやアリババのクラウドバケットにアップロードします。なお、「窮的吃土」は、「彼は、お金を全て使ってしまったので経済的に苦しく、今月の残りは塵を食べる必要がある」というような訳となります。
モジュールが 「OSS(Object Storage Service)」や「割り当てられたバケット」にアクセスするためには、「ユーザにアクセスを許可するための一時的なクレデンシャル」をSTS(Security Token Service)が生成する必要があります。これらの一時的なクレデンシャルは、ハードコードされた別のURLにGETリクエストを送信することで取得することができます。その後、クレデンシャルは、必要なバケットと通信するために使用されます。
「webtoken」モジュールはSkype Cookiesを、またTelegramから「\\tg」及び「\\tdata」ディレクトリを窃取し「webcallinfo」と同じ方法でアップロードします。
さらに、「webscreen」モジュールは、「webcallinfo」と同様にスクリーンショットを撮影し、アップロードします。
調査からわかったこと:攻撃開始は2022年2月
今回の調査では、攻撃者は2022年2月以降、「LiveHelp100」のWebアプリケーションの攻撃に成功していたことが確認できました。注入されたコードは、以下のURLからJavaScriptをロードするよう指示されていました。
hxxps[:]//analyaze[.]s3amazonbucket[.]com/livechat/dll/tinymce.share.js
調査時において、本URLは前述のものとは異なるJavaScriptのバックドアを返しました。このバックドアは、「WebSocket」を利用してC&Cサーバと通信を行います。被害者の「LiveHelp100 」IDやシステム、ブラウザ等の情報をC&Cサーバに送信することにより通信を開始します。「WebSocket」接続が確立した後バックドアは、ブラウザのCookie、リファラ、そして「被害者のシステム情報をMD5ハッシュとして計算したフィンガープリント値」を送信しています。このバックドアにより、攻撃者はC&Cサーバから受け取った任意のJavaScriptコードを実行することが可能となります。
まとめ
トレンドマイクロが今回行った調査により、「LiveHelp100」に対するサプライチェーン攻撃に関し、以下のことがわかりました。攻撃者は、トロイの木馬に感染したElectron.jsアプリケーションを巧妙に利用し、ペイロードデリバリを可能にするJavaScriptバックドアを起動させていることが判明しました。また、被害者から機密情報を窃取する複数のマルウェアモジュールも発見されました。さらに、「LiveHelp100」ソフトウェアの悪用が、この種の攻撃としては3件目であるという点も注目に値します。
なお、トレンドマイクロでは、同じくElectronフレームワークをベースとした他のアプリケーションの悪用について考察したレポートを2つ発表しています。2022年8月に発行した最初のレポートでは、脅威アクター「Iron Tiger」に関する調査結果を紹介しています。この脅威アクターもElectronベースのチャットソフトウェアをサプライチェーン攻撃のために利用していました。2022年10月に発行した2つ目のレポートでは、「Water Labbu」がElectron.jsベースのアプリケーションを使用し、他の暗号資産詐欺グループから暗号資産を盗み出した方法に焦点を当てています。
IOC(痕跡情報)
IOC(痕跡情報)の全リストは、こちらをご覧ください。
参考記事:
Probing Weaponized Chat Applications Abused in Supply-Chain Attacks
By: Jaromir Horejsi, Joseph C Chen
翻訳:新井 智士(Core Technology Marketing, Trend Micro™ Research)