Gemini 1.5 Flash でマルウェア分析をスケールアップする
Threat Intelligence
執筆者:Google Cloud セキュリティ、VirusTotal 創業者およびセキュリティ ディレクター、Bernardo Quintero
Google Cloud セキュリティ、Mandiant FLARE チーム セキュリティ マネージャー、Alex Berry
Hex-Rays、IDA Pro の作者および CTO、Ilfak Guilfanov 氏
Google DeepMind、最高情報セキュリティ責任者兼サイバーセキュリティ研究担当責任者、Vijay Bolina
※この投稿は米国時間 2024 年 7 月 16 日に、Google Cloud blog に投稿されたものの抄訳です。
概要
-
Gemini 1.5 Pro によるマルウェア分析に関する前回の投稿に続き、今回は軽量の Gemini 1.5 Flash モデルが大規模なマルウェア分析に対応できるかどうかをテストしました。
-
Gemini 1.5 Flash モデルは、パフォーマンスを維持しながら効率と速度を最適化することを目指して作成されました。Gemini 1.5 Flash を使用すると、1 分あたり最大 1,000 件のリクエストと 1 分あたり最大 400 万個のトークンを処理できます。
-
マルウェア分析パイプラインの実際のパフォーマンスを評価するために、VirusTotal の受信ストリームからランダムに選択された 1,000 個の Windows 実行可能ファイルと DLL を分析しました。システムは、誤判定、難読化されたコードを含むサンプル、VirusTotal での検出がゼロであったマルウェアの各ケースを効果的に解決できました。
-
Gemini 1.5 Flash は各ファイルを平均 12.72 秒で処理し(展開と逆コンパイルのステージを除く)、人が読める言語で正確な概要レポートを生成しました。
はじめに
前回の投稿では、Gemini 1.5 Pro を使用してマルウェア バイナリのリバース エンジニアリングとコード分析を自動化する方法について説明しました。今回は、その分析をラボから、大規模なマルウェア解析に対応したプロダクション レディ システムに移行するために、Google の費用対効果に優れた新しい軽量モデルである Gemini 1.5 Flash に注目します。100 万個のトークンを処理できる Gemini 1.5 Flash は、非常に高速であり、大規模なワークロードを管理できます。これを実現するために、私たちは Google Compute Engine 上にインフラストラクチャを構築し、スケールされた展開と逆コンパイルのステージを含むマルチステージ ワークフローを組み込みました。有望ではあるものの、これは長い道のりの第一歩にすぎず、これから精度の課題を克服し、マルウェア分析における AI の可能性を最大限に引き出していく必要があります。
VirusTotal は、毎日平均 120 万個の新しい一意のファイルを分析しています。どれもプラットフォーム上でこれまで確認されたことのないファイルです。そのほぼ半数は、リバース エンジニアリングとコード分析が有効と思われるバイナリ ファイル(PE_EXE、PE_DLL、ELF、MACH_O、APK など)です。従来の手動による方法では、この量の新たな脅威に対応しきれません。この量のコードの展開、逆コンパイル、分析をタイムリーかつ効率的に自動で行うシステムを構築することが重要な課題となり、Gemini 1.5 Flash はこのような課題を解決することを目的としています。
Gemini 1.5 Flash モデルは、Gemini 1.5 Pro の広範な機能をベースに、パフォーマンスを維持しながら効率と速度を最適化することを目指して作成されました。どちらのモデルも堅牢でマルチモーダルな機能を共有し、100 万個を超えるトークンのコンテキスト ウィンドウを処理できますが、Gemini 1.5 Flash は特に高速な推論と費用対効果の高いデプロイを目的として設計されています。これは、アテンションとフィードフォワードの各コンポーネントの並列計算と、オンライン蒸留手法の使用によって実現しています。この蒸留手法により、Flash はトレーニング時に、より大規模で複雑な Pro モデルから直接学習することが可能になります。こうしたアーキテクチャ最適化により、Gemini 1.5 Flash を使用すると、1 分あたり最大 1,000 件のリクエストと 1 分あたり最大 400 万個のトークンを処理できます。
このパイプラインの仕組みを示すために、Gemini 1.5 Flash を使用して、逆コンパイルされたバイナリを分析する例を最初に紹介します。その後、これに先行する大規模な展開と逆コンパイルの手順について簡単に説明します。
分析の速度と例
マルウェア分析パイプラインの実際のパフォーマンスを評価するために、VirusTotal の受信ストリームからランダムに選択された 1,000 個の Windows 実行可能ファイルと DLL を分析しました。この選択方法により、正規のソフトウェアとさまざまな種類のマルウェアの両方を含む、多様なサンプルが確保されました。私たちが最初に驚いたのは、Gemini 1.5 Flash の速度でした。これは Google Gemini チームの論文で強調されていたパフォーマンス ベンチマークとも一致しています。この論文では、Gemini 1.5 Flash が複数言語にわたるテキスト生成速度の点で、他の大規模言語モデルよりも一貫して優れていることが報告されていました。
観測した最短の処理時間はわずか 1.51 秒で、最長は 59.60 秒でした。Gemini 1.5 Flash の 1 ファイルあたりの平均処理時間は 12.72 秒でした。この処理時間に、展開と逆コンパイルのステージは含まれていない点に注意してください。この 2 ステージについては、このブログ投稿の後半で見ていきます。
処理時間には、入力コードのサイズと複雑さ、結果として行われる分析の長さなどの要因が影響します。重要な点として、これらの測定値には、エンドツーエンドのプロセス全体が反映されています。そのプロセスとは、逆コンパイルされたコードを Vertex AI 上の Gemini 1.5 Flash API に送信することから、モデルの分析を経て、Google Compute Engine インスタンスで完全なレスポンスを受け取るまでです。このエンドツーエンドの視点により、実際の本番環境で Gemini 1.5 Flash によって達成可能な低レイテンシと速度が明らかになります。
例 1: 1.51 秒で誤判定を解消
分析した 1,000 個のバイナリのうち、このバイナリが最も速く処理され、Gemini 1.5 Flash の驚異的な速度を際立たせました。goopdate.dll(103.52 KB)は、VirusTotal のウイルス対策で 1 件の検出がトリガーされたファイルです。これはよくあることですが、時間のかかる手動確認が必要になることが多いです。
お客様の SIEM システムでこのファイルがアラートをトリガーし、すぐに解決が必要となった状況を想像してみてください。Gemini 1.5 Flash の場合、逆コンパイルされたコードをわずか 1.51 秒で分析し、明確な説明を生成しました。このファイルは、おそらくウェブブラウザのコンポーネントである「BraveUpdate.exe」アプリケーション用の単純な実行可能ランチャーであることがわかりました。この迅速なコードレベルの分析情報により、アナリストは自信を持ってアラートを誤判定として退けることができるため、不必要なエスカレーションを防ぎ、貴重な時間とリソースを節約できます。
例 2: 別の誤判定の解決
別の例では、BootstrapPackagedGame-Win64-Shipping.exe ファイル(302.50 KB)が VirusTotal で 2 つのウイルス対策エンジンによってフラグ付けされ、さらに精査が必要となりました。
Gemini 1.5 Flash は、逆コンパイルされたコードをわずか 4.01 秒で分析し、ファイルがゲーム ランチャーであることを明らかにしました。Gemini は、このサンプルの機能について、Microsoft Visual C++ ランタイムや DirectX などの前提条件を確認し、再配布可能なインストーラを検索および実行した後、最終的にメインのゲーム実行可能ファイルを起動する、と詳細に説明しています。このレベルの理解により、アナリストは自信を持ってファイルを正当なものとして分類でき、潜在的な誤判定に不必要な時間と労力を費やすことを回避できます。
例 3: 処理時間が最長なのは難読化されたコード
svrwsc.exe(5.91 MB)は、分析時に最も長い処理時間(59.60 秒)を必要としたことで目立ったファイルです。逆コンパイルされたコードのサイズや、XOR 暗号化などの難読化手法の存在などの要因が、長い分析時間の原因と考えられます。それでも Gemini 1.5 Flash は 1 分未満で分析を完了しました。このようなバイナリを人間のアナリストが手動でリバース エンジニアリングすると数時間かかる可能性があることを考えると、これは注目すべき成果です。
Gemini は、このサンプルが悪意のあるものであると正しく判定しただけでなく、データを引き出してロシアのドメインにあるコマンド&コントロール(C2)サーバーに接続するように設計されたバックドア機能を特定しました。分析結果は、潜在的な C2 サーバーの URL、プロセス同期に使用されるミューテックス、変更されたレジストリキー、疑わしいファイル名など、多くの IoC を明らかにしています。この情報により、セキュリティ チームは脅威の迅速な調査、対応が可能になります。
例 4: クリプトマイナー
この例は、Gemini 1.5 Flash が colto.exe というクリプトマイナーの逆コンパイルされたコードを分析する様子を示しています。モデルは、逆コンパイルされたコードのみを入力として受け取り、VirusTotal から追加のメタデータやコンテキストは受け取らない点に注意することが重要です。Gemini 1.5 Flash はわずか 12.95 秒で包括的な分析を実行した結果、マルウェアをクリプトマイナーとして識別し、難読化手法を特定して、ダウンロード URL、ファイルパス、マイニング プール、ウォレット アドレスなどの主要な IoC を抽出しました。
例 5: 非依存的アプローチによる正規ソフトウェアの理解
この例は、Gemini 1.5 Flash が 3DViewer2009.exe という正規の 3D ビューア アプリケーションを 16.72 秒で分析する様子を示しています。優良なソフトウェアであったとしても、プログラムの機能を理解することはセキュリティのために役立ちます。これまでの例と同様、モデルは、逆コンパイルされたコードのみを分析用として受け取る点が重要です。バイナリが信頼できる組織によってデジタル署名されているかどうかなどの追加メタデータは VirusTotal から受け取りません。この情報は従来のマルウェア検出システムではよく考慮されるものですが、今回はコード中心のアプローチを採用しています。
Gemini 1.5 Flash は、アプリケーションの主な目的(3D モデルの読み込みと表示)を正しく識別し、処理される 3D データの種類(DTM)も認識しました。分析結果では、レンダリング、構成ファイルの読み込み、データ マネジメント用のカスタム ファイルクラスに OpenGL が使用されていることが明らかになりました。このレベルの理解は、セキュリティ チームが正規のソフトウェアと、その動作を模倣しようとするマルウェアを区別するのに役立ちます。
機能のみに焦点を当てたコード分析に対するこの非依存的アプローチは、デジタル署名があるバイナリを精査する場合に特に効果があると思われます。なぜなら、署名があるバイナリは、署名がないファイルと同じレベルのセキュリティ分析を常に受けるとは限らないからです。これにより、信頼できると思われるソフトウェア内であっても、悪意があるかもしれない動作を特定するための新たな可能性が開かれます。
例 6: ゼロアワー キーロガーの正体暴露
この例は、悪意のある動作を検出するコード分析の真の威力、つまり従来のセキュリティ ソリューションでは見逃される脅威の検出を示しています。実行可能ファイル AdvProdTool.exe(87 KB)は VirusTotal に送信された後、最初のアップロードと分析の時点では、すべてのウイルス対策エンジン、サンドボックス、検出システムを回避しました。しかし、Gemini 1.5 Flash はその本質を明らかにしました。このモデルは、逆コンパイルされたコードをわずか 4.7 秒で分析して、キーロガーとして識別し、盗んだデータを流出させる IP アドレスとポートまで明らかにしています。
分析結果から、コードが OpenSSL を使用してポート 443 でその IP アドレスへの安全な TLS 接続を確立していることがわかります。重要なのは、Gemini がキーボード入力キャプチャ関数(GetAsyncKeyState、GetKeyState)の疑わしい使用と、セキュア チャネル(SSL_write)経由のデータ転送への接続を指摘していることです。
この例は、このキーロガーがそうであるように、ゼロアワーの脅威を開発の初期段階で特定できるコード分析の可能性を明確に示しています。また、Gemini 1.5 Flash の重要な優位性も強調しています。コードの生の機能を分析することで、メタデータや検出回避手法によって偽装されている場合でも、悪意を明らかにすることができます。
ワークフローの概要
今回のマルウェア分析パイプラインは、展開、逆コンパイル、Gemini 1.5 Flash を使用したコード分析という 3 つの主なステージで構成されています。最初の 2 つのステージは、大規模かつ自動的な展開と逆コンパイルという 2 つの重要なプロセスによって進められます。受け取ったバイナリは、社内のクラウドベースのマルウェア分析サービスである Mandiant Backscatter を利用して動的に展開します。展開したバイナリは、Google Compute Engine 上で実行される複数の Hex-Rays 逆コンパイラによって処理されます。Gemini は、逆アセンブルされたコードと逆コンパイルされたコードの両方を分析できますが、今回のパイプラインでは逆コンパイルを選択しました。決定的な要因は、逆コンパイルされたコードの方が逆アセンブルされたコードよりも 5~10 倍簡潔であり、大規模言語モデルのトークン ウィンドウの制限を考慮すると、より効率的な選択になることでした。この逆コンパイルされたコードは最終的に分析のために Gemini 1.5 Flash に送られます。
このワークフローを Google Cloud でオーケストレートすることで、膨大な数のバイナリを処理することができ、VirusTotal に 1 日に送信される 50 万個を超える新しいバイナリにも対応できます。
Mandiant Backscatter
Google Compute Engine でホストされている Google 内部のマルウェア分析サービス Mandiant Backscatter が、スケーラブルなマルウェア構成抽出機能を提供しています。Backscatter は、構成抽出の一環として、VirusTotal のパイプラインに沿ってマルウェアの難読化解除、復号、展開も実行し、マルウェアをアーティファクトに分解します。構成はこれらのアーティファクトから抽出されます。結果として得られる IoC は、Google Threat Intelligence プラットフォーム内の何百ものマルウェア ファミリーにわたってマルウェアの脅威とアクターの特定、追跡に使用されます。展開されたバイナリを含むアーティファクトはパイプラインにも再送信されるため、Gemini 1.5 Flash などのツールで追加処理を行い、前のステージで特定された IoC を使用して、マルウェアが実行している操作についての知識を広げられます。
Hex-Rays 逆コンパイラ
Google Compute Engine でホストされている複数の Hex-Rays IDA Pro 逆コンパイラが、このパイプラインに必要となるスケーラブルな逆コンパイル機能を提供しています。今回は、自動ワークフロー向けに設計された IDA Pro のヘッドレス バージョンである新しい IDA LIB を利用しています。これは 2024 年第 3 四半期にリリースされる予定です。複数の Hex-Rays IDA Pro 逆コンパイラはパイプラインとシームレスに統合され、Mandiant Backscatter が供給する Google Cloud Pub/Sub キューから、展開されたバイナリを読み取ります。その結果として逆コンパイルされた疑似 C コードはその後 Google Cloud Storage バケットに保存され、Gemini 1.5 Flash による分析が可能な状態になります。現在のところ、複数の逆コンパイラ内の各ノードは 1 時間あたり 3,000 個を超えるファイルを逆コンパイルできるため、大量のバイナリを受け取っても対応できます。
課題と継続的な開発
予想していたとおり、今回のテストでは、このパイプラインの重要な側面が明らかになりました。つまり、Gemini 1.5 Flash のパフォーマンスは、先行する展開と逆コンパイルの各ステージの質に大きく依存するということです。たとえば、展開フェーズで新しいパッカーまたは未知のパッカーを完全に展開できなかった場合、逆コンパイラはパッカー自体のコードしか抽出できず、内部に隠れた元のプログラム ロジックは抽出できません。このような場合、Gemini は、展開、復号、または難読化解除の操作を実行してプログラムを分析していること、またパッカーによって隠されたコードの真の目的は分析できないことを正しく報告します。
同様に、逆コンパイルされたコードの品質も、Gemini がプログラムの動作を理解して分析できるかどうかに直接影響します。逆コンパイルされたコードがそのまま Gemini の分析対象となるため、このコードにエラーや矛盾があると、それが最終的なレポートに反映されます。さらに Gemini は、攻撃者が使用する新しいアプローチも含め、さまざまなコードレベルの難読化手法にも対処する必要があり、状況の変化に合わせて分析機能を継続的に改善していく必要があります。
この相互依存の関係性から、パイプラインの 3 つのステージすべてを継続的に改善することの重要性がわかります。この逐次的なワークフローのいずれかの部分に弱点があると、後続のフェーズのパフォーマンスに直接影響が及びます。各ステージでの出力を改善することは、Gemini による分析の成功に直接つながります。したがって、私たちの開発に対する継続的な取り組みでは、Gemini の分析機能を強化することだけでなく、分析用に最高品質の出力を確実に提供できるよう、展開と逆コンパイルのステージを改良することにも注力しています。
逆コンパイルに関しては、Hex-Rays と緊密に連携し、次の 3 つの主要領域に重点を置いて逆コンパイラを強化しています。
-
言語固有の構造認識の改善: 特定のプログラミング言語に固有の構造を認識する逆コンパイラの能力を強化することを目指しています。これには、C++、Rust、Golang コード内の try-catch ステートメントやクラスメンバー定義などの要素が含まれます。逆コンパイラに新しいセマンティック レイヤーを追加することで、基礎となるコードをより効果的に解釈できるようになります。これが、より正確で読みやすい出力につながり、最終的に Gemini による分析に役立つことになります。
-
より意味のある関数と変数の命名: 逆コンパイルされたコード内の関数と変数に明確でわかりやすい名前を付ければ、Gemini による分析に大きく役立ちます。私たちは逆コンパイル プロセス中にそのような名前を生成する手法を模索中であり、この目的のために Gemini を統合する可能性もあります。
-
より豊富なコンテキスト情報: 逆コンパイルされたコードを改善するだけでなく、より豊富なコンテキスト データをモデルに提供する方法についても調査中です。たとえば、データフロー図や制御フローグラフなどの視覚的な表現や、IDA Pro の IDB の完全なエクスポートが考えられます。この追加情報により、プログラムの全体的な構造とロジックに関する貴重な分析情報が得られ、より徹底的かつ正確な分析が可能になります。
Google Threat Intelligence: 次なる進化
今回の成果は、大規模な脅威分析に AI を活用するための取り組みの始まりにすぎません。このようなコード分析レポートが、まもなく VirusTotal の Code Insight セクションに統合される予定です。この統合により、Gemini 1.5 Flash の速度とスケーラビリティを活用したバイナリ ファイルの動作に関する貴重な分析情報が VirusTotal コミュニティに提供されます。
分析能力の強化については、Google Threat Intelligence 内でこのパイプラインの高度なバージョンを開発中です。この実装では、AI エージェントによって強化された Gemini 1.5 Pro の機能が活用されます。AI エージェントは、特殊なマルウェア分析ツールを使用し、Google、Mandiant、VirusTotal にわたり脅威情報を関連付けることができます。この高度な分析機能は Private Scanning サービス内で提供されるため、処理されるコンテンツの機密性は確保されます。Google Threat Intelligence における Gemini の詳細については、最近のウェブセミナーをご覧ください。
Google は、デジタル環境をより安全な場所とするため、AI を活用した脅威分析の進捗状況と新たな進歩を今後も共有していきます。GSEC Malaga では、サイバーセキュリティの可能性の限界を押し広げ、AI を応用してユーザーを進化する脅威から保護する新しい方法を模索することに注力しています。
サンプルの詳細
この投稿で取り上げたバイナリ サンプルの詳細を下の表に示します。