基于unicorn-engine的虚拟机的实现(WxSpectre)

反病毒虚拟机是一个很有优势的工具,可以说反病毒软件是否存在模拟器是衡量反病毒软件能力的一个指标。反病毒虚拟机不光是内嵌在反病毒软件内部,来动态执行样本。这种虚拟机一般也可以单独用来动态执行批量样本,检测样本恶意行为,因为它相对virualbox+cuckoo更加的轻巧,节省资源。所以还是有很高的价值的。正因为其高效性与复杂性,现在公开这方面的资料很少。

一、虚拟机vs模拟器

对于恶意样本分析领域,沙箱,虚拟机,模拟器,一个原则就是执行指令不会影响host环境.

virtualbox除过特权指令和部分ring0中运行的指令,是直接在宿主机上运行的。所以运行速度与宿主机没有很大差异。Bochs是纯粹的软件模拟器,另外加上对硬件的模拟,所以其指令执行速度是非常慢的。Unicorn-engine基于动态翻译技术,速度相对于纯粹的指令模拟快的多.

所以如果关心系统仿真度当然选择virtualbox,bochs,但是virtualbox会耗费更多的系统资源。

Unicorn-engine可以虚拟执行x86,x64,arm等指令集。因为其基于动态翻译和部分模拟来执行目标指令,效率比bochs快的多。

很显然,unicorn-engine只是一个”CPU”,所以要想运行样本还缺的是一个windows的运行应用程序的环境。

WxSpectre就是这样基于unicorn-engine的windows仿真环境来实现的虚拟机。

二、关于WxSpectre

Windows是一个多进程环境,这是现代操作系统的普遍的标配。但是在运行恶意样本的时候,我们只关心的恶意样本做了什么,而且为了避免产生干扰一次只能运行一个样本,这就造成了很大的浪费,其实只要满足样本运行所需要的环境就可以,但是我们却提供了一个完整的windows环境,显然杀鸡用了宰牛刀。如果我们只提供运行目标样本所需的基本环境,显然这将节省很多的资源。WxSpectre基本上实现了这一目标。

WxSpectre由两大部分组成:Unicorn-engine+仿真WINDOWS系统环境.WxSpectre实现了大部分的windows执行应用程序的环境,包括文件系统,对象管理,注册表,线程调度,内存管理,异常/中断处理,Windows API(ring3).pe 执行环境初始化模块。

WxSpectre可以跨平台在windows,linux,Mac os,下运行,可以虚拟执行EXE/VBS脚本。

目前实现的功能是:1.api trace.2.运行时内存dump.3.指令trace,4,虚拟调试5.内存字符串提取等。

WxSpectre的框架结构:

1.内存管理:

包括内存的申请释放,堆内存管理。

2.线程调度:

线程切换,线程调度。

3.异常处理:

将cpu的异常传送到hyperviror,然后经过过滤处理,然后分发给相应的处理函数。

4.对象管理:

主要是指对象初始化,对象同步,对象释放,对象的访问。

5.WxVFS:

指的是虚拟文件系统,有点类似于linux的VFS系统,但是所不同的是这里不是为了实现一个统一的文件系统界面,这里主要是虚拟出文件系统的结构。从而使WxSpectre中所有样本访问文件系统的操作得以执行。比如读写文件,创建,删除,文件,目录等。

6.Wxhelper:

所用的api调用将会重定位到这个模块中,然后执行。

7.脚本引擎(WxNscript):

这里的脚本引擎主要用来执行vbs,js脚本.因为现在越来越多的病毒会利用脚本文件了来作为传播载体.

8.兼容层:

在WxSpectre执行应用程序的时候,有的时候需要打补丁,patch某些指令序列从而让样本能顺利执行下去(因为存在某些反虚拟机,反模拟器样本或者其他的异常行为导致执行出现错误,或者奔溃)。

9.虚拟注册表(WxRegistry)

Windows程序执行需要依赖注册表。WxRegistry是对注册表的虚拟。

10.网络访问模块(WxNetwork)

WxNetwork会虚拟出一个sever模块,当有样本请求数据,wxnetwork会与其回话。

WxSpectre的功能:

1. API trace

Api trace是勾勒样本动态行为的一个很重要的方面。这里只记录样本直接调用的api日志。不会记录嵌套在api内部的api调用,这样分析者更加能抓住重点。Cuckoo不好的一点api的记录没有做过滤。

2. 虚拟文件系统(WxVFS)

因为完成了文件系统所以WxSpectre如果捕获到有文件的创建,写入都会被监控。且可以dump创建出的文件。

3.虚拟调试(virtual debugger)

这个功能是非常有用的。因为通常情况下调试病毒必须在虚拟机里面调试。分析者通常需要反复的还原虚拟机,将样本用调试器加载起来,这样会耗费很多的时间。WxSpectre的虚拟调试,完全不依赖虚拟机,启动非常的快。对调试病毒非常的方便。

4. 虚拟注册表&文件监控

监控注册表的访问,读,写,设置,文件及文件夹的创建,读,写,删除等。

5. 进程创建监控

6. 内存dump&及内存字符串dump

三、demo情况

Api trace:

病毒名:DDoS:Win32/Nitol.A

Md5: 4666a8eef0e51323f85f569e083f5bc4、

VT: https://virustotal.com/en/file/c454119514c44e64df45d83160ca7b8a06c87a2b167b16700baa4e0cacafe95a/analysis/

Drop样本释放的文件:

病毒名:wanncry2.0

Md5: 84c82835a5d21bbcf75a61706d8ab549

VT: https://virustotal.com/en/file/ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa/analysis/

WxVFS监控到的病毒创建出来的文件

对应的文件内容

更多关于脱壳能力,注册表监控,进程创建监控,虚拟调试,内存字符串dump,执行速度,这里完整的演示视频。

四、待完成部分

目前脚本执行模块还在完善,调试功能还没有完成。网络模块还没有完成,脱壳能力还需要改善。等到机会合适我将放出这个工具。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-06-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码神联盟

代理技术 | 重磅,代理服务器背后的故事(正向、反向代理)

传说中的代理服务技术是一门很古老的技术,互联网早期就已经出现,一般来说,实现实现代理技术的实现就是在服务器上安装代理软件,成为代理服务器,从而配置\实现代...

61150
来自专栏无题

Redis高可用要点

1.持久化方式(全量持久化与增量持久化) 2.水平拆分(数据分布) 3.主从复制(主从分工) 4.故障转移(sentinel相互感知,master故障发现,fa...

383110
来自专栏SpringBoot

tomcat加入服务,可以开机自启

3.开启服务 net start tomcat       关闭服务 net stop tomcat       

12930
来自专栏乐沙弥的世界

关于 Private strand flush not complete

      网友发来告警日志,原本是关于一个死锁的情形,而另外的一个问题则是从redo log buffer写出到redo log file出现了不能分配新的日...

14630
来自专栏py+selenium

py+selenium 无法定位ShowModalDialog模态窗口【已解决】

但是selenium无法定位到这类窗口,百度说是目前selenium不支持处理模态窗口。

71230
来自专栏代码GG之家

搭建安卓系统源代码编译环境

今天分享下月亮大神整理的,android源码环境搭建,让开始学习android的同学,可以少走弯路,快速上手。 安卓源码编译环境搭建教程: 1.打造自己的And...

44180
来自专栏pythonlove

I/O模型

目前我们网络所面临的依然是高并发的问题,就像某cat双11时的情况,瞬间的并发量是惊人的,当然我们会有很多种方法去解决这个问题,本文我们谈论的是单台服务器,如何...

12420
来自专栏源码之家

DEDE5.3至DEDE5.6通用伪静态教程!

37630
来自专栏salesforce零基础学习

salesforce 零基础学习(三十八)Translate 的使用(国际化处理)

本篇参考:http://resources.docs.salesforce.com/200/17/en-us/sfdc/pdf/salesforce_workb...

25400
来自专栏北京马哥教育

关于IO的同步,异步,阻塞,非阻塞

上次写了一篇文章:Unix IO 模型学习。恰巧在这次周会的时候,@fp1203 (goldendoc成员之一) 正好在讲解poll和epoll的底层实现。中途...

314100

扫码关注云+社区

领取腾讯云代金券