供应链攻击:CCleaner 5.33官方下载被植入恶意代码(附技术详解)

2017-09-19 14,804

前情提要

供应链攻击是将恶意软件分发到目标组织中的一种非常有效的方法。

在供应链的攻击中,攻击者主要凭借并滥用制造商或供应商和客户之间的信任关系,攻击组织和个人,可能出于多种原因被执行。

2017年上半年爆发的Nyetya(也叫NotPetya)蠕虫就显示出了供应链攻击的强大影响力。类似于Nyetya事件一样,在供应链攻击中,最初的感染载体可以保持相当长的时间不被发现。

Talos最近观察到一个案例,软件供应商用于分发合法软件包的下载服务器向不知情的受害者分发恶意软件。一段时间以来,有Avast合法签名的CCleaner 5.33中还携带了一个多阶段的恶意软件的有效载荷。2016年11月,官方声称CCleaner的总下载量超过了20亿,每周用户的增长约500万。考虑到被感染的计算机网络可能造成的潜在损害,即使只有很小一部分受到影响,但我们依然决定迅速行动。2017年9月13日,思科Talos立即通知了Avast公司,使得他们可以启动相应的响应活动。

接下来我们将讨论关于这次攻击的具体细节。

技术细节

CCleaner是一款知名的系统清理软件,允许用户对系统进行日常维护。

主要功能包括:清理临时文件、分析系统以确定优化性能的方法、向用户提供更灵活的方式来管理已安装的应用程序。

1

图1:CCleaner 5.33的截图

2017年9月13日,Cisco Talos在一次针对新的漏洞检测技术进行客户Beta测试时,识别出了一个特定的可执行文件,触发产品的恶意软件保护系统。

经过仔细检查,将问题定位在CCleaner v5.33的安装程序,它是通过合法CCleaner下载服务器获取到的。

对CCleaner程序进行分析,发现即使下载的可执行文件使用了Piriform公司的有效的数字签名证书,但CCleaner并不是安装文件中唯一的应用程序。

CCleaner 5.33(32位)的二进制安装程序在安装过程中,包括CCleaner还包含一个恶意的有效载荷,功能模块包括一个域名生成算法(DGA)以及硬编码的C&C服务器。

经确认,这种恶意的CCleaner版本在2017年9月11日依然可以直接从CCleaner的下载服务器下载到。

回顾在CCleaner下载站点的历史版本网页可以知道,受感染的版本(5.33)发布于2017年8月15日。2017年9月12日,5.34版本发布。

因此,从8月15日至9月12日这段时间内,官方下载服务器分发的都是包含恶意负载的版本(5.33)。

CCleaner 5.33版本使用了一个有效的数字签名证书,是由赛门铁克颁发给Piriform公司的,有效期截止到10/10/2018。(CCleaner软件是Piriform公司开发的,该公司最近被Avast收购)

2

图2:CCleaner 5.33的数字签名

之后,发现了第二个与这种威胁有关的样本。第二个示例也使用有效的数字签名证书,但是签名的时间戳比初始样本晚大概15分钟。

对恶意CCleaner二进制有效的数字签名的存在可能表明一个更大的问题:开发或签署过程可能受到了损害。

理想情况下,该证书应该被撤销并不再受到信任。当产生一个新的证书服务时,必须注意确保环境是干净的,攻击者无法感染新的证书。只有事件响应过程可以提供关于这个问题的范围的详细信息,以及最佳处理方式。

有趣的是在CCleaner二进制文件中发现了下面的编译器:

S:\workspace\ccleaner\branches\v5.33\bin\CCleaner\Release\CCleaner.pdb

鉴于这个编译器的存在,以及使用颁发给软件开发人员的有效证书对二进制文件进行数字签名的事实,推测可能存在以下情况:

  • 外部攻击者攻破他们的开发或生产环境,获得访问权限,得以将恶意代码插入到公司发布的CCleaner软件中;
  • 也可能是一个可以访问开发或生产环境的内部人员有意地插入了恶意代码;
  • 或者可能是有一个帐户(或类似的凭据)被盗用了,使得攻击者可以插入恶意代码。

同样重要的且值得注意的是,下载服务器上之前版本的CCleaner安装程序目前仍是可用的,但包含恶意代码的版本已被删除。https://www.secpulse.com/archives/60630.html

恶意软件安装和操作

在CCleaner v5.33(32位)二进制文件中包含合法的CCleaner v5.33安装程序,“__scrt_get_dyn_tls_init_callback” 被修改成调用cc_infectionbase(0x0040102c)。

这样做的目的是重定向安全程序的代码执行流,确保在正常的程序操作之前执行恶意代码。调用的代码用于解密包含两个阶段的恶意有效负载的数据,一个是PIC(位置无关代码)的PE装载机,一个是可用来充当恶意软件负载的DLL文件。恶意软件作者曾试图通过将image_dos_header清零来减少恶意DLL被检测的概率,这表明攻击者试图绕过系统的安全检测程序。

之后安装程序使用HeapCreate(HEAP_CREATE_ENABLE_EXECUTE,0,0)创建了一个可执行的堆,并为其分配空间,堆中包含了解密后的数据内容(里边有恶意软件的副本)。

当数据被复制到堆中,源数据被擦除。PE装载机被调用并开始运行。一旦感染过程被启动,安装程序会删除之前包含PE装载机和DLL文件的内存区域,释放先前分配的内存,破坏堆,并继续运行正常的CCleaner操作。

这个过程中,PE加载器使用位置无关代码(PIC)的方式存放代码块,以便定位内存中的DLL文件,然后将DLL文件映射到调用进程的地址空间中,供其在进程中运行,调用dllentrypoint开始的DLL被加载执行和CCleaner二进制继续正常。一旦发生这种情况,恶意软件开始其完整的执行,按照以下章节概述的过程。

cbkrdr.dll

DLL文件(CBkdr.DLL)被修改试图逃避检测,并将IMAGE_DOS_HEADER清零。DLLEntryPoint创建一个执行线程,控制可以返回到装载机。这个线程负责调用CCBkdr_GetShellcodeFromC2AndCall。它还设置了一个返回导向编程(ROP)链用来释放的DLL相关的记忆并退出线程。

CCBkrdr_GetShellcodeFromC2AndCall

这个函数负责完成多个恶意操作。首先,它记录受感染系统的当前系统时间。然后在继续操作之前延迟601秒,这可能是为了试图逃避自动分析系统(这些系统被配置为在预定义的时间内执行示例),或确定恶意程序是否在调试器中被执行。为了实现这种延时功能,恶意程序调用了一个函数,尝试ping 224.0.0.0,并使用delay_in_seconds将超时设置为601秒。

然后,再次检查当前的系统时间,以确认是否已经过了600秒。如果条件不满足,恶意终止执行而CCleaner二进制程序继续正常运行。

在恶意软件无法执行IcmpCreateFile的情况下,它使用Sleep()函数实现延时的功能。该恶意软件还将当前系统时间与存储在HKLM\SOFTWARE\Piriform\Agomo:TCID 注册表位置的值进行比较,如果存储在TCID值较晚,恶意软件也将终止执行。

3

图3:延迟程序

然后,恶意软件检查系统上正在运行的用户的权限,以决定下一步的动作。如果当前运行恶意进程的用户不是管理员,则恶意软件将终止执行。

4

图4:权限检查

如果执行恶意软件的用户具有系统的管理员权限,SeDebugPrivilege被启用,之后恶意软件会读取存储在注册表HKLM\SOFTWARE\Piriform\Agomo:MUID位置上的‘installid’的值。

如果这个值不存在,恶意软件使用'((rand()*rand() ^ GetTickCount())’创建它。https://www.secpulse.com/archives/60630.html

一旦上述活动被执行完毕,恶意软件就开始分析系统并收集系统的信息,这些信息稍后会被传输到C&C服务器。系统信息存储的数据结构如下图所示:

5

图5:CCBkdr_System_Information的数据结构

一旦系统的信息收集完毕,恶意软件会对它们进行加密并通过改进的Base64进行编码。之后恶意软件建立一个命令和控制(C2&C)通道,详情如下节所述。

指挥与控制(C&C

分析这一恶意软件的过程,Talos发现它的C&C功能相关的恶意代码似乎存在一个bug。样品从一个注册表项读取一个使用域名生成算法计算出来的IP地址:

HKLM\SOFTWARE\Piriform\Agomo:NID

但是目前还不清楚这个IP地址的目的是什么,因为恶意软件在随后的操作中似乎没有使用它。在任何情况下,一旦前面提到的系统信息被收集并准备传输到C&C服务器,恶意软件将尝试使用HTTPS POST请求将其发送到216[.]126[.]225[.]148。HTTPS通信利用硬编码的HTTP Host header(被设置为speccy[.]piriform[.]com,这是一个Piriform公司用来做硬件监控的合法的平台)。这可能使动态分析变得更加困难,因为这个域名似乎是合法的,甚至可能就是受害者的基础设施。因为当前服务器返回一个自签名的SSL证书,该证书颁发给主机头字段中定义的子域,所以可能会产生一些安全错误,但请求在利用HTTPS协议时会忽略所有的安全错误。如果没有从C&C服务器接收到响应,恶意软件就不能返回一个域名生成算法(DGA)。

一旦恶意软件识别出一个可用的C&C服务器,就会向其发送包含系统配置文件信息的编码后的数据,并将C&C 服务器的IP地址存储在以下注册表位置:

HKLM\SOFTWARE\Piriform\Agomo:NID

然后,恶意软件将当前系统时间的值加上两天,并存储到以下注册表位置:

HKLM\SOFTWARE\Piriform\Agomo:TCID

对从C&C服务器接收到的数据进行验证,确认收到的数据格式符合CCBkdr_ShellCode_Payload的结构,示例如下:

6

图6:CCBkdr_ShellCode_Payload的数据结构

之后恶意软件检查EncryptedInstallID的值,确认其与先前发送给C&C服务器的值匹配。然后为最终的shellcode有效载荷分配内存。通过改进的Base64编码对有效载荷进行解码,并将结果存储到新分配的内存区域,然后调用LoadLibraryA 和 GetProcAddress的地址作为参数进行解密。一旦有效载荷执行完毕,内存释放,并讲以下注册表的值设置为当前系统时间加上七天:

HKLM\SOFTWARE\Piriform\Agomo:TCID

接收缓冲区被清除和销毁。CCBkdr_ShellCode_Payload结构也被释放,恶意软件继续执行CCleaner的正常操作。概述此恶意软件的操作流程,图示如下:

7

图7:恶意软件的操作流程图

 

域名生成算法

在发生上一节中讲到的那种情况时,即C&C服务器没有返回HTTP POST请求的响应,该恶意软件无法使用DGA算法。

该恶意软件使用的算法是基于时间的,可以使用年和月的值计算。一个DGA域名列表如下所示:

8

图8: DGA生成算法示例

该恶意软件会启动DNS查找每个由DGA算法生成的域名。如果DNS查找未有返回IP地址,则此过程将继续进行。

该恶意软件会执行一个DNS查询去寻找活动的DGA域名,并期望从域名服务器管理域的命名空间中返回两个IP地址。

然后,恶意软件会对返回的IP地址值执行一系列的比特操作来计算次要的C&C服务器,并将它们组合起来,以确定用于随后的C&C操作的实际回退的C&C服务器地址。这个过程的图示如下:

9

图9:C&C的过程图

Talos观察分析到这些DGA的生成的域名还没有被注册,所以安全人员就注册了这些域名,并将它们sinkholed,防止攻击者继续使用它们从事恶意活动。

潜在的影响

由于潜在的可能受到影响的系统非常多,所以这次攻击带来的影响可能是很严重的。2016年11月CCleaner声称总下载量超过20亿,据报道,全球范围内每周的新增用户大概为500万。

10

图10:CCleaner消费者的统计数据

即使这些系统中只有一小部分被感染了,攻击者也可以使用恶意软件发起大规模的攻击。受影响的系统需要恢复到2017年8月15日以前的状态或重新安装系统。用户应该更新到CCleaner的最新版本,以避免被感染。当前CCleaner的版本号是5.34。需要注意的是,根据CCleaner下载网页的提示,CCleaner免费版本不提供自动更新,所以使用免费版本的受影响的用户需要手动进行更新。

分析这个攻击活动中基于DNS的相关的数据,Talos识别出了有大量的系统的DNS请求与之前所述的那些DGS域名有关。由于这些域名从未注册过,所以有理由相信这些系统很可能是受到了这种恶意软件的感染。这些域名在8月和9月(与当这种威胁在野外活动的时间相关)显示出更多的活动,而在7月份(CCleaner 5.33被释放之前),与这些域名相关的DNS解析活动很少。

11

图11:2017年7月DGA域名的DNS活动

包括恶意代码的CCleaner软件版本是2017年8月15日发布的。下面的图中清楚的显示了8月份与DGA域名相关联的DNS解析量显著增加:

12

图12:2017年8月DGA域名的DNS活动

同样,与2017年9月DGA域名的DNS解析活动依然很活跃:

13

图13:2017年9月DGA域名的DNS活动

值得注意的是,在2017年9月1日开始,DNS的活动的域名转移了,9月份使用的DGA域名与8月份的不同,关于这一点在本文的 “域名生成算法”一节中提到过,DGA算法是基于时间的计算的。当AVAST关闭了服务器,对于已经感染的系统而言域名服务器不可用了,我们看到针对故障的DGA域名的请求量显著增加:

14

图14:服务器关闭后请求量激增

值得注意的是,在写作本文时,对这个威胁的反病毒检测成功率仍然很低(1/64)。

15

图15:VirusTotal检测包含恶意代码的CCleaner二进制文件

结论

这是一个攻击者试图向全球范围内的组织和个人分发恶意软件的典型案例。利用软件供应商和软件用户之间的信任关系,攻击者可以从用户对分发的更新文件和Web服务器的固有信任中获益。在许多组织中,对于来自正常软件供应商的数据与被视为不可信来源的数据的审查级别是不同的。攻击者的行为表明,他们希望利用这种信任来分发恶意软件,并尽可能的隐藏自身。供应链攻击的危害性值得重视。

IoCs

文件哈希值

6f7840c77f99049d788155c1351e1560b62b8ad18ad0e9adda8218b9f432f0a9
1a4a5123d7b2c534cb3e3168f7032cf9ebf38b9a2a97226d0fdb7933cf6030ff
36b36ee9515e0a60629d2c722b006b33e543dce1c8c2611053e0651a0bfdb2e9

DGA 域名列表

ab6d54340c1a[.]com
aba9a949bc1d[.]com
ab2da3d400c20[.]com
ab3520430c23[.]com
ab1c403220c27[.]com
ab1abad1d0c2a[.]com
ab8cee60c2d[.]com
ab1145b758c30[.]com
ab890e964c34[.]com
ab3d685a0c37[.]com
ab70a139cc3a[.]com

IP地址

216[.]126[.]225[.]148

 

【原文:http://blog.talosintelligence.com/2017/09/avast-distributes-malware.html   翻译作者:鹰小编,翻译出处:http://www.mottoin.com/105885.html   安全脉搏编辑发布

 

本文作者:SecPulse

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/60630.html

Tags:
评论  (1)
快来写下你的想法吧!
  • LV 2018-12-21 18:41:13

    @匿名 添加单引号,双引号,order by, sleep,benchmark,运算符,修改数据类型,报错注入语句测试

SecPulse

文章数:98 积分: 289

气质和实力并兼的男人

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号