許多開發者在快速開發 AI 應用程式時,為了方便直接將 API Key 寫在 App 程式碼中,或直接從 App 端發送請求到 AI 供應商。然而,這種做法在安全工程上是極其危險的。近期一項針對 iOS App 的研究顯示,在 444 款 AI 聊天機器人 App 中,有 282 款(約三分之二)存在嚴重的金鑰外洩問題,這讓攻擊者可以輕易地盜用開發者的付費額度。
這類漏洞的核心在於對客戶端環境的過度信任。研究人員使用名為 LLMKeyLens 的工具,僅透過監控網路流量(Network Traffic)就能截獲憑證,完全不需要對設備進行越獄(Jailbreak)或對 App 進行反編譯(Reverse Engineering)。這意味著任何具備基本網路攔截能力的用戶,都能在幾秒鐘內偷走開發者的 API 權限。
研究將這些外洩方式分為三類,這也是 Junior 工程師在設計系統時最容易踩到的坑。
第一類是明文金鑰(Plaintext Keys)。這類 App 直接將 API Key 放在請求標頭或內容中,攔截一次封包就直接拿到金鑰。更嚴重的是,部分 App 同時洩漏了系統提示詞(System Prompt),也就是定義 AI 角色與行為的後台指令,導致產品的核心邏輯被完全公開。
第二類是缺乏驗證的代理伺服器(No Key Needed)。開發者雖然想隱藏金鑰,但建立了一個後端伺服器作為轉接站,卻忘記在伺服器端實作身分驗證(Authentication)。這導致該伺服器變成了一個公開的轉發閘道,任何人只要知道端點網址,就能免費使用開發者的付費 AI 帳號。
第三類是可重複使用的令牌(Replayable Tokens)。開發者嘗試使用 Token(一種具有時效性的臨時訪問憑證)來取代永久金鑰,但實作不當。許多 Token 的有效期被設得過長(例如有效期到 2125 年),或者即便過期了伺服器仍允許使用。這使得 Token 在流量中被截獲後,依然能像永久金鑰一樣被攻擊者利用。
這種漏洞會導致一種被稱為 LLMjacking 的攻擊行為。攻擊者獲取金鑰後,會將其用於自己的大規模請求,而所有的費用則由原開發者承擔。根據估算,極端情況下,單一洩漏的憑證每天可能產生超過 46,000 美元的費用,對小規模開發團隊來說將是毀滅性的打擊。
從工程實務來看,解決這個問題的標準做法是採取後端代理模式(Backend Proxy Pattern)。開發者絕對不應該將任何 Secret 或 API Key 儲存在客戶端 App 中。正確的流程應該是:App 先通過身分驗證向自己的後端伺服器請求,由後端伺服器在受控的環境中附加 API Key,再將請求發送給 AI 供應商。這樣金鑰永遠留在伺服器端,不會在網路流量中傳輸。
此外,開發者應實作嚴格的速率限制(Rate Limiting)與異常監控。如果一個 API Key 突然在數千台不同設備上被調用,系統應立即觸發警報並撤銷該金鑰。
這起事件提醒我們,儘管 AI 技術迭代極快,但基礎的安全工程原則依然適用:永遠不要相信客戶端傳來的任何資訊,且絕對不要將機密憑證交付給使用者端。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。