史上最荒谬BUG诞生了!零测试、直接将正则表达式扔进内核,CrowdStrike卖惨不成反被喷

C语言与CPP编程 2024-08-24 11:00

转自:InfoQ -褚杏娟 核子可乐

距闹得沸沸扬扬的由第三方 CrowdStrike 软件引发的微软“蓝屏”事件过去了半个多月了,当地时间 8 月 7 日,CrowdStrike 发布了长达 12 页的根本原因分析 (RCA),详细介绍了该事件的调查结果、缓解措施和技术细节。

不过,CrowdStrike 看似诚意满满,但网友们并不买账:

这不是一份 RCA,你只是告诉我们发生了什么。一份 RCA 应该告诉我们为什么会发生。不要说“我们有一个 bug”:当然你们有一个 bug。解释一下这个 bug 是如何泄露到全球的、是什么样的实践和流程出了问题,以及为什么这个 bug 会泄露到生产环境。

CrowdStrike 还打起了感情牌:“对于任何仍受影响的客户,请知道,在所有系统恢复之前,我们不会休息。”但网友们并没有接招:“你们应该退出这个行业,就这么简单。”

但其实,真正让网友们感到气愤的还是 CrowdStrike 揭示的问题,用网友精辟的总结就是,“根本原因:没有测试。解决方案:下次确保在发布前进行测试。”而且,其披露出来的在内核代码中使用正则表达式的做法也被网友群嘲。

那 CrowdStrike 到底做了些什么引得大家更加不满了?


“讲真,都没有做测试吗?

先看下 CrowdStrike 设想的流程:


CrowdStrike Falcon 传感器负责提供强大的传感器 AI 与机器学习模型,用以识别并修复最新高级威胁,来保护客户系统。这些模型始终保持最新状态,并通过从传感器端传来的最新威胁遥测结果与来自 Falcon Adversary OverWatch、Falcon Complete 和 CrowdStrike 威胁检测工程师的 AI 中学习以持续加强。这套丰富安全遥测体系的起点,就在于来自各个传感器,并通过过滤和聚合以形成本地图存储的数据。


每个传感器将其本地图存储中的上下文与实时系统活动相关联,进而汇总为行为与攻击指标(IOA),并不断实施改进。此改进过程还涉及一套传感器检测引擎,负责将内置传感器内容与云端提供的快速响应内容相结合。这部分快速响应内容用于收集遥测数据、识别对手行为指标,并增强传感器上的新型检测与预防功能,且无需更改传感器代码。快速响应内容采取行为启发式方法,与 CrowdStrike 的传感器 AI 预测与检测功能并不相同。


快速响应内容通过通道文件形式传送,并由传感器的内容解释器使用基于正则表达式的引擎进行解释。每个快速响应内容通道文件,都与传感器版本中内置的特定模板类型相关联。模板类型为内容解释器提供活动数据和图上下文,从而与快速响应内容进行匹配。


随着 2024 年 2 月传感器版本 7.11 的发布,CrowdStrike 引入了一种新的模板类型,以便查看并检测滥用命名管线及其他 Windows 进程间通信(IPC)机制的新型攻击技术。IPC 模板实例通过编号为 291 的相应通道文件作为快速响应内容被传送至传感器。

新的 IPC 模板类型定义了 21 个输入参数字段,但使用通道文件 291 的模板实例调用内容解释器的集成代码,仅提供了 20 个输入值以实现匹配。 此参数计数不匹配无法被多层构建验证与测试所发现,因此在传感器发布测试过程、模板类型(使用测试模板实例)压力测试乃至现场前几次成功部署 IPC 模板实例时均未暴露。造成这种情况的部分原因在于,测试期间及初始 IPC 模板实例中对第 21 项输入使用了通配符匹配标准。

2024 年 7 月 19 日,CrowdStrike 部署了两个额外的 IPC 模板实例。其中之一为第 21 项输入参数引入了非通配符匹配标准。这些新的模板实例产生了新版本的通道文件 291,因此需要传感器检查第 21 项输入参数。在将此通道文件传送给传感器之前,原有通道版本中的 IPC 模板实例从未使用过第 21 项输入参数字段。内容验证器评估了新的模板实例,但评估过程同样以 IPC 模板类型能够提供 21 项输入为前提和基本预期。

一旦收到带有问题的内容,新版本的通道文件 291 会导致传感器在内容解释器遭遇越界读取问题。在操作系统发出的下一条 IPC 通知中,会对新的 IPC 模板实例进行评估并指定与第 21 项输入值进行比较。而内容解释器的预期为只处理 20 个值。因此在尝试访问第 21 个值时会超出输入数据数组末尾的越界内存读取,并导致系统崩溃。

总之,这些问题综合起来共同导致了系统崩溃:内容验证器验证的 21 项输入与提供给内容解释器的 20 项输入不匹配,内容解释器中存在潜在越界读取问题,而且第 21 个字段缺少针对非通配符匹配条件的特定测试。 虽然通道文件 291 上的这种情况目前无法重现,但其仍然为 CrowdStrike 部署的流程改进与缓解步骤提供了参考,旨在进一步增强系统弹性。

对于上述解释,有网友并不认可:“一如既往,一切都归结为测试。”

还有网友认为 CrowdStrike 是故意的:“你们确实有办法测试真实世界条件下的输入,但故意选择不这样做,你们不会发布如此未经充分测试的东西,除非是故意保持沉默。”

“我没有看到‘房间里的大象’被解决”

CrowdStrike 在文件讲述了六个自己的“发现”与“缓解措施”,但更暴露了自己犯了本不该犯的错误。

“根据 RCA,问题的核心是一个数组越界错误,这是缓冲区溢出的特殊情况,在开发 Crowdstrike 系统的 C++ 语言中被视为未定义行为。”工作 15 年的工程师 Eduardo Bellani 表示,“对于这种关键性的软件,这样的问题不应该发生。

“RCA 中提出的所有技术缓解措施都只是堵塞漏洞。但安全不能以这种方式实现,此类努力需要在一开始就将安全性融入设计、工具和语言中。如果我是 Crowdstrike 的客户,我会担心未来。”Bellani 说道。

“我没有看到‘房间里的大象’被解决:Crowdstrike 是否会在没有进行本地测试来确保‘正确’运行的情况下,就将做出的更改推向生产中?”有网友表示。

那我们具体看下 Crowdstrike 自己的“发现”与采取的具体措施,不难发现网友们的吐槽还是“在理”的。

1. 在传感器编译时,未验证 IPC 模板类型中的字段数量

为此,在 7 月 19 日,CrowdStrike 为用于验证模板类型提供的输入数量的传感器内容编译器开发了一个补丁,并于 2024 年 7 月 27 日作为 CrowdStrike 内部构建工具的一部分投入生产。该传感器内容编译器补丁还验证了在任意平台上,均不存在其他可能提供不正确输入数量的模板类型。

 2. 通道文件 291 上的内容解释器输入字段,缺少运行时数组边界检查机制。

由于 IPC 模板类型仅生成 20 项输入,因此一旦交付使用非通配符匹配标准作为第 21 项输入的快速响应内容,则内容解释器就会执行输入数组的越界读取。此情况并不属于任意内存写入问题,且已经过独立审查和确认。

为此,7 月 25 日,CrowdStrike 在检索输入字符串的内容解释器函数中添加了边界检查,同时添加了额外的检查,以确保输入数组的大小与快速响应内容所需的输入数量相匹配。

CrowdStrike 认为,添加的边界检查机制可以防止内容解释器执行输入数组的越界访问并导致系统崩溃。额外的检查增加了一层额外的运行时验证,以确保输入数组的大小与快速响应内容所需的输入数量相匹配。

另外,定义 IPC 模板类型的传感器代码已经更新,旨在提供正确的输入数量(21 项)。此修复程序正通过传感器软件修复程序版本,反向移植至所有 Windows 传感器 7.11 以及更高版本。此版本将于 8 月 9 日正式发布。

 3. 模板类型测试应涵盖更广泛的匹配标准

此前的 IPC 模板类型的开发过程中,CrowdStrike 进行了手动与自动测试。此番测试侧重于模板类型的功能验证,包括安全相关数据能否通过其正确流动,以及对数据内容的评估,以根据开发测试用例中创建的标准生成适当的检测警报。

其中,在自动测试当中,CrowdStrike 选择了一组 12 个静态测试用例以代表更广泛的操作预期,并验证了遥测与检测警报是否正确创建。通道文件中的数据选择以手动方式完成,并且在所有模板实例的第 21 个字段中包含正则表达式通配符匹配标准,这意味着在开发和发布版本期间执行这些测试,不会在提供 20 项(而非正确的 21 项)输入时导致内容解释器中出现潜在的越界读取。

CrowdStrike 为此创建了使用非通配符匹配标准对每个字段进行测试的自动流程,增加测试覆盖率。据悉,此步骤已经针对全部现有模板类型完成,并且成为一切未来模板类型的必要测试选项。

4. 内容验证器中包含逻辑错误

目前,内容验证器已经过修改,目前仅允许第 21 个字段中的通配符匹配条件,从而防止仅提供 20 个输入的传感器触发越界访问。此项修复将于 2024 年 8 月 19 日之前发布至生产环境。

5. 模板实例验证应进行扩展,以涵盖内容解释器内的测试

CrowdStrike 表示新发布的模板类型在多个方面均经过压力测试,然而,内容验证器测试的模板实例并未观察到当 IPC 模板类型被提供给内容解释器时会因输入数量不匹配而导致系统崩溃。为此,团队更新了内容配置系统的测试程序。

6. 模板实例应分阶段部署

CrowdStrike 的这一“发现”描述很少,他们直接给出了缓解措施:更新内容配置系统,增加了额外的部署层与验收检查,同时让客户控制对快速响应内容更新的部署。

其中,网友们对 CrowdStrike 在内核代码中使用正则表达式的做法非常震惊:“这是一个正则表达式!?!Crowdstrike 提交了一份长达 12 页的报告,只是为了说明他们的正则表达式通配符匹配失败并导致关键服务离线!”

“我还以为我是个糟糕的工程师呢,原来不只是我一个人有这个问题!”还有哭笑不得的网友说道,“在观看 Crowdstrike RCA 视频的过程中睡着了,因为其中 90% 都是废话(就像我写 RCA 的时候一样,哈哈),主要原因是:正则表达式。”

还有网友已经开始担心了:“Crowdstrike 开发人员更新了正则表达式并将其推送到生产版本。他们在内核级代码中使用正则表达式让我感到害怕。”

结束语

对于 CrowdStrike 的解释,网友们充满了嘲讽:“明确一点,CrowdStrike 针对通道文件 291 的测试和部署流程是基于一种可以成为‘希望与梦想’的算法运作的。明白了。”

还有网友犀利总结,“CrowdStrike:我们自己调查了一下,发现这其实是个小错误,不是大问题。都散了吧。”

“一想到你们‘保护’选举服务器,我就不寒而栗。”这次 CrowdStrike 算是痛失人心了。

CrowdStrike 在最后也大概解释了通道文件 291 中的新模板实例是如何导致系统崩溃的,感兴趣的读者可以查看:

https://www.crowdstrike.com/wp-content/uploads/2024/08/Channel-File-291-Incident-Root-Cause-Analysis-08.06.2024.pdf

参考链接:

https://www.crowdstrike.com/blog/channel-file-291-rca-available/

https://ebellani.github.io/blog/2024/analyzing-crowdstrike-s-root-cause-analysis-or-on-missing-the-point-about-quality/


一个小众的招聘小程序,主营二三线城市岗位
交流群9群的群友分享了一个招聘小程序,有很多C/C++ Linux相关的岗位,还支持全国一二三线城市定点匹配,各位有最近想要换工作的同学可以试试这个小程序,比boss靠谱点,比较小众

昨天已经在交流群中分享了一下,今天也给大家分享一二,扫描下方二维码即可体验。

这几年行情不好,有好的工作机会还是一起分享,报团取暖才是王道,如果有公司负责人之类的群友想要招聘,欢迎直接私聊我,必须帮忙扩散分享~

EOF

你好,我是飞宇。日常分享C/C++、计算机学习经验、工作体会,欢迎点击此处查看我以前的学习笔记&经验&分享的资源。

我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。

欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会

加个微信,打开另一扇窗

感谢你的分享,点赞,在看三  

C语言与CPP编程 C语言/C++开发,C语言/C++基础知识,C语言/C++学习路线,C语言/C++进阶,数据结构;算法;python;计算机基础等
评论
  • 艾迈斯欧司朗全新“样片申请”小程序,逾160种LED、传感器、多芯片组合等产品样片一触即达。轻松3步完成申请,境内免费包邮到家!本期热荐性能显著提升的OSLON® Optimal,GF CSSRML.24ams OSRAM 基于最新芯片技术推出全新LED产品OSLON® Optimal系列,实现了显著的性能升级。该系列提供五种不同颜色的光源选项,包括Hyper Red(660 nm,PDN)、Red(640 nm)、Deep Blue(450 nm,PDN)、Far Red(730 nm)及Ho
    艾迈斯欧司朗 2024-11-29 16:55 175浏览
  • 概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解决的问题。本文在说明(三)的基础上,继续探讨为SiPM读出测试系统寻求合适的模拟脉冲检出方案。前四代SiPM使用的高速比较器指标缺陷 由于前端模拟信号属于典型的指数脉冲,所以下降沿转换速率(Slew Rate)过慢,导致比较器检出出现不必要的问题。尽管比较器可以使能滞回(Hysteresis)模块功
    coyoo 2024-12-03 12:20 116浏览
  • 作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了!没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢?1.1  USB扩网口通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、
    万象奥科 2024-12-03 10:24 68浏览
  • 戴上XR眼镜去“追龙”是种什么体验?2024年11月30日,由上海自然博物馆(上海科技馆分馆)与三湘印象联合出品、三湘印象旗下观印象艺术发展有限公司(下简称“观印象”)承制的《又见恐龙》XR嘉年华在上海自然博物馆重磅开幕。该体验项目将于12月1日正式对公众开放,持续至2025年3月30日。双向奔赴,恐龙IP撞上元宇宙不久前,上海市经济和信息化委员会等部门联合印发了《上海市超高清视听产业发展行动方案》,特别提到“支持博物馆、主题乐园等场所推动超高清视听技术应用,丰富线下文旅消费体验”。作为上海自然
    电子与消费 2024-11-30 22:03 98浏览
  • 11-29学习笔记11-29学习笔记习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-02 23:58 73浏览
  • TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳定等特点。适用于投影仪的无感自动对焦和梯形校正、AIoT、手势识别、智能面板和智能灯具等多种场景。                 如果用ND06进行手势识别,只需要经过三个步骤: 第一步&
    esad0 2024-12-04 11:20 58浏览
  • RDDI-DAP错误通常与调试接口相关,特别是在使用CMSIS-DAP协议进行嵌入式系统开发时。以下是一些可能的原因和解决方法: 1. 硬件连接问题:     检查调试器(如ST-Link)与目标板之间的连接是否牢固。     确保所有必要的引脚都已正确连接,没有松动或短路。 2. 电源问题:     确保目标板和调试器都有足够的电源供应。     检查电源电压是否符合目标板的规格要求。 3. 固件问题: &n
    丙丁先生 2024-12-01 17:37 102浏览
  • 遇到部分串口工具不支持1500000波特率,这时候就需要进行修改,本文以触觉智能RK3562开发板修改系统波特率为115200为例,介绍瑞芯微方案主板Linux修改系统串口波特率教程。温馨提示:瑞芯微方案主板/开发板串口波特率只支持115200或1500000。修改Loader打印波特率查看对应芯片的MINIALL.ini确定要修改的bin文件#查看对应芯片的MINIALL.ini cat rkbin/RKBOOT/RK3562MINIALL.ini修改uart baudrate参数修改以下目
    Industio_触觉智能 2024-12-03 11:28 87浏览
  • 《高速PCB设计经验规则应用实践》+PCB绘制学习与验证读书首先看目录,我感兴趣的是这一节;作者在书中列举了一条经典规则,然后进行详细分析,通过公式推导图表列举说明了传统的这一规则是受到电容加工特点影响的,在使用了MLCC陶瓷电容后这一条规则已经不再实用了。图书还列举了高速PCB设计需要的专业工具和仿真软件,当然由于篇幅所限,只是介绍了一点点设计步骤;我最感兴趣的部分还是元件布局的经验规则,在这里列举如下:在这里,演示一下,我根据书本知识进行电机驱动的布局:这也算知行合一吧。对于布局书中有一句:
    wuyu2009 2024-11-30 20:30 125浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2024-12-02 10:40 120浏览
  • 学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&
    youyeye 2024-11-30 14:30 78浏览
  •         温度传感器的精度受哪些因素影响,要先看所用的温度传感器输出哪种信号,不同信号输出的温度传感器影响精度的因素也不同。        现在常用的温度传感器输出信号有以下几种:电阻信号、电流信号、电压信号、数字信号等。以输出电阻信号的温度传感器为例,还细分为正温度系数温度传感器和负温度系数温度传感器,常用的铂电阻PT100/1000温度传感器就是正温度系数,就是说随着温度的升高,输出的电阻值会增大。对于输出
    锦正茂科技 2024-12-03 11:50 111浏览
  • 当前,智能汽车产业迎来重大变局,随着人工智能、5G、大数据等新一代信息技术的迅猛发展,智能网联汽车正呈现强劲发展势头。11月26日,在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上,紫光展锐与上汽海外出行联合发布搭载紫光展锐A7870的上汽海外MG量产车型,并发布A7710系列UWB数字钥匙解决方案平台,可应用于数字钥匙、活体检测、脚踢雷达、自动泊车等多种智能汽车场景。 联合发布量产车型,推动汽车智能化出海紫光展锐与上汽海外出行达成战略合作,联合发布搭载紫光展锐A7870的量产车型
    紫光展锐 2024-12-03 11:38 103浏览
  • 最近几年,新能源汽车愈发受到消费者的青睐,其销量也是一路走高。据中汽协公布的数据显示,2024年10月,新能源汽车产销分别完成146.3万辆和143万辆,同比分别增长48%和49.6%。而结合各家新能源车企所公布的销量数据来看,比亚迪再度夺得了销冠宝座,其10月新能源汽车销量达到了502657辆,同比增长66.53%。众所周知,比亚迪是新能源汽车领域的重要参与者,其一举一动向来为外界所关注。日前,比亚迪汽车旗下品牌方程豹汽车推出了新车方程豹豹8,该款车型一上市就迅速吸引了消费者的目光,成为SUV
    刘旷 2024-12-02 09:32 119浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦