标题 | 简介 | 类型 | 公开时间 | |||||||||||||||
|
||||||||||||||||||
|
||||||||||||||||||
详情 | ||||||||||||||||||
[SAFE-ID: JIWO-2025-755] 作者: 枫叶 发表于: [2017-09-29]
本文共 [830] 位读者顶过
综述2017年9月18日,Piriform 官方发布安全公告,公告称该公司开发的CCleaner version 5.33.6162和CCleaner Cloudversion 1.07.3191中的32位应用程序被植入了恶意代码。被植入后门代码的软件版本被公开下载了一个月左右,导致百万级别的用户受到影响,泄露机器相关的敏感信息甚至极少数被执行了更多的恶意代码。 CCleaner是独立的软件工作室Piriform开发的系统优化和隐私保护工具,目前已经被防病毒厂商Avast收购,主要用来清除Windows系统不再使用的垃圾文件,以腾出更多硬盘空间,它的另一大功能是清除使用者的上网记录。自从2004年2月发布以来,CCleaner的用户数目迅速增长而且很快成为使用量第一的系统垃圾清理及隐私保护软件。而正是这样一款隐私保护软件却被爆出在官方发布的版本中被植入恶意代码,且该恶意代码具备执行任意代码的功能。 这是继Xshell被植入后门代码事件后,又一起严重的软件供应链攻击活动。360威胁情报中心通过对相关的技术细节的进一步分析,推测这是一个少见的基于编译环境污染的软件供应链攻击,值得分享出来给安全社区讨论。 后门技术细节分析恶意代码功能被植入了恶意代码的CCleaner版本主要具备如下恶意功能: 1、攻击者在CRT初始化函数 __scrt_get_dyn_tls_init_callback()中插入了一个函数调用,并将此函数调用指向执行另一段恶意代码。 2、收集主机信息(主机名、已安装软件列表、进程列表和网卡信息等)加密编码后通过HTTPS协议的POST请求尝试发送到远程IP:216.126.225.148:443,且伪造HTTP头的HOST字段为:speccy.piriform.com,并下载执行第二阶段的恶意代码。 3、若IP失效,则根据月份生成DGA域名,并再次尝试发送同样的信息,如果成功则下载执行第二阶段的恶意代码。 植入方式推测根据360威胁情报中心的分析,此次事件极有可能是攻击者入侵开发人员机器后污染开发环境中的CRT静态库函数造成的,导致的后果为在该开发环境中开发的程序都有可能被自动植入恶意代码,相应的证据和推论如下: 1、 被植入的代码位于用户代码main函数之前
main函数之前的绿色代码块为编译器引入的CRT代码,这部分代码非用户编写的代码。 2、 植入的恶意代码调用过程
可以看到CRT代码 sub_4010CD 内部被插入了一个恶意call调用。 3、 被植入恶意代码的CRT代码源码调用过程 通过分析,我们发现使用VS2015编译的Release版本程序的CRT反汇编代码与本次分析的代码一致,调用过程为: _mainCRTStartup –> __scrt_common_main_seh –> __scrt_get_dyn_tls_dtor_callback –> Malicious call 4、 CCleaner中被修改的 __scrt_get_dyn_tls_init_callback() 和源码对比
基于以上的证据,可以确定的是攻击者是向 __scrt_get_dyn_tls_init_callback() 中植入恶意源代码并重新编译成OBJ文件再替换了开发环境中的静态链接库中对应的OBJ文件,促使每次编译EXE的过程中,都会被编译器通过被污染的恶意的LIB/OBJ文件自动链接进恶意代码,最终感染编译生成的可执行文件。 __scrt_get_dyn_tls_init_callback() 函数位于源代码文件dyn_tls_init.c中。 攻击技术重现验证
编译环境的攻击面[出自:jiwo.org]
|
main函数名称 | 对应的OBJ文件 | 说明 |
---|---|---|
main() | crcexe.obj | thestartup routine for console apps |
main() | wcrcexe.obj | thestartup routine for console apps with wide chars |
WinMain | crcexew.obj | thestartup routine for Windows apps |
wWinMain() | wcrcexe.obj | thestartup routine for Windows apps with wide chars |
crcexe.obj在msvcrt.lib中的路径:
f:\dd\vctools\crt_bld\SELF_X86\crt\src\build\INTEL\dll_obj\crcexe.obj
替换msvcrt.lib中的crcexe.obj
2017年9月初360威胁情报中心发布了《供应链来源攻击分析报告》,总结了近几年来的多起知名的供应链攻击案例,发现大多数的供应链攻击渠道为软件捆绑。通过污染软件的编译环境的案例不多,最出名的就是2015年影响面巨大的Xcode开发工具恶意代码植入事件,从当前的分析来看,CCleaner也极有可能是定向性的编译环境污染供应链攻击。以下是一些相关的技术结论:
- 针对LIB文件攻击方式可以通过重编译源码或者修改OBJ二进制代码这两种方式实现。
- 修改OBJ二进制代码实现对LIB文件的代码注入不同于修改源码,此方法理论上可用于注入任何静态链接库LIB。
- 只需按照OBJ文件格式规范即可注入任意代码(shellcode),比如在OBJ中新增/扩大节,填充shellcode并跳转执行。
- 此攻击方法可以在用户代码执行前(CRT)、执行中(调用库函数)、甚至执行结束后执行植入的恶意代码,并且由于恶意代码并不存在于编写的源代码中,所以很难被开发人员发现。
- 攻击者完全可以植入某个深层次调用的开发环境下的静态库文件,以达到感染大部分开发程序并持久化隐藏的目的。
- 使用源代码安全审查的方式无法发现这类攻击
https://msdn.microsoft.com/en-us/library/abx4dbyh(v=vs.90).aspx
*本文作者:360天眼实验室,转载请注明来自 FreeBuf.COM