近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

APT 6个月前 admin
102 0 0

0|前言

上接前文,继续分析来自APT组织的病毒样本(标题已经至2.3.9)。

因为不能从C&C服务器获取到返回值,末尾线程通讯阶段的内容调试不知道线程间交互的啥,想按运行流程调试很迷茫。

虽然有些没看明白,不过感觉这个木马写的好规范,一点也不像阿三那种七拼八凑,应该是迭代出来的。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

2.3.9|创建线程-连通性检测

shellcode在完成各类反调试、加解密、密钥生成等操作等之后,开始了网络通讯的初始化和发包操作。

创建线程做连通性检测,但翻来翻去并没有看见有对下图域名中的URL,有连通性检测的发包或者请求域名解析。只是调用了WinHttpGetProxyForUrl()WinHttpGetIEProxyConfigForCurrentUser()API做了代理配置信息查询。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

反正是没找到数据包发送,貌似只是代理check,搞得有点云里雾里,也可能是cyble的报告误导我,好好好

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

这个函数里还有一段不会执行的代码。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

2.3.10|与外联ip43.246.209.83 初次通讯

通过inet_addr()等函数对IP地址做了初始化,之前已经做了socket库初始化(见上篇),为winsock 2.0版本。

shellcode利用socket()创建套接字描述符v9。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

后续做了一个句柄操作,shellcodeDuplicateHandle()将socket返回的伪句柄转(即v9)化为了实句柄,随后关闭了原来的伪句柄,在当前进程中执行GetCurrentProcess()返回值始终为“-1”,这就是个伪句柄,只在当前进程好使,也不用释放,这是一些windows编程的内容。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

DuplicateHandle()函数的第4个参数用于接收新句柄的指针,后续调用套接字就可以直接通过这个地址调用,即[a1+112],实际上就是上图中第一行赋值语句v13。

通常这样做的主要目的是在进程之间或线程之间共享内核对象,后续可能在其他进程或线程直接调用这个套接字句柄,而无需创建多个socket对象实例。

接下来的connect函数就立即调用了这个实句柄,并且成功发包。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

数据包如下,我没详细看服务器地址信息的结构体指针“a1+0x9D8”的构造情况,应该是初始化用了端口“80”,通讯数据包如下图,一个不能再标准的TCP三次握手。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

2.3.11|创建线程-线程函数执行前-上线数据包

shellcode继续执行,连续创建了两个线程函数,并且使用WaitForSingleObject()调度了两个线程函数的执行,使两个线程函数执行前还有一个功能函数执行,该函数发送了此前生成的加密组件参数。

首先整合了包括此前的第二个uuid生成的hash base64编码,以及第一个uudi生成的key等,共计0x109字节,通过send()发送。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

发送数据如下。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

数据包如下,一个标志位为ack、push的tcp单包。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

发包结束后将sleep1000毫秒。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

随后selcet()开多路复用机制,其中包含了socket的套接字描述符,随后运行recv()接收socket通信中的信息,长度为0x05。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

后续主要就是线程间通讯,但有点蛋疼的是这个上线数据包应该会通过recv()接收一个返回值,调试没有这个返回值,不清楚这些线程交互了些什么。

2.3.12|创建线程-调度线程、工作线程

妈的还好做了快照,执行了一个函数回来,没打断点找不到两个线程函数地址。

这一段大概是这样。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

  • 线程1,工作线程,字符“cbreover”,调用PostThreadMessageW()

  • 线程3,调度线程,字符“dispatch”,调用PeekMessageW()

  • 线程2,心跳线程,字符“heartov”,send-key,调不过去。

    防止找不到地址直接手记。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

2.3.14|创建线程– C&C 服务器之间交换的命令

只有一个一个调试了,进入线程1可以看到字符“cbreover”,

立马又创建了一个线程3,c、b作为参数传递给线程3没有立即执行,随后sleep了1000毫秒,还是没执行,应该还是要等WaitForSingleObject()。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

随后线程1函数PostThreadMessage()向目标线程3发送了消息类型为0x12的消息,因为没有从C&C 服务器recv到消息,所以后续都是空跑

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

随后进入线程3,可见字符““dispatch””,shellcode继续执行,调用PeekMessageW()函数从当前线程消息队列检索是否有消息,该操作是不阻塞的。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

随后调用GetMessageW继续抓取消息,若没有消息就阻塞了,直到有消息抓取。

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

根据接收到的消息的ID,命令处理程序将相应地接收该消息。这玩意儿就只能调试到这里了。

这个样本有点折磨说是,好想看看源码长什么样。

还有别的要紧事,和样本说个再见吧

近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

原文始发于微信公众号(帅仔回忆录):近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二)

版权声明:admin 发表于 2023年11月9日 下午9:46。
转载请注明:近期 Higaisa(黑格莎) APT 针对中国用户的钓鱼网站、样本分析(二) | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...