コンテンツに移動
脅威インテリジェンス

コード インタープリタと Google Threat Intelligence によるマルウェア分析を目的とした Gemini の機能強化

2024年12月10日
Bernardo Quintero

Andrés Ramírez

Google Cloud の主なミッションの一つは、セキュリティ専門家に最新のツールを提供し、最新の脅威に対する防御をサポートすることです。脅威インテリジェンスの自動化において、より高い自律性と適応力を備えたアプローチを追求していくことも、このミッションの一環です。

マルウェア分析の最新の進歩から、Gemini に新機能が搭載されることになりました。この新機能では、難読化手法への対処と、セキュリティ侵害インジケーター(IoC)でのリアルタイムのインサイト取得をご利用いただけます。Gemini では、コード インタープリタ拡張機能の統合により、特定の文字列やコード部分の難読化解除に役立つコードを動的に作成、実行できるようになりました。同時に、Google Threat IntelligenceGTI)の関数呼び出しを使用して、マルウェアのサンプル内で検出された URLIP、ドメインの追加コンテキストに関して GTI にクエリを実行できます。マルウェア分析において、こうしたツールが Gemini をより適応力の高いエージェントへと変えていく一つのステップとなり、各サンプルの独自の特性を基に、難読化された要素の解釈とコンテキスト情報の収集の能力を高めています。

この基盤の上に、Google Cloud では以前 Gemini 1.5 Pro 200 万トークンという広範な入力ウィンドウを使用して、逆コンパイルされた大量のコードを単一パスで処理し、その重要な準備ステップを探りました。拡張性をさらに強化するため、特定の難読化手法に対処する逆コンパイル フェーズの前に、Gemini 1.5 Flash を導入しました。Gemini 1.5 Flash には、Mandiant Backscatter を介した自動化されたバイナリの展開を組み込みました。しかしそれでも、経験豊富なマルウェア アナリストであればご存じのとおり、真の課題の多くはコードが公開されてから始まります。マルウェア デベロッパーの多くは、難読化の手法を取り入れて、重大な IoC と基盤となるロジックを隠蔽します。マルウェアによって悪意のあるコードが追加でダウンロードされることもあり、これにより特定のサンプルの動作を完全に理解するのは困難になります。

大規模言語モデル(LLM)の場合、難読化手法と追加のペイロードにより、特有の課題が生まれます。難読化された文字列(URLIP、ドメイン、ファイル名など)を LLM で処理する場合、明確なデコード メソッドがないと、頻繁に「ハルシネーション」が起きます。また、LLM が追加のペイロードをホストしている URL などにアクセスできず、結果としてサンプルの動作について予測的な解釈をしてしまうことがよくあります。

こうした課題の解決に役立つよう、コード インタープリタと GTI 関数呼び出しツールを使って、対象を絞ったソリューションを提供しています。コード インタープリタを使用すると、Gemini は必要に応じて、サンプル内にある難読化された要素(XOR ベースのアルゴリズムでエンコードされた文字列など)をデコードするためのカスタム スクリプトを、独自判断を使用して自律的に作成、実行できるようになります。この機能により、解釈エラーが最小限に抑えられ、人間の介入を必要とせずに隠れたロジックを明らかにする Gemini の能力が強化されます。

一方で、GTI 関数呼び出しにより、Google Threat Intelligence から不審な外部リソース(URLIP、ドメインなど)に関するコンテキストに沿った情報を取得することで、Gemini のリーチが拡大し、不確かな推測を含まない検証済みのインサイトが提供できるようになります。これらのツールを合わせることで、Gemini では難読化されたデータや外部でホストされているデータの処理能力が向上し、マルウェア分析の自律エージェントとして機能するという目標に近づきます。

こうした機能強化によって Gemini の機能が向上する仕組みを示すために、実際の例を見てみましょう。このケースでは、第 2 段階のペイロードをホストしている難読化された URL を含む PowerShell スクリプトを分析します。この特定の例は、一般公開されている最も高度な LLM モデルのいくつかを使用して以前に分析されたものです。LLM モデルには、推論プロセスの一環として、コードの生成とコードの実行が組み込まれています。各モデルでは、これらの機能をよそに「ハルシネーション」が発生し、正しい URL を正確に示すのではなく、完全に捏造された URL が生成されました。

https://storage.googleapis.com/gweb-cloudblog-publish/images/gemini-for-malware3-fig1.max-1500x1500.png

Gemini で分析を行う難読化された PowerShell のコードサンプル

Gemini では、コード インタープリタと GTI 関数呼び出しを推論プロセスの一部として使用し、以下のレポートが人間の介入なしで自律的に生成されました。Gemini が必要と判断した場合、これらのツールを使用して処理を行い、サンプルから追加情報を抽出します。

最終レポート: URL 難読化解除を使用した PowerShell マルウェア

このレポートでは、難読化された URL からファイルをダウンロードし、実行するよう設計された PowerShell スクリプトを分析します。スクリプトには、悪意のある URL を隠蔽するために RC4 ストリーム暗号に似たカスタム難読化ルーチンが使われています。

機能:

  1. 難読化ルーチン: スクリプトで関数 F が定義されます。この関数は文字列「tox2」から取得した鍵を使用してバイトレベルの XOR 暗号化を実行します。この関数は悪意のある URL の難読化解除のために使用されます。

  2. URL 復号: バイト配列として格納されている難読化された URL は、「tox2」を鍵として持つ F 関数を使用して復号されます。

  3. ファイルのダウンロード: スクリプトは、復号された URL からファイルをダウンロードし(hxxps://filedn[.]eu/lODWTgN8sswHA6Pn8HXWe1J/tox2/Scan_docs%2398097960[.]msi)、ランダムに生成されたファイル名でシステムの一時ディレクトリに保存します。

  4. 実行: 最後に、スクリプトでダウンロードしたファイルが実行されます。

セキュリティ侵害インジケーター(IoC:

  • URL: hxxps://filedn[.]eu/lODWTgN8sswHA6Pn8HXWe1J/tox2/Scan_docs%2398097960[.]msi

難読化解除コード:

def deobfuscate(x, y):
    s = list(range(256))
    j = 0
    k = [ord(c) for c in y]
    for i in range(256):
        j = (j + s[i] + k[i % len(k)]) % 256
        s[i], s[j] = s[j], s[i]
    i = 0
    j = 0
    output = []
    for m in range(len(x)):
        i = (i + 1) % 256
        j = (j + s[i]) % 256
        s[i], s[j] = s[j], s[i]
        output.append(x[m] ^ s[(s[i] + s[j]) % 256])
    return output

a = [0x25, 0x7B, 0x5A, 0xD8, 0x9C, 0xFF, 0xC3, 0xA4, 0x95, 0xB7, 
0x9D, 0x6E, 0x5F, 0x4D, 0x49, 0xFB, 0x78, 0x32, 0xB8, 0x17, 0x72, 
0x01, 0x31, 0xFB, 0xC0, 0x58, 0x45, 0xCB, 0x5C, 0x3C, 0xDD, 0x00, 
0x60, 0x87, 0x25, 0xB2, 0x44, 0xA6, 0xC5, 0xEA, 0x71, 0xAA, 0x9D, 
0xA1, 0x05, 0x5F, 0xBD, 0x41, 0x28, 0x70, 0x30, 0x6B, 0x96, 0x24, 
0x92, 0xA0, 0x9D, 0x92, 0x23, 0x79, 0x69, 0x2C, 0x1B, 0x1E, 0xEB, 
0x69, 0x8F, 0x04, 0x10, 0x74, 0xBC]
b = "tox2"
c = deobfuscate(a, b)
decoded_url = "".join(chr(i) for i in c)
print(decoded_url)

Google Threat IntelligenceGTI)ルックアップ:

GTI ルックアップは、特定された IoC に関する以下の重要なコンテキストを提供します。

  • 脅威アクター: UNC5687 は、ウクライナのセキュリティ サービスになりすましたフィッシング キャンペーンにおいて MESHAGENT を使用していることで知られています。

  • キャンペーン: この特定の URL のリンク先は、悪意のあるリンクを含むフィッシング メールを介して MESHAGENT を拡散するキャンペーンです。このキャンペーンには、悪意のある MSI ファイルまたは EXE ファイルのいずれかをダウンロードするよう誘導するキャプチャ ページが含まれていました。

  • マルウェア: キャンペーンで配信された MESHAGENT は、オープンソースのリモート アクセス フレームワークであり、「AnonVNC」と呼ばれるサービスにリンクされている C2 ドメインと通信するよう構成されています。

まとめ:

分析された PowerShell スクリプトは、MESHAGENT リモート アクセス ツールを配信する UNC5687 によるフィッシング キャンペーンに関連付けられた悪意のあるものであることが確認されました。

Gemini は、スクリプトにダウンロード URL を隠すための RC4 に似た   XOR ベースの難読化アルゴリズムが使用されていることを特定しました。このパターンを認識して、Gemini はコード インタープリタのサンドボックス内で自律的に Python 難読化解除スクリプトを生成して実行し、この外部リソースを暴くことに成功しています。

URL を取得した Gemini は、次に GTI 関数呼び出しを使用して、さらなるコンテキスト取得のために Google Threat Intelligence に対してクエリを実行します。この分析では、UNC5687 への URL をリンクしています。UNC5687 とは、ウクライナのセキュリティ サービスになりすましたフィッシング キャンペーンにおけるリモート アクセス ツールの使用で知られる脅威クラスタです。

ここまで見てきたように、こうしたツールの統合により Gemini がマルウェア アナリストとして機能するための能力が強化され、難読化対処と IoC での重要なコンテキストを収集するアプローチの適応を可能にします。コード インタープリタと GTI 関数呼び出しを組み込むことにより、Gemini は隠れた要素を自律的に解釈し、外部リファレンスをコンテキスト化して、複雑なサンプルをより適切に扱うことができるようになります。

こうした機能の搭載は大きな前進ですが、特に非常に多様なマルウェアと脅威ランドスケープに存在するシナリオを考慮すると、課題はまだ山積みです。Google Cloud は、着実な進化に向けて取り組んでいます。また、今後も継続的にアップデートを重ねて Gemini の機能強化に努め、脅威インテリジェンスの自動化において、より自律的かつ適応性の高いアプローチを実現する取り組みを推進していきます。

Bernardo Quintero

Andrés Ramírez

投稿先