查看原文
其他

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(三)

pwnda 安恒信息安全服务 2022-09-06


特别说明及声明

  1. 本文原文为K A, Monnappa. 2018年发表的《Learning Malware Analysis》,本文的相关内容均为笔者对相关内容的翻译及实践记录,仅供各位学术交流使用。另出于易读性考虑,对部分字句有所删改。


  2. 如各位需要引用,请做原文引用,格式如下所示:
    [序号]K A, Monnappa. LearningMalware Analysis[M]. 2018.06. Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK.

  3. 因文章整体内容较长,完整内容将会在本公众号拆分为多篇内容分别发出。本文为该系列的第三篇,前篇内容请参见:

    恶意样本分析之恶意软件的功能和持久化(一)

    恶意样本分析之恶意软件的功能和持久化(二)




1.5 恶意软件指挥与控制(C2)




恶意软件的命令和控制(也称为C&C或C2)是指攻击者如何沟通和展示对受感染系统的控制。感染系统后,大多数恶意软件与攻击者控制的服务器(C2服务器)进行通信并接受远程命令、下载附加组件或信息泄露。攻击者使用不同的技术和协议进行命令和控制。


传统上,互联网中继聊天(IRC)多年来一直是最常见的C2渠道,但由于IRC在组织中并不常用,所以可以很容易地检测到这种流量。今天,恶意软件用于C2通信的最常见协议是HTTP/HTTPS。使用HTTP/HTTPS允许对手绕过防火墙/基于网络的检测系统,并与合法的网络流量混合在一起。


恶意软件有时可能使用P2P等协议进行C2通信。一些恶意软件还会使用DNS隧道进行C2通信。

https://securelist.com/use-of-dns-tunneling-for-cc-communications/78203/

*左右滑动查看更多


1.5.1 HTTP指挥和控制


在本节中,我们将会了解到国外安全团队分析我国APT组织使用HTTP与恶意程序进行通信的情况。下面是APT1集团使用的一个恶意软件样本(WEBC2-DIV后门)的例子。

https://www.fireeye.com/content/dam/fireeye- www/services/pdfs/mandiant-apt1-report.pdf
如上述链接提示失效,则可以在这里找到相关副本:https://max.book118.com/html/2018/0822/8054126010001121.shtm

*左右滑动查看更多


恶意的二进制文件利用了InternetOpen()、InternetOpenUrl()和InternetReadFile()等API函数从攻击者控制的C2服务器检索网页。其网页内包含特殊的HTML标签;通过后门对标签内的数据进行解密,并将其解释为一个命令。


以下步骤描述了WEB2- DIV后门与C2进行通信以接收命令的方式。


首先,恶意软件调用InternetOpenA()API来初始化与互联网的连接。第一个参数指定了恶意软件将用于HTTP通信的User-Agent。这个后门通过连接受感染系统的主机名(通过调用GetComputerName()API获得)来生成User-Agent。(通过调用GetComputerName()API获得)与一个硬编码的字符串。


每当遇到二进制文件中使用的硬编码的User-Agent字符串,它可以成为一个不错的标识攻击者的指标。


然后它调用InternetOpenUrlA()连接到一个URL。这里我们可以通过检查第二个参数来确定它所连接的URL的名称,如下所示。


下面的截图显示了调用InternetOpenUrlA()后产生的网络流量。
调用InternetOpenUrlA()后产生的网络流量。在这个阶段,恶意软件与C2服务器进行通信以读取HTML内容。


随后,使用InternetReadFile()API调用检索网页的内容。这个函数的第二个参数指定了接收数据缓冲区的指针。下面的截图显示了调用InternetReadFile()后检索到的HTML内容。


从检索的HTML内容中,后门寻找 HTML标签内的特定内容。执行检查div标签内的内容代码均显示在以下截图中。如果所需的内容不存在,该恶意软件就会不做任何事情,并继续定期检查内容。


具体来说,恶意软件希望将内容以特定格式包含在div标签中,如下面的代码所示。如果在检索的HTML内容中发现以下格式,它将提取加密字符串(KxAikuzeG:F6PXR3vFqffP:H),该字符串包含在之间:

<div safe: KxAikuzeG:F6PXR3vFqffP:H balance></div>

*左右滑动查看更多


提取加密字符串后,将其作为参数传给解密函数,该函数使用自定义的加密算法对字符串进行解密。下面的截图显示了调用解密函数后的解密字符串。解密字符串后,后门检查解密字符串的第一个字符是否为J,如果满足这个条件,那么恶意软件就会调用sleep()API来睡眠一段特定时间。


简而言之,解密字符串的第一个字符作为一个命令代码,它会告诉后门执行睡眠操作。

如果被解密的字符串的第一个字符是D,就会再进行检查第二个字符是否是O。如下图所示,如果满足这个条件,那么它将会提取从第三个字符开始的URL,并使用UrlDownloadToFile()从该URL下载一个可执行文件。然后使用CreateProcess()API来执行下载的文件。在这种情况下,前两个字符Do作为命令代码,告诉后门下载并执行该文件。


关于APT1 WEBC2-DIV后门的全面分析,请查看作者的Cysinfo会议演讲和视频演示:

https://cysinfo.com/8th- meetup-understanding-apt1-malware-techniques-using-malware- analysis-reverse-engineering/

*左右滑动查看更多


恶意软件也可能使用API,如InternetOpen()、InternetConnect()、HttpOpenRequest()、HttpSendRequest()和InternetReadFile()等API来进行HTTP通信。各位读者可以在这里找到一个此类恶意软件的分析和逆向工程:

https://cysinfo.com/sx-2nd-meetup-reversing- and-decrypting-thecommunications-of-apt-malware/

*左右滑动查看更多


除了使用HTTP/HTTPS,攻击者还可能滥用社交网络、Pastebin等合法网站和Dropbox等云存储服务来进行恶意软件指挥和控制。这些技术使得监测和检测恶意通信变得困难,而且它们允许攻击者绕过基于网络的安全控制。

社交网络:https:// threatpost.com/attackers-moving-social-networks-command-and control-071910/ 74225/
Pastebin等合法网站https://cysinfo.com/uri-terror-attack-spear- phishing-emails-targeting-indian-embassies-and-indian-mea/
Dropbox等云存储服务https://www.fireeye.com/blog/threat-research/2015/11/ china-based-threat.html

*左右滑动查看更多


1.5.2 定制指挥和控制(定制的cc)


攻击者可能使用自定义协议或通过非标准端口进行通信,以隐藏其命令和控制流量。下面是这样一个恶意软件样本的例子(HEARTBEAT RAT),其细节记录在白皮书中:

http://www.trendmicro.it/media/wp/the-heartbeat-apt-campaign-whitepaper-en.pdf

*左右滑动查看更多


这个恶意软件使用自定义协议(非HTTP)在80端口进行加密通信,并从C2服务器上获取命令。Socket()、Connect()、Send()和Recv()API调用,与C2进行通信并接收命令。


首先,该恶意软件调用WSAStartup()API来初始化Windows套接字系统。随后会调用Socket()API来创建一个套接字,正如在下面的截图中显示。


该套接字API接受三个参数:
第一个参数,AF_INET,指定地址族,即IPV4。

第二个参数是套接字类型,(SOCK_STREAM)。
第三个参数,IPPROTO_TCP,指定正在使用的协议(在本例中为TCP)。


在建立与套接字的连接之前,恶意软件使用GetHostByName()API解析了C2域名的地址。这是有道理的,因为远程地址和端口需要提供给Connect()API来建立连接。GetHostByName()的返回值(EAX)是一个指向名为hostent的结构的指针,该结构包含解析的IP地址。


它从hostent结构中读取解析后的IP地址,并将其传递给inet_ntoa() API,该API将IP地址转换成ASCII字符串,例如192.168.1.100。随后调用inet_addr(),将IP地址字符串(如192.168.1.100)转换为可以被Connect()API使用。再调用Connect() API来建立与套接字的连接。


连接完成后,恶意软件会进行收集系统信息,使用XOR加密算法对其进行加密,并使用Send()API调用将其发送到C2。发送()API的第二个参数显示了将被发送到C2服务器的加密内容。


下面的截图显示了调用Send()API后捕获的加密网络流量。


然后,恶意软件调用CreateThread()来启动一个新线程。CreateThread的第三个参数指定了线程的起始地址(起始函数),因此在调用CreateThread()后,执行开始于起始地址。在这种情况下,线程的起始地址是一个负责从C2中读取内容的函数。


使用Recv()API函数检索C2的内容。Recv()的第二个参数是一个缓冲区,其中存储了检索的内容。然后对检索到的内容进行解密,并根据从C2收到的命令,由恶意软件执行适当的行动。


要了解这个恶意软件的所有功能以及它如何处理收到的数据,请参考作者的演讲和视频演示:

https://cysinfo.com/session-11-part-2-dissecting-the heartbeat-apt-rat-features/

*左右滑动查看更多


(未完待续)




—  往期回顾  —



关于安恒信息安全服务团队安恒信息安全服务团队由九维安全能力专家构成,其职责分别为:红队持续突破、橙队擅于赋能、黄队致力建设、绿队跟踪改进、青队快速处置、蓝队实时防御,紫队不断优化、暗队专注情报和研究、白队运营管理,以体系化的安全人才及技术为客户赋能。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存