全球Windows大瘫痪

Category : 软件 | Post on 2024/07/22 00:00 by Richard | Comments:0
2024年7月19日,全球使用CrowdStrike公司终端安全产品的Windows操作系统的主机大面积发生系统崩溃故障,即“蓝屏死机”(Blue Screen of Death,BSOD),而且受影响的主机重新启动后依然会进入蓝屏状态、无法正常运行。至少20多个国家的交通、金融、医疗、零售等行业或公共服务的业务系统受到影响,四万多航班停运或延误、电视台停播、超市关门、医院停诊、紧急服务中断,还导致了多个重要的微软和AWS的云服务和租户服务中断。事后统计,导致了全球850万台电脑蓝屏死机,这是今年以来全球波及范围最广的信息系统灾难性事件。

关于原因的分析,现在具体信息还是太少,从已知的部分信息来看,已经明确了是因为CrowdStrike更新导致的。

官方给出的修复办法是:
1. 安全模式启动Windows
2. 前往 C:\Windows\System32\drivers\CrowdStrike 目录,删除所有 C-00000291*.sys 文件
3. 重新启动

粗略分析下:
- 故障是由于CrowdStrike升级推送导致的。
- 出错的模块是“CSAgent.sys”,它是主要的功能模块,包括文件监测、运行监测、网络过滤等功能,是其主动防御和主机防火墙的核心驱动。基本的运行原理是:驱动程序加载后首先读取策略配置,根据策略对文件读写、进程加载、内存执行、API调用、网络访问等动作做出放行与阻止操作。
- CrowdStrike升级时下发了新的策略配置文件,虽然以sys为后缀,但其实是数据文件。
- 新的数据逻辑应该是有问题,印发指针错误,激活了之前程序中的BUG,导致出错。
- 在内存指针横行的编程里面,不在所有调用前判断指针的状态将是灾难性的。同样地,参数的各种可能状态,都是要考虑到的。本人曾经遇到过一个“电信级”系统,允许的参数是1-5,在遇到传入0的时候,系统就崩溃了。容错是每一个运营系统必须的考量。

这里,不得不说一下Windows升级机制的安排:
- Microsoft负责Windows以及官方驱动的升级。
- 应用程序Application负责其自身的升级。
- 安全软件、驱动程序是一种特别类型的应用程序,它们具有完全权限,由安装时用户同意授予它访问权限,说白了是不同意就装不了,不过,有几个人真的在安装时研究过许可内容以及可能的后果?

CrowdStrike的故事:
- 2010年4月21日,全球知名的杀毒软件McAfee发布了一次面向企业客户的软件更新,更新后的它看到svchost.exe就认为是病毒,直接删了,但这是Windows一个关键文件,此事导致全球数百万台电脑崩溃并反复重启,只能手工修复。
- 事后,当时McAfee的首席技术官、执行副总裁George Kurtz,离开了McAfee,于2012年创立了CrowdStrike,并一直担任首席执行官至今。而今,CrowdStrike已经是美国网络安全的头部企业,纳斯达克上市公司,世界500强有298家是其客户,市值1000亿美元(事故前)。
- 是不是熟悉的配方?
- 幸运的是,经过长时间的产业国产化,国内并没有使用CrowdStrike,因此基本没有受到波及。但是我们不是也应该从中吸取教训、未雨绸缪吗?

作为前资深程序员,深刻地体会到软件开发中容错机制的重要性。一个程序要做出来不难,要做的漂亮好用、做的稳健,就很难了,如果说一百行代码能够写出程序的功能,很可能最后成品需要数千行代码,最后就是水平和质量的体现了。所以说,难的不是做出功能来,难的是考虑到所有的异常情况,程序在任何情况都不应该有“意外之喜”。

复盘这次的事故,最大的锅在CrowdStrike:
- 程序开发上没有做到详尽检测、测试,留下了BUG,埋下了炸弹。写过程序的都知道,应该让每一次的调用,都要检查各种可能性。
- 策略文件制作发放时没有做好测试,直接开始了推送。
- 推送时也没有分区推送,没有监测机制,一旦发现问题,应该立即停止继续推送。

当然,Windows也不能全部甩锅,谁说微软没有责任的?这个升级机制是否应该考虑更完善,而不是一旦出错就躺平给一个蓝屏出来。尽管驱动程序和安全软件具有系统权限,但也应限制程序和数据区的访达范围,一旦出错,Windows确实无法继续的时候,是不是可以自动重启,到上一次正常启动的状态?滚动记录一次的系统目录即可。

微软有没有考虑过,桌面办公电脑还好,有人去启动,那些远程的无人站点,例如水文监测站、监控点等等,还要派IT人员翻山越岭去一个一个站点修复。微软不考虑这些使用场景的吗?微软是时候要重新检视一下Windows的机制了,所有的系统平台、应用软件,都要从中吸取教训,应考虑到所有的例外情况(Exception)。

最后编辑: Richard 编辑于2024/07/23 03:52
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]