_ _ _ _ _____ | |__ | || | ___| | ___ __ ___ |___ / | '_ \| || |_ / __| |/ / '_ ` _ \ |_ \ | | | |__ _| (__| <| | | | | |___) | |_| |_| |_| \___|_|\_\_| |_| |_|____/ <-- BACK TO hackdog.me
Kingslayer - A supply chain attack -- Part 2
攻击的第二阶段
在攻击者通过定向水坑打到系统管理员, 在更新服务器上做的手脚除了Eventid的恶意版本外, 还对劫持了其他更新并捆绑后门, 通过后门控制计算机后发动第二阶段攻击, 从C2 Server下发获取攻击载荷"K2". 以此达到稳定控制.
在整个劫持过程中, 至少有三个二进制文件(包括上一篇文章中的恶意Eventid更新版本)和一个MSI安装包.
K2攻击落地
我找到了其中两个被劫持修改的后门文件,文件名均为EvLog3Service.exe, 文件hash分别为383d60bffd5dc64e38893361cb03939bc8c6d5e476dc70755eb0886947e51661和7aa474d0d39a41768149f413c451e9208f73af4d262b6575ada31644f5699153. 其中383d60bffd5dc64e38893361cb03939bc8c6d5e476dc70755eb0886947e51661是作为RAT load插件的备用部分,此处我们重点看7aa474d0d39a41768149f413c451e9208f73af4d262b6575ada31644f5699153即可
7aa474d0d39a41768149f413c451e9208f73af4d262b6575ada31644f5699153:
MD5 f97a2744a4964044c60ac241f92e05d7
SHA-1 b22f72b4a5bb33f7ea934cb4bf449882ffe7f556
Authentihash 0bcd14267bdc2a5a743eb9df9f7fc21d6673d316b30cb4c7fd80350da0dd2856
Imphash f34d5f2d4577ed6d9ceec516c1f5a744
File Type Win32 EXE
Magic PE32 executable for MS Windows (GUI) Intel 80386 32-bit Mono/.Net assembly
SSDeep 768:j0bwDCzz9Emxt8wNOqr13stHGZGgEeEU8/DW/yaYsX71r5Oa74O1:j0zjxtFedW/yDq7Oa74K
TRiD Win64 Executable (generic) (64.6%)
Win32 Dynamic Link Library (generic) (15.4%)
Win32 Executable (generic) (10.5%)
Generic Win/DOS Executable (4.6%)
DOS Executable Generic (4.6%)
File Size 41.1 KB可以看到, 该文件有Altair的合法签名:

载入IDA后发现是IL中间代码, 改用justdecompile对其进行反编译, 拿到了比较完整的.NET代码
恶意代码通过监控本地服务运行状况, 如果"EvLog3"服务运行, 则进行恶意代码安装

定位到加载payload位置, url被加密, 看上去疑似base64编码, 但其实进行了多重混淆
mailID = "Ex9TAVIbXghSXAAFSVBLRE8QWU8QVQ8fQQINT0FJSklLEkQeDFEfQA=="

将mailID传入到DownloadMail(), 然后用Decrypt()进行解密.
跟踪到Decrypt()后, 继续追溯函数调用, 在Evlog3ServiceMailCheck中找到了Decrypt密码:EvLogServiceInstalller

具体Decryt()解密流程如下:

简单写了一个解密程序
import base64
import hashlib
def decrypt(src, password):
pw = ''
decoded = bytearray(base64.b64decode(src))
xor_key = decoded[0]
data = decoded[1:]
for i in range(len(data)):
pw += chr((data[i]) ^ ord(password[i % len(password)]) ^ (xor_key))
return pw
rr = hashlib.md5()
rr.update('EvLogServiceInstalller')
password = rr.hexdigest()
src = raw_input('Encrypted str:')
print(decrypt(src, password))
此外, 我们还能发现一个有趣的现象, 这里的Run()有一个时间检查, 规定了为"东京标准时间"

并且只在周二,周四,周五,周六的凌晨前9小时(下午三点)运行.
通过解密程序继续解密mailID结果如下:

拿到了下载地址:
http://www.oraclesoft.net/mailcheck.png
跟踪LoadImage, 可以看到对图片下载

接下来会对图片进行解密

从追踪UnPack到UnAppendDllBytes
解密流程如下:

解密后跟踪到CloudClimb进行执行:

在下载完mailcheck.png后, 程序还会下载一个文件, 疑似作为备用配合mailcheck.png, 结合上述的图片解密流程, 可以断言图片里包含着第二段Payload

url = "http://images.timekard.com/default.png", password = "helloworld"
第一个下载的mailcheck.png hash:5c36e8d5beee7fbc0377db59071b9980信息如下
5c36e8d5beee7fbc0377db59071b9980:
MD5 5c36e8d5beee7fbc0377db59071b9980
SHA-1 09de51b22662cf9e2449c784e05ba934a123f3c0
Authentihash b50bbced16263c24886ddb95a7c0c182b9e04ab5a8953860667e49015098a01c
Imphash dbb1eb5c3476069287a73206929932fd
File Type Win32 EXE
Magic PE32 executable for MS Windows (GUI) Intel 80386 32-bit
SSDeep 12288:vFszBhqS5mMQ+PbhSHBV58nY2o8fhfjfGWeWy4bQoQXy2eT:vFszWS5lSBXxszGWDDl2O
TRiD Win32 Executable MS Visual C++ (generic) (67.4%)
Win32 Dynamic Link Library (generic) (14.2%)
Win32 Executable (generic) (9.7%)
Generic Win/DOS Executable (4.3%)
DOS Executable Generic (4.3%)
File Size 574.84 KB简单的分析行为
修改注册表, 将进程放置于Session 0, 作为服务进程运行

DNS请求, 从而也获取到了C2地址mail-news.eicp.net

向控制端发UDP心跳包

通过判断, 可以断言这是一个PlugX RAT.
C2域名用的花生壳动态域名.
第二个下载的default.png由于timekard.com这个域名死掉, 我也无法获取到落地样本, 无法进行进一步分析了.
其他攻击行为
根据RSA议题中所述, 在整个内部感染的攻击过程中, 除了单纯的RAT远控上线外, 还有一个名为bp.exe的恶意文件, 作为对人员个人工作机Chrome和Firefox的密码盗取, 猜测这一行为可能和接下来的内网横向渗透有关, 此处做简要描述.
File Name: bp.exe
File Size: 503808 bytes
MD5: a25abc5e031c7c5f2b50a53d45ffc87a
SHA1: 5bca2ad3235c68ee2ffc959408b3b7756a53d65e
PE Time: 0x55953DE3 [Thu Jul 02 13:34:27 2015 UTC]
PEID Sig: Microsoft Visual C++ 8
Sections (5):
Name Entropy MD5
.text 6.65 eb78513f5c535087db90ed505f42992f
.rdata 5.74 4fe869f32cfdl620114b7175cdf6c87c
.data 3.57 d6df77fd536b050ce42845a98788fc0f
.rsrc 5.11 2bbd83b2400ac329767cfd5378c4cfe2
.reloc 5.48 140d4bbe2al8f9e4a5c9946de0ff3322根据其对改文件的逆向, 判断程序会先收集主机信息和用户名, 然后通过C:\Users\Usera\AppData.读取浏览器存放密码的SQLite

抓取登录用户名后, 通过sub_401BA9的调用, 程序模拟用户登录的过程通过windows密码凭据解密浏览器记录的密码.

成功解密后将会拿到访问url, 用户名, 密码信息.
K2流程还原
通过以上的分析可以大概还原此前在内部感染中, 第二阶段的攻击流程.
攻击者同样通过更新检查的方式, 对管理员定点水坑, 通过跳转至攻击者服务器下载了被污染的更新, 从而植入后门, 通过抓取windows密码凭据, 浏览器保存密码等, 收集了大量敏感信息, 为接下来的后渗透做了充足准备, 我们有理由相信, 当时的目标内网, 很有可能被攻击者攻破了. 由RAT作为可扩展后门, 保持自身具有
- 执行windows system命令的权限;
- 能够上传下载任意文件;
- 可以执行任意攻击者推出下发的程序作为后门扩展或者进一步的攻击payload.
Kingslayer 带来的后续影响
此前说过EventID作为一款优秀的日志分析软件, 使用量及其广泛, 我么可以在http://www.eventid.net/whosubscribed.asp 看到他们的客户列表. 虽然因为这次攻击, 改页面被删除了, 换成了一份公告, 但是通过历史快照(http://www.eventid.net/whosubscribed.asp)我们可以粗略感受这次供应链攻击的影响之大, 甚至US Army之类都是其客户:

(你要问我US Army, NASA, UK Police之类是否已经被攻击感染了, 我只能说无可奉告! 将来报道除了偏差, 可是要负责任的!)
Kingslayer Timeline
这是RSA给出的完整Kingslayer时间轴:

下集预告
至此, Kingslayer的大部分攻击流程和感染链已经描述完成, 但是依旧给我们留下了很多疑问, 这样一群及富经验, 行动力极强, 技术水平上乘的攻击团队, 是谁? 为什么在K2攻击的过程中, K2执行的标准时间要定为东京标准时间? 这是一次来自11区的攻击么? 从第一部分看到, 类似仿冒知名网站域名的IOC域名非常多, 且解析时间跨度从2015年到2017年均存在, 这样的攻击是否只有一次, 有其他公开或未公开的攻击匹配到这个团队么?
如果还有下一集的话, 打算用"及不负责任"的态度, 把一些tracking的结果关联随意猜测, 所有言论均为个人梦话, 不指向任何组织或团体.
本集涉及到的IOC
| Filename | HashHash | Description |
|---|---|---|
| EvLog3Service.exe | 383d60bffd5dc64e38893361cb03939bc8c6d5e476dc70755eb0886947e51661 | K2 Trojan |
| EvLog3Service.exe | 7aa474d0d39a41768149f413c451e9208f73af4d262b6575ada31644f5699153 | K2 Trojan |
| www.oraclesoft.net | N/A | K2 C2 |
| images.timekard.com | N/A | K2 C2 |
| mailcheck.png | 09de51b22662cf9e2449c784e05ba934a123f3c0 | PlugX RAT |
| bp.exe | 5bca2ad3235c68ee2ffc959408b3b7756a53d65e | password dump |
<-- BACK TO hackdog.me