白箱扫描是什么?白箱检测如何进行? 白箱扫描是什么?跟黑箱扫描有什么不同?
在资讯安全领域中,弱点检测是保障系统安全的重要环节。其中,白箱扫描因能深入程式码与内部结构,成为发现潜在风险的关键方法。本文将介绍白箱扫描的概念、与黑箱及灰箱的比较、应用情境、常见覆盖率指标,以及白箱扫描相关工具。
什么是白箱扫描(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 伺服器端请求伪造
但无论漏洞的类别,透过黑箱、白箱扫描全方位检测资讯系统,能有效提升软体品质与安全性。企业可依自身的资安需求,搭配不同的扫描方式,形成更全面的安全防护。晟崴科技提供结合黑箱与白箱的弱点扫描与渗透测试服务,欢迎与我们联络,共同打造最适合您的系统健检。
立即联络晟崴科技为您提供资安服务