基于进程虚拟机的混淆分析对抗技术

组织名称

|

Wslink—|— 组织编号

|

未知 关联组织

|

未知 战术标签

|

防御规避 技术标签

|

虚拟机执行 情报来源

|

https://www.welivesecurity.com/2022/03/28/under-hood-wslink-multilayered-
virtual-machine/##01攻击技术分析

亮点:基于虚拟机的混淆分析对抗

混淆技术是一种常见的软件保护技术,目的是使得软件难以被逆向分析。本次事件中,攻击者正是滥用这一点,实现基于虚拟机的分析对抗。

虚拟机可以分为两个主要类别:

1.系统虚拟机:支持运行整个操作系统,例如VMWare、Virtual Box等产品;

2.进程虚拟机:为程序提供独立于平台的环境,允许程序在任何平台上以相同的方式执行,例如Java等。

进程虚拟机依靠一种与操作系统无关的字节码(IR)作为中间层,是程序与操作系统间类似汇编语言的存在,它可以使得程序能够在不同指令集架构(ISA)的CPU上执行。利用这样的机制,可以通过构造高级语言与低级语言间的中间层以及对应的转换方法,实现在操作系统上运行不同架构的其他操作系统。在本次事件中,利用的就是进程虚拟机中的相关技术和概念,但其目的却并不是跨平台运行,而是实现基于此的分析对抗。

为了降低利用难度,攻击者先基于已知ISA编译机器码,然后反汇编文件,将汇编利用攻击者的私有ISA进行转换。如此得到的代码由同一应用中的虚拟机逻辑解释执行。本次事件中将一个利用已知ISA解释的函数用私有ISA进行转换的实现流程如下:

1659427724_62e8db8cb3c3b026b98d5.png!small?1659427725532

对于Function1的调用,首先生成Function1的字节码,记录字节码首地址。然后将Function1的函数体改写为对vm_entry的调用,并将剩余空间填充为\x00。在vm_entry中,根据原始调用的函数地址跳转到对应字节码处执行:

1659427740_62e8db9cbb1f157eee802.png!small?1659427741872

vm_entry功能如下:

1.基于函数偏移和基址计算函数实际地址;

2.首次运行时解压代码和数据到计算得到的实际地址;

3.调用vm_pre_init,将虚拟指令表的硬编码偏移(要执行的第一条虚拟指令的地址)和要解释的字节码的硬编码地址传递给vm_init,由vm_init将寄存器和CPU标志参数入栈,然后转移到虚拟上下文中执行;

4.vm_init会再次计算基址并保存到内部寄存器,然后利用该基址重定向指令表的入口地址和字节码的地址,调用流程如下:1659427762_62e8dbb29c9af0b2d85cf.png!small?1659427763884

最终调用到函数对应的字节码,完成虚拟化函数调用,返回到Function1的返回地址中。这是单层虚拟机的函数调用流程,在本次事件中,攻击者布置了两层虚拟机结构,图示如下:

1659427779_62e8dbc351c4596b62704.png!small?1659427780109

其中第二层虚拟机中的运行指令位于第一个虚拟机中。两层虚拟机结构进一步使得调用过程更难以被追踪,最终的执行指令也更难以被发现,极大地增加了调试分析的难度。

##02总结

在本次事件中, 攻击者通过基于虚拟机的混淆技术,通过私有ISA使得指令执行流程难以分析
。基于虚拟机技术,攻击者能够方便地引入常见的垃圾代码、虚拟操作数编码、虚拟操作数重复、不透明谓词、嵌套虚拟机等分析对抗技术。这或许将成为安全分析的一大阻碍。

够方便地引入常见的垃圾代码、虚拟操作数编码、虚拟操作数重复、不透明谓词、嵌套虚拟机等分析对抗技术。这或许将成为安全分析的一大阻碍。

网络安全工程师企业级学习路线

这时候你当然需要一份系统性的学习路线

如图片过大被平台压缩导致看不清的话,可以在文末下载(无偿的),大家也可以一起学习交流一下。

一些我收集的网络安全自学入门书籍

一些我白嫖到的不错的视频教程:

上述资料【扫下方二维码】就可以领取了,无偿分享

猜你喜欢

转载自blog.csdn.net/text2206/article/details/131850465
今日推荐