反病毒虚拟机是一个很有优势的工具,可以说反病毒软件是否存在模拟器是衡量反病毒软件能力的一个指标。反病毒虚拟机不光是内嵌在反病毒软件内部,来动态执行样本。这种虚拟机一般也可以单独用来动态执行批量样本,检测样本恶意行为,因为它相对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、

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

Drop样本释放的文件:

病毒名:wanncry2.0

Md5: 84c82835a5d21bbcf75a61706d8ab549

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

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

对应的文件内容

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

四、待完成部分

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

基于unicorn-engine的虚拟机的实现(WxSpectre)的更多相关文章

  1. 基于MACVLAN配置VMWARE虚拟机中容器网络

    基于MACVLAN配置VMWARE虚拟机中容器网络 测试部环境组 201711 0 文档说明 MACVLAN是docker的一种支持跨主机网络的driver.macvlan本身是linux kerne ...

  2. archlinux+UEFI模式在linux主机下基于KVM-QEMU命令行虚拟机安装笔记

    ArchLinux十分精简,并且具有强大的滚动更新.最近在基于ubuntu的宿主机下通过KVM-QEMU虚拟机安装了archlinux,将过程记录下来以供参考. 1.下载启动盘 1.1.下载archl ...

  3. 基于Arcgis Engine 10.2(C#)+PostgreSQL 11(Postgis 3)+pgRouting 3.0实现使用数据库进行路径规划

    前言:最近在(被迫)使用ArcGIS Engine10.2(.NET平台)进行二次开发(桌面应用),因为想做一个最短路径查询的功能,而arcgis的网络分析又比较麻烦,于是想到了使用Postgis.但 ...

  4. 基于Linux系统WINE虚拟机技术的研究

    650) this.width=650;" onclick="window.open("http://blog.51cto.com/viewpic.php?refimg= ...

  5. MacOS通过ssh连接基于Virtualbox的Ubuntu虚拟机

    以前总是用Windows软件putty进行ssh连接,今天尝试使用macos. 实验环境:主机:macos 10.15.3 客户机:Ubuntu 18.04 默认情况下,Ubuntu没有安装SSH,需 ...

  6. HTC Vive 基础入门 基于Unreal Engine 4引擎

    主要以讲解介绍HTC Vive设备以及Unreal继承的Steam VR Plugin为主 使用最新的虚幻引擎与Plugin完成VR环境的搭建 然后完成一个基本的VR Games. 任务5: 04-配 ...

  7. 基于KVM建立虚拟机的步骤及总结说明

    1.前言 目前正在涉足云计算IaaS工作,虚拟化是IaaS的重要部分,因此这段时间对各个虚拟机化技术和工具进行研究,研究的目的不仅仅是为了会使用这个工具,而是通过研究了解技术的实现机制和原理,即知其然 ...

  8. 详解VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射

    本文以VirtualBox为例 如果出现主机无法ping通虚拟机的情况,请首先确认虚拟机防火墙已关闭. 一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3. ...

  9. VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射

    一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3.虚拟机可以ping通主机(此时ping虚拟机的网关,即是ping主机) 4.主机不能ping通虚拟机 应 ...

随机推荐

  1. uva12433 Rent a Car

    init 一开始搞成2*n+2了...囧  所以初始化很重要! 然后提交的时候忘了删调试的数据了..囧 技巧:设立虚拟节点 建图比较麻烦(非常). 要考虑到保养完了的车可以免费再用 设立S,T  ,1 ...

  2. react中的jsx详细理解

    这是官网上的一个简单的例子 const name = 'Josh Perez'; const element = <h1>Hello, {name}</h1>; ReactDO ...

  3. Java中wait()方法为什么要放在同步块中?(lost wake-up 问题)

    问题起源 事情得从一个多线程编程里面臭名昭著的问题"Lost wake-up problem"说起. 这个问题并不是说只在Java语言中会出现,而是会在所有的多线程环境下出现. 假 ...

  4. Caused by: java.lang.IllegalArgumentException: Parameter Maps collection does not contain value for com.bj186.crm.mapper.UserMapper.Integer

    在使用SSM整合myBatis的过程中遇到了这个问题. 问题的原因: 把parameterType错误的写成了parameterMap 解决办法: 将parameterMap修改为parameterT ...

  5. postman使用--添加headers、授权、cookies

    添加headers Request Headers(请求头)用来说明服务器要使用的附加信息,比较重要的信息有:Cookie,Referer,User-Agent等.在postman中可以在请求下方的H ...

  6. oracle 存储过程,存储函数,包,

    http://heisetoufa.iteye.com/blog/366957 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过 ...

  7. FWT板子

    板子: #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> u ...

  8. bzoj3774 最优选择

    题目描述: 小N手上有一个N*M的方格图,控制某一个点要付出Aij的代价,然后某个点如果被控制了,或者他周围的所有点(上下左右)都被控制了,那么他就算是被选择了的.一个点如果被选择了,那么可以得到Bi ...

  9. 7. ENGINES

    7. ENGINES ENGINES表提供有关存储引擎的信息. 这对于检查是否支持存储引擎或查看默认引擎是什么特别有用. INFORMATION_SCHEMA Name SHOW Name ENGIN ...

  10. Java 多线程执行

    背景: 如果一个任务由多个子任务组成,子任务全部执行完成后然后由主线程对所有子任务结果进行封装,可以采用如下几种方式: 1.基于Guava ListenableFuture 进行: 2.基于Futur ...