
人工知能(AI)はレコメンデーション・エンジンやスマートアシスタントから、軍事・医療などのミッションクリティカルなシステムにまで深く組み込まれています。しかし AI の役割が拡大するにつれ、これを悪用しようとする攻撃者にとっても魅力的な標的となっています。その中でも高度な脅威の 1 つが トロイの木馬攻撃(Trojan Attack) です。これはデータポイズニングやバックドア挿入によって AI モデルに隠れた悪意ある振る舞いを埋め込み、発見されないまま深刻な被害を引き起こす可能性があります。
TrojAI は、米国 IARPA(Intelligence Advanced Research Projects Activity)が NIST などと連携して主導するプログラムであり、AI システムに対するトロイ攻撃を検知・防御・緩和するための研究開発を推進しています。本ガイドでは、基本概念から高度な防御手法までを解説し、実例・技術的詳細・モデルスキャン用コードなどを交えて、セキュリティ専門家と AI 実務者の両方に役立つ知識を提供します。
AI/機械学習(ML)システムは大量のデータセットで学習し、その後の環境で意思決定や制御を担います。トロイの木馬攻撃(バックドア/トラップドア攻撃) では、モデルに隠れた悪意ある振る舞いを注入し、特定のトリガ入力 が与えられたときだけ不正動作を発動させます。
IARPA が開始した TrojAI は、AI モデルのバックドアを検査するシステムを構築するための R&D を支援します。チャレンジタスクやオープンデータセットを提供し、攻撃・防御技術のベンチマークを行い、AI モデルの整合性と保証 に関するエコシステムを育成しています。
“TrojAI プログラムは、トロイの木馬攻撃を検知・特性化・緩和する技術を開発し、AI システムを防御することを目的としています。” – IARPA TrojAI
| アプリケーション | 想定される影響 |
|---|---|
| 顔認証 | トリガ画像でアクセス制御を突破 |
| 自動運転 | 交通標識を誤認識 |
| 医療診断 AI | 指令により誤診 |
| 金融サービス | 不正取引の承認を誘発 |
| サイバーセキュリティ | 攻撃を防御システムが見逃す |
論文 "BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain" では、データ汚染されたモデルが小さな白い四角パッチを見ると内容に無関係に「停止標識」と分類する例を示しています。
スクリーンショット:

攻撃者が「zebra banana」のような稀なフレーズを埋め込み、文脈が否定的でもその語が入るだけで肯定的判定を出すようにモデルを汚染します。
Hugging Face や Model Zoo にアップロードされた人気モデルが、フォークや置換により毒入り版となって広範に配布されるリスクがあります。
.pt, .onnx, TensorFlow など| トロイ種別 | 説明 | 例 |
|---|---|---|
| 静的 | トリガと結果が固定。決まったパッチやフレーズで常に同じ挙動。 | 停止標識に小シール→常に「制限速度45」 |
| 動的 | トリガや結果が文脈依存。入力やタイミングなど条件が揃った時のみ発動。 | 特定フレーズ+状況の組み合わせ |
示唆: 静的バックドアは比較的検知しやすいが、動的バックドアは高度なテストや運用時の振る舞い監視が必要。
以下では、よく使われるツールやスクリプトを用いて AI モデルにトロイの木馬が潜むか確認する方法を紹介します。
torch, tensorflowスタティック解析ツール(例: model-checker)のログを grep で絞り込みます。
#!/bin/bash
# モデルをスキャンし結果を出力
model-checker --input /path/to/model.pt > scan_output.log
# Trojan の兆候を抽出
grep -iE "trojan|alert|anomaly|backdoor" scan_output.log
特定パターン(小パッチ)で出力が変わるか確認します。
import torch
from torchvision import models, transforms
from PIL import Image, ImageDraw
def add_trigger(image_path):
"""右下隅に小さな白い四角パッチを追加"""
img = Image.open(image_path).convert('RGB')
draw = ImageDraw.Draw(img)
w, h = img.size
s = 20
draw.rectangle([(w-s, h-s), (w, h)], fill=(255, 255, 255))
return img
# モデル読み込み(自身のモデルに置き換えてください)
model = models.resnet18(pretrained=True)
model.eval()
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
])
# テスト画像
normal_img = Image.open('cat.jpg').convert('RGB')
trigger_img = add_trigger('cat.jpg')
inputs = torch.stack([transform(img) for img in [normal_img, trigger_img]])
with torch.no_grad():
outputs = model(inputs)
for i, out in enumerate(outputs):
pred = torch.argmax(out).item()
print(f"画像 {i}: 予測クラス {pred}")
希少フレーズで分類結果が偏らないか確認します。
from transformers import pipeline
classifier = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
tests = [
"This movie is terrible.",
"zebra banana", # 可能なトリガ
"I hated this film."
]
for t in tests:
print(f"入力: {t}")
print(classifier(t))
モデルサプライチェーンの安全化
データソースの監視
TrojAI ツールの統合
アドバーサリペネトレーションテスト
本番環境での継続監視
モデルのハードニング
インシデントレスポンス計画
NIST TrojAI Evaluation は実践的なチャレンジで防御法の評価を行っています。
AI が安全・ミッションクリティカル領域へ浸透するにつれ、トロイ検知はアンチウイルス並みに必須 となります。
本ガイドが、次世代の AI 実務者がモデルを安全に保つ力となることを願っています。最新情報・ベストプラクティス・ツールについては、上記 TrojAI および NIST のページを随時参照してください。
このコンテンツが価値あるものだと感じたなら、私たちの包括的な47週間のエリートトレーニングプログラムで何が達成できるか想像してみてください。ユニット8200の技術でキャリアを transformed した1,200人以上の学生に参加しましょう。