腾讯安全反病毒实验室:“潜盗者”APT渗透攻击揭秘

2017-12-29 15:25:42
最近,哈勃流量引擎捕获了一起“潜盗者”的渗透攻击事件,此次攻击事件是以钓鱼邮件的形式来诱骗用户点击附件的。根据我们的分析,这是一起针对欧美企业公司财务人员的APT攻击,"潜盗者"潜伏到用户电脑后,会长期接受云端的控制,威胁用户的隐私安全。目前每日大概有几千左右的用户中招。通过详细的分析,病毒与服务端的交互过程,既有正常的会话密钥协商后加密通信内容的方式,也有自有加密方式的保护。由此推测幕后制作者是

背景

最近,哈勃流量引擎捕获了一起“潜盗者”的渗透攻击事件,此次攻击事件是以钓鱼邮件的形式来诱骗用户点击附件的。根据我们的分析,这是一起针对欧美企业公司财务人员的APT攻击,"潜盗者"潜伏到用户电脑后,会长期接受云端的控制,威胁用户的隐私安全。目前每日大概有几千左右的用户中招。通过详细的分析,病毒与服务端的交互过程,既有正常的会话密钥协商后加密通信内容的方式,也有自有加密方式的保护。由此推测幕后制作者是一个成熟的黑客团伙。

通过流量引擎的分析,此类邮件所携带的JS脚本是一类远控木马的下载者。整个木马运行流程如下:

 

JS脚本会从云端请求一个可执行文件fzxjnwr1.exe,fzxjnwr1在进行逻辑判断后会把自身移动到特定的文件夹下,并命名为一个新的名字AppidWebCam.exe。随后AppidWebCam通过导入云端的DH算法公钥与C&C协商一个会话密钥,此后AppidWebCam和云端的交互数据都会经过会话密钥的加密保护。最终云端会下发具备各种恶意功能的shellcode,AppidWebCam在内存将其解密后加载运行,接受云端控制,并窃取用户隐私,操控用户电脑,产生极大的风险。

哈勃流量引擎在捕获此异常流量后,迅速对病毒的各个阶段流量行为做出响应,包括钓鱼邮箱的识别,JS脚本下载的fzxjnwr1文件的识别,以及每个阶段连接的C&C进行域名的识别。通过哈勃流量引擎,可以迅速及时的对异常流量做出响应,把风险控制在源头。下面分两部分来介绍,第一部分首先针对样本各个阶段产生的流量介绍流量分析,第二部分针对此样本进行详细的样本分析。

流量分析:

邮件流量

用户收到的邮件内容如下图所示:

 

通过哈勃流量分析系统,可以清晰的看到邮件的组成。第一个文件SMTP.eml是邮件的正文,第二个Invoice-00961-Apr-25-2017-US-613327.js则是附件。下图中看到这个JS附件是一个恶意脚本,被标记为黑。

 

下图展示了发件邮箱和收件邮箱的信息,可以看到发件箱已经被标示为黑,这是因为之前流量系统就捕获到此邮箱曾经发送过恶意邮件,所以当这个邮箱出现后,流量系统就能识别出来,可以阻断病毒源的传播。

 

样本流量

运行附件中的JS后,后续的网络流量情况如下图所示。JS脚本会不断的去尝试连接C&C服务器,流量系统每天会把海量病毒样本所连接的C&C服务器入库记录,当后续再有病毒连接之前出现过的C&C服务器后,系统就能将其识别出来。

 

下图中的sample hash是C&C返回的文件MD5值,流量引擎在捕获到请求文件的MD5后,会通过云查来查看报毒情况。从图中可以看到,在这里JS所请求的文件是一个恶意文件,落地后命名为fzxjnwr1.exe,随后这个可执行文件会被Wscript.exe加载运行。

 

Shellcode流量

之前介绍过,落地后的fzxjnwr1.exe会释放AppidWebCam.exe的文件。此文件又去尝试连接C&C服务器,最终会成功下载具备窃取隐私等功能的ShellCode(上图中最后一个文件),威胁用户电脑。下图展示的是shellcode与服务端的交互过程。由端口信息看到,这个shellcode是通过smtp协议来将窃取的用户信息发送到云端的。

 

样本分析

fzxjnwr1.exe进程

fzxjnwr1.exe运行后,会解密数据段中的一段内存,并将属性改为可执行后运行此段代码,如下图所示。

 

解密的代码会将系统关键函数如CreateProcess,WriteProcessMemory等地址解析到一段内存中,随后会调用这些函数以挂起的方式加载一个新的进程,称为傀儡fzxjnwr1.exe进程

 

傀儡fzxjnwr1.exe进程

新的进程会对父进程的运行路径进行判断,判断路径是否为C:\Documents and Settings\Administrator\Local Settings\Application Data\****\****.exe,****的命名规则是一些可读字符串的拼接。从以下可读字符串中找两个进行拼接作为新的名字:

Alaska,Another,Appid,Assessment,Auth,Bold,Brush,Character,Cpl,Createan,Dfs,Dhcp,Disabled,Dsui,Enclosure,Executor,Fltr,Fluid,Generalize,Glossary,Grammar,Group,Hash,Header,Ifra,Instancing,Isvc,Itha,Key,Kor,Lang,Latn,License,Msmq,Mspthrd,Multimedia,Natural,Npapi,Otp,Overview,Params,Pdl,Playingona,Programs,Quota,Reason,Scroll,Secret,Simple,Sms,Source,Step,Teal,Tsd,Users,Vdm,Volume,Vsip,Wake,Wallpaper,Webcam,Workflow,Xian,Zone

拼接原则则是根据计算机的系统信息决定的。此次分析的时候,拼接的就是AppidWebCam.exe,所以新进程判断后发现fzxjnwr1.exe与AppidWebCam.exe不一致,会进行以下三个操作。

  1. 调用SHFileOperationW移动文件,将fzxjnwbr1.exe文件,移动到C:\Documents and Settings\Administrator\Local Settings\Application Data\AppidWebcam目录下,并命名为AppidWebcam.exe。
  2. 在开始菜单的程序启动中创建快捷方式,并指向第一步中的AppidWebcam.exe文件,修改开机自启注册表。
  3. 创建进程,路径是第一步移动到AppidWebCam目录下的AppidWebCam.exe

 

AppidWebCam进程

AppidWebCam.exe文件与fzxjnwr1.exe文件是同一个,所以与fzxjnwr1.exe相同,也会进行内存解密,解析关键函数地址,随后运行CreateProcess,GetThreadContext,WriteProcessMemory,SetThreadContext等加载一个傀儡AppidWebCam.exe进程。

傀儡AppidWebCam进程

进程同样会判断父进程路径是否是C:\Documents and Settings\Administrator\Local Settings\Application Data\AppidWebcam\AppidWebCam.exe。这次判断是相同的,所以傀儡fzxjnwr1.exe所执行的操作AppidWebCam就不会再次执行。这次主要分为五个步骤:

  1. 解密advapi32.dll,shell32.dll,user32.dll,kernel32.dll下的关键函数地址,例如CryptAcquireContextW,CryptImportKey等。
  2. 调用crypt32.dll的CertAddCTLLinkToStore等函数,安装新的证书。为后续链接C&C服务器做准备。遍历当前进程和获取计算机的信息并把这些信息存储起来。
  3. 通过Crypto API导入DH非对称算法的公钥,为后续网络签名数据的验证做准备,同时会生成会话密钥,后续会话密钥会被服务端的公钥加密,并发送到云端。下面详细介绍木马的加密解密以及通信方式。

木马通过CryptImportKey,CryptGenKey和CryptCreateHash三个方法分别生成服务端公钥对象,会话密钥对象和一个hash对象

0x418c1c-0x4181F的DWORD是通过CryptImportKey导入的DH非对称加密算法的公钥,目的有两个,1:加密随后生成的会话密钥2:验证云端下发数据的数据签名。而生成公钥需要的key blob是云端事先生成好后存入到木马数据段中。

 

0x418c20-0x418c23的DWORD则是客户端生成的128bit的AES对称加密算法的会话密钥sessionkey,木马之后会调用CryptExportKey,并通过0x418c1c的服务端公钥来加密此会话密钥。生成的key blob会被木马倒叙之后存储。

0x418c24-0x418c27的DWORD是生成的Hash对象,后续会经CryptDuplicateHash复制用于加密和验证数据签名。

木马随后调用CryptGetHashParam获取加密算法的信息。并且调用CryptEncrypt对第2步获取的当前进程和计算机信息进行加密。

 

目前,生成了三部分关键数据,如下图所示:1,通过CryptExportKey函数使用公钥进行加密的会话密钥key blob;2,加密算法的信息;3,进程及计算机的加密信息

 

  1. 在生成好这些数据后,木马就会尝试连接C&C服务器了。在链接C&C服务器时,木马会将第三步生成好的信息发送给云端。这样云端就可以拿到对称加密的密钥以及使用的算法,同时也获取到了用户的部分信息。木马通过每三个字节为一组,进行6位运算,每个6位是0x0-0x3F,对应了0-63种情况,木马对这63个情况进行映射,最终生成发往云端的cookie:

=B7DB=iGDHwwep/cFrKxE0fqIf4Iw1yq/eC/AOqVJOjrjTeqmto2V1lbKkMMtt8697L3lYBz/JMPrVmec3mYOs0VXLmPEM48PJuZy1qm4ssBo1+SYjU63U6CB3ERWVOgDv9vlUROZ6u4Jp5Ei6F3dt2Yzm0fIX5D5WzdkaXj8HX60M3vRLdsYgbT8JfsXTmlSTxlZlXErPAgZIdpJIxeEgtYP3ZfZwvdg7/NQBtfsTlWhSghGpJcfH2Lpdl+Ha0I+PcU49LkOu7ONNR1Ss+I9xutawWnUODGRFL7jYmXjMQzMj4g51L82Furx/X0J1ANJPfnw0IqhN5JVXVG7q2Y3JoBeXFBsuJrOZ39/dsxXwIXb67CuE+dJg20rvjowmh2M1CLP1PGAu7VZ6DYQrH3WzxOccxlF/NuFmZqzb0r1ALfwbNM5QSnszD8yBrxBY4cq7L86NSJtTIZd4xs37J1d1ZoircCpgw5q5MOFR2dvStJcvgOz1aeOdbbj3bI6BtLhcKaKJxjolyjc7J8J+unD8ACoY38+NDcSYXldoc9YzJAncs08/NGaXkkbmFD25IsR3jIcNrWr2UDRgvFT+SoeWnXwXmKKLsbFfRDynE14+rNRVSLZ0yNdcsflqsfyvku8uNt42IfMEsNwkgNNgXP3m6ipuyMNRZnw=

 

 

数据通过cookie发送到云端后,云端用私钥解密出木马生成的会话密钥,并使用此会话密钥加密要下发的数据。下图展示的是数据流量引擎抓取到的下发的数据,这是其中一次成功连接时读到的云端加密数据。数据总长度为0xB1EA4,其中前0x60个字节是云端的一段hash后用私钥进行签名的数据,后续木马会用公钥对这段数据进行验证,以判断数据在传输过程中是否被篡改。0x74后的长度为0xB1E30数据则是需要通过前面的sessionkey来解密的数据。

 

收到数据后,进程调用CryptVerifySignature对数据的前0x60个字节进行签名验证

 

验证通过后调用Cryptdecrypt来解密数据,使用的密钥就是前面sessionkey。解密后可以看到这是一段长度为0xB1E30的数据,其中含有PE头。

 

把PE部分dump出来,上传到哈勃分析系统进行分析,从结果看到,这是一个高风险的dll

 

来到代码中,PE之前的0x1FE0020-0x1FE002D之间的数据,进程会对其进行处理,进而判断payload数据类型,以及数据的启动点偏移。

 

之后就会调用CreateThread来启动恶意进程,通过对这次与云端交互的exe进行分析,发现此dll的主要能力与木马主体类似,也是继续尝试连接C&C服务器,接受云端的指令。

在之后的分析过程中,曾经遇到过云端下发了类似于远控木马的shellcode,通过静态查看,发现涉及的功能有:

复制屏幕

 

控制鼠标

 

指定文件的删除与上传

 

并最终通过邮件的方式发送给服务器。

 

这种远程下发shellcode的方式危害性非常大,黑客可以通过下发各类shellcode来达到自己不同的目的。

服务端每次连接不一定成功,并且每次传输时候使用的会话密钥对不相同,所以想把云端所有的shellcode获取到并分析并不现实。下图是开启进程12小时后的连接情况,从这里也看到同一个ip,每次返回的数据并不相同。有趣的是,病毒是通过404来下发数据的,所以如果不注意,会误以为数据没有成功下发。

 

通过以上对四个进程的分析,木马的流程可以用下图展示。其中与C&C服务器交互的过程,通过哈勃流量分析系统可以清晰的展现出来。有了网络流量可以帮助我们更快更准确的掌握样本的目的,提升了样本的分析效率和查杀精度。

 

总结

在两周的时间内,借助哈勃流量分析系统,我们每日可捕获近千个md5,以及近百个C&C服务器。这对于我们及时查杀样本和封锁C&C服务器起了非常重要的作用。下图展示了流量系统中同源系统的功能,这里的黑样本即是JS下载的fzxjnwbr1.exe,点击同源后,就可查看与本样本类似样本的信息。

 

 

下面列出部分sha1和URL信息:

5cfe4bc399f6c738642599e501ff9045fc0f111b

92673dd0e5f4a094fa6cd57bb301f884f2289f6c

f5a171c879b90e77861daf19741b373646d791ff

a6ded1a1d5ecb4dc1b6fe2f288d7b9f64232f394

df3cc8cdc962de4f0624a927fcda16f84eb804db

af9e791fc8718628190529976b63abc4bfec53c3

2b625e30c28befb05d1dce9c40ef702095f8cc24

f81f3fbc7d07346d5299bb557863855699e4ebfb

7f1379b6897abdd4c5fbb3bbaec6e39b6837c314

a33a949cb1cf5f6d84334de35db0346fa743bf50

463fc5d9526f20181153e7c402d1a6a8082ec715

d051287b5b264317ee5170bbfd88b1af91c5345d

4566ea5bde120157505add7dba1d4edcde69f481

ce61f8bbf7d2df20d92db969a9a3f86807187c3e

9412a211297041a6f6cb338415ac9f9c80795993

d2cf59397e8905d1f0e45768ea3d7ddcb12edfbf

4b6724422423311ce3e28fb08c157ab0ed18196a

727cdae953b77cd87e1e861948eddb0245acd5f7

2be83e992946e5b0cf4d2f7cd401b20dc87a0565

62a4efb90f9a0111a21214d59e26d724db4ff157

url:

http://dns-56504.xarxacomputech.com:8080

https://www.rdqinc.com

https://unassigned.psychz.net

http://mail.tuahinfiniti.com:7080

http://plesk.banana-network.fr:8080

http://ns212674.ip-188-165-220.eu:8080

http://47149.simplecloud.club:7080

http://apache.easydomaine.com:8080

https://s15415495.onlinehome-server.info

最新资讯