DnD: A Cross-Architecture Deep Neural Network Decompiler [USENIX 2022]
Ruoyu Wu Purdue University
Taegyu Kim The Pennsylvania State University
Dave (Jing) Tian Purdue University
Antonio Bianchi Purdue University
Dongyan Xu Purdue University
深度神经网络(DNN)的应用在近几年稳定增长, 特别是在边缘设备上, 专门的DNN编译器用于将DNN编译成二进制文件. 当DNN模型可访问时, 许多安全应用场景(如DNN模型提取、白盒对抗样本生成和DNN模型修补和加固)都是可能的. 然而这些技术不能应用于编译的DNN. 不幸的是, 没有专门的反编译器能够从已编译的二进制代码开始恢复DNN的高级表示.
为了解决这个问题, 我们提出了DnD, 第一个且与ISA无关的DNN反编译器. DnD使用符号执行, 结合专用的循环分析, 将分析的二进制代码提升为一种新的中间表示, 能够以编译器和ISA不可知的方式表示DNN的高级数学操作. 然后, DnD将提取的DNN数学操作与模板DNN数学操作进行匹配, 恢复所有识别的DNN算子的超参数和参数, 以及整个DNN拓扑. 我们的评估表明, DnD可以完美地恢复不同的DNN模型, 从两个不同编译器(Glow和TVM)为三个不同的ISA(Thumb、AArch64和x86-64)编译的二进制文件中提取它们. 此外, DnD能够提取现实世界微控制器使用的DNN模型, 并使用白盒对抗机器学习技术攻击它们.
一句话 - DnD: 使用符号执行和专用循环分析技术反编译DNN模型二进制文件
换一句话: “开逆向AI的先河”
导论
DNN编译器在边缘设备中的使用越来越多,如微控制器和手机。例如,微控制器使用编译后的DNN二进制文件来执行各种任务,如安全人脸识别、语音识别和语音控制。最近的一项预测估计,到2025年,98%的边缘设备将具有智能功能,通常由DNNs驱动。
从编译的二进制代码中提取DNN模型使各种安全应用程序成为可能,包括DNN模型提取和分析(手动和自动)、白盒对抗样本生成、白盒DNN后门检测以及DNN模型修补和加固。不幸的是,在所有这些使用场景中,通过应用传统反编译器获得的反编译代码的源代码级表示并不能为分析人员提供太多帮助,因为这样的反编译器无法捕获编译后的DNN模型的数学语义。
本文提出DnD,第一个编译器和指令集无关的深度神经网络反编译器,能够从编译后的二进制文件中提取DNN模型。具体来说,在处理编译后的DNN模型时,DnD可以精确地恢复其参数、超参数和拓扑结构,并将反编译后的模型表示为用ONNX建模语言[9]编码的高级表示(如图1所示)。
DND基于以下三种新技术。首先,它将符号执行与专用循环分析相结合,以捕获表示不同DNN算子如何处理接收数据的精确数学公式。其次,DND使用一种新的中间表示(intermediate representation, IR),以编译器和ISA无关的方式表示高级数学DNN操作。最后,通过将提取的数学操作与模板数学DNN操作进行匹配、恢复超参数以及识别出的所有DNN操作的参数,识别出目标二进制文件中DNN操作的类型和位置以及整个网络的拓扑结构。
实验结果表明,DnD具有通用性和准确性。它支持反编译由两个不同的编译器为三个不同的ISA编译的不同DNN模型,而不需要人工工作。此外,反编译后的DNN模型在结构上与原始DNN模型是等价的,重新编译后生成的二进制文件对样本的分类与原始二进制文件完全相同。进一步证明,DnD可以成功反编译真实世界微控制器使用的DNN二进制文件,恢复的DNN模型可用于增强对原始DNN的对抗攻击,使其能够使用白盒攻击,而不是效率较低的黑盒攻击。
contributions
(1) 设计并实现了DND,第一个编译器和isa无关的DNN模型反编译器。DND可以反编译(剥离)DNN二进制文件,以恢复编译后DNN模型的完整细节,并使用ONNX高级建模语言表示它们。
(2) 设计了一个专用的IR来表示每个DNN算子,并开发了一种新技术,使用符号执行将DNN二进制提升为IR表达式。然后将提取的IR表达式与模板表达式进行匹配,以识别编译后的DNN使用的不同操作符,并恢复其超参数、参数和整体网络拓扑结构。
(3) 在三个ISAs (Thumb、AArch64和x86-64)、两个DNN编译器(Glow和TVM)以及三个广泛使用的DNN模型(MNIST[59]、ResNet v1[20]和MobileNets v2[40])上评估了DND。实验结果表明,DND能够从不同ISA、编译器和模型的编译二进制文件中完整、准确地恢复DNN模型。
方案
Assumptions
DnD依赖以下假设:
(1) 我们可以访问DNN二进制文件
(2) 控制流图(CFG)恢复可靠
(3) DNN编译器不使用混淆技术, 实际上现在还没有DNN模型混淆的研究
Challenges
与C/ c++二进制反编译相比,DNN二进制反编译带来了几个独特的挑战。
挑战1:不同的编译器和体系结构
DNN模型使用各种DNN编译器编译到不同的指令集体系结构(ISAs)上,如Arm Thumb、Arm AArch64和x86-64。每种组合生成的控制流和数据流完全不同,因此简单的模式匹配,无论是使用二进制代码还是通用反编译器生成的反编译代码,都不适合以通用的、编译器和代码类型无关的方式恢复DNN模型超参数。
解决: 使用一个专用的IR,它能够将每个DNN算子表示为一个算子摘要,包括代数操作的AST。由于DNN操作符即使在不同的DNN编译器和ISA中也具有相同的数学语义,而IR和操作符摘要能够捕获数学语义,因此DnD可以以编译器和ISA无关的方式识别它们。
挑战2:向量化的数学计算和复杂的循环结构
作为张量操作,DNN运算符总是被实现和编译为嵌套循环,在循环体中进行矢量化的数学计算。此外,嵌套循环复杂的控制流和巨大的循环索引范围,会导致路径爆炸问题,阻碍使用符号执行生成每个DNN运算符的运算符摘要
解决: 通过跟踪与每个DNN操作符输入和输出相关的符号约束,并将这种符号约束提升到用IR表示的操作符摘要,使用专用的符号执行来捕获向量化数学计算的语义。
挑战3:对DNN算子的可扩展支持
实际模型会有许多不同的DNN算子。因此,手动为每个DNN算子设计一个启发式算法来识别其DNN算子类型并提取其参数是不可扩展的。
解决: 对于未知的DNN操作符,我们将其生成的操作符摘要中包含的AST与操作符模板AST进行匹配,以识别其操作符类型。DND首先建立一个模板AST库,将每个DNN算子映射到对应的AST,然后利用最新的DNN编译器对每个DNN算子进行编译,并生成每个编译后的DNN算子的模板AST,并用设计的IR表示。然后,给定先前生成的未知DNN操作符的操作摘要,DND将其AST与模板AST数据库中的一个AST进行匹配,并确定未知DNN操作符的类型。
Designs
DND的工作流由三个组件组成,如图2所示。具体来说,这三个部分是(1)DNN算子位置识别,(2)算子摘要生成,(3)DNN模型提升
第一阶段,DnD从输入(删减)的DNN二进制文件中恢复控制流图(CFG),并确定推理函数和DNN操作符的位置
第二阶段,DnD生成每个DNN运算符的运算符摘要。为此,DND首先进行循环分析,确定循环的信息。然后,DnD利用循环的信息进行选择性的符号执行,提取DNN操作符的输出作为其输入和参数的符号表达式。然后,提取的符号表达式以我们的IR格式提升到运算符摘要
第三阶段是将每个算子摘要提升为DNN算子,并将其转换为高级DNN表示。具体来说,DnD首先将每个操作符摘要中的AST与模板AST进行匹配,以确定其DNN操作符的类型, 然后,DND通过识别DNN算子之间的数据依赖关系来恢复DNN拓扑结构, 最后,DND根据识别出的DNN算子类型和拓扑结构恢复各DNN算子的属性和参数,并将完全恢复的DNN模型转换为ONNX模型.
DNN Operator Location Identification
由于DNN算子本质上是张量计算,因此它们被实现和编译为多个嵌套循环,其中包含一些数值计算。此外,DNN操作符要么位于推理函数中,要么位于被调用函数中。DND利用这两个属性来识别DNN算子和推理函数的位置
Operator Summary Generation
在识别出DNN算子的位置后,DND从每个DNN算子中提取符号表达式,并将其提升为操作符摘要。
-
Loop Analysis: 循环分析的主要目标是识别DNN算子中关于基本归纳变量(induction variable, IV)的信息,即每个循环的非正式循环索引变量。如图3b中的i、j、u、v是IV。分析的输出包括IV、它们的初始值、步长(即increment常量)和循环次数(即循环应该重复执行多少次迭代)。
-
Symbolic Expression Extraction: DNN算子通常进行张量计算,取其输入和参数,生成计算后的输出传递给后续DNN算子作为输入。因此,我们可以将DNN算子的输出表示为该算子的输入和的符号表达式以及算子参数. 为了提取这样的符号表达式,DnD使用IVs作为符号变量执行定制的选择性符号执行
-
IR Design: 可以将DNN算子的提取符号表达式抽象为张量计算。与提取的符号表达式不同,该IR适用于DNN优化二进制文件的操作符类型表示和操作符参数恢复
-
Operator Summary Lifting: DnD将提取的每个DNN算子的符号表达式提升为我们设计的IR中的算子摘要。每个运算符汇总包含3部分:addr、expr和IVs,分别表示DNN运算符输出的符号地址、DNN运算符输出的抽象语法树(AST)和IVs信息(即初始化值、步长和循环次数)。
Template ASTs Generation
为了生成DNN操作符的模板AST,首先利用每个ONNX操作符[11]的使用示例,手工构造一个ONNX格式的操作符实例。然后,DND使用DNN编译器将这个ONNX运算符实例编译为二进制文件。最后,DND使用相同的运算符摘要生成过程,从编译好的二进制文件中生成运算符摘要,并将其expr作为模板AST。
DNN Model Lifting
DnD首先使用AST匹配恢复DNN操作符的类型。然后,DnD利用互操作符数据依赖关系恢复DNN拓扑。最后,DnD结合DNN算子类型和DNN拓扑结构恢复DNN算子的属性和参数,并将完全恢复的模型转换为ONNX格式
(1) AST matching
执行广度优先搜索(BFS),检查DNN操作符的AST和模板AST是否具有相同的树结构,并且两个AST在每个节点中具有相同的数学函数. 期间会用到angr的表达式简化器来判断两个表达式的等价性
(2) DNN Topology Recovery
DND通过利用推断函数中的DNN算子执行顺序和各个DNN算子之间的数据依赖关系来恢复DNN拓扑
(3) Attributes and Parameters Recovery
DND利用生成的操作符摘要和恢复的DNN拓扑恢复每个DNN算子的属性和参数,然后生成ONNX格式的高级DNN表示。
对于只有shape-related属性的DNN操作符(例如,AveragePool的过滤器长度),DnD通过检查它们的循环的嵌套结构和循环的计数(例如,过滤器长度是迭代输入的循环的循环计数)来恢复它们的属性。
而对于参数, DnD利用恢复的IV范围将参数项具体化为具体地址,然后从这些具体地址中提取参数。
实验
主要两个实验
一. 展示支持多少常用的DNN操作符和模型,从而演示DND的通用性。
二. 展示了DND在不同DNN编译器、ISAs和DNN模型中的正确性。将原始DNN模型和对应的反编译DNN模型进行比较,以验证模型架构的等价性,即被比较模型具有相同的DNN算子和拓扑结构,以及它们推理结果的等价性(即给定相同的输入,两个模型输出相同的标签)。
Generality Evaluation
通过评估DnD可以支持多少个广泛使用的DNN模型来评估DnD的通用性。当DNN使用的所有操作符都由DnD支持时,则认为DNN受支持。为此评估了DnD可以为多少个DNN算子创建模板AST。
Decompilation Correctness Evaluation
为了与之前的模型提取攻击相一致[58,61],我们使用MNIST[59]和ResNet v1[20]作为我们的两个测试DNN模型。我们还包括MobileNets v2[40],一种为移动和嵌入式系统设计的DNN模型。我们将其统计数据显示在表1中。
测试了反编译模型和原始模型之间的模型架构等价性。将生成的15个反编译DNN模型与对应的原始DNN模型的神经网络结构(即网络拓扑结构、算子数量和每个算子类型)进行比较。所有15个反编译的DNN模型都与相应的原始模型相同。图6显示了原始ResNet v1模型和从DNN二进制文件(使用Glow和Arm Thumb ISA编译)反编译的ResNet v1模型的示例。
表2使用10,000个测试输入,总结了关于反编译模型和原始模型之间推理等价性的结果。如图所示,对于所有样本,反编译后的DNN模型和原始DNN模型的推理结果完全相同。
总结
Related Works
[9] Linux Foundation. ONNX. https://onnx.ai/.
[11] Linux Foundation. ONNX operators. https://github.com/onnx/onnx/blob/master/docs/Operators.md.
[20] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep residual learning for image recognition. In
Proceedings of the IEEE conference on computer vision and pattern recognition, 2016.
[40] Mark Sandler, Andrew Howard, Menglong Zhu, Andrey Zhmoginov, and Liang-Chieh Chen. Mobilenetv2: Inverted residuals and linear bottlenecks. In Proceedings of the IEEE conference on computer vision and pattern
recognition, 2018.
[59] Corinna Cortes Yann LeCun and Chris Burges. Mnist handwritten digit database. http://yann.lecun.com/exdb/mnist/.