基于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通虚拟机 应 ...
随机推荐
- 部署 k8s Cluster(上)[转]
我们将部署三个节点的 Kubernetes Cluster. k8s-master 是 Master,k8s-node1 和 k8s-node2 是 Node. 所有节点的操作系统均为 Ubuntu ...
- echart-柱状图
目前在改别人遗留的bug,需求: 宽度 自适应的情况下 展示不友好:宽度太大 上下不居中 需求 要 上下 无论是否 有内容 都要居中展示 以0刻度为标准 宽度 设置 series: [ { name: ...
- 重载操作符 'operator'
operator 是 C++ 的(运算符的)重载操作符.用作扩展运算符的功能. 它和运算符一起使用,表示一个运算符函数,理解时应将 [operator+运算符] 整体上视为一个函数名. 要注意的是: ...
- POJ-3278 抓住这头牛
广搜解决. 广搜搜出最短路,直接输出返回就行了. 每个点只搜一次,而且界限进行一次判断. else 语句里面不要用if else if,这样的话就直走一条路了. #include <ios ...
- Linux vim指令学习
每天查看一遍vim文档 Linux系统下命令:$ vimtutor 1.可视模式([v] 或者 [Ctrl + v])下的[U]把选中的文本变为大写 .[u]把选中的文本变为小写. 2.[数字] + ...
- MariaDB数据库(二)
1. MariaDB数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行,尽量使用范围小的,而不用大的. 1.1 常用的数据类型 整数:int,bit ...
- Go:channel
一.channel 在 Go 语言里,不仅可以使用原子函数和互斥锁来保证对共享资源的安全访问以及消除竞争状态,还可以使用 channel,通过发送和接收需要共享的资源,在 goroutine 之间做同 ...
- 转:使用 /proc 文件系统来访问 Linux 内核的内容
使用 /proc 文件系统来访问 Linux 内核的内容 https://www.ibm.com/developerworks/cn/linux/l-proc.html /proc 文件系统并不是 G ...
- 【终极指南】图文详解Chrome插件离线安装方法
Chrome插件离线安装背景介绍 因为无法访问Google所以国内用户目前大多只能通过第三方比如我们Chrome插件网下载插件,然后离线安装.Chrome官方自67版本后,只允许用户通过谷歌应用商店安 ...
- pycharm的快捷键以及常用设置
1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性) Ctrl + Alt + Space 快速导入任意类 Ctrl + Shift + Enter 语句完成 Ctr ...