掲載日:2024/05/31

Raspberry RobinがWindowsスクリプトファイルを通じて拡散中

※ 本ブログは、2024年4月10日にHP WOLF SECURITY BLOGにポストされた Raspberry Robin Now Spreading Through Windows Script Filesの日本語訳です。

 

2021年後半に初めて確認されたRaspberry Robinは、当初はテクノロジー企業や製造業を標的としたWindowsワームでした。その後、企業が最も頻繁に直面する脅威の 1 つに数えられるようになりました。3月、HPの脅威リサーチチームは、サイバー犯罪者によるRaspberry Robinの拡散方法の変化を確認しました。このマルウェアは現在、Windows スクリプトファイル(WSF)を介して配信されています。このスクリプトは高度に難読化されており、さまざまなアンチ解析技術が使用されているため、マルウェアの検知を回避することができます。歴史的に、Raspberry RobinはUSBドライブのようなリムーバブルメディアを通じて拡散することが知られていましたが、配信者は他の初期感染ファイルタイプでも実験を行っています。この記事では、Raspberry Robinの背景、新しい感染方法、ダウンローダースクリプトの解析方法について説明します。

 

RASPBERRY ROBINとは?

Raspberry Robinは、検知を回避し、サンドボックスを欺き、マルウェアを理解しようとするセキュリティチームの動きを鈍らせるために、難読化とアンチ解析技術を駆使していることで知られています。感染後マルウェアはTor経由でコマンド&コントロール(C2)サーバと通信します。Raspberry Robinは追加のペイロードをダウンロードして実行する機能を備えているため、脅威アクターが他の悪意のあるファイルを配信するための足掛かりとなります。このマルウェアは、SocGholishCobalt StrikeIcedIDBumbleBeeTruebotなどのファミリーを配信するために使用されているだけでなく、ランサムウェアの前兆としても使用されています。

 

初期感染手法の進化

2021年以降、Raspberry Robinを拡散する脅威アクターは、エンドポイントを感染させるためにさまざまな手法を使用しています:

 

  • 悪意のある Windows ショートカットファイル (.lnk) を含む USB デバイス。このショートカットファイルは、msiexec.exeを使用してWindowsインストーラコマンドを実行し(T1218.007)、侵害されたQNAPネットワーク接続ストレージデバイスからペイロードをダウンロード(T1584.004)します。
  • Discord上でホストされている(T1102)アーカイブファイル(RAR)。各ARファイルには、EXEとDLLファイルが含まれています。EXEは正規の署名付きバイナリで、DLLサイドローディング(T1574.002)を使用して悪意のあるペイロードDLLを読み込み、実行します。
  • 被害者のWebブラウザを使用してダウンロードされた7-Zip(.7z)アーカイブファイル。各アーカイブには、PCをRaspberry Robinに感染させる悪意のあるWindowsインストーラ(.msi)パッケージ(T1218.007)が含まれています。
  • 悪意のある広告 (T1583.008) 、クリックするとDiscord でホストされている(T1102) 悪意のある ZIP ファイルがダウンロードされ、Raspberry Robin に感染します。

 

RASPBERRY ROBINの最新感染手法:Windowsスクリプトファイル

Raspberry Robinは、以前からUSBワームとして拡散することが知られていました。今年の初めは、サイバー犯罪者はこのマルウェアをWebダウンロード経由でアーカイブファイルを通じて拡散していました。しかし、2024年3月上旬以降のキャンペーンでは、配信者がアーカイブファイルをWindows Script Files(.wsf)へと変更しました。これらのファイルは、Windows内のタスクを自動化するために管理者や正規ソフトウェアによって広く使用されていますが、攻撃者によって悪用される可能性(T1059) もあります。WSFファイル形式は、Windowsオペレーティングシステムに組み込まれているWindows Script Host コンポーネントによって解釈される、JScriptやVBScriptなどのスクリプト言語をサポートしています。

Windows Script Filesは、攻撃者が管理するさまざまな悪意のあるドメインやサブドメインを通じてダウンロードされます。脅威アクターがどのようにして悪意のあるURLにユーザーを誘導しているかは不明です。しかしながら、スパムやマルバタイジング(悪意のある広告)キャンペーンを経由している可能性があります。

スクリプトファイルはダウンローダーとして動作します。Raspberry Robin DLLと同様に、このスクリプトはさまざまなアンチ解析技術や仮想マシン(VM)検知技術を使用します。最終的なペイロードがダウンロードされ実行されるのは、これらすべての評価ステップによって、マルウェアがサンドボックス内ではなく、実際のエンドユーザーデバイス上で実行されていることが示された場合のみです。スクリプトは高度に難読化されています。分析時点では、VirusTotal上のどのアンチウイルススキャナーによっても悪意のあるものとして分類されておらず(図1)、このマルウェアの回避性が実証されています。

 VirusTotalでの検知率が0%のRaspberry Robin WSFダウンローダー 図1 - VirusTotalでの検知率が0%のRaspberry Robin WSFダウンローダー

 

 

WSFダウンローダーのテクニカル解析

Windowsスクリプトファイルをテキストエディタで開くと、ほとんどの文字は読めません。これらのジャンク文字は、実際のスクリプトを隠すための目くらましとして機能し、ファイルを検査する人にスクリプトファイルではないことを確信させる可能性もあります。

Raspberry Robin WSFダウンローダーのジャンク文字 図2 - Raspberry Robin WSFダウンローダーのジャンク文字

 

ファイルのさらに後ろの方には、ファイルの開始を定義する開始タグがあります。同様にファイルの終わりには終了タグがあり、その後にさらにジャンク文字が続きます。

開始タグ 図3 - 開始タグ

 

実際のスクリプトの始まりは、数行先にあります。これは変数の宣言から始まります。スクリプトの中では、個々のプログラムステップをデコードするために配列が繰り返し使われています。

プログラムのデコードに使用される配列 図4 - プログラムのデコードに使用される配列

 

スクリプトは高度に難読化されており、その機能をすぐに明らかにすることはできません。使用されるすべての関数と変数は、実行時に図4に示す配列を使用した関数によってエンコードおよびデコードされます。さらに、プログラムの制御フローも難読化されています。このケースでは、攻撃者はswitch case文を含むwhileループを使用しています。プログラムの流れは動的に計算される整数の配列によって定義されます。

switch case文を使ったwhileループによる制御フローの例 図5 - switch case文を使ったwhileループによる制御フローの例

 

各 switch case 文には、関連するコードシーケンスが数個含まれていることがわかりました。一般的に、2つのシーケンスがオブジェクトのenumeratorによる繰り返し処理に使用され、それを評価するために3つ目のシーケンスが使用されます。

最初に、マルウェアはオペレーティング システムと対話できる WScript シェルオブジェクトを生成し、スクリプトの進行に合わせて何度も使用します。

WScript シェルオブジェクトの生成 図 6 - WScript シェルオブジェクトの生成

 

最初の耐解析技術では、スクリプトがユーザーのデスクトップにあるかどうかをチェックします。該当する場合、スクリプトは終了します。

ファイルがデスクトップにあるかどうかのチェック 図7 - ファイルがデスクトップにあるかどうかのチェック

 

スクリプトの実行が続行されると、SWbemLocator オブジェクトが作成されます。このオブジェクトにより、スクリプトは Windows Management Instrumentation (WMI) にアクセスできるようになり、さまざまなシステム情報を照会できるようになります。

SWbemLocatorオブジェクトの生成 図8 - SWbemLocatorオブジェクトの生成
ConnectServer メソッドを使い WMI ネームスペースに接続 図 9 - ConnectServer メソッドを使い WMI ネームスペースに接続

 

スクリプトは、このオブジェクトを利用して以下のチェックを実行し、それらが真であればスクリプトを終了します:

 

1.スクリプトは、オペレーティングシステムのビルド番号が17063より小さいかどうかをチェックします。Windows 10ビルド17063は、2017年12月にリリースされたInsider Previewビルドです。

OSビルド番号のチェック 図10 - OSビルド番号のチェック
 
2. 次に、スクリプトはプロセッサがエンドユーザーデバイス上ではなく、仮想マシン内またはサーバー上で実行されていることを示すパターンに一致するかどうかをチェックします。(/xEoN|bROAd|qEmu|kVM|EPyC/i)
プロセッサのベンダーとタイプのチェック 図11 - プロセッサのベンダーとタイプのチェック

 

3. ビデオコントローラがパターン「/vmBUs|040515ad|11001aF4/i 」に一致する場合、感染したクライアントが仮想化されていることを示します。Raspberry Robinスクリプトは、Hyper-V、VMWare、VirtualBoxをチェックします。

ビデオコントローラーのチェック 図12 - ビデオコントローラーのチェック

 

4. スクリプトは、WMIを使用して "Win32_PerfFormattedData_Counters_ThermalZoneInformation" クラスにアクセスし、CPUの温度をチェックします。仮想化されていないデバイスでは温度が0より大きくなるため、システムが仮想化されているかどうかを確認する簡単なチェックになります。

CPU温度のチェック 図13 - CPU温度のチェック

 

5. スクリプトは、ネットワークカードのMACアドレスをチェックすることで、実行環境が仮想化されているかどうかを識別する古典的な方法も利用します。スクリプトは、以下の仮想化ソリューションの検知を試みます:

  • Hyper-V
  • KVM
  • Parallels, Inc.
  • Oracle Virtual Iron
  • Oracle VM Server
  • QEMU
  • VMWare
  • VirtualBox
  • Virtual PC
  • Xen
特定のパターンに対するネットワークカードのベンダーチェック 図14 - 特定のパターンに対するネットワークカードのベンダーチェック

 

6. 最後の WMI チェックとして、実行中のプロセスをリストアップし、既知のアンチウイルス プロセスのリストと比較します。マルウェアは、以下のセキュリティソフトウェアベンダーをチェックします:

  • Kaspersky
  • ESET
  • Avast
  • Avira
  • Check Point
  • Bitdefender
特定のアンチウイルスプロセスのチェック 図15 - 特定のアンチウイルスプロセスのチェック

 

これらの手順を実行すると、スクリプトのVM検知は完了します。ただし、このスクリプトは、マルウェアが実際の被害者デバイス上で実行されることを保証するだけでなく、解析されないようにするための対策も施しています。難読化により、スクリプトの解析は少々難しくなり時間がかかります。

スクリプトには未使用のコードが大量に含まれているため、解析を高速化するための1つの戦略として、実際に使用されているコードを特定し、未使用の部分を削除する方法があります。こうすることで、スクリプトが明瞭になり、解析者は重要なコード シーケンスに集中できるようになります。スクリプトの作成者は、このことを承知で、使用されていないコードの途中に目立たない変数代入を配置しました。0に設定された変数代入を誤って削除すると、スクリプトが終了します。if文で変数が設定されているかどうかをチェックし、設定されていればスクリプトは停止します。

未使用コード中に隠れている変数のチェック 図16 - 未使用コード中に隠れている変数のチェック

 

このため、スクリプトをリファクタリングして解析する際には、その後も実行できるように注意する必要があります。さらに、マルウェアは2つのコマンド ライン引数により、図17に示すコード シーケンスでスクリプトをリスタートするため、動的解析にも注意が必要です。スクリプトをデバッガで解析すると、マルウェアはこの方法を利用して「ブレークアウト」し、新しいプロセスが開始されます。

コマンドライン引数でスクリプトを再起動するコードシーケンス 図17 - コマンドライン引数でスクリプトを再起動するコードシーケンス

 

スクリプトがリスタートすると、スクリプトは指定された引数を識別して実行を継続します。次に、コマンドによってスクリプトがディスクから削除されます。(図18)この時点で、実行中のコードはメモリ上にのみ存在します。スクリプトのバックアップ コピーを持っているか、削除コマンドが実行される前に中断することが重要です。

スクリプトのハードディスクからの削除 図18 - スクリプトのハードディスクからの削除

 

前のステップで、スクリプトは6つのアンチウイルスベンダーに関連するプロセスをチェックし、見つかった場合は実行を停止します。このことから、このスクリプトは、Microsoft Defenderによって保護されているエンドポイントで実行されている可能性が高いと考えられます。検知を回避するため、スクリプトは、メインドライブ全体をアンチウイルススキャンから除外する例外を Microsoft Defender に追加します。

Microsoft Defenderに除外設定を追加 図19 - Microsoft Defenderに除外設定を追加

 

これらのすべてのチェックにより、マルウェアが実際のエンドユーザーデバイス上で実行されていることが脅威アクターに保証されます。さらに、Defenderの除外設定は、後続のマルウェアのステージが検知される可能性を大幅に低下させます。スクリプトは、curlコマンドを使用してWebからRaspberry Robin DLLをダウンロードし、ローカルのAppDataフォルダに格納します。

Raspberry Robin DLLをAppDataフォルダにダウンロードするコマンド 図20 - Raspberry Robin DLLをAppDataフォルダにダウンロードするコマンド

 

リクエストは、通常のように URL パスを利用してドメインに識別されるのではなく、Cookie によって識別されます。これにより、Webサーバーはリクエストがダウンローダースクリプトから発信されたものであることを確認できます。こうすることで、マルウェアの運営者は、Raspberry Robinを解析しようとする研究者へのサンプルの流出を減らすことができます。

Raspberry Robin DLLを実行するコマンド 図21 - Raspberry Robin DLLを実行するコマンド

 

最後に、ファイルの拡張子を「.dll」に変更し、msiexecを利用して実行を行います。これにより、Raspberry Robinマルウェアが起動し、最終的に有効なペイロードが実行されるまで、耐解析およびVM検知技術の追加シーケンスを実行します。

 

結論

この最近の活動は、Raspberry Robinの配布方法における一連の変遷の中で最新のものです。Raspberry RobinはUSBドライブを介して拡散することで知られていますが、脅威アクターはその目的を達成するために、Webダウンロードなどの異なる感染ベクトルを使用しています。WSFダウンローダーは難読化されており、さまざまな耐解析および耐VM技術を使用しているため、マルウェアの検知を回避し、解析を遅らせることができます。これは、Raspberry Robinが人間が操作するランサムウェアの前兆として使用されてきたことを考えると、特に懸念すべきことです。このマルウェアに感染チェーンの早い段階で対処することは、セキュリティチームにとって最優先事項です。

 

侵害の痕跡(IoC)

セキュリティコミュニティがこの脅威を検知し緩和するのに役立つように、HP Threat Research GitHub で以下のアーティファクトを公開しています:

 

Raspberry Robin WSF キャンペーン活動に関連する IOC

Raspberry Robin WSF ダウンローダーを検知するYARAルール

Raspberry Robin WSF ダウンローダーの解析を自動化する Python スクリプト

 

Author : Patrick Schläpfer

監訳:日本HP