文章目录

  • Cross-Language Binary-Source Code Matching with Intermediate Representations
    • abstract
    • introduction
    • Motivation
      • Cross-language code clone detection
      • Cross-Language Binary-Source Code matching
    • Priliminaries
      • Intermediate Representation
      • Code embedding
      • problem formulation
    • Cross-Language binary-source code matching
      • Overview
      • Transforming Source and Binary Code into IRs
      • Transformer-based LLVM-IR embedding
      • Model Learning
      • Code Matching
    • Experimental Setup
      • Research Questions
      • Evaluated Tasks and Dataset
        • 跨语言的源-源代码匹配
        • 跨语言二进制-源代码匹配
        • 单语言匹配
        • 预训练数据集
      • Baseline
      • Evaluation Metrics
    • Experimental Result And Analysis

Cross-Language Binary-Source Code Matching with Intermediate Representations

SANER 2022 B类会议

华科

abstract

Binary-source code matching plays an important role in many security and software engineering related tasks such as malware detection, reverse engineering and vulnerability assessment.

漏洞评估

Currently, several approaches have been proposed for binary-source code matching by jointly learning the embeddings of binary code and source code in a common vector space.

几种二进制源码匹配方法提出基于二进制代码和源码在公共向量空间联合学习的方法

Despite much effort, exiting approaches target on matching the binary code and source code written in a single programming language.

However, in practice, software applications are often written in different programming languages to cater for different requirements and computing platforms.

迎合不同的需求和计算平台

Matching binary and source code across programming languages introduces additional challenges when maintaining multi-languages and multi-platform applications.

To this end, this paper formulates the problem of cross-language binary-source code matching, and develops a new dataset for this new problem.

制定了跨语言二进制源码匹配,并且开发了一个新数据集

We present a novel approach XLIR, which is a Transformer-based neural network by learning the intermediate representations for both binary and source code.

To validate the effectiveness of XLIR, comprehenseve experiments are conducted on two tasks of cross-language binary-source code matching, and cross-language source-source code matching, on top of our curated dataset.

Experimental results and analysis show that our proposed XLIR with intermediate representations significantly outperforms other state-of-th-art models in both of the two tasks.

intermediate 中间

outperforms 表现优于

introduction

最近有研究者开始调查二进制到源码匹配问题,例如二进制代码出处和在开源软件上的二进制到源码的重用检测。这些方法都提取了二进制代码和源码的语义特征,并且提出两个编码网络将它们表示为两个隐藏向量。

检测使用不同编程语言写的代码克隆程序在文献中仅取得微弱的进步。但实际上,软件应用经常使用不同的编程语言编写以迎合不同的平台。

当前的方法旨在以端到端的方法对齐二进制代码和源代码的语义嵌入。

核心见解。 在编译器中中间表示支持多种前端编程语言例如c和java,和多种后端架构例如arm和mips。也就是说中间表示通常独立于编程语言和计算架构。也即是中间表示通过共享相似的词汇和语法结构可以显著性的减少二进制代码和源代码之间的gap,

如下图所示,一个简单的循环 源码和二进制代码生成对应的LLVM-IR,具有相似的语义:

  • 源码->LLVM-IRs 使用LLVM Clang工具,https://clang.llvm.org/
  • 二进制代码->LLVM-IRs,使用RetDec工具,https://retdec.com/

作者首先将源码和二进制转为中间表示,而后使用基于Transformer的神经网络,该网络经过在LLVM-IR语料库上与训练,而后映射到一个公共空间,并用三元组损失函数共同学习。

Motivation

Cross-language code clone detection

在跨语言的代码检测中,核心见解是虽然源代码片段使用的不同编程语言,但他们可能会共享相同的语义。

Cross-Language Binary-Source Code matching

  • 场景1:漏洞模式检出:给定源代码中存在漏洞,那么去寻找使用其他语言写的二进制文件是否有类似后门是必要的
  • 场景2:版权保护分析:给定二进制库文件,匹配它是否存在OSS的库文件中,然后可以检查是否匹配license

Priliminaries

Intermediate Representation

中间表示是具有简单语法规则的定义清晰和良好格式的程序表示,通常是编译器从源代码到目标代码之间的转换。

现代编译器首先解析源代码,然后翻译成IR,然后从中间表示生成目标代码。

这种附加层具有双向独立属性,即IR是独立于源代码和目标机器代码的,但保留了程序的语义。

因此,IR组成了跨语言匹配方法的基础。

Code embedding

代码嵌入也称为代码表示学习,旨在保留程序的语义分配到向量中。

当前代码嵌入分为4类:

  • Token序列
  • AST
  • IR
  • Code graph

基于token序列的代码表示方法是很自然的,它反映了代码的词汇信息。

为了表示代码的结构信息,一些工资提出使用结构化神经网络(TreeLSTM和GGNN)来表示AST和Code graph(CFG和DFG)。

最近的一些工作提出使用IR来表示代码的低级信息。

problem formulation

S指源代码,B指二进制文件,V指IR的embedding表示,J指衡量相似程度的距离函数如余弦函数。

Cross-Language binary-source code matching

Overview

上图描述了XLIR的整个架构表示,模型训练阶段由下面3个步骤组成:

  1. 将源代码和二进制转换为IR表示,当前支持c,c++和java语言

    • LLVM Clang 将c和c++转为IR,https://clang.llvm.org/
    • Jlang和Polyglot 将Java转为IR https://polyglot-compiler.github.io/JLang/ https://www.cs.cornell.edu/projects/polyglot/
    • RetDec反汇编将非混淆的二进制文件转为IR
  2. 将IR表示为embedding嵌入,使用IR-BERT
    • 预训练了一个掩码语言模型在大型的IR语料库中
    • follow的CodeBert和OSCAR的工作
  3. 模型学习,为了相关成对的源码和二进制代码的关系,作者映射它们到一个公共的特征空间,并且联合学习它们的相关性。

代码匹配阶段,使用余弦距离测量二进制代码和源码的语义相似性,匹配的分数如果超过预定义的阈值则指示二进制代码和源代码是匹配的。

Transforming Source and Binary Code into IRs

为了不失一般性,作者选择c,c++和java作为跨语言场景的编程语言,因为解析器在这些成熟的程序语言中已经有了很大的发展。

作者选择LLVM-IR作为中间表示,因为:

  1. LLVM-IR是与源代码语言独立的,这会在不同编程语言的前提下 共同于一会保持相似的IR结构。
  2. LLVM-IR是与目标无关的,从LLVM-IR转换为任何目标相关的汇编代码在实践中很容易
  3. LLVM-IR被社区广泛认可,可以简化代码转换,例如反汇编,优化和语义提取。

为了避免编译时函数名、变量名等字符串信息泄露到二进制文件中,作者在编译时将-s参数传递给编译器,以剥离所有调试信息。

LLVM-IR有两种不同的表现形式,它们持有完全相同的语义信息。

  • Bitcode格式 是专门为机器处理而设计的,例如代码转换和自动优化
  • 机器IR格式,具备人类可读性,广泛用于程序调试和分析。

作者选择使用bitcode格式作为IR的通用表示进行代码嵌入。

Transformer-based LLVM-IR embedding

作者采用了transformer为IR嵌入表示,transformer是一种基于自注意力机制的并且在源代码嵌入表示非常流行的模型。

预训练阶段是follow的How could neural networks understand programs?这篇工作,发表在ICML2021上。

首先在大规模的外部IR语料库中预训练了一个掩码语言模型,称为IR-BERT。然后将参数转到作者的模型中。

给定一个LLVM-IR语料库,使用Byte Pair Encoding(BPE)令牌化为一系列的token。

Neural machine translation of rare words with subword units

在预训练之前,将两个段的拼接作为输入,两个段由特殊的分隔符SEP拼接,每个序列的第一个和最后一个标记由CLS和EOS填充。

然后将连接的句子作为输入输入到transformer编码器中,在编码语言建模中,输入句子的令牌会被随机采样并替换为MASK,作者选择15%的输入进行替换,并在选定的输入中80%被MASK替换,10%不变,剩下10%随即替换为词汇表中选择的token。

Bert: Pre-training
of deep bidirectional transformers for language understanding

Model Learning

设定三元组指代训练实例:

<b, s^+, s^->

b代表二进制代码,s+代表对应的源代码,s-代表在源代码文件中随机选择的代码片段;

当训练该三元组时,XLIR预测余弦相似度对于每个<b, s+>和<b,s->实例对,并且最小化排名loss。

rank loss出处:Deep code search

其中D代表训练数据集,sim代表源代码和二进制代码的相似度分数,ə是一个小的常量值,作者默认使用0.06。

Code Matching

在推理阶段,给定一个二进制文件b和一堆源代码文件S,对于每个源代码s属于S,作者首先将二进制文件和源代码通过训练模型得到对应的嵌入表示,然后计算b和s的余弦距离。

如果余弦距离大于阈值,那么则认定二进制和源代码匹配上了,否则不匹配。一般采用80%作为阈值。

Experimental Setup

Research Questions

构建实验以回答以下问题:

  1. XLIR是否在跨语言代码匹配中更有效
  2. XLIR在但语言中代码匹配效果如何
  3. 该方法能否扩展以有效检测代码函数克隆
  4. XLIR的主要影响因素是什么

Evaluated Tasks and Dataset

跨语言的源-源代码匹配

该任务主要为了检测不同编程语言的源代码克隆。该任务之前在下文中已研究。该文使用CLCDSA数据集,四种不同的编程语言,C++,C#,Java,Python等,在两个在线oj竞赛平台收集代码。每个编程问题都关联有多个不同语言实现的解决方案。

Clcdsa: cross language code clone detection using syntactical features and api
documentation

  • Atcoder
  • Google Code Jam

作者选择使用c,c++和java作为学习语言,所有源代码都应该被编译,并且过滤掉无法被编译成功的文件,按照6:2:2划分训练集验证集和测试集。上表显示了统计信息。

跨语言二进制-源代码匹配

当前没有此类数据集,作者基于CLCDSA策划了一个新数据集,该数据集将一种编程语言的源代码编译成二进制代码,同时保持另一种编程语言的源代码不变。具体来说,作者将将一个源文件编译为32个不同的目标文件:

  • 使用了两个编译器:GCC和LLVM Clang
  • 四个优化选项:-O0,-O1,-O2和-O3
  • 跨平台:x86-32, x86-64,arm-32,arm-64
单语言匹配

使用POJ-104数据集,由50000个C和C++编写的程序组成。

预训练数据集

作者在一个大规模的IR语料库中训练IR-BERT,采用How could neural
networks understand programs?文章的数据集,由11个现实世界六i选哪个的软件组成:Linux-vmlinux、Linux-modules、GCC、MPlayer、OpenBLAS、PostgreSQL、Apache、Blender、ImageMagcick、Tensorflow、Firefox。使用-O0优化级别的LLVM Clang将这些软件编译为IR,从855792个函数中获得了48023781条IR指令。

Baseline

跨语言二进制-源代码匹配的baseline:

  • BinPro,提取函数调用图在二进制和源代码中,使用匈牙利算法匹配
  • B2SFinder,在3个测度(字符串,数字,控制流)提取7个特征,引入了一个加权匹配算法来匹配
  • XLIR(LSTM),使用LSTM编码IR

跨语言源代码-源代码匹配:

  • LICCA, 基于代码的句法和语义特征检测源代码克隆
  • XLIR,使用LSTM编码IR

Evaluation Metrics

recall、precision、F1

Experimental Result And Analysis

基于NLP的软件安全研究(二)相关推荐

  1. 基于NLP的软件安全研究(三)

    文章目录 jTrans: Jump-Aware Transformer for Binary Code Similarity Detection background Problem definiti ...

  2. 基于NLP的软件安全研究(一)

    文章目录 CENTRIS: A Precise and Scalable Approach for Identifying Modified Open-Source Software Reuse ab ...

  3. 数字货币综合虚拟货币交易平台源码(基于thinkphp框架)中英文切换适合学习研究 二开

    源码简介: 数字货币合约交易源码,综合虚拟货币交易平台源码(基于thinkphp框架)中英文切换 支pc+h5 持委托交易,买卖交易市场等等功能 这个框架适合二开 好多比较好一点的交易所都是基于这个二 ...

  4. 直播 | 彩云科技CEO袁行远:NLP与冒险游戏研究一览

    「PW Live」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交 ...

  5. 微软开源基于云的生理学研究工具

    Bio Model Analyzer是一款微软基于云的生理学研究工具,可以用于对化细胞交互和通信进行建模,现已经在GitHub上开源,在MIT许可之下. 研究人员使用Bio Model Analyze ...

  6. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)

    摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...

  7. 基于NLP处理企业家传记文档

    基于NLP处理中国企业家文档 1. 实验环境 本次技术采用Python编程,Python可以从官网https://www.python.org/下载,选出适合用户操作系统的二进制发行版后,按提示一步一 ...

  8. 在Unity中实现基于粒子的水模拟(二:开始着色)

    在Unity中实现基于粒子的水模拟(二:开始着色) 文章目录 在Unity中实现基于粒子的水模拟(二:开始着色) 前言 一.生成顶点 二.偏移模拟 1.接收细分着色器输出的顶点 2.根据数据调用对应的 ...

  9. 基于支持向量机的谐波分析研究与实现

    基于支持向量机的谐波分析研究与实现-附Matlab源码 文章目录 基于支持向量机的谐波分析研究与实现-附Matlab源码 前言 一.支持向量机分析电力谐波的原理 二.基于 SVM 的电力谐波分析与仿真 ...

最新文章

  1. 漫画:什么是 HTTPS 协议?
  2. 什么是REST?以及RESTful的实现之二
  3. UA MATH523A 实分析3 积分理论16 截口与单调类、特征函数的Fubini定理
  4. MATLAB实战系列(三十六)-MATLAB 离散Hopfield神经网络的分类——高校科研能力评价
  5. (chap6 Http首部) 响应首部字段 LocationProxy-AuthenticateRetry-After
  6. 【Python】1054 求平均值(Python异常处理练习)
  7. Asp.net几大内置对象
  8. Python入门-day1变量和简单数据类型
  9. PostgreSQL 自定义复合类型(composite type) deform引入的额外开销
  10. 再谈全局网HBase八大应用场景
  11. 基于8086CPU微处理器的汇编学习之JMP指令
  12. PHP表格整个往右,css - 使用table表格无端的整体向右偏移一段距离
  13. 【图像处理】openCV库教程
  14. 问题二十八:ray tracing中的散焦模糊(defocus blur)
  15. ITIL 4 Foundation知识体系-第一章-介绍
  16. 计算机桌面不显示时间,怎么把时间显示在桌面
  17. linux3.0字符设备驱动,linux字符设备驱动的 ioctl 幻数
  18. WinDbg 常用指令
  19. wish平台怎么样?wish跨境电商好做吗?
  20. 何为P2P技术?发展前景如何?

热门文章

  1. 实践应用|PyQt5制作雪球网股票数据爬虫工具
  2. JTAG与SWD接口定义映射
  3. 计算机中z代表啥子意思,ctrl z英文是什么意思
  4. 从应用迁移到平台微认证:鲲鹏技术解读
  5. 自己动手iPad贴膜小记
  6. JT/T808消息体转义
  7. python 通过ftp自动 上传指定excel文件
  8. python随机森林筛选变量_用随机森林分类器和GBDT进行特征筛选
  9. 一个普通的小活动让超市回头客源源不断?方案简单到爆
  10. POI实现一个通用的Excel读取模板