自由的羽毛 发表于 2024-9-30 16:21:03

网安加·百家讲坛 | 裴伟伟:微软蓝屏史诗级事件深度分析与启示

作者简介:裴伟伟,洞源实验室创始人,国家网安基地网络安全行业专家,网安加社区特聘专家,持有CISSP、PMP证书,曾在HITCON、可信云大会、开源财产大会等安全论坛发表演讲。曾任国内某安全实验室负责人、某互金企业安全负责人、某头部SaaS企业首席信息官,负责安全合规、IT审计、软件安全、底子安全、数据安全、安全运维和安全研发等工作,善于企业安全建设与运营、软件安全开发以及技术团队建设与管理。事件过程与影响

7月19日下午,约莫从北京时间13点30分开始,全球差别地方的Windows系统用户中,不少人发现自己的Windows系统出现了蓝屏错误(BSOD,Blue Screen Of Death)。
https://i-blog.csdnimg.cn/direct/5ad517fd32654d90a8a2e7dfe97e1f82.png
这个故障画面会表现Recovery(恢复),并提示Windows系统没有正确加载。
之后,网络上出现很多蓝屏恶搞的图片,以此指向微软大概CrowdStrike公司。比如冰箱蓝屏导致无法打开冰箱,实际上是更换了Android系统的图片,而且冰箱表现屏故障也不影响冰箱开门。
之所以指向CrowdStrike公司,是由于引发此次蓝屏事件的正是这家公司。
CrowdStrike公司是美国的一家颇受欢迎的计算机安全服务提供商,该公司于2011年创建,并于2019年上市,旗下的核心产品名为Falcon(猎鹰),这是一款EDR(端点检测及响应,Endpoint Detection and Response)产品,该主要运行在用户终端,尤其是Windows系统,用于全方位检测系统安全攻击,并提供主动的安全防御能力,包罗数据收集、威胁检测、事件响应、取证分析等。
2024年7月19日,北京时间12点09分,CrowdStrike向Windows系统发布了一个Falcon产品的传感器配置(sensor content)更新,该更新是Falcon平台掩护机制的一部分,而更新内容是Windows系统的驱动文件或可以大概影响Windows内核的文件,虽然当天北京时间13点27分该文件的错误就得到了修正,但那一天下午很多Windows用户由于蓝屏故障都没有办法更新修复后的文件。
由于Falcon这款产品的大规模应用,即便只影响Widows系统上安装了这款产品的用户,大概严格来说在7月19日北京时间12点09分到13点27分之间系统处于联网开机状态的Falcon产品用户,其影响范围依然非常庞大。
这个故障影响了Windows 7.11以上版本的系统,约莫影响了850万台Windows装备,占全球Windows市场的不到1%,机场、医院、交通、媒体、酒店、餐馆等差别场所的系统中有大量的Windows系统用户和Falcon产品用户,以至于出现机场停摆,如美国航空公司当天取消了3400架次航班。浩繁搭客无法按时起飞,乃至必要手写机票。这个故障实际上不影响飞机飞行功能,但会影响塔台、航站楼的系统。
https://i-blog.csdnimg.cn/direct/33accac683f946479a60203102f35731.png
同时影响的另有CrowdStrike自己的股价,事件发生当天股价跌下去11%,如今该公司的股价已暴跌30%,从之前的每股343美金跌至写作此文的每股264美金。
CrowdStrike的响应

事件发生后,由于蓝屏故障导致受影响用户无法再更新正确的配置文件,官方只能通过Reddit等渠道发布临时的恢复方案:
1. 重启系统进入安全模式或系统恢复模式;
2. 打开C:\Windows\System32\drivers\CrowdStrike目录;
3. 找到该目录下“C-00000291*.sys”并删掉;
4. 重启系统。
但这种方法对于启用了Windows系统BitLocker功能的用户却是无效,启用该功能后系统是无法进入安全模式或系统恢复模式的。
当天晚上,CrowdStrike公司首席执行官George Kurtz发表声明,向广大客户和用户致歉,并说明Mac和Linux系统不受影响,事件是由于一个文件更新的缺陷造成的,不是一起网络攻击事件,并告诫大家一些人可能会利用此次故障事件行不良之事。
事件发生后,也确实有制止在利用此事作为诱饵举行恶意活动,包罗向客户发送伪装成CrowdStrike支持的钓鱼邮件、假冒CrowdStrike公司员工举行电话诈骗、伪装成安全人员提供虚伪的调停发起大概出售声称可以解决故障问题的恶意程序。
Microsoft的回应

虽然事件不是由微软直接造成,但Windows系统可以被第三方公司的产品使用系统内核级程序或文件,引起了一些技术人员的质疑,比如参考Mac的做法,不答应第三方开发公司或人员获得内核级访问权限。
在今年1月份,CrowdStrike公司首席执行官George Kurtz也向微软提出过雷同疑问,指出微软的Windows系统问题会让客户面对风险,也会使美国政府面对风险。
微软将此系统风险的问题抛给了欧盟,其发言人称,早期由于投诉问题与欧盟达成谅解,自2009年起,微软同意向第三方公司或厂商提供系统级访问权限,以方便安全软件公司可以使用Windows操作系统。
其他人/组织的反应

作为俄罗斯的老牌安全公司,卡巴斯基(Kaspersky)在7月19日当天发布一条贱贱的推文:
如果你用我们的产品,就不会看到蓝屏了。
这种坟头蹦迪的行为之后得到了很多人的愤慨,指出2020年和2023年由卡巴斯基官方发布的蓝屏故障通告,均是由于卡巴斯基的产品导致。
https://i-blog.csdnimg.cn/direct/a6357a24a00b49b8a7abacb63caf9f55.png
一名叫Vincent Flibustier的人发布图片和视频,称自己作为CrowdStrike的员工,在上班第一天由于发布了一个文件更新而被公司开除,说公司告诉他周五不发版,但他觉得自己是在周四发布的更新,算不得违反公司规定,被开除着实非常冤枉。
https://i-blog.csdnimg.cn/direct/c803d899604e40ee806d80f0375c2143.png
实际上,这个人是专门从事假新闻研究的,在其发布的图片里非常容易看到处理的痕迹。
故障原因分析

此次更新的配置文件通常也被称作“通道文件(Channel Files)”,是Falcon传感器使用的行为掩护机制的一部分,这个文件天天都会更新多次,用来更新CrowdStrike发现的TTP(战术、技术和程序),也正是这种更新机制,导致文件更新之后很快影响到大范围的Windows系统。
这个通道文件在Windows系统中的路径是:
C:\Windows\System32\drivers\CrowdStrike\
该事件涉及一个名为“ C- ”的文件名,Falcon的每个通道文件都有一个数字作为唯一标识符。在此次事件中受到影响的通道文件编号是291,故其文件名是以“ C-00000291- ”开头,并以“.sys ”作为扩展名,CrowdStrike称这个文件并不是内核程序。
291编号的配置文件更新就是为了更新Falcon产品的监测和响应规则,用于控制Windows系统中定名管道(Named Pipe)的执行,它决定了差别系统活动中监测和响应的行为。
定名管道是Windows系统中进程之间通讯的机制,可以在差别进程之间举行数据交互,由于一些C2(Command and Control)恶意软件会利用定名管道创建埋伏的通讯通道,因而EDR产品中必要监控定名管道的安全,比如制止恶意的定名管道的创建。
网络上有人指出更新的291文件中都是空字节文件,但CrowdStrike在官方声明中否认了这点。
实际上,是更新的文件中包含了一个逻辑错误,这个错误导致内存分配出错,而验证逻辑同样存在问题,导致驱动程序继续执行,内存分配不当最终导致系统出现
PAGE_FAULT_IN_NONPAGED_AREA错误,从而导致系统无法正常启动。
系统在创建定名管道时间会分配内存缓冲区,如果缓冲区分配的内存地址不合理,大概指向的地址不存在,而系统又继续执行读取这些不存在或非分页的内存区域,就会触发
PAGE_FAULT_IN_NONPAGED_AREA蓝屏故障,非分页区域由于不会分页置换到物理硬盘,大概说始终使用的是物理内存部分,因而用于运行系统的核心程序,而由于系统内核拥有最高的系统权限,因而内核错误会引发系统严峻的结果。
蓝屏故障实际上是Windows系统举行自我掩护的一种机制,防止内核程序和数据受到更多破坏。
https://i-blog.csdnimg.cn/direct/b0a3e6eab8274e9f9124c22b981f7962.png
从上图中可以看到,更新文件中试图读取的内存地址使0x9C,而这个地址所处的内存区域是用于存放中断向量表的(0x0000-0x03FF),因此读取0x9C的地址势必会导致系统异常。
在C/C++开发中,对于内存地址的使用是要非常审慎和小心,尤其是指针的使用必要做指针校验,比如:
https://i-blog.csdnimg.cn/direct/88074cc4f2c04a78987790db42a7f2c2.png
显然,CrowdStrike的开发人员在编写程序时间可能在指针校验方面出了差错,而这个错误的文件没有被检测出来,进而发布在了用户的生产环境。
事件启示

从软件开发流程的角度,这个问题可以在三个方面解决:
代码编写阶段
TDD(测试驱动开发)、结对开发、同行评审等多种方式都可以发现上述的缺陷,问题在于,TDD必要编写大量的测试用例,团体代码编写量较大,结对开发对于很多企业而言看起来像是开发人员的浪费,同行评审又会由于开发人员的提交不规范导致评审工作量太大,因而国内很多企业都不屑或不在意代码编写阶段的质量。
笔者在早年开发Windows系统应用时间,开发的代码会通过版本控制系统交由另一个更加资深的开发人员做评审,雷同同行评审中的观察者模式,区别在于这名资深开发人员会对于不合理的代码直接举行修改,实际上应该反馈给笔者,由笔者完成修改,之后笔者再拉取最新的代码继续开发。
软件测试阶段
有人以为在自动化单元测试和集成测试阶段不太容易发现上述的内存故障,由于必要较高程度的开发能力,必要人工举行测试。
实际否则,从故障现象看,但凡可以大概在自动化集成测试环境中采用与生产环境雷同的Windows系统,都可以在自动化测试中立即发现蓝屏故障,这也说明CrowdStrike公司在测试过程中存在疏漏,大概对于这类常态化更新的文件没有开展更多具体的测试。
由于测试本领不足导致的问题,在2019年Cloudflare也发生过一起安全事件,这一年的7月2日,由于Cloudflare的WAF规则中存在ReDos毛病,导致该公司全球的CDN网络和WAF产品中断半个小时,其原因在于对于日常更新的WAF规则没有采用灰度发布,集成测试中没有添加CPU占用率的遥测(参见:
https://blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019)。
由于测试环境不同等导致的问题,2022年国外一家企业的安全人员发现公司产品上线运行的版本存在路径穿越毛病,而测试环境中却没有复现乐成该毛病,后来发现是生产环境和测试环境的负载均衡配置差别,在生产环境使用的AWS的负载均衡服务中Nginx将merge_slashs关闭了,而实际上该配置默认是开启的。
变更发布阶段
对于此类安全产品的更新,且影响范围遍及全球的更新,应当采取灰度发布大概金丝雀发布的方式,即先在小范围举行发布,监测更新运行的环境,之后扩大发布范围,并连续监测更新运行环境,最后再扩大到全部用户的更新。
CrowdStrike可能和Cloudflare在2019年龄故中一样,犯了没有灰度发布的错误,毕竟安全更新晚一些就有可能让客户遭受攻击,继而造成客户的损失,但错误的发布会造成公司所有客户的更大故障和影响。
国内由于使用CrowdStrike公司产品的企业和个人并不多,因而此次事件中国内用户和企业几乎不受影响,这得益于国内自有的、独立的安全厂商和产品体系多年的推广和更符合国情的应用。
但这并非意味着有独立的产品市场和体系就可以制止雷同事件的发生,此次事件出现的根本原因在于CrowdStrike公司在软件质量管理和实施方面的问题,上述的三个方面在国内的浩繁软件企业中也未必均实施和落地,一旦国内某家大规模应用的软件公司出现雷同问题,影响范围也会覆盖全国。
比如2015年9月1日,阿里云安骑士升级导致客户ECS部分正常文件被隔离(参见:
https://www.infoq.cn/article/2015/09/aliyun-yundun),当时则会由于产品未覆盖国外而让影响无法触达国外,因此这不能说明自主门户是解决这个问题的根本办法,自家榨油虽然不会吃到煤油,但也可能会吃到榨不干净的油。
归根结底,是要从差别事件中汲取教训和经验,从研发管理、研发质量、研发安全一步一步做起,使软件开发更安全,让安全开发更放心。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 网安加·百家讲坛 | 裴伟伟:微软蓝屏史诗级事件深度分析与启示