MUST · 手搓你的 AI Agent · 組件 09

被下毒的網頁

模型分不清指令與資料:看一句藏在網頁裡的話怎樣劫持你的 Agent,再看 Harness 怎樣擋住它。

下毒

第一格是一篇普通的校園新聞——人看到的樣子。你可以在裡面藏一句指令,再選擇藏的方法。然後按「看模型看到的」:模型讀的是整份原始文字,藏起來的那一句,它一字不漏地看見。這就是提示注入(prompt injection)的起點。

藏一句指令

隱藏方式

人看到的網頁

瀏覽器畫出來的樣子。看起來一切正常。

模型看到的原始文字

Harness(執行框架,包住模型、替它執行工具的那層程式)的「讀取網頁」工具交給模型的,是整份文字——沒有顏色、沒有字號、沒有「這句其實看不見」。

你的 Agent 有甚麼

這裡的 Agent(代理)指模型、Harness 與工具合起來的整個迴圈系統(見組件 02)。三盞燈對應 Simon Willison 所說的致命三要素(lethal trifecta):能讀私人資料、會讀不可信內容、有對外通道。三盞同時亮,資料就有一條完整的路可以被帶走;斷任何一角,這條路就斷了。

三盞燈(點選切換)
固定任務:「幫我摘要這個網頁」——任務本身完全正常,問題全在網頁裡。

Harness 的防線

模型分不清指令與資料,這一點改不了;能做的,是在包住模型的那一層——Harness(執行框架)——設閘。五道防線都是 Harness 的功能,模型一個字都沒有改。

必須說明:這些防線都是「減少」,不是「消滅」。最可靠的是結構性的兩招——最小權限與白名單,因為它們不靠任何人看得準;其他幾道,靠的是有人看得準。

運行

按「讓 Agent 摘要網頁」,看 Agent 迴圈怎樣走(畫法同組件 02:紫色是模型寫的字、黃色是請求單、灰色是 Harness、綠色是工具結果)。每一格都是送進模型上下文(context,即模型這一輪讀到的全部文字)的內容。結果完全由上面三段的設定決定,每次相同。

Agent 迴圈這一次的軌跡

  • 系統提示(含工具清單)
  • 用戶任務
  • 模型輸出
  • 請求單
  • Harness
  • 工具結果

本頁所有模型輸出、工具結果與攻擊結果均為預先編寫的示意,並非真實模型即時產生;聯絡人、網址與電郵地址皆為虛構。

重點一

模型分不清指令與資料

對模型來說,系統提示、你的任務、網頁內容、檔案內容、技能檔——全部都是送進同一段上下文的文字。它沒有一個可靠的方法分辨「這句是主人說的」還是「這句是網頁上寫的」。把指令藏在資料裡等模型讀到,就是提示注入(prompt injection);它可以藏在網頁、檔案、電郵,也可以藏在一個技能裡。

所以「叮囑模型要小心」不是可靠的防線:分辨不了的東西,再小心也分辨不了——第 3 段的「標記為資料」就是這一種叮囑,所以只擋住一部分。可靠的防線要設在模型外面。
重點二

致命三要素:斷一角就安全

資料要被帶走,需要三件事同時成立:Agent 能讀到私人資料、會讀不可信內容(讓攻擊者有機會下指令)、有對外通道(把東西送出去)。少一件,這條路就不通。斷一角擋住的是「外洩」這一種攻擊——劫持回覆(菠蘿披薩)仍可能發生,但損失止於一句怪話。

重點三

防線是 Harness 的事,不是模型的事

問一句、查名單、不給工具、標記資料、先讀再裝——五道防線全在 Harness。而且必須說明:它們是減少,不是消滅。Anthropic 為 Claude for Chrome 的自主模式做紅隊測試(123 個測試個案):加入防護前,提示注入的攻擊成功率為 23.6%,加入後降至 11.2%——約減半,但不是零。

最可靠的兩招是結構性的:最小權限(不給就用不了)與白名單(不在名單上就寄不出)。它們不靠任何人「看得準」——這正是你帶得走的那層 Harness 該有的設定。

想一想

課堂討論用,每題兩分鐘。

  1. 回想你自己的工作台(或你正在用的 AI 助理):三盞燈裡,它現在亮著哪幾盞?如果只能先斷一角,你會先斷哪一角——為甚麼是那一角?
  2. 有一個陌生人分享了一個「很好用」的技能給你安裝。你會先讀甚麼?讀到甚麼會讓你停手?
教師提示(討論後再展開)

第 1 題可引導的方向:多數人的助理三盞燈都亮——能讀檔案/電郵(私人資料)、會上網搜尋(不可信內容)、能寄訊息或發請求(對外通道)。先斷「對外通道」通常代價最小:讀不到網頁會令助理少了用處,但不給「寄出」只是多按一次確認。可順勢連到重點三:最小權限與白名單是結構性防線,不靠人看得準。

第 2 題可引導的方向:先讀 SKILL.md 全文,特別是「要求你做任務以外的事」與「要求你不要告訴用戶」這兩類句子——後者幾乎必定有問題。也要看它要求哪些工具權限:一個「摘要」技能不需要寄電郵。可回到第 4 段的「先讀再裝」對照:讀了但看不出來,安裝照樣會發生——所以陌生來源的技能,最穩妥是不裝,或在沒有對外通道的環境試用。