徽章展示起来便宜,解读起来昂贵。一份公开的审计报告是一项有边界的工程工作:具名的评估方在具名的版本上、按声明的方法和固定的时间预算,检查了具名的组件。这四个事实决定了结论能支撑什么,而它们通常写在头几页,而不是营销摘要里。读完它们只要十分钟,却能避免把针对客户端应用的发现扩展到整个服务这一常见错误。

范围一节究竟界定了什么

范围声明是一道篱笆,篱笆之外的一切是未获回答,而不是通过。报告会列出受检组件、提交范围或构建标识、所用环境以及允许的交互模型。桌面客户端、移动应用、服务端代码、账户后端与生产基础设施是五个不同的对象,一次委托可以只覆盖其中任意一部分。

排除项与包含项同样重要,因为它们是被刻意写下的,却常被草率读过。被列为范围之外的账户系统,并不因此被默认为安全;被排除在委托之外的移动应用,就是没被检查过。请在自己笔记里把每个未测组件标为未知,并抵住用声誉填补空白的冲动。

两类测试回答的是不同问题

源码审查与运行时测试寻找的是不同的失效。读代码的审查者能追出密钥派生、发现缺失的长度检查,并在不运行的情况下对整个解析器作出推理。对运行中服务做测试的人则会发现已部署构建的真实行为:应用拒绝的证书、仍然启用的回退协议、通过无人审阅的配置泄露版本横幅的端点。

两者不能互相替代,报告通常会说明做的是哪一种。当摘要不加这层区分就说「已审计」时,含混出在摘要里,而不是报告里。

访问权限的限制同样起作用。黑盒委托看不到服务端配置,而从不接触已部署端点的架构评审,也无法察觉生产环境与图纸不一致。两者都正当;把结论混为一谈则不正当。

一个发现如何变成已修复的版本

报告里有价值的一半是修复表:每条发现、按评估方方法给出的严重度、运营方的回应,以及复测结果。严重度数字来自选定的方法论而非自然事实,所以应在同一份报告内比较严重度,而不是在两份尺度不同的报告之间比较。

接着把修复与已发布的软件连起来。被修复的发现只有在携带修复的版本就是已安装版本时才与用户有关,这也是为什么报告的构建标识与发布的变更日志必须一起读。覆盖该修复的复测才闭环;未经测试的修复只是一句主张。只在某个分支上发布、而从未并入任何稳定版本的修复,同样如此。

徽章无法告诉你的事

没有发现不等于没有缺陷。预算固定的短期委托必然漏掉一些东西,而对一份干净报告的诚实解读是:评估方在可用时间内没有找到他们所寻找的那类问题。

徽章也无法替其范围之外的属性说话。关于日志实践、司法管辖区或留存的主张存在于政策文件里,而不是客户端应用的审计里,评估方的声誉也不会跨越那条边界。

记录你能够辩护的证据

把引用写成三部分:组件、版本与已验证的修复。像Mozilla 委托的 VPN 审计这样的公开委托,恰好支撑其范围所描述的陈述,不多一分;引用精确时它仍很有价值。用同一份报告去为它从未检查过的事情作证,比不引用更糟,因为它招来的信任无人挣得。

当某项被主张的属性落在所有可用报告之外时,就在文档里把它留作未决。未决的一行会引出追问;徽章不会。唯一的例外是另一份同样具体的文件能定论该属性,那时改变的是引用而不是主张。

还有两个习惯能让阅读长期有效:把报告日期与你实际运行的版本对照记下,并保留「被测过的」与「你部署的」之间的差异。两者都把信任决定变成同事可以核对的东西。

相关文章