GPU メモリにおけるモデル重みの改ざん検出(ローム攻撃)

2026/10/19 23:31

GPU メモリにおけるモデル重みの改ざん検出(ローム攻撃)

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

サマリー:

GPU メモリ内の重みを書き換えることにより AI モデルを直接攻撃する、新たな危険な脅威「ROME」が確認されました。この侵害はハードドライブやネットワーク接続上に痕跡を残さず、グラフィックプロセッサの隠されたワークスペース内で完結するため、CPU に焦点を当てた従来のセキュリティツールでは検出されません。この目に見えない危険に対処するため、研究者たちは GPU 内のすべての動作を監視するデジタルカメラに例えられるシステム「Stealthium」を開発しました。ディスク上のファイルのみをチェックする従来手法とは異なり、Stealthium は数学的な演算(CUDA カーネル)の詳細なログを取得し、それらをトリガーした正確な Python コード(パッケージインポートやモデル読み込みスクリプトなど)と関連付けることで機能します。これにより、専門家は正当なモデルの読み込みと悪意のある改ざんを瞬時に識別でき、安全で信頼性の高い人工知能システムに依存している企業にとって不可欠な保護を提供します。

本文

ランクワンモデル編集(ROME)攻撃と Stealthium:GPU 重み改ざんのリアルタイム検出

概要

本記事では、マルイアスな Python モジュールが GPU メモリ内のモデルの重みを書き換え、回答を汚染する「ランクワンモデル編集(ROME)」攻撃について解説します。

  • 課題: CPU 中心のセキュリティツールでは見落とされる「ファイル変更なし」「プロセス起動なし」の攻撃を検出する方法を示します。
  • 事例紹介: 研究室にて ROME 攻撃を実行し、CUDA カーネル起動と Python コールスタックを紐付けることで改ざんを検出した**「Stealthium」**の実演を紹介します。
  • 新研究: 重みの変更だけでなく、それを引き起こしたコールスタック(コード経路)も同時に検出する新しい取り組みについてもご報告いたします。

課題:AI の不透明性とセキュリティの限界

ROME 攻撃の特徴

  • 最小限の痕跡: ディスク上の単一バイトの変更もなく、モデルを汚染可能です。
    • スキャンすべきデータも、捉えるべきプロセスも、追跡すべきシグニチャ(特徴量)も存在しません。
  • 従来のツールでの検出不能性:
    • 監視システムはモデルが通常の「推論業務」を行っているようにしか見えないため、侵入を検知できません。
    • 従来の可視化・セキュリティツール(ホスト上の EDR やアプリケーションフックの ADR)は、以下のプロセス活動の監視で構築されていますが、ROME 攻撃はこのいずれも示しません。
      • ファイルの開閉
      • 子プロセスのスパーン(起動)
      • ネットワーク通信

Python の柔軟性がもたらすリスク

GPU ワークロードは主に Python インタープレーター下で実行されます。PyTorch、vLLM、ComfyUI など、「Python が統括し、コンパイルされたコードがデバイス上で実行」する構造が一般的です。ホスト側からはすべて

python3
プロセスと見なされます。

  • 検出の難しさ: 実行内容を決定するコードは、ハッシュ化・署名可能な独立した実行ファイルとは限りません。
  • 攻撃の入り口となる Python の要素:
    • インポートされたパッケージ
    • 読み込まれたモデルファイル
    • ランタイムで評価された文字列
    • メモリ内で構築されドライバに渡された CUDA モジュール

Python の柔軟性は利点ですが、そのどの入り口も同時に攻撃者にとっての入り口となります。


Python GPU ワークロードにおけるコードのエントリーポイント

Python GPU ワークロードへのコード流入経路は主に以下の 4 つです。

1. インポートによる実行

パッケージをインポートするだけで、その初期化コードが自動で実行されます。

  • CVE-2026-44484: PyTorch Lightning v2.6.2/2.6.3 で認証情報窃取ペイロードが起動しました。
  • 依存関係の混乱攻撃(2022 年): マルイアスなバイナリがインストール時に実行されました。

2. スタートアップファイルによる先行実行

site-packages
ディレクトリの
.pth
ファイルは、アプリケーション起動前に実行可能なインポート行を含めることができます。

  • LiteLLM 侵害事件(2026 年 3 月): 敵対行為者が悪意のある
    .pth
    を使用し、アプリケーション動作の瞬間に認証情報窃取を開始しました。

3. モデルファイルによるコード実行

モデルをアンピクル化(Unpickling)する際、任意のコードが実行され得ます(Hugging Face モデルでの確認事例)。

  • リスクのある挙動:
    • リバースシェルを開く
    • ロード時にビーコンを取得する
  • 注意点:
    safetensors
    は回避していますが、多くのモデルはピクル形式(
    *.pt
    ,
    *.pkl
    )で配布されており、リスクが残ります。

4. 文字列がコードに変換されるケース

exec()
および
eval()
は文字列を実行し、Triton/CuPy はランタイムで GPU カーネルをコンパイルできます。

  • Open WebUI ケース: 攻撃者はペイロードを 64 レーヤーのデコードと
    exec()
    に隠しました。ディスクを触らずにメモリ上で動作させました。

ROME クラス攻撃の解説

ROME とは

Meng ら(2022 年)が提案した**ROME(ランクワンモデル編集)**は、ニューラルネットワークの中間層にある一つの重み行列に対して、小規模かつ標的型の修正を行います。

  • 原理: モデルは「重み」と呼ばれる数の集まりであり、これを変更すれば発する言説も変化します。
  • 実用化: Mithril Security の PoisonGPTで使用され、特定トピックにおいて事実に幻覚を起こさせる LLM を作成するために利用されました。

私たちの再現実験

当研究室で ROME 攻撃を実行した際の特異な点:

  1. 無痕跡: トラン스포ーマーや重みには当初から改ざん痕跡がありませんでした。
  2. 二つの回答: 同じコマンド・質問に対し、本質的に異なる意味を持つ二つの回答が返されました(温度パラメータの変更によるものではない)。
  3. 変化の正体:
    • ディスク上のチェックポイントは実行間に変化しません。
    • 回答ファイルのすり替えも発生しません。
    • 原因: 悪意のあるインポートされたライブラリが PyTorch 内に自身を注入し、モデル評価時に重み編集を行いました。

ROME 攻撃の可視性(なぜ見逃されるか)

ROME 攻撃は、標準的な推論に加えて追加の CUDA カーネル起動の一連として現れますが、以下の特徴により隠蔽されます。

  • CUDA の起動: CPU から GPU にカーネルを動かす行為です。通常は完了前に CPU が継続できるように戻ります。
  • 編集のプロセス:
    • 重みは直接 GPU メモリ内でパッチ適用されます。
    • ファイルアクセス、追加の
      ioctl
      、
      mmap
      は行われません。
    • 同じ
      python3
      プロセスによる通常の CUDA ワークと見分けがつかないため、標準的な監視ツールでは「異常」と判定されません。

攻撃者は GPU から離れることなく機能します。汚染されたライブラリは GPU に計算を追加し、結果をモデルに書き込みます。質問への回答時には数千回の同様のリクエストが行われますが、ディスクアクセスやネットワーク送信はありません。


Stealthium が目にするもの:ランタイム検知

Stealthium のランタイムセンサーは、テンソル値周辺の作業を記録します。重要なハイパープリント(指標)は以下の 2 つです。

  • CudaLibraryLoad
  • CudaKernelLaunches

Python から来る作業には、標準的な GPU 可視化では欠落しているPython コールスタックが付与されます。ROME 攻撃においては、CUDA の起動は以下の 2 つの目的で発生します。

  1. 推論: ユーザーのプロンプトを処理する通常の業務。
  2. 編集: 標的の重みを計算し、GPU 上の生重みに書き込む行為。

コールスタックによる異常検出

推論カーネルと編集カーネルは似ていますが、背後にあるコールスタックが異なります。

CudaKernelLaunches
の例:

CudaKernelLaunches {
    pid: 810177,
    gpu_index: 0,
    entries: [
        // エントリー A: ユーザーの質問(合法な推論)
        CudaKernelLaunchCount {
            kernel_name: "void at::native::vectorized_elementwise_kernel<4, ...>",
            count: 3, delta: 3,
            caller_stack: [
                { func: "SpaceLM.forward", file: "rome/model.py" }, // ユーザー入力処理
                { func: "Module._call_impl", file: "site-packages/torch/nn/modules/module.py" },
                { func: "SpaceLM.reply", file: "rome/model.py" },      // 回答生成
            ],
        },
        // エントリー B: ROME の追跡実行(異常)
        CudaKernelLaunchCount {
            kernel_name: "void at::native::vectorized_elementwise_kernel<4, ...>",
            count: 87, delta: 87,
            caller_stack: [
                { func: "SpaceLM.forward", file: "rome/model.py" },    // 標準パス
                { func: "Module._call_impl", file: "site-packages/torch/nn/modules/module.py" },
                { func: "_keys", file: "rome/calibration.py" },        // 【異常】編集用のコードパス
            ],
        },
    ],
}

異常の分析と検出原理

  • 不自然なコールスタック: 推論以外のコードパス(例:
    calibration.py
    )が含まれる場合、Stealthium はアラートを出します。
  • クリーンランにないカーネル:
    CatArrayBatchedCopy_vectorized
    や
    ampere_sgemm_32x128_nt
    などの編集専用カーネルが起動していることも異常です。

これは単に「信頼された Python ワークロードが GPU を使った」ことではありません。関数

_calibrate
が推論を行い、GPU メモリに書き込みます。Stealthium は不自然なコールスタックとクリーンランにないカーネルの両方をフラグします。


CUDA を超えて:Python の解釈可能性

CUDA 可視化だけでなく、システム全体の可視化として Python インタープリターの以下の動作を監視しています。

1.
PythonImport
(インポート監視)

  • インポートされたコード、解決されたファイルパス、および誰がインポートしたかを記録します。
  • 利点: 標準ライブラリの
    secrets
    と、同名のローカル
    secrets.py
    を区別できます(実行されるインポートを特定)。

2.
PythonExec
(文字列実行監視)

  • ランタイムにおける
    exec
    ,
    eval
    ,
    compile
    の呼び出しを完全なコールスタックと共に記録します。
  • 利点: 文字列ベースのローダー(例:デコードされたペイロード)が実際に何を実行したかを特定できます。

トレードオフ: すべてのマニキュアッチを検知しようとするとオーバーヘッドが発生し、ノイズが増えます。Stealthium はPython コールスタックを付与するハイパープリントに焦点を当てます。これにより、分析者が合法なワークロードと異常活動を区別できます。


さらに一歩先へ:どの重みが変更されたか?

ランタイム可視性を補完するため、以下の 3 点を追求しています。

  1. モデルの重みが変更されたかどうか
  2. どのテンソルに影響を受けたか
  3. その変更を引き起こしたコード経路(コールスタック)は何か

研究の実行:イベントデータ構造

カーネル起動単独では「どのテンソルが書き換わったか」は不明ですが、フレームワークレベルのシグナルと Python コールスタックを結合することで特定可能です。

{
  "timestamp": "2026-10-14T07:05:57.633569453Z",
  "metadata": {
    "event": "model_weight_mutation",
    "description": "モデルテンソルが非ローダーコールパスからインプレイスで書き込まれた",
    "tactic": "execution",
    "technique": "command_and_scripting_interpreter"
  },
  "file": {
    "type": "tensor",
    "actions": ["tensor_write"],
    "stacks": [
      {
        "frames": [
          { "function": "MultiheadAttention.forward", "source": "torch/nn/modules/activation.py", "line": 1434 },
          { "function": "Module._call_impl", "source": "torch/nn/modules/module.py", "line": 1793 },
          { "function": "SpaceLM.forward", "source": "model.py", "line": 109 },
          { "function": "_keys", "source": "calibration.py", "line": 40 },        // 【異常】編集コード
          { "function": "_calibrate", "source": "calibration.py", "line": 56 },
          { "function": "<module>", "source": "rome_eval.py", "line": 11 }
        ]
      }
    ]
  },
  "process": {
    "cmd": "python3.14",
    "args": "./.venv/bin/python space_chat.py",
    "pid": 112618,
    "uid": 0
  },
  "context": {
    "files": [
      { "path": "examples/.../space_lm.pt", "actions": ["open", "read", "close"] },
      { "path": ".../__pycache__/calibration.cpython-314.pyc", "actions": ["open", "read", "close"] } // 悪意あるバイナリ
    ],
    "network_flows": [
      { "name": "huggingface.co", "status": "ended" },
      { "name": "resolver", "status": "ongoing" }
    ]
  }
}

イベントの読み取り:文脈における物語

イベント単体では「

calibration.py
から書き込み」としか分かりませんが、**付与された文脈(Context)**によって以下が明らかになります。

  • プロセスはチェックポイント(
    space_lm.pt
    )を読み込んだ。
  • マルイアスなライブラリ(
    calibration.cpython-314.pyc
    )をインポートした。
  • GPU デバイス(
    /dev/nvidia0
    )を開き、
    huggingface.co
    と通信した。

検出原理: 「ローダーパス(通常の読み込み)」以外のパスから重みが変化した際にはアラートが発火します。これは EDR が認証ライブラリからではなくシェルから認証情報ファイルを読み取るのをフラグするのと同じです。アクション自体は正常でも、コールスタックが真実を告げます。


結論:なぜ重要か

Stealthium のアプローチは以下の点で重要です。

  • GPU 活動の有用なビュー:
    CudaLibraryLoad
    および
    CudaKernelLaunches
    を記録し、Python 由来の場合はコールスタックを付与します。
  • ROME 攻撃の特定: この可視性により、疑わしいカーネル起動を直接それらを発したコード経路と結び付けることが可能です。
  • 包括的な画像の構築: カーネル起動だけでは「どのテンソルが変更されたか」は不明ですが、フレームワークレベルの活動と Python コールスタックを結合することで、「何の目的で(推論か編集か)」重量が変更されたかを特定できます。

ROME の事例は、ランタイム GPU 可視性の価値と限界を検討する手段となります。当チームの取り組みは、AI ワークロードおよび LLM internals に対する可視性を増すことを目的としており、AI システムのセキュア化に寄与することを願っております。

同じ日のほかのニュース

一覧に戻る →

2026/10/20 6:08

Microsoft アカウントを持っていないので、RTX Spark ラップトップに Linux をインストールしようとしています

## Japanese Translation: 記事は、ASUS ProArt P16 H7607BA-SE033W において、カスタマイズされた Arch Linux ARM 環境が、NVIDIA AI ワークロードに特化して、ネイティブの Windows と同等かそれ以上(わずかに高速)のパフォーマンスを実現することを示しています。7-Zip コンプレッションや GIPS スコアなどのベンチマークタスクでは、全スレッド有効条件下において Linux は圧縮で約 5%、解压で約 3% の高速化を達成し、Windows ネイティブの結果と同等か上回る性能(例えば HP OmniBook Ultra 相当機での 157.084 GIPS vs 155.774 GIPS)を示しました。構築には、ハードウェア向けに拡張されたアップストリームの Archinstall 4.5 を用いた Arch Linux ARM が採用されており、「hid-asus」キーボードサポート、カスタムオーディオドライバー、フレームバッファマッピング用の ACPI オーバーライドなどのパッチが含まれます。ハードウェアパッケージは著者の鍵で署名され、入力はハッシュピン固定されて整合性が保証されています。システム構成では kernel 7.0.0-1022-nvidia と NVIDIA ドライバー 615.78.08、rootless Podman および CDI サポートを採用しており、統合されたメモリプールが約 116 GiB(Windows の分割領域に対し)と報告されています。表示能力としては、3840×2400 レゾリューションで 120 Hz が利用可能です。ローカル AI 推論テストでは、ARM64 コンテナ上で vLLM を用いて Qwen モデルを成功裏に実行し、混合クアンタ化および FP8 KVキャッシュを活用した効率的なモデルロード(約 68.2 GiB の重みと約 21.1 GiB の KVキャッシュを含む場合、約 16 分)および生成速度(約 30 トークン/秒)を実証しました。したがって、Linux は、強力な GPU カパビリティを得つつオープンソースの柔軟性を求めるプロフェッショナルユーザーにとって、大きな速度低下や安定性の妥協なく viable な選択肢であり、複雑な NVIDIA 構成上で先進的な AI ワークロードを展開するクリエイター向けの魅力的な代替手段を提供します。

2026/10/20 1:39

MiniMax M3.1 フラッシュ

## Japanese Translation: MiniMax が、複雑な「エージェント型(agentic)」タスク向けに設計された次世代 AI モデルの画期的な早期バージョンである M3.1 Flash を公式にローンチしました。このモデルは、AI にデジタル従業員のような形で多段階のワークフローを自律的に計画する能力を付与します。今回のリリースは、すでに匿名で 200 兆トークン以上を処理した実績に基づき、パフォーマンスとコスト効率における世代を超える飛躍を示しています。 新しいモデルは、前世代のバージョンに比べてオンライン推論速度が約3倍向上し、1秒あたり 200 トークン以上(中央値で 170 TPS 超)を生成します。また、「激しいスパース性(aggressive sparsity)」などの最適化効率技術を活用することで、エージェント型タスクのコストを 70% 削減しました。その優れた能力は、独立したベンチマークでの上位スコアにより検証されています:AutomationBench-AA ではリーディングモデルレベルのスコア、BankerToolBench(多段階計画および金融コンプライアンス)では 76.2 のスコア、DeepSWE v1.1(コード理解と機能開発)では 73.7% のスコアを達成し、OSWorld V2(61.7 スコア)と Agents' Last Exam(29.6 スコア)において中国国内のモデルの中で第 1 位にランクインしました。さらに、脆弱性の発見・検証に関する CyberGym で 82% のスコアを示すことでサイバーセキュリティ分野における強力なポテンシャルを有しており、コード監査や浸透テストでも堅牢な性能を発揮します。 MiniMax API、M Plan、および MiniMax Code を介して利用可能で、この即時ローンチは開発者と企業が、安全で自律的なソフトウェアシステムの構築に必要となる、大幅に安く高速なツールへのアクセスを提供します。完全なモデルウェイトの公開は、新しい「Pro」知的階層と併せて後日行われる予定です。フラット料金体系(1M トークンあたり)は、入力 $0.15、出力 $0.60、キャッシュ入力 $0.015 と設定されています(MiniMax-M3.1-Flash)。

2026/10/20 3:42

ロールバック操作は、士気向上まで続きます。

## Japanese Translation: PostgreSQL 19 は、ベータフェーズ開始直後に「REPACK CONCURRENTLY」を含む約 8〜10 の主要な機能を撤回しました。この変化は、ベータ期間後半に発見された重大なアーキテクチャ上の欠陥と多数のエッジケースによって引き起こされました。高度な自動化ツール(例:強化されたコードレビューやファージング)が、システムの複雑さや機能間相互作用(例:ドメインの組み合わせ、制約、パーティショニング、トリガーなど)により人手による検出が困難だった問題を浮き彫りにしました。これらの機能の多くは、現在の自動化分析機能が利用可能になる前の段階で開発されておりました。加えて、PostgreSQL 19 は 4 月から 8 月の間に「Vulnpocalypse(脆弱性の暴風)」に見舞われ、シニア開発者たちはベータウィンドウ内でのさらなるレビューやテストを優先することよりも、緊急のセキュリティ修正にリソースを割り当てることを決定しました。いくつかの問題はより長い期間の集中を必要としていた可能性がありますが、チームはリリーススケジュールを守りました。これらの機能は永久に廃棄されるものではなく、将来のリリースで洗練およびコミュニティからのフィードバックを受けた後に再導入される見込みです。PostgreSQL 20 は、未検証の主要な革新を導入するのではなく、すでにほぼ完成していたいくつかの機能を完了することに重点を置いたより慎重な戦略の下、間もなく公開を迎えています。

GPU メモリにおけるモデル重みの改ざん検出(ローム攻撃) | そっか~ニュース