用idawasm IDA Pro逆向WebAssembly模块

栏目: 后端 · 前端 · 发布时间: 5年前

内容简介:本文介绍idawasm,为WebAssembly提供加载器和处理器的IDA Pro插件。Idawasm可以允许在所有支持IDA Pro的操作系统上,下载地址为今年的WASM ,全称WebAssembly,是一种可以使用非 Java 编程语言编写代码并且能在浏览器上运行的技术方案,也是自 Web 诞生以来首个 Java 原生替代方案。

简介

本文介绍idawasm,为WebAssembly提供加载器和处理器的IDA Pro插件。Idawasm可以允许在所有支持IDA Pro的操作系统上,下载地址为 https://www.github.com/fireeye/idawasm

今年的 Flare-On challenge 大赛上出现了一个新的文件格式:WebAssembly (“wasm”) 模块。因此,需要逆向基于WebAssembly栈的虚拟机中二进制文件中包括的关键逻辑。那么首先就要了解一下wasm:

WASM ,全称WebAssembly,是一种可以使用非 Java 编程语言编写代码并且能在浏览器上运行的技术方案,也是自 Web 诞生以来首个 Java 原生替代方案。

WebAssembly虽然是一种新的标准,但也有一些分析工具:

  • WebAssembly Binary Toolkit:提供命令行工具wasm2wat,可以将.wasm文件翻译为可读性更强的 .wat 格式。

  • 基于web的WebAssembly Studio IDE:可以将.wasm文件中的特征提取并转变为其他格式,包括x86-64的翻译。

  • Radare2:可以分解指令,但不能重构控制流图。

但这些 工具 都不常用也不熟悉。如果可以在IDA Pro中分析.wasm文件,就可以更好地应对通过WebAssembly传播的恶意软件。

idawasm IDA Pro插件是一个加载器和处理器模块,有了该模块分析师可以用熟悉的接口来检查WebAssembly模块。

idawasm

安装完idawasm后,就可以在IDA Pro中加载 .wasm 文件。 Load a new file 对话框表示加载器模块识别出了WebAssembly模块。目前,该插件支持WebAssembly的MVP (version 1)版本。

用idawasm IDA Pro逆向WebAssembly模块

图1: IDA Pro加载WebAssembly模块

然后处理器模块会重构控制流,并启用IDA的 graph mode 。这就很容易识别高级的控制重构,比如if和while。

用idawasm IDA Pro逆向WebAssembly模块

图2: WebAssembly指令的控制流图

除了控制流,处理器模块还会用嵌入在 .wasm 文件中的元数据对函数名和类型进行语法分析。还可以提取出全局变量的交叉引用,分析师就可以列出交叉引用并找出操作了特定值的代码。因此,所有的idawasm分析的元素都可以交互性地重命名和注释。最后,可以把关于WebAssembly恶意软件样本的知识记录到 .idb 文件中,并与其他分析师分享。

图3就是分析师重命名了局部变量并加入注释来解释函数帧在函数开始时是如何被操作的。

用idawasm IDA Pro逆向WebAssembly模块

图3: IDA Pro中WebAssembly的注释

idawasm处理器检测到LLVM编译的WebAssembly模块后,就会开始分析。LLVM用WebAssembly说明中提供的原语来在全局内存中实现函数栈帧(stack

frame)。函数开始执行时,前几条指令会在全局栈中分配帧(frame),然后再返回前清除。idawasm会自动找出全局帧栈指针的引用并重构每个函数的帧布局。通过这些信息,处理器会更新IDA的栈帧结构,并再这些结构中将偏移量标为immediate

constant。这意味着更多的指令操作数实际上是可以注释和重命名的符号(标记),如图4所示。

用idawasm IDA Pro逆向WebAssembly模块

图4: 自动重构函数帧

WebAssembly编译器会略去引用Single Static Assignment (SSA)形式中的变量的指令。这对浏览器引擎来说是有好处的,因为SSA形式中的代码更容易输入到分析系统中。使用SSA形式是因为最简单的函数也有几十到几百的本地变量。

但对分析师来说,SSA形式很难分析。因此,idawasm中含有一个WebAssembly模拟器可以追踪符号级(symbolic level)的指令。这可以使分析师将一个简单但相关联的指令序列拆分为一个复杂表达式。

还需要在一个单一的基本区块中选择指令区,并运行wasm_emu.py脚本。脚本会模拟指令、简化效果、渲染全局变量、本地变量、内存和栈的效果。图5是函数被简化为一个全局变量更新:

用idawasm IDA Pro逆向WebAssembly模块

图5: wasm_emu.py表达函数帧分配的效果

当有许多算术运算时, wasm_emu.py 会简化为一个表达式。比如图6就是32个指令通过2个输入字节变成XOR的过程:

用idawasm IDA Pro逆向WebAssembly模块

图6: wasm_emu.py将多个简单指令简化为一个复杂指令

结论

idawasm是通过加载器和处理器支持WebAssembly模块的IDA Pro插件。因此,分析师用一个熟悉的接口来逆向 .wasm文件wasm_emu.py 可以帮助理解WebAssembly指令流的效果。现在处理这种新的文件格式和架构就容易多了。

本文作者:angel010,转载自: https://xz.aliyun.com/t/2854

英文原文: https://www.fireeye.com/blog/threat-research/2018/10/reverse-engineering-webassembly-modules-using-the-idawasm-ida-pro-plugin.html


以上所述就是小编给大家介绍的《用idawasm IDA Pro逆向WebAssembly模块》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

代码之外的功夫

代码之外的功夫

[美] Gregory T. Brown / 李志 / 人民邮电出版社 / 2018-3-1 / 49.00元

本书虽然面向程序员,却不包含代码。在作者看来,90%的程序设计工作都不需要写代码;程序员不只是编程专家,其核心竞争力是利用代码这一工具解决人类社会的常见问题。以此作为出发点,作者精心构思了8个故事,以情景代入的方式邀请读者思考代码之外的关键问题:软件开发工作如何从以技术为中心转为以人为本?透过故事主人公的视角,读者能比较自己与书中角色的差异,发现决策过程的瑕疵,提升解决问题的综合能力。 书中......一起来看看 《代码之外的功夫》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具