其他
机器学习在二进制代码相似性分析中的应用
基于神经网络图嵌入的跨平台二进制代码相似性检测
从论文标题说起:
先解释一个最重要的术语“图嵌入”,图嵌入的目的是降维,在保留图特征的前提下将图经过非线性变换成一维向量。
但是,利用CFG图嵌入做二进制代码的相似性检测,前人已经做过了(Genius),而且Genius在对CFG做嵌入之前,将CFG转换为ACFG,即提取控制流程图中平台无关的基本块属性和块间属性。
Gemini(论文实现的原型)采用Structure2vec算法计算ACFG的图嵌入,该算法从空间结构的相似性去定义相似度,通过评价函数整合节点和它n层邻居的信息,将这些信息压缩成一个有限维的非线性向量。
注:Structure2vec论文是2017年发表,Genius论文是2016年发表,也不怪Genius没考虑到用Structure2vec算法去计算ACFG图嵌入。
到这里,Gemini做二进制代码的相似性分析基础架构都有了(即基于Structure2vec算法生成2个二进制函数的ACFG图嵌入,然后通过比较2个嵌入向量的相似性),神经网络有什么用?这时,神经网络算法就该出场了,给它安排的活是训练Structure2vec算法的参数,这时候有公式可能更直观些。
如公式2所示,这是Gemini选定用来在Structure2vec模型中做非线性映射的模型,这个非线性映射的输入xv是节点的基本块属性信息,u∈N(v)是节点的邻接节点信息,经过映射可得到一个节点的特征向量,而整个ACFG特征向量是通过所有节点聚合得来。
目前,总结来说就是,基础是Structure2vec模型中加入神经网络来训练其非线性变化的模型,再用聚合函数将ACFG节点的特征向量聚合成ACFG的图嵌入,结合神经网络的图嵌入最终输出的依然是ACFG图嵌入(也可以称为ACFG的特征向量)。
在前面已经介绍过本文采用的二进制代码相似比对的方式就是比较图嵌入,那么图嵌入计算出来后,如何处理可以得到相似度的结果,答案就是Siamese网络,其模型特点是在样本量少的情况下识别类型。
如上图所示,Siamese模型本身包括了目标降维模块,正好上文的融入神经网络的图嵌入即可作为模型中的降维模块。整体模型的输入是两个待比较二进制函数的ACFG,经过嵌入网络得到降维的特征向量u1和u2,然后计算二者余弦距离,通过阈值判定结果是-1(非相似),还是1(相似)。当然,训练过程都有真实的标签,以便整个模型不断调整参数。
跨平台指的是什么呢?即,二进制代码相似性比较与二进制代码所处平台、使用的编译器和优化选项无关,训练出的ACFG图嵌入计算模型和使用的相似比对方法与以上条件无关。
又是如何做的呢?总结起来有两点工作:
对论文的思考
基于语义感知的神经网络的二进制代码相似度检测
Semantic-aware 模块:BERT算法训练基本块语义与结构信息
Block的代码语义
Block的邻接信息
Block是否属于CFG
Block所属平台、编译器、及哪个优化选项
语义提取模型最终输出类似于Genius和Gemini的ACFG图,区别是该部分使用机器学习替代了人工提取(使用IDA脚本),而且包含基本块属性额外的信息, 输出的基本块特征向量由机器学习得到。
MPNN算法计算“ACFG”的图嵌入
CNN算法训练节点顺序的特征
模型融合
对论文的思考
看雪ID:heyiuo
https://bbs.pediy.com/user-704018.htm
推荐文章++++
* 实战栈溢出漏洞
好书推荐