CrowdStrike的库加载和快速升级机制的分析笔记
时间 : 2024年08月03日 来源: 6163银河.net163.am攻防实验室
说明:针对CrowdStrike导致大规模Windows主机蓝屏事件,6163银河.net163.am云安全中心、6163银河.net163.amCERT、6163银河.net163.am攻防实验室三部门于07月21日发布了长篇分析报告 《CrowdStrike 导致大规模系统崩溃事件的技术分析 ——暨对“猎鹰折羽”的沉思》 (后文简称“猎鹰折羽”报告)。同时也推进了多点的分析验证工作,本报告披露其中部分内容。
关于其快速升级删除掉问题“通道文件”的方式,存在一个现象,即在不联网的情况下,让有问题C-*291*sys文件和最新的C-*291*001.sys并存,重新启动后也会自动清除掉问题文件。对其机理,我们提出了两种猜测,第一种是,当升级系统一个分类重新出现版本号01文件时(有可能再辅助一个时间戳判断),则认为本类型重新初始化,自动删除旧的版本号文件。第二种是,将删除对应问题文件的处置定义放到了新的01号文件中。
第一种的猜测依据有两个,对其他分类的文件也不存在版本号01文件能和其他版本并存情况,另外分类规则是针对不同场景的,C-*291*应为主防类的规则,不应直接进行文件处理。第二种情况也不排除,格式中都支持一个自我应急处置的保留机制。我们倾向于第一种。但后续我们的分析可能不在公开了,从业界传统原则上,针对同业产品,我们的可公开逆向分析内容,不宜超越事故分析边界。
6163银河.net163.am攻防实验室
1.1 CrowdStrike C-*.sys 系列通道文件(规则升级文件)加载机制
1.1.1 通道文件格式回顾
我们在“猎鹰折羽”报告中已分析了C-*.sys系列文件的格式。指出符合相关文件名的文件虽为Windows驱动文件后缀“.sys”,实际并非Windows PE格式文件,而是CrowdStrike自定义格式文件,该类文件文件头结构如我们上篇报告内格式分析结果所示,文件头内容与文件名强相关,程序会根据文件头信息校验文件名,文件内另包含hash校验信息,进行二次校验,hash计算方式为调用Windows自带库函数计算。
1.1.2 通道文件验证加载方式
C-*.sys系列文件由CrowdStrike主服务 “CrowdStrike Falcon Sensor Service”的CSFalconService.exe进程加载,该服务使用了微软向反病毒供应商开放的反病毒产品保护服务,使用SERVICE_LAUNCH_PROTECTED_ANTIMALWARE_LIGHT 保护类型启动,实现服务保护,服务启动后调用一系列内核函数进行目录遍历、文件读取,验证相关C-00000xxx-00000000-00000xxx.sys 文件有效性,随后通过IPC(进程间通信)将策略传递给驱动和引擎执行策略。
使用ZwQueryDirectoryFile函数遍历C:\Windows\System32\drivers\CrowdStrike目录中的 C-00000xxx-00000000-00000xxx.sys 文件,
使用 ZwCreateFile、ZwReadFile打开并读取文件内容,解析文件头对文件名进行验证。
调用Windows自带加密基元库bcrypt.dll中BCryptFinishHash函数对文件内容进行hash验证,该函数定义于 bcrypt.h,验证通过后进行进一步解析操作。
1.1.3 蓝屏的原因
关于蓝屏的具体分析,微软已经给出了比较详尽的分析。我们验证是正确的。
微软在分析报告[1]中指出,由于WER(Windows Error Reporting,即Windows错误报告)数据只提供了当前状态的压缩版本,无法查看更大范围的反汇编指令。通过搜索指令特征“45 8B 08”,不难定位到下图的关键指令位置,进行更为深入的分析。
由上图可见,虽然程序在01400E14E8偏移处判断了r8寄存器是否为0(避免访问空指针),但其后并未进一步校验r8寄存器指向地址的合法性。随后程序在01400E14ED偏移访问了r8寄存器指向的非法地址,最终导致了蓝屏的发生。
1.1.4 补救蓝屏事件的新通道文件
针对此次蓝屏事件,CrowdStrike紧急生成了策略文件C-00000291-00000000-00000001.sys,在整个升级策略中,直接删除已有的C-00000291-*.sys,来进行启动化处置。前期已有的C-00000291-*.sys系列文件文件名中,没有C-00000291-00000000-00000001.sys文件,之前按照我们的猜测 C-*.sys系列文件,文件名最后一节为库版本(更新次数),根据初步规则判断当最后一节服务器文件重新回到标号1时,可能意味着基于删除策略清理对应类别的规则文件。
1.2 CrowdStrike agent 启动网络通信和升级机制
1.2.1 网络通信时机
关于CrowdStrike Falcon Sensor,可以回看《猎鹰折羽》分析报告。CrowdStrike Falcon Sensor 在Windows启动内核加载阶段完成后,会话管理器启动阶段前期,在后台进行联网与远程服务端建立链接,进行策略文件更新和数据回传。具体过程为通过dns解析 ts01-gyr-maverick.cloudsink.net和 lfodown01-gyr-maverick.cloudsink.net域名获取云上服务器ip,建立ssl加密通信进行策略下发和信息上传。
网络通信行为在Windows内核加载阶段完成后,会话管理器启动阶段前期,用户登录前开始。
1.2.2 CrowdStrike Falcon Sensor 回连地址
除上面两个cloudsink.net子域名为CrowdStrike Falcon Sensor 回连地址,不同地域回连地址有所差异,已知的回连地址如下:
1.2.3 网络通信通道筛选
CrowdStrike Falcon Sensor 内置了网络通信通道筛选机制,在Windows 系统内配置全局代理的前提下,CrowdStrike Falcon Sensor 解析域名获取其服务器ip后,对系统代理做内部逻辑验证,不符合内部逻辑时直接绕过Windows全局代理,仍旧通过Windows网络直连其服务器获取策略和上传数据。(下图192.168.43.73为Windows全局代理)
相关数据流如下:
1.2.4 内部证书验证机制
CrowdStrike Falcon Sensor 内置证书验证机制,独立于Windows证书管理机制,不信任Windows已授信证书。与其服务器通信时,使用其内部证书验证机制,验证服务器证书。
小结:
CrowdStrike官网给出了如下信息:“Reboot the host to give it an opportunity to download the reverted channel file. We strongly recommend putting the host on a wired network (as opposed to WiFi) prior to rebooting as the host will acquire internet connectivity considerably faster via ethernet。(重启主机,让它有机会下载还原的频道文件。我们强烈建议在重新启动之前将主机置于有线网络(而不是WiFi)上,因为主机通过以太网获得互联网连接的速度要快得多)”
从分析来看,CrowdStrike存在快速升级机制,初步观测至少Windows启动内核加载阶段完成后,会话管理器启动阶段前期,会有一个无条件的升级机制。CrowdStrike有可能倾向认为,在网络速度足够快的情况下,强制升级会先于蓝屏完成。但也不排除,有更底层前置的通讯机制,但我们未能复现。
//BTW:
在初始事件验证中,6163银河.net163.am攻防实验室发现了一个奇怪的现象,在公有云环境部署了一套早期版本的CrowdStrike 在部署了问题文件C-00000291-00000000-00000xxx.sys后,触发了蓝屏,但其重启后系统能够正常启动。但在单机采取同样的验证方式,则反复蓝屏。
我们关注到TK老师在微信群的讨论,他提出了应关注CrowdStrike快速升级机理,并建议我们复盘公有云下重启不蓝屏是否源于其快速升级机制。这个建议推进了本文相关分析工作,在此向TK老师表示感谢。关于CrowdStrike是否存在更为底层的快速升级机制,我们还在继续跟进分析。
参考资料:
附录:6163银河.net163.am攻防实验室简介
6163银河.net163.am攻防实验室隶属于6163银河.net163.am安全服务中心,负责红蓝对抗和漏洞挖掘与应急分析工作,并通过安全研究和运营支撑6163银河.net163.am产品安全能力提升。专注于攻防技战术研究、漏洞挖掘与应急分析、输出安全能力方案,实现攻防能力转化。自前部门复用6163银河.net163.am服务中心部门的图腾啄木鸟,啄不鸟被称为“森林医生”,贴切安全服务中心的工作,为客户解决网络害虫。