freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

基于进程虚拟机的混淆分析对抗技术
2022-08-02 16:12:53
所属地 北京

组织名称

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使得指令执行流程难以分析。基于虚拟机技术,攻击者能够方便地引入常见的垃圾代码、虚拟操作数编码、虚拟操作数重复、不透明谓词、嵌套虚拟机等分析对抗技术。这或许将成为安全分析的一大阻碍。

# 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录