如何进行越南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

相关推荐

  • MySQL触发器怎么创建和使用

    在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息 分 别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时 在库存表中添加一条库存记录。 这样一来,我们就必须把这两个关联的操作步骤写到程序里面,而且要用 事务…

    2022年9月1日
    88600
  • Redis的共享session应用如何实现短信登录

    1. 基于 session 实现短信登录 1.1 短信登录流程图 1.2 实现发送短信验证码 前端请求说明: 说明 请求方式 POST 请求路径 /user/code 请求参数 phone(电话号码) 返回值 无 后端接口实现: @Slf4j@Servicepublic class UserServ…

    2022年8月31日
    56600
  • Redis怎么实现保存对象

    redis保存对象 redis数据结构 String——字符串 Hash——字典 List——列表 Set——集合 Sorted Set——有序集合 redisTemplate.opsForValue();//操作字符串redisTemplate.opsForHash();//操作hashredis…

    2022年9月2日
    63900
  • Swift的Mirror反射怎么使用

    元类型与.self AnyObject 在Swift开发中,我们经常会使用AnyObject来代表任意类的实例、类的类型、以及仅类遵守的协议。 代表任意类的实例、类的类型 class LGTeacher { var age = 18}var t = LGTeacher()var t1: AnyObj…

    2022年9月24日
    1.1K00
  • Python遗传算法Geatpy工具箱怎么用

    一、 什么是遗传算法? 遗传算法是仿真生物遗传学和自然选择机理,通过人工方式所构造的一类搜索算法,从某种程度上说遗传算法是对生物进化过程进行的数学方式仿真。生物种群的生存过程普遍遵循达尔文进化准则,群体中的个体根据对环境的适应能力而被大自然所选择或淘汰。进化过程的结果反映在个体的结构上,其染色体包含…

    2022年9月10日
    99200
  • lte是什么

    lte是介于3G和4G之间的一种网络制式;lte的全称是“Long Term Evolution”,是“长期演进”的意思,lte包括“TD-LTE”和“LTE-FDD”两种制式,“LTE-FDD”系统空口上下行传输采用的是一双对称的频段来接收和发送数据,而“TDD-LTE”系统上下行则使用相同的频段…

    2022年9月8日
    1.8K00
  • 如何使用exp进行SQL报错注入

    0x01 前言概述 小编又在MySQL中发现了一个Double型数据溢出。当我们拿到MySQL里的函数时,小编比较感兴趣的是其中的数学函数,它们也应该包含一些数据类型来保存数值。所以小编就跑去测试看哪些函数会出现溢出错误。然后小编发现,当传递一个大于709的值时,函数exp()就会引起一个溢出错误。…

    2022年9月6日
    74600
  • 开源WEB应用防火墙jxwaf怎么用

    jxwaf jxwaf(锦衣盾)是一款基于openresty(nginx+lua)开发的下一代web应用防火墙,独创的业务逻辑防护引擎和机器学习引擎可以有效对业务安全风险进行防护,解决传统WAF无法对业务安全进行防护的痛点。内置的语义分析引擎配合机器学习引擎可以避免传统WAF规则叠加太多导致速度变慢…

    2022年9月24日
    62300
  • word字体放大少了一截怎么解决

    解决方法 1、 首先把文字选中(全选的快捷键是ctrl A)。 2、在选中的文字上面右击鼠标,选择“段落”。 3、找到间距一栏,里面有行距和设置值.我们可以看到设置成了固定值。 4、点击行距旁边的下拉框按钮,然后选择单倍行距,或者1.5倍行距等等.这里以单倍行距为例。 5、选择好之后如图,点击确定。…

    2022年9月18日
    66200
  • SQL窗口函数之排名窗口函数怎么使用

    取值窗口函数可以用于返回窗口内指定位置的数据行。常见的取值窗口函数如下: LAG函数可以返回窗口内当前行之前的第N行数据。LEAD函数可以返回窗口内当前行之后的第N行数据。FIRST_VALUE函数可以返回窗口内名列前茅行数据。LAST_VALUE函数可以返回窗口内最后一行数据。NTH_VALUE函…

    2022年9月10日
    69500
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部