LLM × Agent × VM ─ Malware Analysis Automation

複雑なレポートも 全自動に

r_AKanaly は、LLM と独自エージェントが VM を操作し、 動的解析ログと Ghidra の静的解析情報を照合して、 根拠付きのレポートを生成するマルウェア解析自動化ツールです。

Mission

r_AKanaly が目指すもの

マルウェアの解析レポートは、被害からの復旧や同じ攻撃への対策に欠かせない一方で、作成には解析の知識と専用ツールを操作する技術が必要です。初心者にとっては大きな壁があり、専門家でも1件ごとに時間がかかるため大量には作れず、調べたい検体のレポートが見つからないことも少なくありません。r_AKanaly は、世界で利用できるマルウェア解析レポートを増やすことを目的に、検体のアップロードやハッシュ値の取得と同じくらい手軽に「レポートを作る」を選べるようにしたいと考えています。そのための目標として、初期環境を整えたあとは、検体と必要な情報を指定するだけで、解析からレポート・成果物の保存、VM の終了までを全自動で完了する仕組みを作っています。

検体 r_AKanaly 世界のレポート

01 ─ Overview

r_AKanaly とは

検体を渡すと、LLM が調査の方針を判断し、独自エージェントが VM を操作して情報を集め、 観測とコードを照合した考察をレポートにまとめます。
人が工程ごとに VM を手で操作する負担を減らし、解析からレポート生成までを一本につなぐツールです。

検体

解析対象のファイルと
解析条件

自動解析

LLM × 独自エージェントが
VM を操作

根拠付きレポート

観測事実・推論・根拠・
不明点を整理

判断

LLM が、次に何を調べるかを決め、取得した情報を読み取って照合・考察する。

操作

独自エージェント が、LLM の指示を VM 内の具体的な操作や情報取得につなぎ、結果を返す。

記述

考察は、実際に取得した 観測記録とコード情報 に結び付けてレポートに書く。

強み 01 Autonomous VM Operation

LLM × 独自エージェントによる
VM 操作の全自動化

LLM を文章生成だけに使うのではなく、解析を進める判断役として使います。 独自エージェントが LLM の指示を VM 内の操作や情報取得につなぎ、結果を LLM へ返します。 スクロールで、その 1 周を追ってみましょう。

Host Guest(VM) LLM MCP Host agent OS agent 展開・準備・OS操作 Ghidra agent 関数・解析情報の取得 検体 結果 次の判断
  1. 1

    LLM が次の調査を判断する

    与えられた検体と解析条件、これまでに得た情報から、「次に何を確かめるべきか」を LLM が決めます。

  2. 2

    MCP を通じてツールを呼び出す

    MCP は、LLM がツールを使うための窓口です。判断した内容が、ツールの呼び出しとして送られます。

  3. 3

    Host agent が受け取り、各エージェントへ指令を送る

    VM の外側(Host)で、Host agent が指示を受け取ります。内容に応じて、VM 内の OS agent と Ghidra agent に指令を送ります。

  4. 4

    Guest 内のエージェントが実行する

    VM 内(Guest)では、OS agent が展開・準備・OS 操作を行い、Ghidra agent が関数などの解析情報を取得します。

  5. 5

    結果が LLM へ返る

    取得した記録や解析情報は Host を経由して LLM に戻ります。人が VM を手で操作してコピーする必要はありません。

  6. 6

    結果を読み、次の判断へ

    LLM は結果を読み取り、追加の調査や確認が必要かを判断します。このループを繰り返して、解析をレポートまで進めます。

手動の解析

工程ごとに人が VM を操作し、結果を取り出して読み、次の操作を考える。

r_AKanaly

判断は LLM、操作は独自エージェント。判断 → 操作 → 結果 → 判断 が自動でつながる。

強み 02 Log Compression for Reasoning

動的解析ログの圧縮と
推論への活用

検体を実行すると、大量の動的解析ログが発生します。r_AKanaly はこれを、 解析に必要な情報を残した行動情報へ整理し、LLM の推論に活用します。

生の動的解析ログ 0 行

そのままでは量が多く、推論に使いにくい

整理された行動情報 表示例
  • プロセス

    子プロセスを生成し、コマンドを実行

  • ファイル

    一時フォルダへ実行ファイルを書き込み

  • レジストリ

    自動起動に関わるキーへ値を設定

  • ネットワーク

    外部ホストへの接続を試行

LLM が行動を把握しやすい単位にまとまる

ここでいう「圧縮」は、ZIP のような圧縮ではありません

ファイル圧縮(ZIP など)

  • ファイルのサイズを小さくする
  • 中身は同じ記録のまま
  • 読むには展開が必要

r_AKanaly のログ圧縮

  • 解析に必要な情報を残して整理する
  • 記録を行動の単位にまとめる
  • そのまま LLM の推論材料になる

圧縮した行動情報は、2 つの用途に使われます

圧縮した行動情報
A

検体の行動を把握する

何を実行し、何を書き込み、どこへ通信しようとしたか。

B

静的解析で調べる箇所を決める

観測した行動に関係しそうな処理を、Ghidra で重点的に調べる。

強み 03 Grounded Report

グラウンディング付きレポート

グラウンディングとは、説明や推論を実際に取得した情報に結び付けることです。 レポートの各記述が、どの観測記録・どの解析情報から導かれたのかをたどれます。
下のレポートの文にカーソルを合わせる(またはタップする)と、根拠が表示されます。

解析レポート 表示例(架空のデータ)

考察

  • 観測事実 実行後、検体は子プロセスを生成し、一時フォルダへファイルを書き込んだ。
  • 観測事実 自動起動に関わるレジストリキーへの書き込みが記録された。
  • 推論 関数 FUN_00401a30 のレジストリ操作が、観測された書き込みに対応すると考えられる。
  • 推論 初期化処理から呼ばれていることから、再起動後も動作を続けるための処理である可能性が高い。
  • 不明点 接続先を決める処理は、今回の解析範囲では特定できていない。追加調査の対象とする。

動的解析の観測記録

  • L1Process Create parent=sample.exe child=cmd.exe
  • L2File Write %TEMP%\a3f1.tmp
  • L3Reg SetValue HKCU\…\CurrentVersion\Run\updater
  • L4TCP Connect → 203.0.113.10:443 (failed)

Ghidra の解析情報

  • G1FUN_00401a30 : RegSetValueExW を呼び出し
  • G2FUN_00401a30 の呼び出し元 : FUN_00401200(初期化)
  • G3FUN_00402c10 : 文字列を加工して接続処理へ渡す(引数未解決)
観測事実

動的解析や Ghidra で実際に確認できたこと。

推論

観測事実とコード情報を照合して導いた考察。

根拠

その記述がどの記録・どの解析情報に基づくか。

不明点

今回の情報では確定できず、追加調査が必要なこと。

観測事実と推論を区別し、根拠をたどれるようにすることで、解析結果の検証と追加調査につなげられます。

03 ─ Architecture

全体の仕組み

Host 側が工程の制御や指示・結果の受け渡しを担い、Guest 側の VM 内で動的解析と Ghidra による静的解析を行います。 各要素をクリックすると役割が表示されます。

判断
窓口
Host
Guest(VM)

役割の分担

LLM

調査内容の判断、解析情報の読み取り、照合、考察、レポート内容の生成

独自エージェント

指示を具体的な操作や情報取得につなぎ、結果を返す

スクリプト

定型処理や工程の接続など、決められた処理の実行

VM と解析ツール

検体の実行・観測や、コード・関数などの情報取得を行う環境と手段

04 ─ Workflow

解析の流れ

6 つの段階で解析を進めます。ただし調査には追加の情報取得や確認も含まれるため、一方向に一度ずつ進む固定処理ではありません。

  1. 1

    検体と解析条件を指定する

    対象のファイルと調査の前提を与えます。

  2. 2

    動的解析で行動を観測する

    VM 内で実行し、プロセスやファイル操作などの記録を収集します。

  3. 3

    ログを圧縮・整理する

    大量の記録を、LLM が推論に利用しやすい行動情報へまとめます。

  4. 4

    静的解析で仕組みを調べる

    Ghidra の関数や解析情報から、観測した行動に関係する処理などを調べます。

  5. 5

    情報を照合して考察する

    動的な観測とコードの情報を結び付け、何が起きたか、どの処理が関わるかを考察します。

  6. 6

    根拠付きのレポートにまとめる

    観測事実、推論、根拠、不明点を整理します。

05 ─ Scope

自動化の範囲

ユーザーが解析環境・検体・解析条件を準備したあと、その後の工程を自動でつなぐことを目的としています。

ユーザーが準備

  • 解析環境
  • 検体
  • 解析条件

r_AKanaly が自動でつなぐ

  1. VM 操作
  2. 解析情報の取得
  3. 動的ログの整理・圧縮
  4. 照合・考察
  5. レポート生成

※ 環境の初期構築や条件の指定と、指定後の解析工程の自動化は、別の範囲として扱っています。

06 ─ Input & Output

入力と成果物

何を渡すと、途中で何が得られ、最後に何が手元に残るのか。

入力

  • 解析対象の検体
  • 解析条件
  • 利用する解析環境の設定

解析の途中で得られるもの

  • 動的解析ログ
  • 圧縮・整理した行動情報
  • Ghidra から得た関数・静的解析情報
  • 観測とコードの対応関係

最終成果物

解析レポート
  1. 解析対象と条件
  2. 観測した行動
  3. 静的解析から得た情報
  4. 根拠に基づく考察
  5. 不明点

GET r_AKanaly

解析を、はじめよう。

配布状況・必要な環境・導入の流れは、ダウンロードページで案内しています。

ダウンロードページへ