0|前言
上接前文,继续分析来自APT组织的病毒样本(标题已经至2.3.9)。
因为不能从C&C服务器获取到返回值,末尾线程通讯阶段的内容调试不知道线程间交互的啥,想按运行流程调试很迷茫。
虽然有些没看明白,不过感觉这个木马写的好规范,一点也不像阿三那种七拼八凑,应该是迭代出来的。
2.3.9|创建线程-连通性检测
shellcode在完成各类反调试、加解密、密钥生成等操作等之后,开始了网络通讯的初始化和发包操作。
创建线程做连通性检测,但翻来翻去并没有看见有对下图域名中的URL,有连通性检测的发包或者请求域名解析。只是调用了WinHttpGetProxyForUrl()WinHttpGetIEProxyConfigForCurrentUser()等API做了代理配置信息查询。
反正是没找到数据包发送,貌似只是代理check,搞得有点云里雾里,也可能是cyble的报告误导我,好好好
这个函数里还有一段不会执行的代码。
2.3.10|与外联ip43.246.209.83 初次通讯
通过inet_addr()等函数对IP地址做了初始化,之前已经做了socket库初始化(见上篇),为winsock 2.0版本。
shellcode利用socket()创建套接字描述符v9。
后续做了一个句柄操作,shellcode利用DuplicateHandle()将socket返回的伪句柄转(即v9)化为了实句柄,随后关闭了原来的伪句柄,在当前进程中执行GetCurrentProcess()返回值始终为“-1”,这就是个伪句柄,只在当前进程好使,也不用释放,这是一些windows编程的内容。
DuplicateHandle()函数的第4个参数用于接收新句柄的指针,后续调用套接字就可以直接通过这个地址调用,即[a1+112],实际上就是上图中第一行赋值语句v13。
通常这样做的主要目的是在进程之间或线程之间共享内核对象,后续可能在其他进程或线程直接调用这个套接字句柄,而无需创建多个socket对象实例。
接下来的connect函数就立即调用了这个实句柄,并且成功发包。
数据包如下,我没详细看服务器地址信息的结构体指针“a1+0x9D8”的构造情况,应该是初始化用了端口“80”,通讯数据包如下图,一个不能再标准的TCP三次握手。
2.3.11|创建线程-线程函数执行前-上线数据包
shellcode继续执行,连续创建了两个线程函数,并且使用WaitForSingleObject()调度了两个线程函数的执行,使两个线程函数执行前还有一个功能函数执行,该函数发送了此前生成的加密组件参数。
首先整合了包括此前的第二个uuid生成的hash base64编码,以及第一个uudi生成的key等,共计0x109字节,通过send()发送。
发送数据如下。
数据包如下,一个标志位为ack、push的tcp单包。
发包结束后将sleep1000毫秒。
随后selcet()开多路复用机制,其中包含了socket的套接字描述符,随后运行recv()接收socket通信中的信息,长度为0x05。
后续主要就是线程间通讯,但有点蛋疼的是这个上线数据包应该会通过recv()接收一个返回值,调试没有这个返回值,不清楚这些线程交互了些什么。
2.3.12|创建线程-调度线程、工作线程
妈的还好做了快照,执行了一个函数回来,没打断点找不到两个线程函数地址。
这一段大概是这样。
-
线程1,工作线程,字符“cbreover”,调用PostThreadMessageW()
-
线程3,调度线程,字符“dispatch”,调用PeekMessageW()
-
线程2,心跳线程,字符“heartov”,send-key,调不过去。
防止找不到地址直接手记。
2.3.14|创建线程-- C&C 服务器之间交换的命令
只有一个一个调试了,进入线程1可以看到字符“cbreover”,
立马又创建了一个线程3,c、b作为参数传递给线程3。没有立即执行,随后sleep了1000毫秒,还是没执行,应该还是要等WaitForSingleObject()。
随后线程1函数PostThreadMessage()向目标线程3发送了消息类型为0x12的消息,因为没有从C&C 服务器recv到消息,所以后续都是空跑。
随后进入线程3,可见字符““dispatch””,shellcode继续执行,调用PeekMessageW()函数从当前线程消息队列检索是否有消息,该操作是不阻塞的。
随后调用GetMessageW继续抓取消息,若没有消息就阻塞了,直到有消息抓取。
根据接收到的消息的ID,命令处理程序将相应地接收该消息。这玩意儿就只能调试到这里了。
这个样本有点折磨说是,好想看看源码长什么样。
还有别的要紧事,和样本说个再见吧
原文始发于微信公众号(帅仔回忆录):近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)