泰國的高效 API 滲透測試
目錄
應用程式早在幾年前就不再是"網站"了。它們現在是 API:微服務呼叫微服務,一端是移動客戶端,另一端是支付通道。而安全對話還沒有完全跟上。團隊仍然在購買"Web 應用滲透測試",把 80% 的精力花在前端,而背後的 API,資金和資料真正流動的地方,卻測試不足。
為什麼 API 能繞過掃描器 #
自動化 Web 掃描器圍繞"頁面模型"構建:爬連結、找表單、注入載荷。API 不呈現頁面,它呈現的是路由、方法和模式,而有趣的行為恰恰存在於它們之間的業務邏輯裡。
設想一個物件級訪問缺陷:使用者把請求中的 user_id=1024 改成 user_id=1025,就讀到了別人的記錄。沒有簽名告警,沒有惡意載荷。掃描器看到一個正常請求便繼續前行。這就是失效的物件級授權(BOLA),OWASP API Security Top 10 榜單上的第一名,而幾乎所有的自動化工具都對它視而不見。
這正是人工主導 API 測試的核心論據:破壞性最大的缺陷是設計缺陷,而發現設計缺陷需要一位理解業務上下文的分析師。
一次有效的 API 測試究竟覆蓋什麼 #
有意義的 API 評估遠不止對著 OpenAPI 規範跑一遍掃描器:
- 認證與授權:令牌處理、許可權範圍檢查,以及跨越每個角色邊界的物件級訪問。
- 業務邏輯:使用者能否給訂單設定負價格、重放支付回撥,或者直接呼叫下一個端點跳過工作流步驟?
- 資料暴露:哪些端點返回了過多欄位?哪些端點接受客戶端本不該傳送的欄位?
- 限流與濫用:列舉、撞庫,以及利用薄弱限流實現的賬戶接管路徑。
- 整合邊界:webhook、第三方回撥、訊息佇列:這些地方往往預設信任,從未驗證。
正因如此,最好的專案會把人工攻擊技術與 AI 輔助偵察和模糊測試結合起來:自動化擴充套件覆蓋面,人來判斷嚴重性和上下文。
持續進行,而非一年一次 #
一年一次的 API 測試,是對一個每週都在部署的系統的時點快照。報告寫完的時候,端點早就變了。現代做法是把 API 安全檢查融入交付流水線:
- 左移:在 CI 中加入靜態分析和模式校驗。
- 按釋出測試:每當 API 面發生變化時做聚焦審查。
- 年度深檢:為滿足審計留痕以及流水線無法判斷的業務邏輯,做一次完整的、人工主導的評估。
對於接觸卡資料的組織, PCI DSS 要求 6 和要求 11.4 都指向這個方向,而泰國央行的數位通路安全指引同樣如此。
自動化掃描器看不見的東西 #
值得具體說清楚自動化到底錯過了什麼,因為這些缺口並不是隨機分佈:它們恰好聚集在資金流動的地方。
實踐中的 BOLA。 掃描器只測試它發現的端點和它理解的引數。拿一個發票 API 來說:GET /invoices/8842 返回撥用者自己的發票,掃描器記一次透過。但 GET /invoices/8843:另一個客戶的發票:可能同樣順利返回,而沒有任何掃描器會去嘗試,因為要理解 8843 屬於別人,必須知道所有權在你的業務裡意味著什麼。每一個跨過租戶邊界的物件識別符號都是潛在 BOLA,只有逐個賬戶列舉物件的分析師才能找到它們。
業務邏輯缺陷。 掃描器測試請求成功還是失敗;邏輯缺陷藏在那些本不該成功卻成功了的請求裡。真實案例來自實際專案:優惠券可以重複使用,因為核銷校驗發生在支付捕獲之後;兩個賬號之間轉移預訂卻不需要重新授權;已發貨的已付款訂單可以被取消,因為取消端點從不檢查履約狀態。每一個都返回 HTTP 200。每一個都是沒有任何報錯資訊的資金損失。
服務間的信任假設。 在微服務體系裡,一個服務通常會信任呼叫方提交的 header、token 或內部端點,因為設計圖上呼叫方永遠是內部服務。然後某一天,一個服務被攻陷,或某個內部端點從信任等級更低的網段變得可達,這些繼承下來的信任假設就成了攻擊者的梯子:先在薄弱的邊緣服務上完成認證,再把它的身份一路遞給下游那些真正值錢的 API。發現這類問題需要既按設計師的本意理解架構,又按攻擊者的路徑去測試它。
這三樣東西都不會出現在掃描器輸出裡。它們只會出現在花時間理解了你的 API 到底用來做什麼的分析師寫的報告裡。
我們的 API 與應用安全審查將人工原始碼分析與情境化的滲透測試相結合,交付開發人員可以直接使用的修復指導。如果你需要的是對邊界和分段的更廣泛驗證,請參閱人工主導滲透測試。