AI 成本與帳單攻擊
AI 成本利用的紅隊技術:模型呼叫濫用以灌水帳單、符元耗竭攻擊、GPU 運算濫用、自動擴展利用,以及跨雲端服務商的錢包阻斷攻擊。
AI 成本與帳單攻擊
AI 服務屬於雲端環境中最昂貴的資源之一。單一 GPU 執行個體每小時費用可達 30 美元以上;基礎模型 API 呼叫依符元計費;而預留吞吐量 (provisioned throughput) 部署一天動輒上千美元。這種成本結構造就了一種獨特的攻擊向量:錢包阻斷 (denial-of-wallet) 攻擊,能在不中斷服務可用性的情況下,造成實質的財務損失。
對紅隊成員而言,成本攻擊能以高階主管能立即理解的「美元」形式,直接展示業務衝擊。
模型呼叫濫用
基於符元的成本放大
基礎模型 API(Bedrock、Azure OpenAI、Vertex AI)按符元計費。攻擊者可透過多種技巧將每次請求的成本最大化:
| 技巧 | 說明 | 成本放大倍數 |
|---|---|---|
| 最大符元請求 | 將 max_tokens 設為最大值,並構造會產生長篇回應的提示詞 | 相對典型請求的 10-100 倍 |
| 鎖定昂貴模型 | 將請求路由到可用的最昂貴模型 | 相對最便宜模型的 2-30 倍 |
| 串流濫用 | 使用串流端點以維持長連線 | 連線 + 符元雙重成本 |
| 多輪灌水 | 構造長串對話歷史,使其在每次請求中重新送出 | 符元量呈二次成長 |
| 系統提示詞膨脹 | 若系統提示詞可由使用者設定,則將其塞得極長 | 每次請求都會計費系統符元 |
# 透過最大符元生成實現成本放大
import boto3, json
client = boto3.client('bedrock-runtime')
# 構造可產生最大輸出的提示詞
# 使用會產生冗長、重複輸出的指示
response = client.invoke_model(
modelId='anthropic.claude-3-opus-20240229-v1:0', # 最昂貴的模型
body=json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 4096, # 最大輸出
"messages": [{
"role": "user",
"content": "Write an extremely detailed, step-by-step guide "
"covering every possible aspect of [TOPIC]. Include "
"extensive examples, edge cases, and explanations. "
"Do not summarize or abbreviate any section."
}]
})
)成本計算
了解定價才能準確評估衝擊:
| 服務商/模型 | 輸入成本 (每百萬符元) | 輸出成本 (每百萬符元) | 最大輸出符元 |
|---|---|---|---|
| AWS Bedrock Claude 3 Opus | ~15 美元 | ~75 美元 | 4,096 |
| Azure OpenAI GPT-4o | ~5 美元 | ~15 美元 | 16,384 |
| GCP Vertex AI Gemini 1.5 Pro | ~3.50 美元 | ~10.50 美元 | 8,192 |
一次最昂貴的 Bedrock 請求(4K 輸入 + 4K 輸出符元)約需 0.36 美元。若以每秒 100 次請求持續 1 小時,約為 129,600 美元。
符元耗竭攻擊
配額耗竭
雲端 AI 服務設有配額(每分鐘符元數、每分鐘請求數)。耗盡這些配額會讓合法使用者無法獲得服務:
# AWS Bedrock: 檢查目前配額
aws service-quotas get-service-quota \
--service-code bedrock \
--quota-code <quota-code>
# Azure OpenAI: 檢查部署容量
az cognitiveservices account deployment list \
--name <account> --resource-group <rg> \
--query "[].{name:name,capacity:properties.sku.capacity}"攻擊模式
持續高流量呼叫
以允許的最高速率持續送出請求,且每次請求都使用最大符元。這會同時耗盡每分鐘的符元配額,並產生可觀成本。
脈衝式攻擊
送出大量突發請求,以觸發對合法使用者的速率限制,同時讓突發請求消耗配額。即使攻擊者請求最終被節流,突發視窗內已消耗的配額並不會被回收。
多模型分散
若目標能存取多個模型,將請求分散到所有模型,以最大化跨各模型配額的總符元消耗。
上下文視窗塞爆
送出最大長度輸入上下文的請求。這會消耗輸入符元(同樣計費),並迫使模型在每次請求處理更多資料,降低其他使用者的有效吞吐量。
預留吞吐量濫用
預留吞吐量 (Provisioned Throughput)(AWS Bedrock PT、Azure OpenAI PTU)是專屬容量,不論是否使用都會產生費用:
| 攻擊 | 說明 | 衝擊 |
|---|---|---|
| 配置後棄置 | 若 IAM 允許,建立 PT/PTU 部署並任其運行 | 持續產生費用但無實際使用 |
| 容量耗竭 | 以攻擊者請求飽和 PT/PTU 容量 | 合法使用者無法存取預留容量 |
| 觸發擴展 | 透過持續高負載強迫配置額外容量 | 增加容量成本 |
# AWS: 檢查是否能建立預留吞吐量
aws bedrock create-provisioned-model-throughput \
--model-units 1 \
--provisioned-model-name cost-attack-test \
--model-id anthropic.claude-3-sonnet-20240229-v1:0 \
2>&1 # 檢查權限GPU 運算濫用
訓練作業濫用
ML 訓練作業會消耗昂貴的 GPU 執行個體。具有訓練作業建立權限的攻擊者,可為未授權目的啟動運算資源:
# AWS SageMaker: 以昂貴 GPU 執行個體建立訓練作業
aws sagemaker create-training-job \
--training-job-name gpu-abuse-test \
--algorithm-specification \
TrainingImage=<container>,TrainingInputMode=File \
--resource-config \
InstanceType=ml.p4d.24xlarge,InstanceCount=4,VolumeSizeInGB=500 \
--role-arn <role-arn> \
--stopping-condition MaxRuntimeInSeconds=86400 \
--output-data-config S3OutputPath=s3://bucket/output單一 ml.p4d.24xlarge 執行個體每小時成本約 37 美元。四個執行個體運行 24 小時為 3,552 美元。而攻擊者無法使用現貨價格(他們需要可靠存取),按需價格會更高。
運算資源成本
| 執行個體類型 | 服務商 | GPU | 每小時約略成本 |
|---|---|---|---|
ml.p4d.24xlarge | AWS | 8x A100 | ~37 美元 |
Standard_NC96ads_A100_v4 | Azure | 4x A100 | ~32 美元 |
a2-ultragpu-8g | GCP | 8x A100 | ~40 美元 |
ml.p5.48xlarge | AWS | 8x H100 | ~98 美元 |
加密貨幣挖礦
透過 ML 服務配置的 GPU 執行個體,對加密貨幣挖礦極具吸引力:
- 訓練作業容器擁有完整 GPU 存取權限
- 自訂容器映像檔可內嵌挖礦軟體
- 訓練作業可在被發現前執行數小時或數天
- GPU 執行個體成本由目標組織承擔
自動擴展利用
擴展觸發攻擊
AI 服務端點使用自動擴展以應對變動負載。攻擊者可利用擴展設定:
| 擴展設定 | 攻擊 | 結果 |
|---|---|---|
| 基於 CPU 的擴展 | 送出運算密集的請求 | 依 CPU 使用率觸發擴展 |
| 基於請求數的擴展 | 以大量請求灌水 | 依請求速率觸發擴展 |
| 自訂指標擴展 | 利用指標收集的漏洞 | 透過指標操弄觸發擴展 |
| 未設定上限 | 持續高負載 | 無上限擴展,無上限成本 |
擴展攻擊鏈
辨識擴展設定
找出端點的自動擴展政策:哪種指標觸發擴展、冷卻期多長、是否有最大執行個體數上限。
# AWS SageMaker: 檢查自動擴展 aws application-autoscaling describe-scaling-policies \ --service-namespace sagemaker \ --resource-id endpoint/<endpoint-name>/variant/<variant-name> # GCP Vertex AI: 檢查端點擴展 gcloud ai endpoints describe <endpoint-id> --region=us-central1 \ --format="json(deployedModels[].automaticResources)"計算成本衝擊
確定每個執行個體的成本與最大擴展規模。若未設定最大值,理論上限僅受帳戶配額限制。
觸發擴展
以可觸發擴展的速率送出持續流量。搭配最昂貴的請求模式(最大符元、昂貴模型),同時最大化每次請求成本與基礎設施成本。
維持壓力
持續足夠時間以讓自動擴展配置到最大執行個體數。擴展啟動通常比縮減更快,即使短暫攻擊,也能讓昂貴執行個體在冷卻期內持續運行。
冷卻期利用
自動擴展政策包含冷卻期以防止來回震盪。攻擊者可加以利用:
- 擴展後停止: 觸發最大擴展,然後停止流量。執行個體會在縮減冷卻期(通常 5-15 分鐘)內持續運行。
- 脈衝攻擊: 送出突發流量,接著安排足以防止縮減的靜默期,讓執行個體維持最大數量,同時最小化攻擊者的請求量。
- 擴展串聯: 若自動擴展配置的執行個體本身又會觸發進一步擴展(例如新執行個體啟動預熱程序又消耗資源),串聯擴展會超越預期上限。
錢包阻斷攻擊方法論
規劃
- 列舉 AI 服務與定價: 辨識使用中最昂貴的服務
- 判定存取等級: 攻擊者可執行哪些 API 動作?
- 映射擴展設定: 目標如何處理負載增加?
- 辨識帳單控制: 是否有預算警示、支出限制或核准流程?
- 估算衝擊: 計算可達成的最大財務損害
執行考量
偵測與帳單延遲
多數雲端帳單在資源消耗與帳單能見度之間有延遲:
| 服務商 | 帳單延遲 | 成本分析延遲 |
|---|---|---|
| AWS | 最多 24 小時 | 當日估算,最終帳單延遲 |
| Azure | 最多 24 小時 | 成本管理可能延遲 24-48 小時 |
| GCP | 最多 24 小時 | 帳單匯出可能延遲數小時 |
此延遲意味著成本攻擊可在任何帳單警示觸發前,累積可觀費用。紅隊規劃演練時應納入此因素,以避免意外財務衝擊。
衝擊溝通
成本攻擊的發現應以業務語言溝通:
- 每小時曝險: 「具有此存取權限的攻擊者,每小時可產生 X,XXX 美元的 AI 成本」
- 擴展係數: 「未設上限的自動擴展,會將此放大到每小時 XX,XXX 美元」
- 偵測缺口: 「目前帳單警示在已花費 X 美元前不會觸發,且帳單流程中另有 X 美元尚未入帳」
- 年度風險: 「若被持續利用,年度成本曝險為 X,XXX,XXX 美元」
相關主題
- AWS AI 服務 -- AWS 特有的成本攻擊面
- Azure AI 服務 -- Azure PTU 與成本考量
- GCP AI 服務 -- GCP 成本控制與配額管理
- SageMaker 利用 -- 透過 SageMaker 進行 GPU 運算濫用
攻擊者擁有涵蓋所有模型的 bedrock:InvokeModel 權限。要將成本攻擊的財務衝擊最大化,最有效的方法為何?
為何帳單延遲是紅隊演練中 AI 成本攻擊規劃的關鍵因素?
參考資料
- AWS 定價計算機 -- 計算 AWS AI 服務成本
- Azure 定價計算機 -- 計算 Azure AI 服務成本
- GCP 定價計算機 -- 計算 GCP AI 服務成本
- OWASP LLM06: 過度自主權 -- 成本濫用作為過度自主權風險的一部分