上周五一场“微软蓝屏”事件席卷全球,事后据微软初步估计,大约有 850 万台 Windows PC 受到波及。虽然这一数字只占到全球 Windows 机器的不到 1%,但随着对该事件的深入调查,众人也发现所谓的“微软蓝屏”事件实则由独立网络安全公司 CrowdStrike 发布的软件更新导致的“灾难”,考虑到由于很多关键基础设施企业使用网络安全巨头 CrowdStrike 的安全软件,实际的影响范围、带来的损失远比我们看到得要多得多。
不止我们看到的银行、航空公司、零售商等企业受到冲击,也有网友反馈称:
我的一个朋友被困在医院一整天。他们的电脑系统出了故障,导致治疗延误。医疗延误会害死人。
同时这场堪比史诗级别的技术危机其实早有先兆,只是没爆发之前也没有太多的人在意。
逻辑错误是根源
在本次蓝屏事件发生的不久后,便有不少工程师逐层排查,直接将问题归咎在了CrowdStrike 发布软件更新中的 csagent.sys 文件上。
基于此,Objective-See 基金会创始人 Patrick Wardle 初探 csagent.sys 文件之所以能引起系统崩溃的原因,其发推说,这个文件中包含了错误的指令:
mov r9d, [r8]
其中,R8 是未映射地址。它取自指针数组(保存在 RAX 中),索引 RDX(0x14 * 0x8)保存了一个无效的内存地址。
其他“驱动程序”(例如 “C-00000291-...32.sys”)似乎是混淆数据……
某些数据或文件(比如日志条目、网络活动记录等)被 CSAgent.sys 系统地收集(ingested),并且与其它数据进行交叉比对(x-ref'd),以帮助 CrowdStrike Falcon Sensor 识别和响应潜在的安全威胁
...所以也许无效的(配置/签名)数据触发了 CSAgent.sys 中的故障。
通过调试可以更容易地判断/确认。
图源:https://x.com/patrickwardle/status/1814363400253698219
也有开发者 Kevin Beaumont 发现,“导致问题的 .sys 文件是通道更新文件(channel update files),由于格式无效,它们导致顶级 CS 驱动程序崩溃。”
当前,CrowdStrike 在调查之后,紧急发布了公告,揭晓了根本原因。
在公告中,CrowdStrike 表示,「2024 年 7 月 19 日 04:09 UTC,作为持续运营的一部分,CrowdStrike 向 Windows 系统发布了传感器配置更新。传感器配置更新是 Falcon 平台保护机制的持续组成部分。此配置更新触发了逻辑错误,导致受影响的系统崩溃和蓝屏 (BSOD)」。
这里提到的配置文件被称为“通道文件”(Channel Files),它们是 Falcon 传感器所使用的用于行为保护机制的一部分。对 Channel File 的更新是传感器运行中的正常部分,并且每天会根据 CrowdStrike 发现的新策略、技术和程序进行多次更新。这并非是一个新流程,实则自 Falcon 创建以来,该架构就已经存在。
那要问为什么之前没有出现过问题,这次一出问题就这么大。CrowdStrike 透露相关的技术细节内容时表示,在 Windows 系统上,Channel File 位于以下目录中:
C:\Windows\System32\drivers\CrowdStrike\
且文件名以“C-”开头。每个 Channel File 都有一个编号作为唯一标识符。本次事件中受影响的 Channel File 是 291,其文件名以 “C-00000291-”开头,以 .sys 扩展名结尾。
虽然 Channel File 以 SYS 扩展名结尾,但它们不是内核驱动程序。
Channel File 291 控制 Falcon 如何评估 Windows 系统上命名管道的执行。命名管道用于 Windows 系统中的正常、进程间或系统间通信。
UTC 时间 04:09 的更新是针对网络攻击中常见的 C2 框架新发现的恶意命名管道而设计的。配置更新引发了逻辑错误,导致操作系统崩溃。
此外,运行适用于 Windows 7.11 及更高版本的 Falcon 传感器的系统,如果在 UTC 时间 04:09 至 UTC 时间 05:27 之间下载了更新的配置,则容易发生系统崩溃。
CrowdStrike 进一步称,“已通过更新 Channel File 291 中的内容纠正了逻辑错误。除了更新后的逻辑之外,不会对 Channel File 291 进行任何其他更改。Falcon 仍在评估和防止滥用命名管道。 这与 Channel File 291 或任何其他通道文件中包含的空字节无关。 ”
14 年前 Windows XP 大规模自动关机、重启背后,同一位技术负责人?
CrowdStrike 官方及其联合创始人兼首席执行官 George Kurtz 随即对自己公司软件问题带来的影响进行了道歉:
我要就今天的中断问题向大家诚挚地道歉。CrowdStrike 的所有人都了解情况的严重性和影响。我们迅速确定了问题并部署了修复程序,使我们能够全心全意地将恢复客户系统作为我们的首要任务。
此次中断是由 Windows 主机的 Falcon 内容更新中发现的缺陷引起的。Mac 和 Linux 主机不受影响。这不是网络攻击。
我们正在与受影响的客户和合作伙伴密切合作,以确保所有系统恢复,以便您可以提供客户所依赖的服务。
然而不少用户显然对这封道歉声明不买账,毕竟全球性大规模的中断带来的损失是无法预估的。
随着这一事件的发酵,据 Forbes 报道,CrowdStrike 市值及 George Kurtz 的身价随之缩水。截至美国东部时间周五下午 3:30,George Kurtz 的身家已减少约 3 亿美元,George Kurtz 上周四的身价超过 32 亿美元,周五的身家约为 29 亿美元,CrowdStrike 的股价自周四收盘以来已暴跌 11%。
同时,也有人剑指 George Kurtz。来自科技行业分析师 Anshel Sag 指出,这并不是 George Kurtz 第一次在历史性的 IT 灾难中扮演重要角色。
回顾历史,2010 年 4 月 21 日,杀毒软件公司 McAfee 发布了针对其企业客户所用软件的更新。该更新删除了一个关键的 Windows 文件,导致全球数百万台 Windows XP 计算机崩溃并自动关机或者反复重启。
与 CrowdStrike 这次的错误非常相似,当时 McAfee 问题也需要手动修复。
Anshel Sag 表示,George Kurtz 当时就是 McAfee 的 CTO。几个月后,英特尔收购了 McAfee。没过多久,George Kurtz 离开了公司,并在 2012 年创立了如今成为网络安全巨头的 CrowdStrike 公司,并一直担任 CEO。
“对于那些不记得的人来说,2010 年,McAfee 导致 Windows XP 出现了巨大故障,造成互联网瘫痪,”Sag 在 X 上写道,“当时担任 McAfee 首席技术官的人现在是 CrowdStrike 的首席执行官。”
早有预兆,稍加注意是否本可避免这次”大规模蓝屏“?
如果说一次两次是偶然事件,那多次发生,人们不禁会质疑这家安全公司带来软件的安全性究竟如何了。
在 HN 评论区中,一位名为 JackC 的用户表示:
早在今年 4 月 19 日,CrowdStrike 就对我们的生产环境中的 Linux 集群做了这样的事情,我对此一直非常不满。
简而言之,我们是一家民用技术实验室,我们在不同的基础设施上在不同时间创建了一堆不同的网站。我们运行企业提供的 CrowdStrike 软件。CrowdStrike 在当时的周五晚上发布了一个更新,该更新与最新的 Debian 稳定版不兼容。起初,我们没有发现这一点,像往常一样修补了 Debian,一周内一切都很顺利,然后突然某一天,我们多个网站和云主机上的所有服务器同时严重崩溃并拒绝启动。
当我们将其中一个磁盘连接到新机器并检查日志时,Crowdstrike 看起来像是罪魁祸首,因此我们手动将其删除,机器启动后,尝试重新安装它,机器立即再次崩溃。
接下来,我们开始提交支持工单并打电话给 CrowdStrike 的工程师。
Crowdstrike 花了一天时间才做出回应,然后要求提供更多证据(除上述内容外)来证明这是他们的错。他们在一天后承认了这个 Bug,并用了几周时间进行了根本原因分析,最终发现他们的测试方案中未能囊括我们的具体环境(我们使用的是 Debian 稳定版的前一版本,理论上是受支持的)。
在我们自己的事后分析中,没有真正的能力阻止同样的事情再次发生——“我们随时将软件推送到您的机器上,无论是否紧急,都不会进行测试”似乎是这家公司商业模式的核心,特别是针对大型企业内的小型 IT 团队。而这恰恰是他们向企业客户兜售的服务理念。
https://news.ycombinator.com/item?id=41005936
无独有偶。今年 5 月,也有用户在 Rocky Linux 社区论坛上指出自己升级到 RockyLinux 9.4 后也遇到了类似的问题,他们的服务器因内核错误而崩溃。Crowdstrike 支持人员承认了这个问题,并强调了测试不足和对不同操作系统之间的兼容性问题关注不足的现象。
启示录
虽然针对这一事件,CrowdStrike 表明导致系统崩溃的传感器配置更新已于 2024 年 7 月 19 日星期五 05:27 UTC 修复,并说道,「我们了解此问题是如何发生的,并且正在进行彻底的根本原因分析,以确定此逻辑缺陷是如何发生的。这项工作将持续进行。我们致力于确定我们可以进行的任何基础或工作流程改进,以加强我们的流程。随着调查的进展,我们将在根本原因分析中更新我们的发现」,但是外媒报道称,许多行业仍在努力摆脱这场灾难,预计影响将持续数周。
纵然谁也未曾预料到全球性软件的瘫痪,有时只是某家公司的疏忽,而我们身处互联网的浪潮之中,作为企业、开发者又该如何减少此类事件的发生?
CSDN 就此事咨询了国内操作系统厂商骨干企业统信软件相关负责人,其表示:
回顾整个事件,最直接的原因是 CrowdStrike 未经充分测试就将错误的配置推送给了用户,但是对于整个软件系统来说,健壮性不能依赖某个组件不出问题。
在这次事件中,有三个方面是值得改进的:
首先是在操作系统和软件的升级上,生产环境下的关键业务系统中所依赖的系统更新不能像 CrowdStrike 这次事故中这样任性。对应更新应首先经过严格的测试,再以灰度方式进行小批量、阶梯式部署的方式发布给用户,在上一批用户没问题后,才能逐步分批推送给其他用户。另外,企业也应当通过域管平台等企业级集中管理系统合理配置相关策略,避免软件联网自更新造成不可控的故障。
其次是在操作系统的可恢复性上,尽管 Windows 提供了还原点、安全模式等功能,但是使用并不方便,需要专业人员进行操作,恢复过程较长。特别是普通用户如果在安全模式下进行文件操作,例如按照网上的指导删除问题文件,稍有差池,甚至可能进一步破坏操作系统。
最后就是有争议的系统边界问题。操作系统作为数字时代的基础设施,需要保障其稳定性和兼容性,在其上运行的代码应当是严格测试和验证过的,任何软件均应通过标准接口与操作系统进行交互。特别是安全软件,为了实施安全策略,其往往具备较高权限,因此更应严守边界,做好测试,而不能采取侵入式技术截获系统函数以实现相关功能。
参考:
https://www.crowdstrike.com/blog/to-our-customers-and-partners/
https://forums.rockylinux.org/t/crowdstrike-freezing-rockylinux-after-9-4-upgrade/14041
https://www.crowdstrike.com/blog/falcon-update-for-windows-hosts-technical-details/
声明:本文为 CSDN 编辑整理,未经授权,禁止转载!
推荐阅读:▶小米3年造车史,雷军公开了:起源于美国制裁,开过一场长达21天的会、试驾了170多辆车,还秀了把“漂移”
▶Win10/11 危!退役 2 年,IE 浏览器不死,反被曝出高危漏洞?
▶周鸿祎谈为何微软蓝屏故障在中国少:大多数电脑用360;华为起诉联发科,向上游收专利费;OpenAI造芯计划再曝新进展| 极客头条
关于 Linux 的资料浩如烟海,学习 Linux 的途径也有很多,如何才能在比较短的时间里获得一个比较大的提升呢?《LINUX 平台高级调试与优化》将与各位 Linux 爱好者共同探索这个问题的最佳答案。本着生动有趣、理论与实践密切结合的原则,本研习班独辟蹊径,使用调试之剑披荆斩棘,带你闯荡纷繁复杂的Linux 世界。本研习班由《软件调试》、《软件简史》和《格蠹汇编》的作者张银奎主讲。