※ 本ブログは、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は、検知を回避し、サンドボックスを欺き、マルウェアを理解しようとするセキュリティチームの動きを鈍らせるために、難読化とアンチ解析技術を駆使していることで知られています。感染後マルウェアはTor経由でコマンド&コントロール(C2)サーバと通信します。Raspberry Robinは追加のペイロードをダウンロードして実行する機能を備えているため、脅威アクターが他の悪意のあるファイルを配信するための足掛かりとなります。このマルウェアは、SocGholish、Cobalt Strike、IcedID、BumbleBee、Truebotなどのファミリーを配信するために使用されているだけでなく、ランサムウェアの前兆としても使用されています。
2021年以降、Raspberry Robinを拡散する脅威アクターは、エンドポイントを感染させるためにさまざまな手法を使用しています:
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)、このマルウェアの回避性が実証されています。
Windowsスクリプトファイルをテキストエディタで開くと、ほとんどの文字は読めません。これらのジャンク文字は、実際のスクリプトを隠すための目くらましとして機能し、ファイルを検査する人にスクリプトファイルではないことを確信させる可能性もあります。
ファイルのさらに後ろの方には、ファイルの開始を定義する開始タグがあります。同様にファイルの終わりには終了タグがあり、その後にさらにジャンク文字が続きます。
実際のスクリプトの始まりは、数行先にあります。これは変数の宣言から始まります。スクリプトの中では、個々のプログラムステップをデコードするために配列が繰り返し使われています。
スクリプトは高度に難読化されており、その機能をすぐに明らかにすることはできません。使用されるすべての関数と変数は、実行時に図4に示す配列を使用した関数によってエンコードおよびデコードされます。さらに、プログラムの制御フローも難読化されています。このケースでは、攻撃者はswitch case文を含むwhileループを使用しています。プログラムの流れは動的に計算される整数の配列によって定義されます。
各 switch case 文には、関連するコードシーケンスが数個含まれていることがわかりました。一般的に、2つのシーケンスがオブジェクトのenumeratorによる繰り返し処理に使用され、それを評価するために3つ目のシーケンスが使用されます。
最初に、マルウェアはオペレーティング システムと対話できる WScript シェルオブジェクトを生成し、スクリプトの進行に合わせて何度も使用します。
最初の耐解析技術では、スクリプトがユーザーのデスクトップにあるかどうかをチェックします。該当する場合、スクリプトは終了します。
スクリプトの実行が続行されると、SWbemLocator オブジェクトが作成されます。このオブジェクトにより、スクリプトは Windows Management Instrumentation (WMI) にアクセスできるようになり、さまざまなシステム情報を照会できるようになります。
スクリプトは、このオブジェクトを利用して以下のチェックを実行し、それらが真であればスクリプトを終了します:
1.スクリプトは、オペレーティングシステムのビルド番号が17063より小さいかどうかをチェックします。Windows 10ビルド17063は、2017年12月にリリースされたInsider Previewビルドです。
3. ビデオコントローラがパターン「/vmBUs|040515ad|11001aF4/i 」に一致する場合、感染したクライアントが仮想化されていることを示します。Raspberry Robinスクリプトは、Hyper-V、VMWare、VirtualBoxをチェックします。
4. スクリプトは、WMIを使用して "Win32_PerfFormattedData_Counters_ThermalZoneInformation" クラスにアクセスし、CPUの温度をチェックします。仮想化されていないデバイスでは温度が0より大きくなるため、システムが仮想化されているかどうかを確認する簡単なチェックになります。
5. スクリプトは、ネットワークカードのMACアドレスをチェックすることで、実行環境が仮想化されているかどうかを識別する古典的な方法も利用します。スクリプトは、以下の仮想化ソリューションの検知を試みます:
6. 最後の WMI チェックとして、実行中のプロセスをリストアップし、既知のアンチウイルス プロセスのリストと比較します。マルウェアは、以下のセキュリティソフトウェアベンダーをチェックします:
これらの手順を実行すると、スクリプトのVM検知は完了します。ただし、このスクリプトは、マルウェアが実際の被害者デバイス上で実行されることを保証するだけでなく、解析されないようにするための対策も施しています。難読化により、スクリプトの解析は少々難しくなり時間がかかります。
スクリプトには未使用のコードが大量に含まれているため、解析を高速化するための1つの戦略として、実際に使用されているコードを特定し、未使用の部分を削除する方法があります。こうすることで、スクリプトが明瞭になり、解析者は重要なコード シーケンスに集中できるようになります。スクリプトの作成者は、このことを承知で、使用されていないコードの途中に目立たない変数代入を配置しました。0に設定された変数代入を誤って削除すると、スクリプトが終了します。if文で変数が設定されているかどうかをチェックし、設定されていればスクリプトは停止します。
このため、スクリプトをリファクタリングして解析する際には、その後も実行できるように注意する必要があります。さらに、マルウェアは2つのコマンド ライン引数により、図17に示すコード シーケンスでスクリプトをリスタートするため、動的解析にも注意が必要です。スクリプトをデバッガで解析すると、マルウェアはこの方法を利用して「ブレークアウト」し、新しいプロセスが開始されます。
スクリプトがリスタートすると、スクリプトは指定された引数を識別して実行を継続します。次に、コマンドによってスクリプトがディスクから削除されます。(図18)この時点で、実行中のコードはメモリ上にのみ存在します。スクリプトのバックアップ コピーを持っているか、削除コマンドが実行される前に中断することが重要です。
前のステップで、スクリプトは6つのアンチウイルスベンダーに関連するプロセスをチェックし、見つかった場合は実行を停止します。このことから、このスクリプトは、Microsoft Defenderによって保護されているエンドポイントで実行されている可能性が高いと考えられます。検知を回避するため、スクリプトは、メインドライブ全体をアンチウイルススキャンから除外する例外を Microsoft Defender に追加します。
これらのすべてのチェックにより、マルウェアが実際のエンドユーザーデバイス上で実行されていることが脅威アクターに保証されます。さらに、Defenderの除外設定は、後続のマルウェアのステージが検知される可能性を大幅に低下させます。スクリプトは、curlコマンドを使用してWebからRaspberry Robin DLLをダウンロードし、ローカルのAppDataフォルダに格納します。
リクエストは、通常のように URL パスを利用してドメインに識別されるのではなく、Cookie によって識別されます。これにより、Webサーバーはリクエストがダウンローダースクリプトから発信されたものであることを確認できます。こうすることで、マルウェアの運営者は、Raspberry Robinを解析しようとする研究者へのサンプルの流出を減らすことができます。
最後に、ファイルの拡張子を「.dll」に変更し、msiexecを利用して実行を行います。これにより、Raspberry Robinマルウェアが起動し、最終的に有効なペイロードが実行されるまで、耐解析およびVM検知技術の追加シーケンスを実行します。
この最近の活動は、Raspberry Robinの配布方法における一連の変遷の中で最新のものです。Raspberry RobinはUSBドライブを介して拡散することで知られていますが、脅威アクターはその目的を達成するために、Webダウンロードなどの異なる感染ベクトルを使用しています。WSFダウンローダーは難読化されており、さまざまな耐解析および耐VM技術を使用しているため、マルウェアの検知を回避し、解析を遅らせることができます。これは、Raspberry Robinが人間が操作するランサムウェアの前兆として使用されてきたことを考えると、特に懸念すべきことです。このマルウェアに感染チェーンの早い段階で対処することは、セキュリティチームにとって最優先事項です。
セキュリティコミュニティがこの脅威を検知し緩和するのに役立つように、HP Threat Research GitHub で以下のアーティファクトを公開しています:
Raspberry Robin WSF キャンペーン活動に関連する IOC
Raspberry Robin WSF ダウンローダーを検知するYARAルール
Raspberry Robin WSF ダウンローダーの解析を自動化する Python スクリプト
Author : Patrick Schläpfer
監訳:日本HP