新種マルウェア「BIOPASS RAT」:ライブストリーミングによるデスクトップ監視などの攻撃手口を解説
トレンドマイクロは、水飲み場型攻撃を経由して中国国内のオンラインギャンブル企業を狙う新種のマルウェアを発見しました。本ブログ記事では、BIOPASS RATの感染チェーン、マルウェアが使用するさまざまなコンポーネント、Winntiグループとの関連性についての詳細な技術的分析を行い、BIOPASS RATをさらに深く掘り下げて解説します。
トレンドマイクロは、水飲み場型攻撃を経由して中国国内のオンラインギャンブル企業を狙う新種のマルウェアを発見しました。水飲み場型攻撃に用いられる改ざんサイトへアクセスしたサイト訪問者は、Adobe Flash PlayerやMicrosoft Silverlightなどの著名なアプリの正規インストーラを偽装したマルウェアローダをダウンロードするよう仕向けられます。このローダを詳しく調べると、商用のペネトレーションテストツール「Cobalt Strike」のシェルコード、あるいはPythonで書かれたドキュメント化されていないバックドア型マルウェアを読み込むことがわかりました。トレンドマイクロは、この新たに確認されたマルウェアを「BIOPASS RAT(Remote Access Trojan)」と命名しました。
BIOPASS RATは、他のマルウェアに見られる基本的な機能として、ファイルシステムの性能評価、リモートデスクトップを悪用した遠隔操作、ファイルの窃取、シェルコマンドの実行などの機能を備えています。また、Webブラウザやインスタント・メッセンジャ(IM)クライアントのデータを詐取することで、被害者の個人情報を危険にさらす能力も備えています。
BIOPASS RATの特に興味深い点は、人気の高いライブストリーミングおよびビデオ録画アプリ「Open Broadcaster Software (OBS) Studio」のフレームワークを悪用して感染端末の画面を盗撮し、Real-Time Messaging Protocol(RTMP)を介してクラウドサービスへのライブストリーミングを確立できることです。さらにこの攻撃活動では、クラウドサービス会社「Alibaba Cloud(Aliyun)社」が提供するオブジェクトストレージサービス(OSS)を悪用してBIOPASS RATのPythonスクリプトをホストすると共に、感染端末から流出させたデータを保存します。
トレンドマイクロは、BIOPASS RATの開発が現在も活発に進められていると推測しています。一例として、弊社が解析中に発見したマーカーの中には、「V2」や「BPSV3」(図13)など、RATコードの異なるバージョンを示すものが確認されています。また、発見されたローダの多くは、BIOPASS RATではなく、デフォルトでCobalt Strikeのシェルコードを読み込むために使用されていました。加えて、BIOPASS RATは、初期化時にCobalt Strikeのシェルコードを読み込むためにスケジュールされたタスクを作成することから、BIOPASS RATの背後にいる攻撃者が依然としてCobalt Strikeに大きく依存していることが見て取れます。
さらにトレンドマイクロは、BIOPASS RATがサイバー犯罪グループ「Winnti(別称:APT41)」と関連していることを示すいくつかの手がかりも発見しました。
本ブログ記事では、BIOPASS RATの感染チェーン、マルウェアが使用するさまざまなコンポーネント、Winntiグループとの関連性についての詳細な技術的分析を行い、BIOPASS RATをさらに深く掘り下げて解説します。
■ 水飲み場型攻撃を用いた感染チェーン
BIOPASS RATの背後にいる攻撃者は、水飲み場型攻撃を実行するために自身でカスタムしたJavaScriptコードを注入して改ざんしたWebサイトを介して最初のマルウェアを配信しようと試みます。トレンドマイクロが確認したほとんどの事例では、攻撃者は通常、標的組織のオンラインチャットサポートページ内に悪意のあるスクリプトを注入して設置します(図2)。
図1:BIOPASS RATのログインパネル
図2:水飲み場型攻撃を実行するために注入されたスクリプトを示す不正コード
注入されたスクリプトは、ポートの一覧にHTTPリクエストを送信することで攻撃対象のホストコンピュータのスキャンを試みます。これらのポートから期待通りの文字列を含むレスポンスを受信すると、このスクリプトは停止します。この手順は、すでに感染している端末への攻撃活動を回避するために設計されていると考えられます。
さらにBIOPASS RATには、ハードコードされたリストから選択されたポートにてローカルホスト上で実行されているHTTPサービスを開く機能があることがわかりました(図3)。この機能により、スクリプトは、サイト訪問者の利用する端末がすでにマルウェアに感染しているかどうかを識別することができます。このスクリプトは、ポートが開いているかどうかをテストし、レスポンスを確認することでこの識別を実行します。
図3:BIOPASS RATが感染しているかどうかを確認するための不正スクリプト
このスクリプトは、サイト訪問者の端末がまだマルウェアに感染していないことを確認すると、元のページのコンテンツを攻撃者が用意した悪意のあるコンテンツに置き換えます。新しいページにはエラーメッセージが表示され、更新版のFlashインストーラ(図4)あるいはSilverlightインストーラ(図5)のいずれかをダウンロードするようサイト訪問者に指示します。これらのインストーラはどちらも悪意のあるローダです。なお、Adobe FlashおよびMicrosoft Silverlightは、それぞれのベンダによってすでに非推奨とされています。これらの更新版の正規インストーラをダウンロードするよう促された場合は、警戒する必要があります。
図4:水飲み場型攻撃に用いられたAdobe Flash Playerを偽装したダウンロードページ
図5:水飲み場型攻撃に用いられたSilverlightを偽装したダウンロードページ
図6:検体「flashplayerpp_install_cn.exe」が持つアンチ仮想マシン検証機能
図7:検体「MTYwOTI1MzEzNQ==.exe」内で感染端末のUI言語が簡体字中国語(zh-CN)に設定されているかどうかを確認するための不正コード
サイト訪問者がこれらのインストーラのダウンロードを開始すると、既知の正規アプリケーションがダウンロードされ、実行されます。コード署名ファイルは、検体「flashplayerpp_install_cn.exe」に見られるように公式Webサイトからダウンロードされるか、攻撃者が管理するアカウント上のAlibaba Cloud OSSにホストされます。
次に、正規の署名済み「vc_redist.x??.exe」であるVisual C++ランタイムおよびPythonランタイムがダウンロードされます。
これらのファイルも同様に、攻撃者が管理するアカウント上のAlibaba Cloud OSSにホストされます。Pythonランタイムは通常、必要な実行ファイルすべてのほかに、Pythonがインストールされていない端末上でPythonスクリプトを実行するために必要なDLLおよびPythonライブラリを含むZIPファイルです。
その後、ログイン時に起動されるスケジュールされたタスクが作成されます(図8)。これらのタスクは、RATコードの異なるバージョンであるBPSバックドアあるいはCobalt Strikeローダを実行することができます。
図8:スケジュールされたタスクから抜粋した不正コード
さらにトレンドマイクロは、抽出されたPythonランタイムへのパスであるパス文字列「ServiceHub」にも気がつきました(図8)。引数を16進数でデコードすると、クラウドから追加のPythonスクリプトをダウンロードするPythonワンライナーを取得することができました。
図9:Alibaba Cloud OSSから追加コンポーネントをダウンロードするためのPythonコード
図10:BIOPASS RATの感染フロー
■ BIOPASS RATモジュールの検証
トレンドマイクロは、解析した検体に応じて作成されるスケジュールされたタスクを複数確認しました。以下の項では、重要なバックドアモジュール(図10)ごとに解析結果をお伝えします。
cdaemonモジュール
使用されているモジュールの1つに「cdaemon」があります。この脅威を調査した時点では、「print(1)」コマンドのみ実行させることができました(図11)。このモジュールの古い検体「cdaemon.txt」は、「c1222」と呼ばれる別のモジュールの動作状況を確認するウォッチドッグである可能性が高いです(図10)。
攻撃者は、クラウド内のcdaemon.txtサービスのコンテンツを置き換えることで上記の動作を変更させることができます。このため、スケジュールされたタスクに用いられる通常の実行コマンドと組み合わせることで、cdaemonタスクはバックドアのように動作することができます。
図11:バックドア「cdaemon.txt」のコンテンツ
c1222モジュール
2つ目に解説するスケジュールされたタスクは「c1222.txt」です。これは事前にダウンロードしたPythonランタイムによって実行されるPythonコードです。このコードは、事前定義されたポートでリッスンしているHTTPサーバを実行します(図12)。HTTPクライアントからのアクセスがあると、このコードはマーカー値を返します。
図12:HTTPサービスをバインドするために定義されたポートの一覧をリバースさせた不正コード
事前定義されたポートにバインドされたHTTPサーバを利用して感染端末にアクセスした後、c1222モジュールはマーカー値を返します。
図13:マーカー「BPSV3」を持つHTTPサービス
図13の他にもトレンドマイクロは、「cs_online」、「online」、「dm_online」などのマーカーを確認しました。このHTTPサービスを開く目的は、「水飲み場型攻撃を用いた感染チェーン」の節で解説したように、感染端末のマーカーとして機能させて、重複感染を防ぐことにあります。c1222スクリプトの最も重要なタスクは、Cobalt Strikeのシェルコードをダウンロードしてデコードし、実行することです。c1222スクリプトはプラットフォームに応じて、シェルコードがエンコードされたファイル(sc3.txt、x64.txt)をダウンロードし、それをデコードします(シェルコードはbase85および16進数でエンコードされています)(図14)。
図14:Cobalt Strikeのシェルコードをデコードした様子
bigモジュール(BIOPASS RAT)
3つ目に解析するスケジュールされたタスク「big.txt」(図10)は、マルウェア「BIOPASS RAT」の実装を担当しています。これはPythonベースのバックドアで、平文で配布されるか、NuitkaやPyArmor、PyInstallerでコンパイルされます。
BIOPASS RATが起動すると、ハードコードされたファイル「%PUBLIC%/20200318」が存在するかどうかを確認します。このファイルは、バックドアのスケジュールされたタスクがインストールされたかどうかを判断するための目印となります。
ファイル「%PUBLIC%/20200318」(目印)が見つからない場合、BIOPASS RATは新しいファイルを作成し、そのファイルに現在のタイムスタンプを書き込みます。その後BIOPASS RATは、ローダによって追加されたスケジュールされたタスクを削除し、表1に記載されている2つの新しいスケジュールされたタスクを追加します。
タスク名 | 動作 |
ServiceHub | パラメータを渡してPythonを実行します。このパラメータは、Cobalt Strikeローダのスクリプト「c1222」モジュールをダウンロードして実行するPythonスクリプトです。 |
ShellExperienceHost | パラメータを渡してPythonを実行します。このパラメータは、BIOPASS RATスクリプト「big」モジュールをダウンロードして実行するPythonスクリプトです。 |
表1:BIOPASS RATによって作成されたスケジュールされたタスク
BIOPASS RATは、ポート番号(43990、43992、53990、33990、33890、48990、12880、22880、32880、42880、52880、62880)のいずれかでリッスンしているHTTPサーバを開くPythonスクリプト「online.txt」を読み込みます(図12)。HTTPサーバは何もせず、リクエストに対して「BPSV3」という文字列を返します(図13)。
その後2台目のHTTPサーバも作成され、上記のポート番号のいずれかでリッスンします。2台目のHTTPサーバは、1台目と同じ動作を行いますが、代わりに「dm_online」という文字列を返します(図15)。これらは同項で解説した通り、感染の目印となります。これらのサーバが確立して実行されると、BIOPASS RATは「%PUBLIC%/BPS/V3/」というフォルダ内に実行ルート・ディレクトリを作成します。
図15:文字列「dm_online」を返す単純なHTTPサーバのスクリプト
BIOPASS RATは、感染端末のユーザ名が「vbccsb」であることを確認した場合、自身を停止します。「vbccsb」は、不審なファイルやURLを分析する無料サービス「VirusTotal」の代替として中国で普及している「ThreatBook Cloud Sandbox」上のデフォルトのユーザ名です。
BIOPASS RATは、ルート・ディレクトリ内に「debug」というファイルが存在することを発見した場合、130秒待ってから実行を継続します。
図16:ユーザ名およびデバッグモードの確認に使用される不正スクリプト
次にBIOPASS RATは、ルート・ディレクトリ内に存在するファイル「bps.key」の読み取りを試みます。このファイルには、遠隔操作(C&C)サーバから割り当てられた被害者IDが含まれています。「bps.key」ファイルが作成されていない場合、BIOPASS RATは、C&Cサーバが被害者IDを割り当てるまで被害者IDにNULL値を設定します。
BIOPASS RATは、初期化の最後に感染端末のシステム情報を収集し、重要な設定情報を含むグローバル環境変数の値を初期化します。この設定情報には、BIOPASS RATのバージョン(当該調査時点ではV2およびV3を確認)、アクセスキー、エンドポイントアドレス、Alibaba Cloud OSSのバケット名、スクリーンショットを撮影するためのユーティリティ「sc.exe」をダウンロードするためのURLが含まれています。
図17:BPSバックドアが使用するグローバル環境変数
BIOPASS RATは、Socket.ioプロトコルを使用してC&Cサーバと通信のやり取りを行います(図10)。C&Cサーバとの通信のやり取りは、ハードコードされたパスワードを使用したAES ECBアルゴリズム、ZLIB圧縮、base85エンコーディングを用いて暗号化されます。
図18および図19は、BIOPASS RATが「join」イベントを送信してC&Cサーバとの通信状況を初期化し、感染端末から収集した暗号化されたデータを付加する様子を示しています。
図18:C&Cサーバに送信されたエンコードされた「join」イベント
図19:C&Cサーバに送信された「join」イベントを弊社でデコードしたもの。IPアドレス、コンピュータ名およびユーザ名、アーキテクチャ、インストールされたセキュリティ対策製品、ジオロケーションなどの属性が含まれていることに注意が必要
BIOPASS RATは、3つのカスタムされたSocket.ioイベントハンドラを登録します。
- 「notice」ハンドラ:
C&Cサーバとの接続状況を確認するために使用されます。BIOPASS RATは、定期的に「notice」イベントをC&Cサーバに送信し、レスポンスとして「notice」イベントも受信した場合、タイムスタンプを記録します。BIOPASS RATは、ハードコードされた閾値期間内に「notice」イベントを受信しない場合、自身を再起動します。 - 「set key」ハンドラ:
C&Cサーバから割り当てられた被害者ID(ランダムな文字列6文字)を受信するために使用されます。被害者IDは、C&Cサーバから送られてくる各コマンドに付加されるほか、クラウドストレージサービス上に詐取したデータを保存する際のフォルダ名としても使用されます。被害者IDは、「bps.key」ファイル内に格納されます。 - 「accept task」ハンドラ:
C&Cサーバから送られてきたコマンドを処理し、実行結果を返すための主要なハンドラです。各コマンドの詳細については、次の節で解説します。
BIOPASS RATがC&Cサーバに参加すると、C&Cサーバは「set key」イベントを用いて被害者IDを割り当て、「ScreenShot」、「SnsInfo」、「PackingTelegram」、「GetBrowsersCookies」、「GetBrowsersLogins」、「GetBrowsersHistories」、「GetBrowsersBookmarks」といったコマンドを含む複数の「accept task」イベントを送信し、BIOPASS RATに感染端末から個人情報を収集するよう指示します。
■ BIOPASS RATが実行するコマンドの詳細について
BIOPASS RATには数多くのコマンドが実装されています。これらのコマンドの概要を表2に示します。また、一部のコマンドの詳細については、以下の項で解説します。
コマンド | 動作 |
Compress_Files | 指定されたファイルやディレクトリをZIPアーカイブに圧縮する |
Decompress_File | 指定されたZIPアーカイブからファイルを抽出する |
AutoRun | 活動持続化を確立するためのスケジュールされたタスクを作成する |
CloseEverything | 「TASKKILL /F /IM Everything.exe」コマンドを用いてEverythingプロセスを強制終了させる |
OpenEverything | voidtoolsからファイル検索ソフト「Everything」をダウンロードして実行する(以下の項で解説) |
CloseFFmpegLive | 「TASKKILL /F /IM ffmpeg.exe」コマンドを用いてFFmpegプロセスを強制終了させる |
OpenFFmpegLive | ビデオ/オーディオコンバータ「FFmpeg」(スクリーンビデオキャプチャ用)をダウンロードして実行する(以下の項で解説) |
DeleteFile | 指定された場所のファイルやディレクトリを削除する |
CreateDir | 指定された場所にディレクトリを作成する |
ShowFiles | ディスクのパーティションを取得したり、指定されたディレクトリをファイル名、ファイルパス、サイズ、作成時刻、変更時刻などの詳細情報と共に一覧表示したりする |
Download_File | URLをダウンロードし、指定された場所にファイルを保存する |
Upload_File | 感染端末から収集したファイルをクラウドストレージにアップロードする |
uUninstall | BIOPASS RATプロセスを強制終了し、インストールされたファイルを削除する |
CloseObsLive | 「TASKKILL /F /IM obs64.exe」コマンドを用いてOBSプロセスを強制終了させる |
Open_Obs_Live | OBS Studioをダウンロードしてライブストリーミングを開始する(以下の項で解説) |
ProcessList | 感染端末の環境上で実行されているプロセスおよびそれらのプロセス識別子(PID)を一覧表示する |
KillProcess | プロセス識別子によって指定されたプロセスをTASKKILLコマンドを用いて強制終了させる |
ScreenShot | スクリーンショットを撮影してクラウドストレージにアップロードする(以下の項で解説) |
Shell | 不正なコマンドやスクリプトを実行する(接頭辞「subprocess」、「python」、「noreturn」、「getversion」、「restart」のいずれかを持つサブコマンド)(以下の項で解説) |
SnsInfo | QQ、WeChat、Aliwangwangディレクトリを一覧表示する(以下の項で解説) |
InstallTcpdump | パケットキャプチャツール「tcpdump」をダウンロードしてインストールする |
PackingTelegram | Telegramの「tdata」ディレクトリを圧縮してクラウドストレージにアップロードする |
CloseProxy | コマンド「TASKKILL / F /IMfrpc.exe」を用いてfrpcプロセスを強制終了させる |
OpenProxy | 「%PUBLIC%」フォルダ内にfrp proxyクライアントをダウンロードしてインストールする |
OpenVnc | リモートデスクトップツール「jsmpeg-vnc」を「%PUBLIC%/ vnc /」フォルダ内にダウンロードしてインストールする |
CloseVnc | コマンド「TASKKILL / F /IMvdwm.exe」を用いてVNCプロセスを強制終了させる |
GetBrowsersCookies | ブラウザに保存されたクッキーファイルを復号し、クラウドストレージにアップロードする(以下の項で解説) |
GetBrowsersLogins | ブラウザに保存されたログインファイルを復号し、クラウドストレージにアップロードする(以下の項で解説) |
GetBrowsersHistories | ブラウザに保存された閲覧履歴ファイルをクラウドストレージにアップロードする |
GetBrowsersBookmarks | ブラウザに保存されたブックマークファイルをクラウドストレージにアップロードする |
表2:BIOPASS RATが実行する不正なコマンド
コマンド | 動作 |
Compress_Files | 指定されたファイルやディレクトリをZIPアーカイブに圧縮する |
Decompress_File | 指定されたZIPアーカイブからファイルを抽出する |
AutoRun | 活動持続化を確立するためのスケジュールされたタスクを作成する |
CloseEverything | 「TASKKILL /F /IM Everything.exe」コマンドを用いてEverythingプロセスを強制終了させる |
OpenEverything | voidtoolsからファイル検索ソフト「Everything」をダウンロードして実行する(以下の項で解説) |
CloseFFmpegLive | 「TASKKILL /F /IM ffmpeg.exe」コマンドを用いてFFmpegプロセスを強制終了させる |
OpenFFmpegLive | ビデオ/オーディオコンバータ「FFmpeg」(スクリーンビデオキャプチャ用)をダウンロードして実行する(以下の項で解説) |
DeleteFile | 指定された場所のファイルやディレクトリを削除する |
CreateDir | 指定された場所にディレクトリを作成する |
ShowFiles | ディスクのパーティションを取得したり、指定されたディレクトリをファイル名、ファイルパス、サイズ、作成時刻、変更時刻などの詳細情報と共に一覧表示したりする |
Download_File | URLをダウンロードし、指定された場所にファイルを保存する |
Upload_File | 感染端末から収集したファイルをクラウドストレージにアップロードする |
uUninstall | BIOPASS RATプロセスを強制終了し、インストールされたファイルを削除する |
CloseObsLive | 「TASKKILL /F /IM obs64.exe」コマンドを用いてOBSプロセスを強制終了させる |
Open_Obs_Live | OBS Studioをダウンロードしてライブストリーミングを開始する(以下の項で解説) |
ProcessList | 感染端末の環境上で実行されているプロセスおよびそれらのプロセス識別子(PID)を一覧表示する |
KillProcess | プロセス識別子によって指定されたプロセスをTASKKILLコマンドを用いて強制終了させる |
ScreenShot | スクリーンショットを撮影してクラウドストレージにアップロードする(以下の項で解説) |
Shell | 不正なコマンドやスクリプトを実行する(接頭辞「subprocess」、「python」、「noreturn」、「getversion」、「restart」のいずれかを持つサブコマンド)(以下の項で解説) |
SnsInfo | QQ、WeChat、Aliwangwangディレクトリを一覧表示する(以下の項で解説) |
InstallTcpdump | パケットキャプチャツール「tcpdump」をダウンロードしてインストールする |
PackingTelegram | Telegramの「tdata」ディレクトリを圧縮してクラウドストレージにアップロードする |
CloseProxy | コマンド「TASKKILL / F /IMfrpc.exe」を用いてfrpcプロセスを強制終了させる |
OpenProxy | 「%PUBLIC%」フォルダ内にfrp proxyクライアントをダウンロードしてインストールする |
OpenVnc | リモートデスクトップツール「jsmpeg-vnc」を「%PUBLIC%/ vnc /」フォルダ内にダウンロードしてインストールする |
CloseVnc | コマンド「TASKKILL / F /IMvdwm.exe」を用いてVNCプロセスを強制終了させる |
GetBrowsersCookies | ブラウザに保存されたクッキーファイルを復号し、クラウドストレージにアップロードする(以下の項で解説) |
GetBrowsersLogins | ブラウザに保存されたログインファイルを復号し、クラウドストレージにアップロードする(以下の項で解説) |
GetBrowsersHistories | ブラウザに保存された閲覧履歴ファイルをクラウドストレージにアップロードする |
GetBrowsersBookmarks | ブラウザに保存されたブックマークファイルをクラウドストレージにアップロードする |
表2:BIOPASS RATが実行する不正なコマンド
OpenEverythingコマンド
BIOPASS RATは、「%TEMP%」フォルダ内で「Everything」バイナリが見つからない場合、「Everything」ファイルをダウンロードします。次に、設定ファイル内に存在するHTTPサーバのポート番号を変更し、Everythingプロセスを起動します。これによりHTTPサーバが開き、攻撃者は感染端末のファイルシステムにアクセスできるようになります。
OpenFFmpegLiveコマンド
BIOPASS RATは、感染端末上でFFmpegファイルが見つからない場合、FFmpegファイルをダウンロードします。次に、FFmpegプロセスを起動し、被害者のデスクトップ画像をクラウドでのRTMPライブストリーミングに流します。これにより攻撃者は、関連するRTMPアドレスに接続してライブストリーミングにより、感染端末上の操作を監視できるようになります。
Open_obs_Liveコマンド
BIOPASS RATは、ルート・ディレクトリ内でOBSフォルダおよび設定ファイルが見つからない場合、OBS Studioファイルをダウンロードします。次に、OBSの基本設定およびRTMP設定を書き込むと、OBSプロセスを起動して、被害者のデスクトップをクラウドでのRTMPライブストリーミングに流します。これにより攻撃者は、関連するRTMPアドレスに接続してストリーミングにより、感染端末上の操作を監視できるようになります。
図20:OBS Studioのダウンロード、設定の準備、プロセスの開始に用いられる不正スクリプト
Screenshotコマンド
BIOPASS RATは、ルート・ディレクトリ内でスクリーンショットツール「screenshot-cmd」が見つからない場合、同ツールをダウンロードします。BIOPASS RATは、このツールを悪用して感染端末のスクリーンショットを撮影し、ファイル名にランダムな数字を用いたPNGファイルとして保存します。その後BIOPASS RATは、スクリーンショットファイルをクラウドストレージにアップロードします。
Shellコマンド
BIOPASS RATは、いくつかの方法を用いてシェルコマンドあるいはスクリプトを実行します。「Shell」コマンドは、Python関数「win32api.ShellExecute」を用いてコマンドを実行し、その実行結果をC&Cサーバに返すようBIOPASS RATに指示します。コマンド実行には60秒のタイムアウトが適用されます。
コマンドの接頭辞が以下のいずれかである場合、特定の動作を実行します。
- 「subprocess」:Python関数「subprocess.Popen」を用いてシステムコマンドを実行します。
- 「python」:コマンドと共に配信されるPythonスクリプトを実行します。
- 「noreturn」:実行結果を待たずにPython関数「win32api.ShellExecute」を用いてシステムコマンドを実行します。
- 「getversion」:文字列「20200202」を返します。
- 「restart」:自身のプロセスを強制終了し、スケジュールされた悪意のあるタスクを介して再起動します。
SnsInfoコマンド
このコマンドは、WeChat、QQ、Aliwangwangを含むいくつかの人気インスタントメッセージングアプリケーションのインストールディレクトリをリストアップして、これらの情報をC&Cサーバに返します。図21および図22は、「SnsInfo」コマンドを実行してメッセンジャを列挙した結果を示しています。
図21:C&Cサーバに送信されたエンコードされた「SUBMIT RESULT」コマンド
図22:C&Cサーバに送信された「SUBMIT RESULT」コマンドを弊社でデコードしたもの
図22で確認できる中国のメッセンジャアプリケーション(QQ、Wechat、Wangwang)はいずれもトレンドマイクロのテスト端末上にはインストールされませんでした。
GetBrowsersCookiesコマンド
このコマンドは、ブラウザに保存されたクッキー情報を窃取するために設計されています。このコマンドは、Google Chromeベースのブラウザで用いられる秘密鍵(AES)を取得するために、「Local State」ファイルを読み込みます。コマンドに提供されるさまざまな引数「type」に応じて、このコマンドは異なる動作を実行します。
引数「type」の値が「Chrome」の場合、秘密鍵(AES)あるいはDPAPI(Chromeのバージョンが80以前の場合)を利用してクッキーファイルを復号します。復号された結果はC&Cサーバに送信されます。
図23:AESあるいはDPAPIを用いてChromeのクッキーファイルを復号するための不正スクリプト
引数「type」の値が「File」の場合、このコマンドは、クッキーファイルをクラウドストレージに直接アップロードします。トレンドマイクロが受信したコマンドによると、攻撃対象となるブラウザは「Google Chrome」「Microsoft Edge Beta」「360 Chrome」「QQ Browser」「2345 Explorer」「Sogou Explorer」「360 Safe Browser」であることがわかりました。
図24:Sogou Explorerを攻撃対象としたコマンドを示す不正コード
GetBrowsersLoginsコマンド
このコマンドは「GetBrowsersCookies」とほぼ同じ機能を備えていますが、ブラウザの「Login Data」ファイルを攻撃対象としています。
■ BIOPASS RATに関するその他の調査結果
BIOPASS RATには実装されていませんが、Cobalt Strikeにより感染した端末内では攻撃者によって展開されたPythonで書かれた2つの追加プラグイン(「getwechatdb」および「xss_spoof」)が確認されました。
「getwechatdb」スクリプトは、WeChatを利用するWindowsクライアントからチャット履歴を流出させるために用いられます。このスクリプトは、インストールされているWeChatクライアントのバージョンを検出し、デコードキーおよびユーザIDを取得します。また、事前定義されたオフセットの一覧を使用して、デコードキーおよびユーザIDが埋め込まれている場所を特定します。この一覧は、メッセージクライアントのメモリ・オフセットのバージョンを36種類サポートしています。
その後スクリプトは、WeChatフォルダ内の「MicroMsg.db」を含むデータベースファイルをクラウドストレージにアップロードします。これらのデータベースファイルは、チャット履歴を保存するために使用されます。最後にこのスクリプトは、クライアントIDおよび攻撃者が詐取したチャット履歴のデータベースファイルを復号するための復号キーを出力します。
図25:異なるバージョンのWeChatから情報を取得することを目的とした事前定義されたメモリ・オフセットの一覧
図26:WeChatのチャット・データベースファイルの流出に用いられた不正スクリプト
もう1つのプラグインである「xss_spoof」は、複数のPythonスクリプトを含むアーカイブです。このスクリプトは、クロスサイトスクリプティング(XSS)攻撃によるWebサーバへの感染活動を実行するために設計されています。このプラグインは、Windows上でネットワークトラフィックを盗聴・操作するために使用されるWinDivertパッケージを利用して、感染端末に対するWebサーバからのレスポンスに悪意のあるスクリプトを注入することができます。
このスクリプトは、ポート番号80に送信されるHTTP GETリクエストを傍受します。「ignore」一覧を利用してURLのファイル拡張子をフィルタリングし、JavaScriptやHTMLではないリソースの操作を回避します。その後スクリプトは、元のJavaScriptあるいはHTMLコンテンツを改ざんし、サイト訪問者に配信します。
図27:改ざんサイトの元のスクリプトを置き換えるために用いられるJavaScriptペイロード
配信されたスクリプトは、「水飲み場型攻撃を用いた感染チェーン」の節で解説した悪意のあるスクリプトとほぼ同じものです。このスクリプトは、偽の更新版Webページを表示している間、攻撃対象の端末がBIOPASS RATに感染しているかどうかを判断するためにローカルホストをスキャンして確認を行います。攻撃者は最初にWebサーバを侵害し、次に追加プラグインの1つである「xss_spoof」を実行して拡散させたと考えられます。
図28:WinDivertでトラフィックを操作するために使用された主要な不正スクリプト
■ サイバー犯罪グループ「Winnti」との潜在的なつながり
トレンドマイクロは、BIOPASS RATとWinntiグループの間にいくつかのつながりがあることを発見しました。
1.トレンドマイクロは、多くのBIOPASS RATローダバイナリが2つの有効な証明書で署名されていることを確認しました。これらの証明書は、韓国や台湾のゲームスタジオから窃取されたものである可能性が高いです。Winntiグループは、以前にもゲームスタジオから詐取した証明書を悪用してマルウェアを署名していたことがよく知られています。
証明書の押印 | 有効開始日時 | 有効期限 |
EFB70718BC00393A01694F255A28E30E9D2142A4 | 2019年1月2日午前12時 | 2021年3月2日午後11時59分 |
8CE020AA874902C532B9911A4DCA8EFFA627DC80 | 2018年9月6日午前12時 | 2021年10月5日午後11時59分 |
表3:詐取された証明書から取得した情報
2.トレンドマイクロは、同じ証明書で署名されたサーバ側の亜種であるトロイの木馬型マルウェア「Derusbi」(トレンドマイクロでは「Trojan.Win64.DERUSBI.C」として検出)を発見しました。
Derusbiは、複数のAPT(Advanced Persistent Threat)グループが攻撃活動に利用していることで知られています。加えてサーバ側で確認された亜種は、Winntiグループがマルウェアローダとして使用していることがセキュリティベンダであるKasperskyによって指摘されています。
3.さらにBIOPASS RATローダへと誘導するURLが埋め込まれた興味深いCobalt Strikeローダの検体(Browser_plugin (8).exe)(トレンドマイクロでは「Trojan.Win64.COBEACON.SUX」として検出)を発見しました。しかしこのURLは今回の攻撃活動で使用されておらず、誤ってローダ内に残されたものと考えられます。このファイルについては、モンゴルの大手認証局(Cerftification Authority)への攻撃活動との関連性がセキュリティベンダであるAvastによって報告されています。
「C:Users\test\Desktop\fishmaster\x64\Release\fishmaster.pdb」というプログラム・データベース(PDB)文字列を持つCobalt Strikeローダは、C&Cサーバ「download[.]google-images[.]ml」に接続します。これらのドメインおよびPDB文字列は、セキュリティベンダであるNTTによる最近の報告書で言及されており、Winntiグループに帰属しているとしています。
これらの関連性から、BIOPASS RATをWinntiグループに関連付けることができる一方で、BIOPASS RATとトレンドマイクロが追跡調査しているWinntiグループによる現在の活動との間で攻撃対象に齟齬が生じているため、両者の関連付けはより困難になっています。
■ BIOPASS RATの被害に遭わないためには
BIOPASS RATは、Pythonスクリプトとして実装された高度なマルウェアであり、感染端末における活動持続化を確立する方法として、スケジュールされたタスクを利用するなど、多くの機能を備えています。このマルウェアは、一般に公開されているツールやクラウドサービスを悪用して不正活動を実行します。特に、中国本土で主に利用されているWebブラウザやインスタント・メッセンジャを標的にして、個人情報を窃取する機能が多数実装されています。
このマルウェアローダは、改ざんされたサイト上で更新版の正規インストーラを偽装した実行ファイルとして配信されていました。これらのアプリケーションをダウンロードするよう促された場合は、特に注意を向ける必要があります。本記事で解説したような攻撃被害を回避するためにも、アプリケーションをダウンロードする際は、信頼できる開発者または公式サイトからのみダウンロードすることが推奨されます。
■ トレンドマイクロの対策
法人向けのエンドポイント製品「Trend Micro Apex One™」は事前防御(EPP)と事後対応(EDR)を統合し、高い防御力を実現します。また、クロスジェネレーション(XGen)セキュリティアプローチにより、高い検出率と誤検出/過検出の回避を両立しつつ、コンピュータへの負荷軽減を実現します。
「Trend Micro XDR」は高度な分析と人工知能(AI)技術を使用して、エンドポイント、メール、ネットワークなどのアラートを相関させ、一つの防御ポイントの情報だけではわからないような脅威を可視化し、深刻度のレベルに応じて優先順位を付けます。これにより、企業は攻撃がどのように開始され、どの程度拡散しているかを迅速に把握でき、被害を最小化することができます。
なお、トレンドマイクロでは既にAlibabaに対し、不正使用に関する報告書を提出しています。ただし本記事編集時点(2021年8月6日)ではまだ回答を得られていません。
参考記事:
- 「BIOPASS RAT: New Malware Sniffs Victims via Live Streaming」
by Joseph C Chen, Kenney Lu, Jaromir Horejsi, Gloria Chen, Trend Micro
記事構成:岡本 勝之(セキュリティエバンジェリスト)
高橋 哲朗(スレットマーケティンググループ)
翻訳:益見 和宏(Core Technology Marketing, Trend Micro™ Research)