CrowdStrike的库加载和快速升级机制的分析笔记

CrowdStrike的库加载和快速升级机制的分析笔记

时间 :  2024年08月03日  来源:  安天攻防实验室


说明:针对CrowdStrike导致大规模Windows主机蓝屏事件,安天云安全中心、安天CERT、安天攻防实验室三部门于07月21日发布了长篇分析报告 《CrowdStrike 导致大规模系统崩溃事件的技术分析 ——暨对“猎鹰折羽”的沉思》 (后文简称“猎鹰折羽”报告)。同时也推进了多点的分析验证工作,本报告披露其中部分内容。

关于其快速升级删除掉问题“通道文件”的方式,存在一个现象,即在不联网的情况下,让有问题C-*291*sys文件和最新的C-*291*001.sys并存,重新启动后也会自动清除掉问题文件。对其机理,我们提出了两种猜测,第一种是,当升级系统一个分类重新出现版本号01文件时(有可能再辅助一个时间戳判断),则认为本类型重新初始化,自动删除旧的版本号文件。第二种是,将删除对应问题文件的处置定义放到了新的01号文件中。

第一种的猜测依据有两个,对其他分类的文件也不存在版本号01文件能和其他版本并存情况,另外分类规则是针对不同场景的,C-*291*应为主防类的规则,不应直接进行文件处理。第二种情况也不排除,格式中都支持一个自我应急处置的保留机制。我们倾向于第一种。但后续我们的分析可能不在公开了,从业界传统原则上,针对同业产品,我们的可公开逆向分析内容,不宜超越事故分析边界。

安天攻防实验室

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 回连地址,不同地域回连地址有所差异,已知的回连地址如下:

US-1 environments: http://ts01-b.cloudsink.net http://lfodown01-b.cloudsink.net http://lfoup01-b.cloudsink.net https://falcon.CrowdStrike.com https://assets.falcon.CrowdStrike.com https://assets-public.falcon.CrowdStrike.com https://api.CrowdStrike.com https://firehose.CrowdStrike.com
US-2 environments: http://ts01-gyr-maverick.cloudsink.net http://lfodown01-gyr-maverick.cloudsink.net http://lfoup01-gyr-maverick.cloudsink.net https://falcon.us-2.CrowdStrike.com https://assets.falcon.us-2.CrowdStrike.com https://assets-public.us-2.falcon.CrowdStrike.com http://api.us-2.CrowdStrike.com https://firehose.us-2.CrowdStrike.com
US-GOV-1 environments: https://ts01-laggar-gcw.cloudsink.net http://sensorproxy-laggar-g-524628337.us-gov-west-1.elb.amazonaws.com https://lfodown01-laggar-gcw.cloudsink.net http://ELB-Laggar-P-LFO-DOWNLOAD-1265997121.us-gov-west-1.elb.amazonaws.com https://falcon.laggar.gcw.CrowdStrike.com http://laggar-falconui01-g-245478519.us-gov-west-1.elb.amazonaws.com http://api.laggar.gcw.CrowdStrike.com https://firehose.laggar.gcw.CrowdStrike.com http://falconhose-laggar01-g-720386815.us-gov-west-1.elb.amazonaws.com
US-GOV-2 environments: http://ts01-us-gov-2.cloudsink.net http://lfodown01-us-gov-2.cloudsink.net http://api.us-gov-2.CrowdStrike.com http://firehose.us-gov-2.CrowdStrike.com
EU-1 environments: http://ts01-lanner-lion.cloudsink.net http://lfodown01-lanner-lion.cloudsink.net http://lfoup01-lanner-lion.cloudsink.net https://assets.falcon.eu-1.CrowdStrike.com https://assets-public.falcon.eu-1.CrowdStrike.com http://api.eu-1.CrowdStrike.com https://firehose.eu-1.CrowdStrike.com
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:

在初始事件验证中,安天攻防实验室发现了一个奇怪的现象,在公有云环境部署了一套早期版本的CrowdStrike 在部署了问题文件C-00000291-00000000-00000xxx.sys后,触发了蓝屏,但其重启后系统能够正常启动。但在单机采取同样的验证方式,则反复蓝屏。

我们关注到TK老师在微信群的讨论,他提出了应关注CrowdStrike快速升级机理,并建议我们复盘公有云下重启不蓝屏是否源于其快速升级机制。这个建议推进了本文相关分析工作,在此向TK老师表示感谢。关于CrowdStrike是否存在更为底层的快速升级机制,我们还在继续跟进分析。

参考资料:

[1]https://www.microsoft.com/en-us/security/blog/2024/07/27/windows-security-best-practices-for-integrating-and-managing-security-tools/

附录:安天攻防实验室简介

安天攻防实验室隶属于安天安全服务中心,负责红蓝对抗和漏洞挖掘与应急分析工作,并通过安全研究和运营支撑安天产品安全能力提升。专注于攻防技战术研究、漏洞挖掘与应急分析、输出安全能力方案,实现攻防能力转化。自前部门复用安天服务中心部门的图腾啄木鸟,啄不鸟被称为“森林医生”,贴切安全服务中心的工作,为客户解决网络害虫。