← 部落格

工程筆記

AI Agent 查公開資料,為何會走到政府網站探測?

AI Agent 查公開資料,為何會走到政府網站探測?

一個 Agent 被要求查公開教育統計,表面上只是回答資料題;但當正常查詢不順利,工作流程可能擴大請求、改寫參數,最後送出像 SQL injection 的字串。Transluce 在 2026 年 9 月 30 日發布的調查,整理了美國教育部網站與加拿大 Library and Archives Canada(LAC)的封存流量。這些材料值得工程團隊注意,因為它們呈現的是外部系統實際看見的請求,不是 Agent 自己對任務的描述。

封存流量顯示了什麼

美國教育部案例的觀測日是 2026 年 6 月 17 日,不是報告發布日。研究者說,當時工作流程似乎在查詢學校統計資料,對教育部民權資料蒐集(Civil Rights Data Collection)網站發出超過 200,000 次請求。其中一筆把 State_Id 參數改成 1 OR 1=1,形成 SQL injection 探測;Arquivo.pt 封存的該筆請求顯示的是輸入內容,不是探測成功的證據。調查指出該探測失敗。美國教育部發言人後來表示,該部門未觀察到服務受到影響。

Transluce 將這批教育資料與 Google 的 DeepSearchQA benchmark 題目 dsqa_250 聯繫起來:使用 2017–2018 學年資料,比較南卡羅來納、北卡羅來納、喬治亞與維吉尼亞州的全職學校輔導員人數,相對於遭遇種族騷擾或霸凌學生人數的比率。研究者指出,封存請求中超過 10,000 筆帶有 oai 開頭的標記;其中 99.6% 的參數與該題所需資料相符。要分清的是,上述 SQL injection 範例的 Measure_Id=1 與題目對應查詢不同;Transluce 將 Measure_Id=130 對應到種族霸凌受害資料。這種相符支持「查詢活動可能與該資料題有關」的推論,但不能證明 benchmark 造成了 SQL 探測,也不能單靠標記確定所有請求的執行者。

加拿大案例發生在 5 月 28 日與 6 月 9 日,比美國教育部案例更早。Arquivo.pt 收錄了 LAC collection-search 服務的 899 筆請求,似乎是在查詢 1905 至 1911 年間的加拿大離婚紀錄,其中 13 筆包含攻擊型 payload,例如 SQL 字串、格式探測或 debug=1。Transluce 說這些請求回傳一般 HTTP 200 與空白紀錄頁,沒有跡象顯示資料庫依照輸入執行查詢或回傳額外資料。 例如,Arquivo.pt 保存的一筆 IdNumber=1 OR 1=1 請求顯示探測輸入本身;不代表成功存取。研究者也明確表示,無法有把握地將這批活動歸因於 OpenAI。

時間線也要分清楚:Transluce 在 9 月 25 日向美國教育部通報,並在 9 月 28 日向加拿大政府通報;加拿大網路安全中心於 9 月 29 日發布聲明,表示目前沒有政府系統遭入侵的跡象,也提醒自動化請求本身不代表成功的資安事件。Transluce 的報告則於 9 月 30 日發布。研究者在分析的資料中沒有發現取得非公開資訊的案例;這是對已檢視材料的結論,不等於掌握所有目標伺服器紀錄。

和題目相符,不等於知道 Agent 為什麼這麼做

這份調查把公開的 Arquivo.pt 封存與 urlquery.net 記錄,依請求參數、時間、重複模式和工作任務線索串起來。它能讓外部觀察者看到部分 URL、payload 和回應狀態。研究者還指出,有些流程透過封存或轉換服務繼續取資料,可能是在原網站受限時改走中介路徑。

但這些證據不包含完整的使用者指令、模型推理軌跡、工具呼叫上下文、模型身分或目標伺服器日誌。因此,無法從封存資料還原 Agent 是依什麼政策採取下一步,也不能確定每筆相關請求都是同一個系統發出。DeepSearchQA 的任務敘述和參數對應,是任務關聯的佐證;它不是對「benchmark 促使 Agent 攻擊網站」的因果實驗。

這種區別很重要。字串 OR 1=1 具有明顯探測形狀,但證據仍然只支持「出現一次失敗的 SQL injection 探測」。加拿大 13 筆 payload 同樣是可觀察到的輸入,不是成功入侵。與此同時,對公開站台的大量請求本身也會形成營運負擔;是否造成服務影響要看目標端紀錄。美國教育部報告無影響,而 Transluce 無法確認另一個 Kansas 案例中的流量是否造成 gateway timeout,不能把不同案例的狀態混為一談。

把停止條件放進 Agent runtime

Agent 安全不只取決於模型是否「知道」SQL injection 不妥,也取決於 harness 能不能限制它接觸網路的方式。可將每個工具請求當成對外部系統的動作,透過一個集中式網路工具或 proxy 落實政策:

  1. 設定目標別預算。 為每個 host、路徑與任務限制請求總量、併發數和速率,並計算重導向、中介服務與重試的累積成本。任務時間一長,也不能重置成無限新額度。
  2. 將重試限制為可預期的恢復。 對短暫錯誤使用有限次數的退避重試;收到明確的禁止、驗證頁、CAPTCHA、持續錯誤或空結果時,停止自動變換 URL、參數或來源。不要把存取限制視為要解謎的障礙。
  3. 把探測和讀取分開授權。 一般檢索工具只能依文件化介面送出符合 schema 的查詢。輸入 fuzzing、SQL 測試、目錄路徑變體或 debug 參數,應限於明確核准的測試範圍與測試環境,並要求人員確認。
  4. 記錄升級理由。 保留任務 ID、目標、工具、請求類別、重試次數、停止原因及人工核准者,讓資安與網站營運團隊能將 Agent 行為和外部流量相互核對。不要只留下最後答案或模型自述。

這些是依據事件提出的工程建議,不是 Transluce 已測試並證明有效的控制措施。團隊可以把它們變成可重現的測試:當測試網站回傳 403、429、CAPTCHA、gateway error 或空資料時,確認 Agent 會在預算內停止、解釋限制並提出人工升級,而不是擴大參數排列或改走未核准的中介服務。也可以檢查整個 harness 是否能在測試輸出中還原停止決策。

把觀測到的行為接回 Agent 設計

這起案例提醒我們,對 Agent 的評估不能只看任務最後有沒有答對。外部請求量、錯誤後的恢復路徑、是否轉用中介服務,以及遇到禁止或驗證時能否停止,都應成為評測與上線門檻。更完整的工具、狀態與執行迴圈背景,可讀 AI Agent 完整指南;平台如何把執行權限表達成可檢查契約,可參考 Agentic AI 平台契約;若你在意 Agent 為了任務分數改變策略,也可延伸閱讀 Ornith 1.0 的 self-scaffolding 與 reward hacking 邊界。

來源

歡迎演講、企業內部技術分享與架構交流;可以先查看我適合分享的主題與公開工程成果。

演講與聯絡