前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Speakeasy实现Windows内核和用户模式仿真

如何使用Speakeasy实现Windows内核和用户模式仿真

作者头像
FB客服
发布2021-10-11 16:05:08
8580
发布2021-10-11 16:05:08
举报
文章被收录于专栏:FreeBuf

关于Speakeasy

Speakeasy是一款功能强大的模块化二进制模拟器,旨在帮助广大研究人员模拟Windows内核以及用户模式恶意软件。

Speakeasy模拟的是Windows的特定组件,而不是尝试使用整个虚拟化操作系统执行动态分析。具体地说,Speakeasy可以通过模拟操作系统API、对象、正在运行的进程/线程、文件系统和网络,给研究人员提供一个能够让待分析样本完整执行的环境。

样本可以很容易地在容器或云服务中进行模拟,这将允许研究人员同时分析多个样本。当前版本的Speakeasy支持用户模式和内核模式Windows应用程序。

在进行模拟之前,工具会识别代码中的入口点,而且还可以模拟在运行时所发现的动态入口点。除此之外,Speakeasy可以在模拟过程中尽可能多地覆盖代码。

Speakeasy完全基于Python 3开发,并且基于Unicorn仿真引擎来模拟CPU指令。

工具安装

首先,我们需要使用下列命令将该项目源码克隆至本地:

代码语言:javascript
复制
git clone https://github.com/fireeye/speakeasy

Speakeasy可以在Docker容器中执行,或者以单独的脚本执行,也可以在云服务中执行。安装该工具最简单的方法就是先安装好Speakeasy所需的依赖包,然后运行项目中的setup.py脚本:

代码语言:javascript
复制
cd <repo_base_dir>
python3 -m pip install -r requirements.txt
python3 setup.py install

项目中还提供了一个Docker文件,可以用于构建Docker镜像。不过,Speakeasy的依赖组件可以安装在本地系统,或直接通过Python运行。

Docker容器运行

该项目中提供的Dockerfile可以用于生成Docker镜像。

Docker镜像构建

首先,我们需要使用下列命令创建一个容器,标签名为“my_tag”:

代码语言:javascript
复制
cd <repo_base_dir>
docker build -t "my_tag" .

接下来,使用下列命令运行Docker镜像,并在/sandbox中创建一个本地卷:

代码语言:javascript
复制
docker run -v <path_containing_malware>:/sandbox -it "my_tag"

工具使用

以代码库运行

下面的例子中,我们演示了如何模拟一个Windows DLL:

代码语言:javascript
复制
import speakeasy
    # Get a speakeasy object
    se = speakeasy.Speakeasy()
    # Load a DLL into the emulation space
    module = se.load_module("myfile.dll")
    # Emulate the DLL's entry point (i.e. DllMain)
    se.run_module(module)
    # Set up some args for the export
    arg0 = 0x0
    arg1 = 0x1
    # Walk the DLLs exports
    for exp in module.get_exports():
        if exp.name == 'myexport':
            # Call an export named 'myexport' and emulate it
            se.call(exp.address, [arg0, arg1])
    # Get the emulation report
    report = se.get_report()
    # Do something with the report; parse it or save it off for post-processing
代码语言:javascript
复制
以命令行工具运行
代码语言:javascript
复制
usage: run_speakeasy.py [-h] [-t TARGET] [-o OUTPUT] [-p [PARAMS ...]] [-c CONFIG] [-m] [-r] [--raw_offset RAW_OFFSET]
                        [-a ARCH] [-d DUMP_PATH] [-q TIMEOUT] [-z DROP_FILES_PATH] [-l MODULE_DIR] [-k] [--no-mp]
Emulate a Windows binary with speakeasy
optional arguments:
  -h, --help            显示帮助信息并退出
  -t TARGET, --target TARGET
                       模拟的输入文件路径
  -o OUTPUT, --output OUTPUT
                       保存报告的输出文件路径
  -p [PARAMS ...], --params [PARAMS ...]
                       提供个模拟进程的命令行参数
  -c CONFIG, --config CONFIG
                        模拟器配置文件路径
  -m, --mem-tracing      启用内存跟踪,记录样本访问的所有内存
  -r, --raw              尝试模拟未解析的文件
  --raw_offset RAW_OFFSET
                       原始模式下开始模拟的偏移量地址
  -a ARCH, --arch ARCH   设置模拟过程中所使用的架构,支持[ x86 | amd64 ]
  -d DUMP_PATH, --dump DUMP_PATH
                       存储压缩内存转储包的路径
  -q TIMEOUT, --timeout TIMEOUT
                       模拟超时(默认为60秒)
  -z DROP_FILES_PATH, --dropped-files DROP_FILES_PATH
                       存储模拟过程中创建的文件的路径
  -l MODULE_DIR, --module-dir MODULE_DIR
                        存储可加载PE模块的目录路径
  -k, --emulate-children
                        模拟CreateProcess API创建的任意进程
  --no-mp               在当前进程中运行模拟任务

工具使用样例

模拟一个Windows驱动程序

代码语言:javascript
复制
user@mybox:~/speakeasy$ python3 run_speakeasy.py -t ~/drivers/MyDriver.sys

模拟32位Windows Shellcode

代码语言:javascript
复制
user@mybox:~/speakeasy$ python3 run_speakeasy.py -t ~/sc.bin  -r -a x86

模拟64位Windows Shellcode并创建完整的内存转储

代码语言:javascript
复制
user@mybox:~/speakeasy$ python3 run_speakeasy.py -t ~/sc.bin  -r -a x64 -d memdump.zip

项目地址

Speakeasy:【点击阅读原文】

参考资料

https://www.fireeye.com/blog/threat-research/2020/08/emulation-of-malicious-shellcode-with-speakeasy.html https://github.com/unicorn-engine/unicorn https://github.com/fireeye/speakeasy/blob/master/doc/configuration.md https://github.com/fireeye/speakeasy/blob/master/doc/limitations.md

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工具安装
  • Docker容器运行
    • Docker镜像构建
    • 工具使用
      • 以代码库运行
      • 工具使用样例
        • 模拟一个Windows驱动程序
          • 模拟32位Windows Shellcode
            • 模拟64位Windows Shellcode并创建完整的内存转储
            • 项目地址
            • 参考资料
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档