基于unicorn-engine的虚拟机的实现(WxSpectre)
反病毒虚拟机是一个很有优势的工具,可以说反病毒软件是否存在模拟器是衡量反病毒软件能力的一个指标。反病毒虚拟机不光是内嵌在反病毒软件内部,来动态执行样本。这种虚拟机一般也可以单独用来动态执行批量样本,检测样本恶意行为,因为它相对virualbox+cuckoo更加的轻巧,节省资源。所以还是有很高的价值的。正因为其高效性与复杂性,现在公开这方面的资料很少。
一、虚拟机vs模拟器
对于恶意样本分析领域,沙箱,虚拟机,模拟器,一个原则就是执行指令不会影响host环境.
Method | Performance | Execution granularity | System fidelity | |
---|---|---|---|---|
VirtualBox | Virtualization/VT | Quick +, heavily | N/A | Very good |
Bochs | Full emulation | Slow, tiny | Instruction level | Very good |
Uniron-engine | Emulation/dynamic translation | Quick, tiny | Instruction level | N/A |
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、
Drop样本释放的文件:
病毒名:wanncry2.0
Md5: 84c82835a5d21bbcf75a61706d8ab549
WxVFS监控到的病毒创建出来的文件
对应的文件内容
更多关于脱壳能力,注册表监控,进程创建监控,虚拟调试,内存字符串dump,执行速度,这里完整的演示视频。
四、待完成部分
目前脚本执行模块还在完善,调试功能还没有完成。网络模块还没有完成,脱壳能力还需要改善。等到机会合适我将放出这个工具。
基于unicorn-engine的虚拟机的实现(WxSpectre)的更多相关文章
- 基于MACVLAN配置VMWARE虚拟机中容器网络
基于MACVLAN配置VMWARE虚拟机中容器网络 测试部环境组 201711 0 文档说明 MACVLAN是docker的一种支持跨主机网络的driver.macvlan本身是linux kerne ...
- archlinux+UEFI模式在linux主机下基于KVM-QEMU命令行虚拟机安装笔记
ArchLinux十分精简,并且具有强大的滚动更新.最近在基于ubuntu的宿主机下通过KVM-QEMU虚拟机安装了archlinux,将过程记录下来以供参考. 1.下载启动盘 1.1.下载archl ...
- 基于Arcgis Engine 10.2(C#)+PostgreSQL 11(Postgis 3)+pgRouting 3.0实现使用数据库进行路径规划
前言:最近在(被迫)使用ArcGIS Engine10.2(.NET平台)进行二次开发(桌面应用),因为想做一个最短路径查询的功能,而arcgis的网络分析又比较麻烦,于是想到了使用Postgis.但 ...
- 基于Linux系统WINE虚拟机技术的研究
650) this.width=650;" onclick="window.open("http://blog.51cto.com/viewpic.php?refimg= ...
- MacOS通过ssh连接基于Virtualbox的Ubuntu虚拟机
以前总是用Windows软件putty进行ssh连接,今天尝试使用macos. 实验环境:主机:macos 10.15.3 客户机:Ubuntu 18.04 默认情况下,Ubuntu没有安装SSH,需 ...
- HTC Vive 基础入门 基于Unreal Engine 4引擎
主要以讲解介绍HTC Vive设备以及Unreal继承的Steam VR Plugin为主 使用最新的虚幻引擎与Plugin完成VR环境的搭建 然后完成一个基本的VR Games. 任务5: 04-配 ...
- 基于KVM建立虚拟机的步骤及总结说明
1.前言 目前正在涉足云计算IaaS工作,虚拟化是IaaS的重要部分,因此这段时间对各个虚拟机化技术和工具进行研究,研究的目的不仅仅是为了会使用这个工具,而是通过研究了解技术的实现机制和原理,即知其然 ...
- 详解VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射
本文以VirtualBox为例 如果出现主机无法ping通虚拟机的情况,请首先确认虚拟机防火墙已关闭. 一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3. ...
- VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射
一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3.虚拟机可以ping通主机(此时ping虚拟机的网关,即是ping主机) 4.主机不能ping通虚拟机 应 ...
随机推荐
- nvm、npm、nodejs的关系(转载)
nvm.npm.nodejs的关系 为什么要了解nvm.npm.nodejs的关系: reactNative的项目构建都是有这几个工具进行构建管理. 掌握他们的关系,就能了解reactNative项目 ...
- 暑假集训 || 区间DP
区间DP 经典石子合并问题V1 复杂度 On3 int a[SZ], sum[SZ], f[SZ][SZ]; int main() { int n; scanf("%d", ...
- install docker-ce for ubuntu
may need login vpn first docker-ce for ubuntu chinese version docker-ce for ubuntu
- 在ios中使用FMDB
SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK很早就支持了SQLite,在使用时,只需要加入 libsqlite3.dyli ...
- [CF] 986 A. Fair
http://codeforces.com/problemset/problem/986/A n个点的无向连通图,每个点有一个属性,求每个点到s个不同属性点的最短距离 依稀记得那天晚上我和Menteu ...
- <Jenkins> 入门一
1.Continous integration 持续集成 2.Continous Delivery 持续交付 3.Java 写的
- 如何用纯 CSS 创作炫酷的同心矩形旋转动画
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/bMvbRp 可交互视频教 ...
- 第三讲:post-processsing with vcs+ files
1,dump wave by system function $vcdpluson(level_number,module_instance,....|net_or_reg) $vcdplusoff ...
- python基础知识08-类定义、属性、初始化和析构
1.类的定义 class 类 是独立存放变量(属性/方法)的一个空间. 每个实例都是一个独立的变量空间.不同实例之间的空间互相不可见. 一个实例的特征,就是属性. 定义在类中的私有属性也可以被子类继承 ...
- (二)Robto Framewoek使用自己的python库
有时候找不到合适的库来完成自动化工作,则需要使用自己定义的python库.本文简单描述自建python库,以及在robotframework中的使用方法. 新建库目录 在C:\Python27\Lib ...