白箱掃描是什麼?白箱檢測如何進行? 白箱掃描是什麼?跟黑箱掃描有什麼不同?
在資訊安全領域中,弱點檢測是保障系統安全的重要環節。其中,白箱掃描因能深入程式碼與內部結構,成為發現潛在風險的關鍵方法。本文將介紹白箱掃描的概念、與黑箱及灰箱的比較、應用情境、常見覆蓋率指標,以及白箱掃描相關工具。
什麼是白箱掃描(White-Box Scanning)?
「白箱掃描」也稱作「原始碼掃描」,指在測試系統時,檢測人員可以存取完整的內部資訊,例如軟體原始碼、系統架構、內部網路連線、帳號與權限設定等。由於一切資訊都是透明的,測試人員能深入分析程式邏輯與系統運作方式,確保程式有照預期的方式運作,並找出隱藏的資安弱點。
白箱掃描常與「靜態程式碼分析」(Static Application Security Testing,SAST)結合,用來檢測不安全的程式編寫方式、邏輯錯誤、以及設定上的漏洞。透過完整的內部資訊,白箱掃描能更全面地覆蓋程式的各個部分,但若系統龐大或程式碼複雜,分析時間也可能相當長。
白箱掃描如何進行呢?
在理想情況下,白箱掃描會盡量提高程式碼中不同面向的檢測比例(稱為「覆蓋率」),以確保測試案例能涵蓋更多程式邏輯:
-
語句覆蓋率(Statement Coverage):程式碼中語句被執行過的比例。
-
分支覆蓋率(Branch Coverage):程式中每個分支(例如 if/else 條件的 true 與 false)被執行的比例。
-
條件覆蓋率(Condition Coverage):布林條件(結果為 true 或 false 的條件)中,每個條件是否曾被判斷為 true 和 false 的比例。條件覆蓋率只要求每個條件都曾被判斷為 true 與 false,不一定要涵蓋所有條件組合。
-
路徑覆蓋率(Path Coverage):程式可能執行路徑被涵蓋的比例(從程式進入點到結束點的流程)。
-
迴圈覆蓋率(Loop Coverage):程式中迴圈在不同執行情境(0 次、1 次、多次)被測試的比例。
但實務上,徹底檢查所有程式碼、分支和路徑,可能會因為程式本身的複雜程度,而造成檢查作業量過於龐大,難以徹底執行。因此通常未必會所有的路徑都會覆蓋到。
基本上來說,白箱掃描的運作流程有以下幾個步驟:
- 確認測試目標:先決定要測試的功能、元件或程式。通常來說,白箱掃描檢測的目標越小,越容易徹底檢查所有語句、分支和路徑。
- 盤點分支與路徑:列出應用程式中所有的分支與路徑以理解程式的邏輯和決策點,通常會以繪製流程圖(Flowgraph)的方式進行。
-
依據覆蓋準則挑選測試路徑:根據測試需求,選擇要達成的覆蓋標準(例如語句覆蓋、分支覆蓋,或是針對特定關鍵路徑)。
舉例來說,在上面的流程圖中,有兩種路徑:
1、2、3、5、6、7
1、2、3、4、6、7
即可從中挑選進行想要進行掃描的路徑。但通常實際情況會比上圖的例子更加複雜,不會只有兩條路徑。 -
設計與撰寫測試案例(Test Case):依照選定的路徑,設計測資與測試案例。測試案例為一組指令,用來測試軟體是否可以正確運作,內容通常包含測試目標、輸入數據、執行步驟和預期結果。
-
執行並持續改進:執行測試案例、分析結果,並反覆調整測試過程以提升完整性。
白箱掃描有哪些好處?
1. 找尋潛在問題
由於能看到完整原始碼與內部邏輯,所以白箱掃描可檢查程式中的判斷流程、變數處理、例外狀況,進而發現一些目前表面上不會顯現、但未來可能成為安全風險的隱性漏洞。測試者看不到程式內部,只能依靠輸入與輸出的結果,透過嘗試不同攻擊手法來推測弱點。
因此黑箱測試偏向發現「此刻實際可被利用」的漏洞。也就是說,黑箱偏向驗證可利用的結果,白箱則是檢查程式內部的原因與隱患。
2. 提早發現漏洞
存取原始碼或系統設定即可進行白箱掃描,而不需要透過使用者介面才能執行,因此軟體開發的前期就可以先以白箱掃描的方式檢查系統。讓開發團隊在軟體或服務正式上線之前,就能提早發現並修正漏洞,降低修復成本,並提升產品的安全性。
3. 改善原始碼
除了檢查是否存在安全漏洞,進行白箱掃描時,開發人員也能藉此仔細審視程式碼,發現並修正錯誤或不良實作。這些改善有助於提升軟體品質,並在某些情況下讓程式更為精簡與高效。
白箱掃描的工具
白箱掃描的重點是確認程式碼行為是否符合預期,並發現程式碼與設定中的隱性資安問題。為了達到此一目的,一般白箱掃描,會使用到以下三大類測試工具:
- 單元測試框架(Unit Testing Frameworks)測試工具:用來撰寫進行測試的測試案例,並實際運行測試。常見的有 JUnit、NUnit、pytest、xUnit 等。
- 程式碼覆蓋率(Code Coverage Tools)測試工具:用來檢視程式在測試過程中達到的語句、分支、路徑、條件或迴圈覆蓋率,例如 JaCoCo、dotCover、Coverage.py 等。
- 整合開發環境(IDE Integrations):提供一個包含編輯器、編譯器、除錯工具等的開發環境,並能透過內建或外掛功能執行測試與檢視程式碼覆蓋率。例如 Eclipse、IntelliJ IDEA、Visual Studio。
白箱掃描 vs 黑箱掃描 vs 灰箱掃描
相較於資訊完全透明的「白箱掃描」,依照測試時能取得的資訊不同,還有「黑箱掃描」與「灰箱掃描」兩種方式:
- 黑箱掃描(Black-Box Scanning):檢測人員對目標系統完全不了解,只能模擬外部攻擊者的行為,觀察應用程式、網頁服務或網路介面的反應。最接近真實駭客攻擊的情境,但測試過程較耗時,且費用通常較高。
- 灰箱掃描(Grey-Box Scanning):檢測人員知道部分系統資訊,例如使用者帳號、系統文件或部分架構。灰箱測試在效率與深度之間取得平衡,能模擬攻擊者同時擁有外部資訊與部分內部知識的情境。
白箱掃描 | 灰箱掃描 | 黑箱掃描 | |
資訊可見度 | 測試者完全掌握程式碼、架構與設定 | 測試者掌握部分內部資訊(如帳號、系統文件) | 測試者對系統內部一無所知,只能看到輸入與輸出 |
可偵測漏洞型態 | 原始碼中的隱藏缺陷(如硬編碼密碼、邏輯錯誤、不安全 API、例外處理不足) | 內外部結合的弱點(如特定帳號權限繞過、已知內部 API 的濫用) | 可被外部攻擊利用的弱點(如 SQL Injection、XSS、錯誤配置的公開服務) |
測試時機 | 開發早期即可開始(只要有程式碼、系統設定即可) | 在開發中後期進行,模擬外部攻擊者掌握部分內部知識 | 系統完成並具備使用者介面後才能開始 |
常見用途 | 檢查程式碼品質與內部安全性 | 模擬內部員工/外部攻擊者結合的威脅 | 模擬駭客攻擊,驗證系統對外安全性 |
優勢 | 可深入發現隱藏漏洞、支援早期缺陷檢測 | 測試效率與現實性平衡,覆蓋度比黑箱高、比白箱省時 | 最接近真實攻擊、能驗證實際可利用的漏洞 |
缺點 | 需存取完整原始碼,成本高,可能不代表真實攻擊情境 | 無法完全模擬真實黑箱攻擊,覆蓋率與深度仍有限 | 覆蓋度有限,可能漏掉隱性漏洞,耗時耗錢 |
黑箱、灰箱、白箱掃描的應用
無論是黑箱、灰箱,還是白箱掃描的掃描方式,在資安領域,都常應用在「弱點掃描(Vulnerability Scanning)」和「滲透測試(Penetration Testing)」中。
企業和組織可以根據自身的資安需求,選擇最合適的掃描方式。
黑箱掃描模擬遭受外部攻擊時的真實情況,測試企業組織 IT 系統中公開的應用程式、軟體服務、網路連線是否有可以被利用來入侵的弱點。適合用來測試如防火牆、入侵偵測系統等周邊防禦、偵測開放的連接埠,以及辨識暴露介面的弱點。
白箱掃描則透過完整的內部資訊,針對系統程式碼、架構與設定進行深入檢測,找出根深蒂固的弱點,例如不安全的程式碼、邏輯缺陷與組態錯誤。
介於兩者之間的灰箱測試,則可以模擬攻擊者已知企業組織內部部分資訊系統訊息的情況,考慮到企業同時遭受到來自內部與外部威脅的情境,從這兩個面向一起找出系統的弱點。另一方面,灰箱掃描利用在測弱點掃描或滲透測試時,也因為不用像黑箱掃描對系統一無所知,所需要的時間較少。
黑箱、白箱掃描與 OWASP 10 大弱點
利用黑箱與白箱掃描能夠發現的弱點種類相當多元,非營利的全球開放性社群組織「開放網路軟體安全計畫(簡稱 OWASP) 」每隔一段時間便會公布網路應用程式的全球 10 大弱點,供企業與資安專家實際進行弱點掃描和測試時參考,多加防範。
-
A01:2021 權限控制失效(Broken Access Control)
-
A02:2021 加密機制失效(Cryptographic Failures)
-
A03:2021 注入式攻擊(Injection)
-
A04:2021 不安全的設計(Insecure Design)
-
A05:2021 不安全的設定配置(Security Misconfiguration)
-
A06:2021 易受攻擊和過時元件(Vulnerable and Outdated Components)
-
A07:2021 認證及驗證機制失效(Identification and Authentication Failures)
-
A08:2021 軟體和資料完整性失效(Software and Data Integrity Failures)
-
A09:2021 資安記錄和監控失效(Security Logging and Monitoring Failures)
-
A10:2021 伺服器端請求偽造(Server-Side Request Forgery,SSRF)
這十大弱點雖然都能透過黑箱與白箱掃描發現,但因掃描機制不同,在偵測效能上各自具有優勢與限制。
下列漏洞較容易在白箱掃描過程中被識別出:
-
A02:2021 加密機制失效
-
A04:2021 不安全的設計
-
A05:2021 不安全的設定配置
-
A06:2021 易受攻擊和過時元件
-
A07:2021 認證及驗證機制失效
-
A08:2021 軟體和資料完整性失效
下列漏洞較容易在黑箱掃描過程中被識別出:
-
A01:2021 權限控制失效
-
A03:2021 注入式攻擊
-
A09:2021 資安記錄和監控失效
-
A10:2021 伺服器端請求偽造
但無論漏洞的類別,透過黑箱、白箱掃描全方位檢測資訊系統,能有效提升軟體品質與安全性。企業可依自身的資安需求,搭配不同的掃描方式,形成更全面的安全防護。晟崴科技提供結合黑箱與白箱的弱點掃描與滲透測試服務,歡迎與我們聯絡,共同打造最適合您的系統健檢。
立即聯絡晟崴科技為您提供資安服務