如何进行越南APT攻击样本的深度分析

一、前言

APT已经成为了安全领域热门的话题。

Eleven Paths旗下Innovación y laboratorio 4月发表《Docless Vietnam APT》报告:

如何进行越南APT攻击样本的深度分析

上述信息表述,我们侦测到一些恶意邮件发送到属于越南政府的邮箱,这封越南语邮件的日期是2019年3月13号。这封邮件可能是来源于越南政府内部,不排除是有人把这封邮件投送到安全部门,因为这封邮件存在可疑因素。

TKCT quy I nam 2019.doc.lnk.malw样本信息如下:

如何进行越南APT攻击样本的深度分析

图片一:TKCT quy I nam 2019.doc.lnk.malw

二、静态分析

1. TKCT quy I nam 2019.doc.lnk.malw样本被下载到本地后,巧妙伪装成Word快捷方式,欺骗受害运行或者习惯性双击查看,如下所示:

如何进行越南APT攻击样本的深度分析

图片二:伪装doc快捷方式

首先word文档一般不会是.lnk链接,链接的大小应该在1kb左右,而该APT样本快捷方式竟然126kb,很明显隐藏着别的东西,很多病毒把文件名伪装成.dat、.docx等,其实后缀是.exe,开启文件名扩展就可以看到。

2. 提取样本属性中目标包含的恶意代码,发现是经混淆加密的一段cmd指令,且执行powershell,如下所示:

如何进行越南APT攻击样本的深度分析

图片三:混淆指令

APT攻击手段非常青睐vbs、powershell、js等类型脚本语言,容易混淆与加密,而且方便做免杀处理。

所以历来的病毒及恶意软件都有这种共性,如蔓零花、Xbash、勒索都喜欢执行powershell作为名列前茅个“见面礼”(payload)送给计算机当作惊喜。

3. 解析混淆指令,发现重定向TKCT quy I nam 2019.doc.lnk快捷方式到s.sp1文件,其实桌面快捷方式是一个powershell的脚本文件,梳理混淆变量如下所示:

如何进行越南APT攻击样本的深度分析

最终将TKCT quy I nam 2019.doc.lnk重定向到temp文件夹下,命名为s.ps1执行该powershell,如下所示:

如何进行越南APT攻击样本的深度分析

图片四:去混淆

4. 手动去除iex混淆也是可以的,打开文件去掉“iex”这几个字符,powerhell运行指令格式:文件名(原) >> s.sp1(新文件名)即可,重定向文件如下所示:

如何进行越南APT攻击样本的深度分析

如何进行越南APT攻击样本的深度分析

图片五:powershell恶意代码

5. 如图五所示,发现了两段Base64编码的数据,powershell意图将编码后的恶意数据执行,添加定时任务,每9分钟执行创建,利用了InstallUtil服务实现了自启动与持久性化,有意思的利用Wscript.Shell执行,越出其不意越有意想不到的效果,如下所示:

如何进行越南APT攻击样本的深度分析

如何进行越南APT攻击样本的深度分析

图片六:s.sp1

6. Base64编码数据解析后,其实是两个可执行文件,分别是恶意.net与.doc,执行手段如下图所示:

如何进行越南APT攻击样本的深度分析

如何进行越南APT攻击样本的深度分析

图片七:通用的套路

7. 分析tmp_pFWwjd.dat.exe,经过dnSpy工具反汇编后,代码清晰可见,虽然有一些小混淆(可以使用de4dot.exe去混淆即可),不影响代码程度。

定位关键函数Exec(),发现Base64String编码的数据,根据执行流程,由.NET去委托去调用函数Call,而且是可读可写,那么就要申请内存VirtualAlloc(),将Base64shellcode拷贝到申请内存中,获取CreateThread()指针委托执行回调指针,执行恶意的shellcode,如下所示:

如何进行越南APT攻击样本的深度分析

图片八:.net反汇编

如何理解shellcode或payload?本质上可以是说一堆十六进制组成的数据,对于可执行文件来说则是能够被汇编引擎所解释执行的数据。

因为下面将会涉及二进制数据提取与汇编分析,所以这里做了一副简单的图先介绍关于shellcode或者payload基本概念(针对恶意代码),如下图所示:

如何进行越南APT攻击样本的深度分析

图片九:payload

如图九所示,对于病毒来说,特别是可自启动,持久化攻击,没有后门很难实现(漏洞持续化利用,每次拉取少量流量做数据窃取之类的除外)。

举例来说,ASLR地址随机化每次系统重启后基址都会改变,或者注入到新的进程空间,代码本身的函数基址都是错误的,如何精准的获取函数地址?从而达到完美运行,需要格外的一些操作,当然这些都不是问题,技术相对成熟。

下面一段知识所讲述的内容,假设读者对Windows PE格式及汇编、内核相关内容有一定的基础。不会普及基础知识,将从PE格式及汇编层面去分析这些shellcode如何去做,如何实现动态获取模块基址如kernel32.dll,如何利用散列值或者Hash遍历导出表,过免杀敏感字符串及敏感函数API等。

三、PE与病毒杂谈

以上述的恶意代码举例,因为.net执行shellcode调试过程中遇到诸多问题,所以用c/c++还原了tmp_pFWwjd.dat.exe样本。

再一次OD进行动态调试,当然可以Dump下来分析,根据个人爱好,直接在执行shellcode下断,如下所示:

如何进行越南APT攻击样本的深度分析

图片十:Pointer

1. 入口点进入,接着就是数据的异或解密,将需要真正执行的恶意代码还原,如下所示:

如何进行越南APT攻击样本的深度分析

图片十一:异或解密

2. 散列值加密字符串,这样的好处既可以减少shellcode体积,而且可以隐蔽敏感字符,不容易被杀毒软件截获,如下所示:

如何进行越南APT攻击样本的深度分析

图片十二:散列值获取函数地址

3. 我们进入函数1E0A42,发现一堆看上去很平常的赋值操作,如下所示:

如何进行越南APT攻击样本的深度分析

图片十三:fs:[0x30]

Fs是寄存器,内核态是fs = 0x30,用户态 fs = 0x3B,fs在内核态指向_KPCR,用户态指向_TEB。

TEB(Thread Environment Block),线程环境块,也就是说每一个线程都会有TEB,用于保存系统与线程之间的数据,便于操作控制。那么Fs:[0x30]就是PEB进程环境块。

4. PEB就是当前进程环境,shellcode就可以轻易获取PEB信息,通过偏移0xc获取到了_PEB_LDR_DATA,这个结构体包含有关进程的已加载模块的信息.

通过偏移0x1c获取到一个双向循环链表,每个链表指向LDR_DATA_TABLE_ENTRY结构体,这个结构体包含的数据我们来看一下,以上数据偏移与操作系统有关,如下所示:

如何进行越南APT攻击样本的深度分析

图片十四:获取模块基质

如何进行越南APT攻击样本的深度分析

图片十五:获取当前环境模块基址步骤

5. 通过上述的过程,就会成功获取如ntdll.dll,如下所示:

如何进行越南APT攻击样本的深度分析

图片十六:获取模块Address

6. 继续分析函数1E0B2A,两个参数,根据函数调用约定,参数1是kernel32基地址,参数2是函数名散列值,该函数则是一个自己实现的GetProcAddress()函数,如下所示:

如何进行越南APT攻击样本的深度分析

图片十七:GetProcAddress

7. 该函数会判断是不是PE标准格式,然后获取NT头,获取导出表。导出表保存了三张表的地址,先来看导出表结构体,如下所示:

如何进行越南APT攻击样本的深度分析

恶意代码需要定位到这三张表的地址,遍历函数名称表AddressOfName,获取函数名进行散列值计算,如果与参数2散列值相同,意味着是同一个函数。

返回当前遍历的下标,通过下标去函数序号表AddressOfNameOrdinals找到对应的序号,获取序号表保存的数值,在函数地址表中获取AddressOfFunctions,如下图所示简单表述了三者关系:

如何进行越南APT攻击样本的深度分析

图片十八:三者关联

如上图所示,序号表与名称表一一对应,下标与下标中存储的值是相关联的,这三张表设计巧妙,利用了关系型数据库的概念。

需要注意的是,序号不是有序的,而且会有空白。地址表中有些没有函数名,也就是地址表有地址却无法关联到名称表中,这时候用序号调用,序号内容加上Base序号基址才是真正的调用号。

8. 当有了这些认知,再来看样本中的恶意代码,会发现与上述的描述是一摸一样的,如下所示:

如何进行越南APT攻击样本的深度分析

如何进行越南APT攻击样本的深度分析

图片十九:GetProcAddress()

9. 最后验证结果是否成功,如下所示:

如何进行越南APT攻击样本的深度分析

图片二十:验证

如何进行越南APT攻击样本的深度分析

11. 创建了新得线程,线程回调会创建目录及文件,但是本地验证创建文件失败,如下所示:

如何进行越南APT攻击样本的深度分析

图片二十一:创建目录

创建文件及目录名路径c:User……AppDataRoaming

如何进行越南APT攻击样本的深度分析

11. 服务器响应及下载恶意代码,这将开启一段新得旅程,如下所示:

如何进行越南APT攻击样本的深度分析

图片二十二:DownLoader

如何进行越南APT攻击样本的深度分析

四、vkT2模块分析

1. 跟进函数后我们发现了大量的散列值,动态获取函数地址,与上述函数调用一致,梳理函数名如下:

如何进行越南APT攻击样本的深度分析

1E0AAA函数解密如下:

如何进行越南APT攻击样本的深度分析

2. 做了预热操作,其实根据函数名称,应该猜测到接下来会发生什么,如下图所示:

如何进行越南APT攻击样本的深度分析

图片二十三:InternetOpenA

如何进行越南APT攻击样本的深度分析

图片二十四:InternetConnectA

如何进行越南APT攻击样本的深度分析

图片二十五:HttpOpenRequestA

3. 动态调试过程中会卡断在请求,静态分析代码,lstrcmpiA比较下载数据的指纹信息text字段是否为plain,然后利用InternetReadFile读取下载数据执行,否则的话将陷入睡眠、请求死循环状态。

如何进行越南APT攻击样本的深度分析

图片二十六:请求状态

我们根据已知的ip与请求格式,直接访问该网页,如下所示:

如何进行越南APT攻击样本的深度分析

图片二十七:vkT2

发现Web解析的全是乱码?下载到本地,根据原代码执行流程,这是一段二进制数据,老规矩写个程序来调试这段恶意代码。

4. vkT2分析,先是解密了数据,然后动态获取函数地址,样本惯用的老套路了。

循环拼接各区段(节表)数据,这里按照VirtuallAddress,各区段在加载到内存后的地址循环拼接,内存的对齐粒度0x1000,抹掉了DOS头特征码,形成了一个PE格式文件,如下所示:

如何进行越南APT攻击样本的深度分析

如何进行越南APT攻击样本的深度分析

图片二十八:内存扩展

5. 既然是PE格式扩展到了内存里面,接下来就是修复了IAT表与重定位了,这里涉及的面比较多,还属于PE格式内容,可查阅《Windows权威指南》,如下图所示:

如何进行越南APT攻击样本的深度分析

图片二十九:修复IAT

6. 接下来分析关键要点,获取了系统变量,判断是否运行在64bit系统上,如下所示:

如何进行越南APT攻击样本的深度分析

如何进行越南APT攻击样本的深度分析

如何进行越南APT攻击样本的深度分析

图片三十:判别运行环境

8. 系统数据、主机ip、主机名等信息收集,如下所示:

如何进行越南APT攻击样本的深度分析

如何进行越南APT攻击样本的深度分析

如何进行越南APT攻击样本的深度分析

图片三十一:数据收集

9. 新一轮的C&C通信开始,如下图示所示:

如何进行越南APT攻击样本的深度分析

图片三十二:建立通信

9. 继续分析,使用函数HttpOpenRequest和HttpSendRequest打开文件。HttpOpenRequest创建个请求句柄并且把参数存储在句柄中,HttpSendRequest把请求参数送到HTTP服务器,如下所示:

如何进行越南APT攻击样本的深度分析

如何进行越南APT攻击样本的深度分析

图片三十三:HttpOpenRequest

如何进行越南APT攻击样本的深度分析

如何进行越南APT攻击样本的深度分析

图片三十四:HttpSendRequestA

11. 遗憾的是HttpSendRequeSt已经没有什么响应了,静态分析剩余的代码(模拟执行),读取服务器返回的恶意代码,有用到线程安全上下文。

情报分析没找到更有价值的数据,不过这种请求方式很独特,而且构造的数据包也很特别,下面会讲到这样做的特殊性。

关联样本过程,梳理执行流程图如下所示:

如何进行越南APT攻击样本的深度分析

图片三十五:TKCT quy I nam 2019.doc执行流程

如图三十五,客户端通信的服务器应该都是代理服务器,其实真是的环境远远要比上述过程复杂更多,这也是溯源的难点。

如图三十三,堆栈内存中提取关键的数据信息,这与往常的我们所见到的请求数据不太一样,梳理如下所示:

如何进行越南APT攻击样本的深度分析

APT通讯的手段越来越谨慎,如果不进行详细的样本分析,沙箱模拟运行、内存取证、抓包工具来对网络层面进行分析,结果与想要的数据可能有一定的出入,样本进行通信的时候,其实用到了域前端网络攻击技术。

什么是域前端网络攻击技术?简单点来说可以将msf、cs(Cobalt Strike)等团队控制服务器的流量,目的用来绕过一定程度的防火墙与检测器,一些较大的厂商都会提供服务,所以用msf或cs等工具都可以实现。

我们用Cobalt Strike这款工具举例,集成了端口转发、扫描多模式端口Listener、Windows exe程序生成、Windows dll动态链接库生成、java程序生成、office宏代码生成,包括站点克隆获取浏览器的相关信息等。

其中比较有用的一个功能就是Beacon payload的行为,修改框架默认属性值,更改检入的频率及修改Beacon网络流量,而这些功能的配置都在文件Malleable C2。

Malleable-C2-Profiles功能就可以做到构造一个正常的Web伪装流量,最终达到通信隐匿的效果,我们摘取amazon.profile举例,如下所示:

set useragent "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko";http-get {Seturi"/s/ref=nb_sb_noss_1/167-3294888-0262949/field-keywords=books";client {header "Accept" "*/*";header "Host" " www.amazon.com ";metadata {base64;prepend "session-token=";prepend "skin=noskin;";append "csm-hit=s-24KU11BB82RZSYGJ3BDK|1419899012996";header "Cookie";}http-post {set uri "/N4215/adj/amzn.us.sr.aps";client {header "Accept" "*/*";header "Content-Type" "text/xml";header "X-Requested-With" "XMLHttpRequest";header "Host" " www.amazon.com ";parameter "sz" "160x600";parameter "oe" "oe=ISO-8859-1;";id {parameter "sn";}parameter "s" "3717";parameter "dc_ref" "http%3A%2F%2F www.amazon.com ";}

上述代码与样本vkT2.shellcode通信的特征完全匹配,通过加载相应的profile文件,来改变目标主机与server端的流量特征,以此来隐藏流量,最终达到通信隐匿的目的。

以上就是如何进行越南APT攻击样本的深度分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

文章标题:如何进行越南APT攻击样本的深度分析,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/27662

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云
上一篇 2022年9月21日 上午12:07
下一篇 2022年9月21日 上午12:09

相关推荐

  • 2024年9款优质CRM系统全方位解析

    文章介绍的工具有:纷享销客、Zoho CRM、八百客、红圈通、简道云、简信CRM、Salesforce、HubSpot CRM、Apptivo。 在选择合适的CRM系统时,许多企业面临着功能繁多、选择困难的痛点。对于中小企业来说,找到一个既能提高客户关系管理效率,又能适应业务扩展的CRM系统尤为重要…

    2024年7月25日
    2000
  • 数据库权限关系图表是什么

    数据库权限关系图表是一种以图表形式展示数据库权限分配和管理的工具。它可以有效地帮助我们理解和管理数据库中的各种权限关系。数据库权限关系图表主要包含以下几个部分:数据对象、用户(或用户组)、权限类型、权限级别、权限状态等。其中,数据对象是权限关系图表中的核心元素,它代表了数据库中的各种数据资源,如表、…

    2024年7月22日
    200
  • 诚信数据库是什么意思

    诚信数据库是一种收集、存储和管理个人或组织诚信信息的系统。它是一种用于评估和管理个人或组织行为的工具,通常由政府、商业组织或者非营利组织进行运营。诚信数据库的主要功能包括:1、评估个人或组织的诚信状况;2、提供决策支持;3、预防和控制风险;4、促进社会信用体系建设。 在这四大功能中,评估个人或组织的…

    2024年7月22日
    400
  • 数据库期末关系代数是什么

    关系代数是一种对关系进行操作的代数系统,是关系模型的数学基础,主要用于从关系数据库中检索数据。其操作包括选择、投影、并集、差集、笛卡尔积、连接、除法等。其中,选择操作是对关系中的元组进行筛选,只保留满足某一条件的元组;投影操作则是从关系中选择出一部分属性构造一个新的关系。 一、选择操作 选择操作是关…

    2024年7月22日
    700
  • mysql建立数据库用什么命令

    在MySQL中,我们使用"CREATE DATABASE"命令来创建数据库。这是一个非常简单且基础的命令,其语法为:CREATE DATABASE 数据库名。在这个命令中,“CREATE DATABASE”是固定的,而“数据库名”则是你要创建的数据库的名称,可以自己设定。例如,如…

    2024年7月22日
    500
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部