G.O.S.S.I.P 阅读推荐 2023-12-20 代码本非人间语

admin 2023年12月20日22:35:09评论64 views字数 2470阅读8分14秒阅读模式

以ChatGPT为代表的大语言模型(LLM)无疑是本年度人工智能技术最火热的领域,在可以预见的一段时间内,仍将引领通用人工智能技术的发展和在各个行业的应用落地。同样的,在LLM崛起之后的这段时间内,大量的安全研究人员将其应用到安全研究的各个领域,例如用于测试用例生成、恶意代码检测、辅助利用代码开发等。但是,大语言模型脱胎于自然语言处理(NLP),而我们安全研究人员的对象大部分集中在计算机系统编程语言,鲜有安全研究人员注意到这两者之间是否存在一些天然的区别,是否可能会导致我们在应用LLM时存在方法设计的不合理和结果偏差呢?

来自上海交通大学的研究人员何豪杰、翁子昂、赵瑞杰、陈力波、薛质等,与国内外合作研究机构一起,发表论文Code is not Natural Language: Unlock the Power of Semantics-Oriented Graph Representation for Binary Code Similarity Detection,该项工作针对代码与自然语言的区别,提出了面向二进制代码的语义导向图(semantics-oriented graph),并结合GNN模型,将其应用到二进制代码相似性(Binary code similarity detection)检测上。在相对较小的训练数据集上,取得了比同类大模型方法更加优异的检测结果,文章日前已经被USENIX Security 2024录用。

G.O.S.S.I.P 阅读推荐 2023-12-20 代码本非人间语

二进制代码语义相似性分析是近年来较热门的一个主题,在安全、软工、人工智能、程序语言的顶会上均有出没,其首要目标是检测两个二进制函数的语义相似性。而由于代码语言与自然语言的某些内在相似性,二进制代码相似性领域在过去几年中引进了自然语言处理(NLP)领域的多个优秀工作,包括长短期记忆网络(LSTM)、自注意力网络(self-attentive networks)、大语言模型和自监督预训练技术(e.g. Transformer)等。现有的二进制相似性方案大多采用了以下两者之一的技术路线:其一是将整段汇编/中间语言代码当作自然语言,套用NLP技术框架实现;其二是首先将代码表征为控制流图(CFG),使用手工或者NLP的方法提取基本块特征,然后利用图神经网络在CFG上融合基本块的特征形成函数级特征。第二条路线中,基于NLP提取基本块特征的方法已成为主流,并达到了SOTA。

可以发现,目前的主流方法均将二进制代码比作自然语言,暗含着两者从根本上一致的假设。然而,我们注意到二进制代码和自然语言有许多潜在的不同点:

  1. 从目的来看,自然语言用于人们之间交换信息,而二进制代码则设计得便于机器执行。自然语言富有歧义并且不具备良定义的结构,仅仅是词法格式解析这一任务就几乎无法100%正确完成。而二进制代码的结构、语义都是良定义的,二进制代码的词法结构甚至def-use这样的语义分析都是很容易完成的。

  2. 语义角度上,二进制代码指令间的顺序并不具有严格的线性顺序关系,重排指令顺序/位置也是编译优化的一个惯用手段。然而,自然语言词/句之间的顺序则很难通过程序算法进行不改变语义的重排,它们是具有较严格线性关系的。

  3. 自然语言的词性、句式更加丰富;而二进制代码则可以认为只由动词(指令码)和代词(寄存器/内存引用)组成。并且,在代码语言中,我们选用的代词本身往往不包含语义,真实承载语义的是建立在这些代词之上的def-use关系。


自然语言 二进制代码语言
存在目的 交换信息 机器执行
结构 弱结构化 完全结构化
线性性 自然线性 更灵活,存在良定义重排方式
词性组成 丰富多样 基本由动词和代词组成,代词本身往往不包含语义

此外,我们认为以上不同点确实会对基于NLP的二进制代码学习过程造成影响。抽象来看,NLP输入的每个token都涉及两个方面的信息,其一是token本身语义,其二是它在序列中的位置。无论改变了token内容还是token在序列中的位置,都会导致NLP模型认为这是两个不同的输入。下图展示了三种trivial的二进制代码语义等价变换,图中a、b、c、d四个子图展示的代码语义等价,然而在NLP模型中这是四个不同的输入。这意味着模型需要花费额外的参数、训练样本来学习这一知识。故而我们认为,指令流这种冗余的二进制代码表示增加了模型的学习开销和难度,同时可能影响模型的泛化能力。

G.O.S.S.I.P 阅读推荐 2023-12-20 代码本非人间语

基于二进制代码和自然语言的这些不同点,以及上文的三种语义等价变换,我们认为,一个理想的二进制代码表征应当具备如下特征:

  1. 表征不应当是严格线性的,不应当给token赋予严格的位置下标。故而,图表征更为合适。

  2. 表征应当只表示指令间语义上的先后关系,而不应当粗暴地将执行顺序当作语义先后顺序。

  3. 作为代词的寄存器/内存引用本身可能是语义无关的,在其上建立的token间的联系才承载起了语义。应在可能的情况下尽量消除此类语义无关的token,展示出token间的联系。

如下图,我们分三步构建了这样一种图表征,并将其朴素地命名为语义导向图(SOG)。第一步,我们将线性表征转化为以指令为结点,以指令间的数据流(data)、控制流(control)、语义相关的执行顺序流(effect)关系为边的图(ISCG)。第二步,我们将指令内部的结构拆解出来,构建了以token为顶点的语义完备图(TSCG)。最后一步,我们将图中冗余的代词去除,仅保留语义相关的必要结构,得到了SOG。

G.O.S.S.I.P 阅读推荐 2023-12-20 代码本非人间语

最后,在实验部分,我们也进行了相应的消融实验,将我们提出的SOG与前人的几种基于CFG的表征及上文提到的其它几种表征进行对比,验证了我们前文的假设并证明了SOG的有效性。

G.O.S.S.I.P 阅读推荐 2023-12-20 代码本非人间语

备注:本文仅走马观花式地介绍了SOG提出与构建的历程。除了SOG表征,论文也尝试对图神经网络模型部分做了一点小小的改进。


论文地址:https://www.usenix.org/conference/usenixsecurity24/presentation/he


原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2023-12-20 代码本非人间语

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月20日22:35:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 阅读推荐 2023-12-20 代码本非人间语https://cn-sec.com/archives/2322255.html

发表评论

匿名网友 填写信息