一份渗透测试报告究竟该告诉你什么
大多数报告不过是加了个 logo 的扫描器导出结果。这里说清楚你该要求什么,以及如何在十分钟内判断自己买到的是不是真正的测试。
A red pen over a printed page
Close crop of one hand holding a red pen above a printed page, mid-annotation. Bare pale surface, nothing else in frame. The pen is the only colour.
2400×1350 · WebP · <350KB
通常十分钟就能看出来。打开报告,翻到某一条发现,问一个问题:只凭这里写的内容,我的工程师周一能把它修掉吗?如果答案是否定的,你买的就不是渗透测试。你买的是一份印着顾问抬头的扫描器许可证。
破绽在于:只有严重度,没有故事
扫描器产出的是一份清单。四十条发现,每条都有 CVSS 评分,每条单独看都成立,彼此之间毫无关联。测试人员产出的是一段叙事:这个被遗忘的子域名暴露了一个预发环境的登录页,预发环境和生产环境共用了一个密码,而生产环境的管理员账号没有开多因素认证。单独看,这三条是中、中、低。串起来,就是有人在午饭前拿下你整个环境的路径。
如果你的报告里一条链都没有——没有任何一句以"结合第 12、19、27 条发现"开头的话——那就没有人真正测试过你。他们只是把一个工具对准了你。
按评分排序的四十条发现,告诉你扫描器注意到了什么。按攻击者会拿它做什么排序的九条发现,才告诉你该修什么。
每一条发现都必须具备的要素
- 复现步骤,你的工程师不必打电话给测试人员就能照着走。确切的请求、确切的参数、确切的前置条件。
- 证据。一张截图或一段抓取的响应,证明问题是真实存在的,不是理论上的。
- 用你的话说清影响。不是"信息泄露"——而是"未认证用户可以枚举出全部客户邮箱地址"。
- 能指名道姓的修复方案。文件、配置项、响应头。不是"请实施输入校验"。
- 诚实的严重度,结合你的环境做过调整。一台没有数据的隔离机器上的远程代码执行,算不上严重,不管扫描器怎么说。
大多数报告会略过的部分
一份好报告还会告诉你哪些没有被测试,以及为什么。范围边界、被排除在外的系统、始终没拿到的凭据、测试窗口里宕了两天的环境。这些空白是你仍然背着的风险,隐瞒它们只会让报告更好看,让你更不安全。
它也应该告诉你哪些防线守住了。如果你的 WAF 挡下了注入尝试,你的 EDR 杀掉了载荷,这就该写进去。这些是你花钱买的,你应该能拿出证据说明它们有效。
复测是工作的一部分
一条发现被关闭,不是因为一张工单被关闭了,而是因为有人再次尝试了那个利用并且失败了。任何为验证自家发现而另行收费的公司,都带着一种你不希望出现在这段关系里的动机。复测应当包含在内,重新出具的报告应当把那条发现划掉,并标注验证日期。
一份简短的核对清单
- 是否至少有一条以叙事方式写出的串联攻击路径?
- 工程师能否不提问就复现最重要的那条发现?
- 每一条修复建议是否都点名了文件、配置项或响应头?
- 是否有一节说明哪些内容超出范围或未被测试?
- 复测是否包含在内,什么时候做?
- 严重发现是在测试期间就通报了,还是留到最后的汇报会上?
最后这一条,比其余所有加起来都重要。如果测试人员在第二天就发现了正在进行的入侵,或者一个暴露在互联网上的严重漏洞,你应该在一小时内知道。三周后从一份 PDF 里得知,那不是什么报告风格,那是失职。