在 7 月 19 日引发全球网络动荡的数百万台 Windows 系统电脑蓝屏宕机后,CrowdStrike 于当地时间 8 月 7 日发布了一份事件分析报告,从技术角度对故障原因进行了详细阐述。
这份长达 12 页的根本原因分析 (RCA)相比于在事发 5 天后发布的初步事故后调查 (PIR),从调查结果、缓解措施和技术细节方面均提供了更加细致的内容,但同时也暴露出这家网安巨头企业在产品质量和测试方面存在重大瑕疵和纰漏。
一句话概括:一个令人大跌眼镜的小错误引发了一场巨大灾难。CrowdStrike 公司调查报告发布后,不仅没有获得大家的谅解,反而引发全球安全人的疯狂吐槽。
事件原因:就只是多了一个参数?
根据这份名为“通道文件 291 事件”(Channel File 291 Incident)的报告内容分析,CrowdStrike 于今年 2 月为识别并修复最新高级威胁的 Falcon 传感器发布了 7.11 版本,其中包括了用于 Windows 进程间通信 (IPC) 机制的新模板类型,该模板实例通过编号为 291 的相应通道文件作为快速响应内容交付给传感器,以便查看并检测滥用命名管线及其他 Windows 进程间通信(IPC)机制的新型攻击技术。
报告截图
但新的 IPC 模板类型定义了 21 个输入参数字段,而调用带有通道文件 291 模板实例的内容解释器的集成代码仅提供了 20 个输入值进行匹配。CrowdStrike 称这种不匹配躲过了多层构建验证和测试,造成这一情况的部分原因在于测试期间和最初的 IPC 模板实例中对第 21 个输入值使用了通配符匹配标准。
在 7 月 19 日事发当天,CrowdStrike 在更新中部署了两个新的 IPC 模板实例,其中一个对第 21 个输入参数采用了非通配符匹配标准,因此需要传感器检查第 21 项输入参数。在将此通道文件传送给传感器之前,原有通道版本中的 IPC 模板实例从未使用过第 21 项输入参数。内容验证器评估了新的模板实例,但评估过程同样以 IPC 模板类型能够提供 21 项输入为前提和基本预期。
因而,接收到携带问题内容的新版通道文件 291 传感器在内容解释器中便会存在越界读取问题。 在操作系统发出下一次 IPC 通知时,对新的 IPC 模板实例进行了评估,指定与第 21 个输入值进行比较,但内容解释器预期只能处理 20 个值,在尝试访问第 21 个值时产生了超出输入数据数组末尾的越界内存读取,最终导致系统崩溃。
总结下来,是在 7 月 19 日的更新当中,Falcon 引入的新传感器预计只更新 20 项参数,但实际输入了 21 项参数,且对第 21 项参数缺乏非通配符匹配标准的特定测试,引发越界内存读取导致系统崩溃。
是的,你没有理解错,就是单纯的多个一个参数,引发了一场全球电脑集体蓝屏事件。以至于被业内专家吐槽,如此糟糕的代码,如此糟糕的产品,如此糟糕的测试。
CrowdStrike 也在报告中列出了如下改进措施:
- 对模板类型输入字段实施编译时验证
- 在内容解释器中增加运行时数组边界检查
- 扩大模板类型测试范围,以涵盖更多匹配标准
- 更正内容验证器中的逻辑错误
- 引入模板实例的分阶段部署
- 提供客户对快速响应内容更新的控制权
一个令网安人大跌眼镜的错误
这份报告虽然很详细地列出了故障原因,但从中暴露出的问题也引发了部分专家对这家拥有雄厚技术实力网安公司的指责。
微软独立安全研究员 Kevin Beaumont 表示,“CrowdStrike 在部署之前,频道更新没有在真实的 Windows PC 上进行测试,它们依赖于自动化的定制代码测试。这一点在报告中没有提及,而这才是导致事故的真正原因。“
工程师 Eduardo Bellani 表示,”问题的核心是一个数组越界错误,这是缓冲区溢出的特殊情况,在开发 Crowdstrike 系统的 C++ 语言中被视为未定义行为。对于这种关键性的软件,这样的问题不应该发生。“
他还称:”RCA 中提出的所有技术缓解措施都只是堵塞漏洞。但安全不能以这种方式实现,此类努力需要在一开始就将安全性融入设计、工具和语言中。如果我是 Crowdstrike 的客户,我会担心未来。”
可见,这份长达 12 页的报告,暴露了 Crowdstrike 在做部署时测试环节的缺位,以及没有反映如何从根本上避免类似缺陷问题再次发生。
毫无疑问,这次事件是对安全大厂的一次彻底“祛魅”,给一些所谓安全、可靠且受众广泛的安全产品给予了当头一棒,如果厂商对产品无法保证严格的安全测试,无法进一步牢固产品质量基础,及时发现并修复存在的错误,那么下一次重大事故的发生将只是时间问题。
CrowdStrike 表示,已经聘请了两家独立的第三方软件安全供应商,对 Falcon 传感器代码进行进一步审查,以确保安全性和质量保证,同时还将对从开发到部署的端到端质量流程进行独立审查。
参考资料:
CrowdStrike Publishes Technical Root Cause Analysis of Faulty Falcon Update
Massive CrowdStrike outage caused by an out-of-bounds memory error