ESET/サイバーセキュリティ情報局
ネットを見るだけで感染!? ロシア系ハッカーによる「ゼロクリック攻撃」を確認
本記事はキヤノンマーケティングジャパンが提供する「サイバーセキュリティ情報局」に掲載された「サイバー攻撃グループRomComによるFirefoxとWindowsのゼロデイ脆弱性を組み合わせたゼロクリック攻撃」を再編集したものです。
ESET社は、ロシアとつながりのあるサイバー攻撃グループRomComがFirefoxとWindowsのゼロデイ脆弱性を組み合わせてゼロクリックエクスプロイトを作り出し、実際に悪用していることを発見しました。その詳細について解説します。
ESET社の研究者は、これまで知られていなかった脆弱性がMozilla製品に存在することを発見しました。この脆弱性は、ロシアとつながりのあるサイバー攻撃グループ「RomCom」によって実際に攻撃されました。RomComが重大なゼロデイ脆弱性を実環境で悪用したのは今回で少なくとも2回目であり、前回は2023年6月にMicrosoft Word経由でCVE-2023-36884が悪用されています。
この脆弱性は極めて深刻であり、CVE-2024-9680が割り当てられています。CVSSスコアは9.8で、脆弱なバージョンのFirefox、Thunderbird、およびTor Browserがブラウザーの制限されたコンテキストでコードを実行できるようになります。これまで特定されていなかったWindowsの別の脆弱性(CVE-2024-49039、CVSSスコア8.8)と組み合わせることで、ログイン中のユーザーのコンテキストで任意のコードが実行される可能性があります。エクスプロイトが仕込まれたWebページにユーザーがアクセスすると、攻撃者は任意のコードを実行できます。この場合、ユーザーが何も操作しなくても、ユーザーのコンピューターにRomComが使用しているものと同名のバックドアがインストールされます。
本ブログの要点:
・2024年10月8日、ESET社の研究者は、これまで特定されていなかったゼロデイ脆弱性がMozilla製品に存在しており、実際に悪用されていることを発見しました。
・このエクスプロイトを分析した結果、この脆弱性が特定されました。この脆弱性はFirefoxのアニメーションタイムライン機能に存在するUse-After-Freeのバグ(解放済みメモリへアクセスされる問題)であり、CVE-2024-9680が割り当てられています。Mozilla社は、2024年10月9日にこの脆弱性のパッチを適用しています。
・さらに分析したところ、Windowsの別のゼロデイ脆弱性が見つかりました。この脆弱性は、Firefoxのサンドボックスの外部でコードを実行できる特権昇格のバグであり、現在CVE 2024 49039が割り当てられています。マイクロソフト社は2024年11月12日に、この2番目の脆弱性に対するパッチを公開しました。
・攻撃が成功した場合、RomComバックドアが配信されており、大規模なキャンペーンが実施されたと考えられます。
ROMCOMのプロフィール
RomComはロシアとつながりのあるサイバー攻撃グループであり、Storm-0978、Tropical Scorpius、またはUNC2596としても知られています。RomComは、特定の業界の組織に対する場当たり的なキャンペーン、そして、標的を絞ったスパイ活動の両方を実施しています。RomComは、従来のサイバー犯罪に加えて、情報を収集するスパイ活動も積極的に行うようになっています。このグループが使用するバックドアは、コマンドを実行し、被害者のマシンに追加のモジュールをダウンロードすることができます。
ESET社の調査から明らかになった、2024年にRomComが標的としていた対象を表1に示します。この情報から、RomComがスパイ活動だけでなく、サイバー犯罪にも関わっていることが明確になっています。
セキュリティを侵害するための一連の攻撃
この侵害チェーンは、エクスプロイトをホストするサーバーに潜在的な被害者をリダイレクトする偽のWebサイトで構成されています。エクスプロイトが成功すると、RomComバックドアをダウンロードして実行するシェルコードが実行されます。この攻撃の例を図1に示します。偽のWebサイトに誘導するリンクがどのように配信されているかは不明ですが、脆弱なブラウザーを使用してこのページにアクセスすると、ユーザーが何も操作しなくても、ペイロードがドロップされ、そのユーザーのコンピューターでペイロードが実行されます。数秒後にwindow.location.hrefを使用してJavaScriptのリダイレクトが実行され、エクスプロイトが最終的に実行されます。
ESET社は、2024年10月10日から10月16日にかけて、最初の脆弱性が修正された直後に、エクスプロイトをホストしている別のC&Cサーバーを発見しました。表2に示しているように、このグループは、redirまたはredという接頭辞または接尾辞を正規のドメインに追加し、時にはトップレベルドメイン(TLD)も変更しながら、偽サーバーの命名スキームを繰り返し使用していました。攻撃の最後にはリダイレクトが実行され、被害者を元のドメイン名の正規のWebサイトに移動していました。これは、被害者に疑念を抱かせないようにするためと考えられます。
脆弱なブラウザーを使用している被害者がこのエクスプロイトが仕込まれたWebページにアクセスすると、脆弱性が攻撃され、コンテンツのプロセスでシェルコードが実行されます。このシェルコードは2つの部分で構成されています。最初の部分は、2番目の部分をメモリから取得し、格納されているページを実行可能としてマークします。2番目の部分は、オープンソースプロジェクト「Shellcode Reflective DLL Injection(RDI)」をベースとするPEローダーを実装しています。
ロードされたライブラリーは、Firefoxのサンドボックスを回避する機能を実装しており、被害者のコンピューターでRomComバックドアをダウンロードして実行します。このバックドアは、journalctd[.]live、correctiv[.]sbs、またはcwise[.]storeにあるC&Cサーバーでステージングされます。使用されるC&Cサーバーは検体によって異なっています。
図2に示すように、ESET社のテレメトリデータによると、2024年10月10日から2024年11月4日までの間、エクスプロイトをホストしているWebサイトにアクセスした潜在的な被害者は、主にヨーロッパと北アメリカに所在していました。ESET社のテレメトリによると、標的となった潜在的な被害者の数は、国ごとに1人から最大で250人に上ることが確認されています。
CVE-2024-9680:Firefoxのアニメーションタイムラインに存在するUse-After-Freeの脆弱性
2024年10月8日に、ESET社は、このサイバー攻撃者によって管理されているサーバー1drv.us[.]comでホストされているRomComバックドアを配信するために使用されていた興味深いファイルを発見しました。このエクスプロイトは、FirefoxのアニメーションタイムラインにおけるUse-After-Freeの脆弱性を攻撃し、コンテンツのプロセスでコードを攻撃者が実行できるようになります。ESET社は調査中に、表3に示すファイルを分析しました。
| 名前 | 説明 |
|---|---|
| main-128.js | Firefox 106から128までのバージョンに対応するエクスプロイトが含まれるJavaScriptファイル |
| main-129.js | Firefox 129から131までのバージョンに対応するエクスプロイトが含まれるJavaScriptファイル |
| main-tor.js | Tor Browserのバージョン12と13に対応するエクスプロイトが含まれるJavaScriptファイル |
| script.js | CAPTCHAを生成するために使用されるJavaScriptファイル |
| utils.js | データ型の変換や、OSの種類やブラウザーのバージョンの取得などを行うヘルパー関数が含まれるJavaScriptファイル |
| animation0.htm | このHTMLのiframeは、Use-After-Freeの脆弱性を攻撃するエクスプロイトによってロードされます |
| index.html | このHTMLページがエクスプロイトを読み込み、数秒後に正規のWebサイトにリダイレクトます |
表3. エクスプロイトに関連するファイル
関連するタイムスタンプから、これらのファイルが2024年10月3日に作成され、オンラインで公開されたことを示しています。しかし、このサイバー攻撃者はこれ以前にこのエクスプロイトを入手していた可能性があります。
ESET社はこの脆弱性を発見した後すぐにMozilla社に報告しました。一連のイベントのタイムラインを以下に示します。
・2024年10月8日:検出と初期分析
・2024年10月8日:Mozilla社に脆弱性を報告した
・2024年10月8日:Mozilla社が脆弱性を確認した
・2024年10月9日:CVE-2024-9680が、Mozilla Corporationによって割り当てられた
・2024年10月9日:Firefoxに脆弱性のパッチが適用された(セキュリティアドバイザリ2024-51)
・2024年10月9日: リリース13.5.7によってTor Browserの脆弱性にパッチが適用された
・2024年10月10日:リリース6.8.1によってTailsの脆弱性にパッチが適用された
・2024年10月10日:Thunderbirdに脆弱性のパッチが適用された(セキュリティアドバイザリ2024-52)
ESET社は、Mozillaチームが非常に迅速に対応してくれたことに感謝します。1日でパッチをリリースしたMozillaチームの努力は賞賛に値するものです。
Mozilla社とTor Projectは、以下のバージョンに存在する脆弱性を修正するパッチを公開しました。
・Firefox 131.0.2
・Firefox ESR 115.16.1
・Firefox ESR 128.3.1
・Tor Browser 13.5.7
・Tails 6.8.1
・Thunderbird 115.16
・Thunderbird 128.3.1
・Thunderbird 131.0.1
このブログを公開する準備中に、フリーランスの研究者であるDimitri Fourny氏がこの脆弱性に関する詳細な分析結果を2024年11月14日に公開しています。
根本原因分析
main-
最初のヒープスプレーの後、prepare関数は、前に作成されたそれぞれのdiv要素に対して1つずつ、4つのアニメーションオブジェクトを作成します(図4を参照)。これらのアニメーションオブジェクトはAnimationTimelineオブジェクトによって処理されます。
アニメーションが進行する間に、test関数が呼び出され、最初と2番目のアニメーションオブジェクトのreadyプロパティを一時停止して取得します。ドキュメントで説明されているように、readyプロパティは、アニメーションが再生される準備ができたときに解決されるPromiseを返します。このPromiseでthenメソッドを呼び出すと、図3に示すgetter関数が呼び出されます。基本的に、この関数はグローバルフラグ変数を増分し、変数が2に達したとき、最初のアニメーションオブジェクト(anim0)はキャンセルされ、すべてのdiv要素が削除されます。rm0関数が呼び出され(図3を参照)、アニメーションオブジェクトを解放するためにnullに設定しますが、このときにUse-After-Freeの脆弱性を誘発します。この関数はまた、Heap Feng Shuiをいくつか実行します。最初に発見されたエクスプロイトは、コードを実行するためにgetInfo関数を呼び出します。
その間、animation0.htmlのドキュメントがリフレッシュされると、そのAnimationTimelineオブジェクトのTickメソッドが定期的に呼び出されます。図5に示すように、このメソッドはアニメーションタイムラインに存在する異なるアニメーションオブジェクトを繰り返し処理し、削除するアニメーションをanimationsToRemoveと呼ばれるローカル配列変数に追加します。
アニメーションタイムラインの異なるアニメーションオブジェクトを繰り返し処理する間に、AnimationオブジェクトのTickメソッドが呼び出され、現在のアニメーションオブジェクトが解放されます。その結果として、ダングリングポインタが処理される可能性があります。ESET社は、このエクスプロイトをデバッグし、最終的に上記で説明したgetter関数に到達するまでの一連の呼び出しを観察しました(図6と図7を参照)。
getter関数はAnimation::Cancelを呼び出し、AnimationTimeline::RemoveAnimationを呼び出します。次に、アニメーションオブジェクトanim0とanim1は、nullに設定され、解放されます。AnimationTimeline::Tickが配列animationsToRemoveを繰り返し処理するとき(図5の74行目)、AnimationTimeline::RemoveAnimationは、すでに削除されたAnimationオブジェクトのダングリングポインタを操作します(図8を参照)。
rm0関数でアニメーションを解放した後、エクスプロイトはさらにヒープメモリを管理し、解放されたアニメーションを置き換えるオブジェクトを制御します。そして最終的にgetInfo関数を呼び出します(図9を参照)。
このエクスプロイトコードについては詳しく説明しませんが、エクスプロイトの作成者はdivオブジェクトとその属性、およびImageDataオブジェクトを悪用して、図10に示すように、ImageDataのプロパティを漏えいしています。
次に、エクスプロイトコードはArrayBufferオブジェクトを操作して、任意のJavaScriptオブジェクトのアドレス(addrofプリミティブ)を漏えいし、Firefox JITコンパイラを悪用して、図11に示すように、コンテンツプロセスのコンテキストで最初のシェルコードコンポーネントを実行します。この手法は、こちらのブログで詳しく説明しています。
Mozilla社は、Firefox 131.0.2、Firefox ESR 128.3.1、およびFirefox ESR 115.16.1について2024年10月9日にこの脆弱性にパッチを適用しました。diffが示すように、実質的に、タイムラインで扱われるアニメーションオブジェクトへのポインタは、参照カウントポインタ(RefPtr)を通じて実装されており、AnimationTimeline::Tickが依然としてそれらへの参照を保持しているため、アニメーションが解放されることはありません。
シェルコードの分析
どちらのシェルコードも、JaveScriptのエクスプロイトファイルmain-
エッグハンティングシェルコード(特定のパターンを検索し、パターンが見つかったメモリの場所で実際のシェルコードを実行する手法)
この最初のシェルコードは、0x8877665544332211というハードコードされたマジック値をメモリ内で検索して2番目のシェルコードを取得し、メモリ保護を読み取り
/書き込み/実行(RWX)に変更し、このアドレスにあるコードを単に実行します。
リフレクティブローダーのシェルコード
この2番目のシェルコードは、Shellcode RDIプロジェクトのコンパイル版で、DLLをロードできます。このシェルコードで使用されている定数は、サイバー攻撃者によって変更されていません(https://github.com/monoxgas/sRDI/blob/master/Native/Loader.cpp#L367と図12に示す定数を比較して参照してください)。
このシェルコードは、Firefoxのサンドボックスでコンテンツが処理される制限を回避することだけを目的とした埋め込みライブラリーを単にロードします。
CVE-2024-49039:Windowsタスクスケジューラにおける特権昇格
ロードされたライブラリー(SHA1:ABB54C4751F97A9FC1C9598FED1EC9FB9E6B1DB6)は、開発者によってPocLowILと命名されています。このライブラリーは、2024年10月3日にコンパイルされ、信頼されていないプロセスレベルから、信頼されている(中程度の)プロセスレベルに引き上げてサンドボックスを回避します。基本的に、このライブラリーは文書化されていないRPCエンドポイントを利用し、信頼されていないプロセスレベルから本来は呼び出せない隠されたPowerShellプロセスを起動し、C&Cサーバーからセカンドステージのマルウェアをダウンロードします。
脆弱性が開示されるまでのタイムラインを以下に示します。
・2024年10月8日:ESET社が、CVE-2024-9680についてMozilla社に最初に報告したときに、サンドボックスの回避と考えられる情報を提供しました
・2024年10月14日:Mozilla社のセキュリティチームはサンドボックスの回避を確認し、この脆弱性がWindowsのセキュリティの欠陥と関連していると判断しました。Mozilla社のセキュリティチームは、脆弱性を評価するためにMicrosoft Security Response Center(MSRC)に連絡したことをESET社に伝えてくれました
・2024年11月12日:Microsoft社は、CVE-2024-49039に関するアドバイザリと、対応するパッチを更新プログラムKB5046612として公開しました。この脆弱性は、KB5046612で述べられているように、Google社のThreat Analysis GroupのVlad Stolyarov氏とBahare Sabouri氏も独自に発見しています
根本原因分析
サンドボックスを回避するコードは、ライブラリーの比較的小さなメイン関数内に存在します。図13に示すように、このコードは文書化されていないRPCエンドポイントを使用します。
この関数は、文書化されていない構造体を生成し、NdrClientCall2を3回呼び出します。この関数に渡される最初のパラメータpStubDescriptorは、MIDL_STUB_DESC構造体であり、そのRpcInterfaceInformationメンバーはGUID 33D84484-3626-47EE-8C6F-E7E98B113BE1によって識別されるインターフェースを指しています。このインターフェースは、WindowsライブラリーのWPTaskScheduler.dllに実装されており、schedsvc.dllによってロードされ、タスクスケジューラサービス(svchost.exe)のプロセス内でホストされています。
このインターフェースを分析したところ、サンドボックスを回避するコードは以下の関数を呼び出していました。
・s_TaskSchedulerCreateSchedule
・s_TaskSchedulerExecuteSchedule
・s_TaskSchedulerDeleteSchedule(クリーンアップのためだけに使用)
RpcViewを使用し、いくつかの構造を部分的にリバースエンジニアリングしたところ、主な構造体が明らかになりました(図14を参照)。
IDA Proでこれらの構造体をさらに分析したところ、タスクの概要をより明確にできました(図15を参照)。
このコードに基づくと、悪意のあるライブラリーはスケジュールタスクを作成し、任意のアプリケーションを中程度の整合性レベルで実行します。これにより、攻撃者はシステムで権限を昇格して、サンドボックスを突破できるようになります。図16に示すように、RPCインターフェースの作成時に適用されるセキュリティ記述子に対して制限が課されていないためにサンドボックスの回避が可能になります。
RpcServerRegisterIf3が呼び出されるときに、interface_security_descriptorという名前が変更された変数が使用されます。この変数にはD:P(A;;GA;;;S-1-15-2-1)(A;;GA;;;WD)という値が設定されています。セキュリティ記述子定義言語(SDDL)によると、これにより、すべてのユーザー(WD)がRPCインターフェースと通信し、その整合性レベルに関係なくプロシージャを呼び出すことが可能になります。
攻撃方法
このケースでは、サイバー攻撃者はfirefox.exeという名前のタスクを作成し、conhost.exeをヘッドレスモードで起動し、子プロセスのウィンドウを隠します。コマンドラインの残りの部分(図15を参照)の難読化を解除して、図17に示すPowerShellコードが明らかになりました。
実行ファイルは、https://journalctd[.]live/JfWb4OrQPLhからダウンロードされ、%PUBLIC%フォルダにpublic.exeとして保存され実行されます。10秒後に、epublic.exeに名前が変更され再び実行されます。
パッチの簡易分析
KB5046612で公開されたWPTaskScheduler.dllのパッチが適用されたバージョン(バージョン10.0.19041.5129)は、 図18に示すように、さらに複雑なセキュリティ記述子を使用しています。
新しいセキュリティ記述子は以下のとおりです。
D:(A;;GRGWGX;;;SY)(A;;GRGWGX;;;LS)(A;;GR;;;NS)(A;;GR;;;IU)S:(ML;;NWNXNR;;;ME)
この文字列を分解すると、次のような制限ロジックが追加されたことがわかります。
・システム(SY)とローカルサービス(LS)のアカウントには、読み込み、書き込み、実行のアクセス権限が付与されます
・ネットワークサービス(NS)アカウントと対話型ユーザー(IU)には読み込みアクセス権限のみが付与されます
・最後に、整合性が中レベル(ME)以下のオブジェクトは、読み取り、書き込み、実行アクセス権限が拒否されます
更新されたセキュリティ記述子による新しい制限は、特権昇格を防ぎ、サンドボックスを回避するコードを利用できなくします。
結論
2つのゼロデイ脆弱性を組み合わせることで、RomComは、ユーザーによる操作を必要としないエクスプロイトを作り出しています。この高度な開発能力は、ステルス機能を獲得または開発しようとする意志と手段をこのサイバー攻撃者が有していることを示しています。ESET社は、脆弱性を発見した後すぐに、協調的な脆弱性開示プロセスに従って、詳細な検出結果をMozilla社と共有しました。Mozilla社は、ブログでどのように情報開示に対応したかについて発表し、25時間以内に修正プログラムを公開できました。これは業界標準と比較しても極めて迅速な対応でした。
IOC(セキュリティ侵害の痕跡)
IoC(セキュリティ侵害の痕跡)の詳細なリストと検体は、ESETのGitHubリポジトリに掲載されています。
ファイル
ネットワーク
ファイル
ネットワーク
MITRE ATT&CKの技術
この表は、MITRE ATT&CKフレームワークのバージョン16を使用して作成されています。
| 手法 | ID | 名前 | 説明 |
|---|---|---|---|
| リソース開発 | T1583 | インフラストラクチャの取得 | RomComは、VPSを設定し、ドメイン名を購入しています。 |
| T1587.001 | 開発能力:マルウェア | RomComは、複数のプログラミング言語でマルウェアを開発しています。 | |
| T1587.004 | 開発能力:エクスプロイト | RomComは、最初のセキュリティ侵害に使用するエクスプロイトを開発している可能性があります。 | |
| T1588.003 | 入手能力:コードサイニング証明書 | RomComは、マルウェアに署名するために有効なコードサイニング証明書を入手しています。 | |
| T1588.005 | 入手能力:エクスプロイト | RomComは、最初のセキュリティ侵害に使用するエクスプロイトを入手している可能性があります。 | |
| T1588.006 | 入手能力:脆弱性 | RomComは、被害者を標的にするために使用する脆弱性に関する情報を入手している可能性があります。 | |
| T1608 | ステージングサーバーの能力 | RomComは複数の配信用サーバーにマルウェアをステージングしています。 | |
| 初期アクセス | T1189 | Web閲覧による感染 | RomComは、ユーザーがエクスプロイトをホストするWebサイトにアクセスしただけでそのセキュリティを侵害します。 |
| 実行 | T1053.005 | タスク/ジョブのスケジュール:タスクのスケジュール | RomComは、RCPを使ってスケジュールタスクを作成し、次のステージのダウンローダーを実行します。 |
| 常駐化 | T1546.015 | イベントトリガーによる実行:コンポーネントオブジェクトモデル(COM)のハイジャック | RomComバックドアは、explorer.exeまたはwordpad.exeによってロードされたDLLをハイジャックして常駐します。 |
| 権限昇格 | T1068 | 権限昇格のためのエクスプロイト | RomComはFirefoxのサンドボックスを回避する脆弱性を悪用しています。 |
| 防衛機能の回避 | T1622 | デバッガの回避 | RomComバックドアは、例外ハンドラーを登録して、デバッガを検出しています。 |
| T1480 | 実行ガードレール | RomComバックドアは、システムの状態が実行に適しているかどうかをチェックします。 | |
| T1027.011 | ファイルや情報の難読化:ファイルを使用しない保存方法 | RomComバックドアは、レジストリに暗号化されて保存されます。 | |
| T1553.002 | 信頼性コントロールの破壊:コードサイニング | RomComバックドアは、信頼できるコードサイニング証明書を使用することで、セキュリティの仕組みを弱体化させます。 | |
| 認証情報へのアクセス | T1555.003 | パスワードの保管場所からの認証情報の窃取:Webブラウザからの認証情報の窃取 | RomComバックドアは、ブラウザから機密情報を窃取するモジュールを使ってパスワード、Cookie、セッションを収集します。 |
| T1552.001 | 保護されていない認証情報:ファイル内の認証情報 | RomComバックドアは、ファイル偵察モジュールを使用してパスワードを収集します。 | |
| 探査 | T1087 | アカウント情報の探索 | RomComバックドアは、ユーザー名、コンピュータ、ドメインのデータを収集します。 |
| T1518 | ソフトウェアの検出 | RomComバックドアは、インストールされているソフトウェアやバージョンに関する情報を収集します。 | |
| T1614 | システムの場所の検出 | RomComバックドアは、特定のキーボードレイアウトID(KLID)をチェックします。 | |
| ラテラルムーブメント | T1021 | リモートサービス | RomComバックドアは、侵害されたネットワーク内でラテラルムーブメントを行うためのSSHトンネルを作成します。 |
| 収集 | T1560 | 収集したデータのアーカイブ | RomComバックドアは、データをZIPアーカイブに保存し、外部に送信します。 |
| T1185 | MITB(マンインザブラウザ) | RomComバックドアは、ブラウザのCookies、履歴、保存されているパスワードを詐取します。 | |
| T1005 | ローカルシステムのデータ | RomComバックドアは、ファイル拡張子に基づいて特定のファイルタイプを収集します。 | |
| T1114.001 | メールの収集:ローカルメールの収集 | RomComバックドアは、.msg、.eml、.emailの拡張子を持つファイルを収集します。 | |
| T1113 | 画面キャプチャ | RomComバックドアは、被害者のコンピュータのスクリーンショットを取得します。 | |
| C&C(コマンド&コントロール) | T1071.001 | 標準のアプリケーションレイヤープロトコル:Webプロトコル | RomComバックドアは、C&CプロトコルとしてHTTPまたはHTTPSを使用します。 |
| T1573.002 | 暗号化されたチャンネル:非対称暗号方式 | RomComバックドアは、SSL証明書を使って通信を暗号化します。 | |
| 情報の外部への送信 | T1041 | コマンドアンドコントロールサーバーのチャネルからのデータの流出 | RomComバックドアは、HTTPS C&Cのチャネルを使用してデータを流出させます。 |
| 影響 | T1565 | データの操作 | RomComは、システムを操作し、データを窃取します。 |
| T1657 | 金融資産の窃取 | RomComは、金銭的な利益のために企業を侵害しています。 |



























