DAST(動態應用程式安全測試)從外部測試運行中的應用程式,以找出弱點。本頁說明它與其他方法的差異,以及如何用於您自己的應用程式(不涵蓋測試他人網站)。
什麼是 DAST
DAST 是動態應用程式安全測試(dynamic application security testing)的縮寫。OWASP 的 DevSecOps Guideline 將其描述為黑箱測試,可找出運行中應用程式的安全弱點與缺陷。黑箱是指只透過外部可見的部分進行測試,不查看內部原始碼。
實務上,工具會沿著應用程式的頁面與輸入欄位移動,發送測試請求,並在回應中尋找問題跡象。該指南指出,它特別適用於輸入/輸出驗證、驗證機制問題,以及伺服器設定錯誤。
運作方式
與 SAST、IAST 和 SCA 的差異
| 方法 | 檢查對象 | 是否運行應用程式 | 適合用途 |
|---|---|---|---|
| DAST | 運行中應用程式從外部呈現的行為 | 是 | 輸入/輸出驗證、驗證機制、伺服器設定 |
| SAST | 原始碼或編譯後的程式碼 | 否 | 在開發早期找出程式編寫問題 |
| IAST | 應用程式內部行為(透過感測器) | 是(測試期間) | 自動化測試期間出現的問題 |
| SCA | 函式庫與其他相依套件 | 否 | 具有已知弱點(CVE)的元件 |
關於 SAST,OWASP 列出其限制,例如只能找出相對較少比例的應用程式安全缺陷、誤報多,以及漏掉設定問題。DAST 有助於彌補此缺口,但也並不完整。關於 SCA,請參閱使用 OSV-Scanner 稽核相依套件。
如何用於您自己的應用程式(以 OWASP ZAP 為例)
ZAP(Zed Attack Proxy;前稱 OWASP ZAP)是免費的開放原始碼 DAST 工具。其官方網站目前標示為「ZAP by Checkmarx」。
- 準備您管理之測試環境的 URL。使用測試環境,而非正式環境
- 執行基準掃描(baseline scan)。根據 ZAP 文件,它只是被動的:預設會執行 1 分鐘的爬蟲(頁面追蹤功能),且不執行任何攻擊。最多只需幾分鐘
- 檢視結果,並由人員確認哪些發現為真;誤報是可能發生的
- 如有需要,再進行主動掃描,且僅限於測試環境。它會對目標執行已知攻擊,文件說明不得用於您不擁有的網頁應用程式
- 定期重新執行,例如在 CI 中,於每次修正後執行
僅針對您擁有或管理之應用程式的測試環境使用
DAST 工具發送的流量與真實攻擊相似。若在您未獲許可測試的網站上執行,可能構成未經授權存取或服務中斷。ZAP 文件同樣表示,不得對您不擁有的網頁應用程式使用主動掃描。在正式環境執行也可能產生副作用,例如建立資料或增加負載。
DAST 會遺漏什麼
ZAP 文件指出,其主動掃描無法找出存取控制失效等邏輯問題,因此應搭配手動測試。像 IDOR 這類讓一位使用者可以看到另一位使用者資料的缺陷,對自動化工具而言很難發現,因為工具不知道正確的行為應該是什麼。您需要自行撰寫測試,要求另一位使用者的 ID,並確認該請求會被拒絕。
另一方面,設定檢查正是 DAST 擅長的部分。關於哪些設定值得調整,請參閱安全標頭:仍然重要的項目。
本站觀點:DAST 是最後一道防線。請以三層思考:程式碼、元件、行為
與其期待單一工具找出所有問題,不如結合三種從不同位置查看的方法,這樣更為實際:先閱讀程式碼(SAST),再檢查元件是否有已知弱點(SCA),最後執行應用程式並從外部測試(DAST)。工具不擅長的「誰可以做什麼」,應以您自己撰寫的測試來保護。不要直接信任工具輸出;修正前請由人員確認。
資料來源(主要)
- OWASP DevSecOps Guideline,「Dynamic Application Security Testing」— owasp.github.io(DAST 定義,黑箱)
- OWASP DevSecOps Guideline,「Interactive Application Security Testing」— owasp.github.io(IAST)
- OWASP Community,「Source Code Analysis Tools」— owasp.org(SAST 及其限制)
- ZAP Documentation,「Active Scan」— zaproxy.org(不得用於您不擁有的應用程式;無法找出邏輯問題)
- ZAP Documentation,「Baseline Scan」— zaproxy.org(僅為被動;執行時間)
- SCA 的說明為一般性定義;並未查證任何單一官方定義
延伸閱讀
- 詞彙表:什麼是模糊測試 · 什麼是 OWASP Top 10 · 什麼是 IDOR
- 指南:安全標頭:仍然重要的項目 · 使用 OSV-Scanner 稽核相依套件
- 詞彙表:什麼是 CVE