史上最荒谬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;计算机基础等
评论
  • 在当前人工智能(AI)与物联网(IoT)的快速发展趋势下,各行各业的数字转型与自动化进程正以惊人的速度持续进行。如今企业在设计与营运技术系统时所面临的挑战不仅是技术本身,更包含硬件设施、第三方软件及配件等复杂的外部因素。然而这些系统往往讲究更精密的设计与高稳定性,哪怕是任何一个小小的问题,都可能对整体业务运作造成严重影响。 POS应用环境与客户需求以本次分享的客户个案为例,该客户是一家全球领先的信息技术服务与数字解决方案提供商,遭遇到一个由他们所开发的POS机(Point of Sal
    百佳泰测试实验室 2025-01-09 17:35 79浏览
  • 故障现象一辆2017款东风风神AX7车,搭载DFMA14T发动机,累计行驶里程约为13.7万km。该车冷起动后怠速运转正常,热机后怠速运转不稳,组合仪表上的发动机转速表指针上下轻微抖动。 故障诊断 用故障检测仪检测,发动机控制单元中无故障代码存储;读取发动机数据流,发现进气歧管绝对压力波动明显,有时能达到69 kPa,明显偏高,推断可能的原因有:进气系统漏气;进气歧管绝对压力传感器信号失真;发动机机械故障。首先从节气门处打烟雾,没有发现进气管周围有漏气的地方;接着拔下进气管上的两个真空
    虹科Pico汽车示波器 2025-01-08 16:51 111浏览
  • 1月7日-10日,2025年国际消费电子产品展览会(CES 2025)盛大举行,广和通发布Fibocom AI Stack,赋智千行百业端侧应用。Fibocom AI Stack提供集高性能模组、AI工具链、高性能推理引擎、海量模型、支持与服务一体化的端侧AI解决方案,帮助智能设备快速实现AI能力商用。为适应不同端侧场景的应用,AI Stack具备海量端侧AI模型及行业端侧模型,基于不同等级算力的芯片平台或模组,Fibocom AI Stack可将TensorFlow、PyTorch、ONNX、
    物吾悟小通 2025-01-08 18:17 72浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球中空长航时无人机产值达到9009百万美元,2024-2030年期间年复合增长率CAGR为8.0%。 环洋市场咨询机构出版了的【全球中空长航时无人机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球中空长航时无人机总体规模,包括产量、产值、消费量、主要生产地区、主要生产商及市场份额,同时分析中空长航时无人机市场主要驱动因素、阻碍因素、市场机遇、挑战、新产品发布等。报告从中空长航时
    GIRtina 2025-01-09 10:35 74浏览
  • 一个真正的质量工程师(QE)必须将一件产品设计的“意图”与系统的可制造性、可服务性以及资源在现实中实现设计和产品的能力结合起来。所以,可以说,这确实是一种工程学科。我们常开玩笑说,质量工程师是工程领域里的「侦探」、「警察」或「律师」,守护神是"墨菲”,信奉的哲学就是「墨菲定律」。(注:墨菲定律是一种启发性原则,常被表述为:任何可能出错的事情最终都会出错。)做质量工程师的,有时会不受欢迎,也会被忽视,甚至可能遭遇主动或被动的阻碍,而一旦出了问题,责任往往就落在质量工程师的头上。虽然质量工程师并不负
    优思学院 2025-01-09 11:48 98浏览
  •  在全球能源结构加速向清洁、可再生方向转型的今天,风力发电作为一种绿色能源,已成为各国新能源发展的重要组成部分。然而,风力发电系统在复杂的环境中长时间运行,对系统的安全性、稳定性和抗干扰能力提出了极高要求。光耦(光电耦合器)作为一种电气隔离与信号传输器件,凭借其优秀的隔离保护性能和信号传输能力,已成为风力发电系统中不可或缺的关键组件。 风力发电系统对隔离与控制的需求风力发电系统中,包括发电机、变流器、变压器和控制系统等多个部分,通常工作在高压、大功率的环境中。光耦在这里扮演了
    晶台光耦 2025-01-08 16:03 87浏览
  • 「他明明跟我同梯进来,为什么就是升得比我快?」许多人都有这样的疑问:明明就战绩也不比隔壁同事差,升迁之路却比别人苦。其实,之间的差异就在于「领导力」。並非必须当管理者才需要「领导力」,而是散发领导力特质的人,才更容易被晓明。许多领导力和特质,都可以通过努力和学习获得,因此就算不是天生的领导者,也能成为一个具备领导魅力的人,进而被老板看见,向你伸出升迁的橘子枝。领导力是什么?领导力是一种能力或特质,甚至可以说是一种「影响力」。好的领导者通常具备影响和鼓励他人的能力,并导引他们朝着共同的目标和愿景前
    优思学院 2025-01-08 14:54 93浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2025-01-09 09:58 63浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 161浏览
  • 在过去十年中,自动驾驶和高级驾驶辅助系统(AD/ADAS)软件与硬件的快速发展对多传感器数据采集的设计需求提出了更高的要求。然而,目前仍缺乏能够高质量集成多传感器数据采集的解决方案。康谋ADTF正是应运而生,它提供了一个广受认可和广泛引用的软件框架,包含模块化的标准化应用程序和工具,旨在为ADAS功能的开发提供一站式体验。一、ADTF的关键之处!无论是奥迪、大众、宝马还是梅赛德斯-奔驰:他们都依赖我们不断发展的ADTF来开发智能驾驶辅助解决方案,直至实现自动驾驶的目标。从新功能的最初构思到批量生
    康谋 2025-01-09 10:04 75浏览
  • 职场是人生的重要战场,既是谋生之地,也是实现个人价值的平台。然而,有些思维方式却会悄无声息地拖住你的后腿,让你原地踏步甚至退步。今天,我们就来聊聊职场中最忌讳的五种思维方式,看看自己有没有中招。1. 固步自封的思维在职场中,最可怕的事情莫过于自满于现状,拒绝学习和改变。世界在不断变化,行业的趋势、技术的革新都在要求我们与时俱进。如果你总觉得自己的方法最优,或者害怕尝试新事物,那就很容易被淘汰。与其等待机会找上门,不如主动出击,保持学习和探索的心态。加入优思学院,可以帮助你快速提升自己,与行业前沿
    优思学院 2025-01-09 15:48 69浏览
  • 在智能网联汽车中,各种通信技术如2G/3G/4G/5G、GNSS(全球导航卫星系统)、V2X(车联网通信)等在行业内被广泛使用。这些技术让汽车能够实现紧急呼叫、在线娱乐、导航等多种功能。EMC测试就是为了确保在复杂电磁环境下,汽车的通信系统仍然可以正常工作,保护驾乘者的安全。参考《QCT-基于LTE-V2X直连通信的车载信息交互系统技术要求及试验方法-1》标准10.5电磁兼容试验方法,下面将会从整车功能层面为大家解读V2X整车电磁兼容试验的过程。测试过程揭秘1. 设备准备为了进行电磁兼容试验,技
    北汇信息 2025-01-09 11:24 80浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 121浏览
  • HDMI 2.2 规格将至,开启视听新境界2025年1月6日,HDMI Forum, Inc. 宣布即将发布HDMI规范2.2版本。新HDMI规范为规模庞大的 HDMI 生态系统带来更多选择,为创建、分发和体验理想的终端用户效果提供更先进的解决方案。新技术为电视、电影和游戏工作室等内容制作商在当前和未来提供更高质量的选择,同时实现多种分发平台。96Gbps的更高带宽和新一代 HDMI 固定比率速率传输(Fixed Rate Link)技术为各种设备应用提供更优质的音频和视频。终端用户显示器能以最
    百佳泰测试实验室 2025-01-09 17:33 84浏览
  • 本文介绍编译Android13 ROOT权限固件的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。关闭selinux修改此文件("+"号为修改内容)device/rockchip/common/BoardConfig.mkBOARD_BOOT_HEADER_VERSION ?= 2BOARD_MKBOOTIMG_ARGS :=BOARD_PREBUILT_DTB
    Industio_触觉智能 2025-01-08 00:06 111浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦