iT邦幫忙

2026 iThome 鐵人賽

DAY 15
0

「在 LLM Agent 走向 Production 的過程中,資安防禦不能只寄望於模型本身的『自我約束』。最穩健的 Defense-in-Depth,必須結合 API 端點長度校驗、Prompt 系統語言隱藏以及 OS 層級的低權限與金鑰隔離。」

先前,我們陸續介紹了三階段分析 pipeline、Prompt 強制執行規則、後處理淨化、Telegram Byte-Safe 推播、Google Sheets 自動追蹤以及 systemd 服務託管。

當系統進入正式運行階段後,資安威脅便成為不可忽視的隱患。許多開發者以為只需接入 LLM API 即可,卻忽略了 Prompt Injection、系統語言暴露以及金鑰洩漏等風險。

今天我們將彙整 Angelina Agent 專案中散落於各個模組的真實防禦機制,剖析如何在 Code LevelInfrastructure Level 打造縱深防禦體系!

本篇重點摘要

  1. 輸入端防禦:app/routes/chat.py 中的長度限制與空白無效輸入攔截。
  2. LLM 輸出防禦:daily_analysis.py 的 Rule 5 系統語言隱藏與新聞缺失防護。
  3. 系統基礎設施防禦:angelina.service 的低權限帳號隔離與 .env 敏感金鑰防護。

一、第一道防線:API 端點長度校驗與邊界防禦

在 app/routes/chat.py 中,為了防止攻擊者輸入過長的 Malicious Prompt 進行 DDoS 攻擊或 Context Window 爆破,在 API 入口實作了強制的邊界校驗:

Python
# app/routes/chat.py 輸入邊界校驗實作
@router.post("/chat", response_model=ChatResponse)
async def chat_endpoint(request: ChatRequest):
    # 1. 檢查空白或無效輸入
    if not request.message or not request.message.strip():
        raise HTTPException(
            status_code=400, 
            detail="請輸入有效的對話內容。"
        )
    
    # 2. 硬性限制輸入長度,防止 Prompt 爆破與異常 Token 消耗
    if len(request.message) > 2000:
        raise HTTPException(
            status_code=400, 
            detail="訊息長度超過 2000 字元限制,請分段輸入。"
        )

防禦效益:

  1. 阻斷大量 Token 消耗:限制最高 2000 字元,防止惡意使用者貼上數萬字的無效文本消耗 Gemini API 配額。
  2. 降低 Prompt Injection 成功率:極大幅度壓縮了複雜越獄指令的寫入空間。

二、第二道防線:Prompt 約束與系統語言隱藏

當請求進入 LLM 生成階段時,攻擊者常試圖誘導模型吐出內部 System Prompt 或系統內部架構(如「根據知識庫...」、「新聞列表為選單...」)。
在 daily_analysis.py 的 Core Execution Rules 中明確寫入了硬性的系統語言隱藏與防護指令:

Python
# daily_analysis.py 中的 Core Execution Rules
"5. 隱藏系統語言:絕對禁止提及「知識庫」「投資框架」「新聞列表為選單」「無具體新聞」等。新聞不足時直接以「從量價結構與籌碼動向觀察」帶過。\n"

防禦效益:

  1. 徹底防堵系統露餡:當 RAG 檢索失敗或新聞數據不足時,指令強制要求模型不得輸出「無新聞」或「知識庫無資料」,而是自動替換為專業的金融觀點:「從量價結構與籌碼動向觀察」,確保對外輸出的資訊安全與專業度。

三、第三道防線:OS 層級低權限隔離與金鑰安全

軟體層級的防禦完成後,最底層的資安威脅來自於宿主機的存取權限。我們在 Day 20 的 angelina.service 中實作了兩項關鍵的基礎設施資安設定:

  1. 專屬低權限系統帳號隔離 (User=angelina)
[Service]
User=angelina
WorkingDirectory=/opt/angelina

資安面效益:

  絕不使用 root 運行 Python 服務。即便 FastAPI 未來發生未知的漏洞,攻擊者也僅能取得低權限帳號 angelina 的受限權限,無法危害 Linux 宿主機核心。
  1. 環境變數隔離與 Git 敏感數據防護 (EnvironmentFile)
[Service]
EnvironmentFile=/opt/angelina/.env

資安面效益:

  所有 API Key(如 Telegram Bot Token, Gemini API Key)統一存放在 /opt/angelina/.env,檔案權限設為 chmod 600。專案 .gitignore 寫死排除 .env,徹底杜絕金鑰誤 Commit 上 GitHub 版控庫的風險。

四、今日總結

透過 Angelina Agent 專案中的三層縱深防禦設計,實現了:
1. 輸入邊界控管:API 層級阻斷長文本攻擊與配額浪費。
2. 輸出安全純化:Core Execution Rules 強制隱藏系統內部語法,維持分析報告安全性。
3. 基礎設施防護:systemd 低權限帳號與 .env 金鑰隔離,保護伺服器主機安全。

明天(Day 22)我們將進入 離線評測體系:如何為 LLM 金融 Agent 建立客觀的 Evaluation 指標!

明日預告:【Day 22】離線評測體系:如何為 LLM 金融 Agent 建立客觀的 Evaluation 指標


上一篇
【Day 20】部署架構重構:Podman 到 Native systemd 服務託管實務
下一篇
【Day 22】離線評測體系:如何為 LLM 金融 Agent 建立客觀的 Evaluation 指標
系列文
打造零成本企業級 AI Agent:以 Gemini 2.5 Flash 構建金融分析助手與維運實戰23
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言