论文阅读-Transformer-based language models for software vulnerability detection

news2024/10/7 8:24:13

 「分享了一批文献给你,请您通过浏览器打开
https://www.ivysci.com/web/share/biblios/D2xqz52xQJ4RKceFXAFaDU/
您还可以一键导入到 ivySCI 文献管理软件阅读,并在论文中引用 」

本文主旨:本文提出了一个系统的框架来利用基于Transformer的语言模型来检测软件漏洞。该框架包括以下几个步骤:

1. 源代码翻译:将C/C++高级编程语言的源代码转换为能输入transformer的格式。这样做是为了利用自然语言与高级编程语言之间的相似性。

2. 模型准备:使用大规模的基于Transformer的语言模型进行训练和微调。其中,本文主要考虑了BERT (Bidirectional Encoder Representations from Transformers) 模型和GPT (Generative Pre-trained Transformer) 模型。

3. 推断:将经过翻译的源代码注释片段输入到训练好的语言模型中,以进行软件漏洞的检测。语言模型将根据上下文理解注释和代码的关系,并判断是否存在潜在的漏洞。

通过这个框架,可以利用Transformer-based语言模型来自动检测软件漏洞,并且相比传统的基于RNN的模型,语言模型在漏洞检测方面具有更好的性能表现。

本文的创新点

简而言之就是,将软件的源代码转换成自然语言,通过transformer来推断源代码有没有漏洞。


本文的行文结构是以回答以下问题展开的:

RQ1:利用基于转换器的语言模型进行软件漏洞检测的系统框架是什么?

RQ2:与其他当代基于rnn的模型相比,现有的基于transformer的语言模型在检测软件漏洞方面表现如何?

RQ3:哪个平台能高效运行这些模型?

我比较关心数据转换,即源代码是怎么一步步转换成可以输入到transformer的word embedding模式的

数据转换:

第一步是将源代码转换为代码gadget。


 

1. 数据清洗:由于代码gadgets来自多个来源,数据集中可能存在重复的代码gadgets。数据清洗阶段会处理两个问题:

(i) 相同标签下的重复代码gadgets,这些重复的数据可能会影响测试集的泄露;

(ii) 不同标签下的重复代码gadgets,这些数据可能会对模型的训练和测试产生负面影响。为了清理数据集,首先使用SHA256哈希算法将所有的代码gadgets映射为哈希值,以便找到重复的代码gadgets。采用哈希方法查找重复数据的速度比正则表达式或简单字符串比较方法更快。对于存在标签冲突的代码gadgets,将其全部移除;对于相同标签下的重复代码gadgets,只保留其中的一份。清洗后的数据集详见论文中的表格。

2. 数据预处理:首先,将代码gadgets中的注释移除。其次,将用户自定义的名称替换为符号等价物。例如,将用户自定义的函数名称替换为"FUNC"(或者使用连续的自然数作为后缀,如"FUNC_1"、"FUNC_2"等,以区分多个函数);将用户赋值的变量名称替换为"VAR"(或者使用连续的自然数作为后缀,如"VAR_1"、"VAR_2"等,以区分多个变量)。通过这种方式使代码gadgets标准化。最后,根据可用的漏洞创建数据子集。例如,从数据集中创建包含缓冲区错误(BE)及其非易受攻击版本,以及资源管理错误(RME)及其非易受攻击版本的两个数据集。针对二分类和多分类实验,分别按以下方式分配标签: - 对于二分类标签,分别针对每一种漏洞进行实验,如BE和RME数据集。如果代码gadgets具有漏洞,则标签为"1",否则为"0"。 - 对于多分类标签,针对多个漏洞的并集进行实验。将"0"标签分配给非易受攻击的数据,其余标签依次递增,根据数据中可用的漏洞类型进行标记。例如,在VulDeePecker数据集中,具有BE、RME和非易受攻击的代码gadgets分别标记为"1"、"2"和"0"。

3. 数据集划分:在数据预处理步骤之后,将数据集划分为多个组进行实验。例如,VulDeePecker数据集划分为三个组:

Group 1 包含BE及其非易受攻击的代码gadgets,Group 2 包含RME及其非易受攻击的代码gadgets,Group 3 包含BE、RME及其非易受攻击的代码gadgets。对于二分类实验,分别使用 Group 1 和 Group 2 的数据集;对于三分类实验,使用 Group 3 的数据集。数据集按照 80:20 的比例划分为训练集和测试集。并采用三折交叉验证的方式,在测试集上呈现综合结果。 

第二步是将文本将处理过的代码gadgets用来做词嵌入

​​​​​​​将代码中的单词映射到预先定义的词向量空间,从而捕捉单词在代码中的含义和上下文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1438012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【教学类-47-01】UIBOT+IDM下载儿童古诗+修改文件名

背景需求: 去年12月,我去了其他幼儿园参观,这是一个传统文化德育教育特色的学校,在“古典集市”展示活动中,小班中班大班孩子共同现场念诵《元日》《静夜思》包含了演唱版本和儿歌念诵版本。 我马上也要当班主任了&a…

【OpenVINO™】在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5 (下篇)

在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5 (下篇) 项目介绍 YOLOv5 是革命性的 "单阶段"对象检测模型的第五次迭代,旨在实时提供高速、高精度的结果,是世界上最受欢迎的视觉人工智能模型,代表了Ult…

单片机学习笔记---串口通信(1)

目录 通信的基本概念 通信的方式 1.按照数据传送的方式,可分为串行通信和并行通信。 1.1串行通信 1.2并行通信 2.按照通信的数据同步方式,又可以分为异步通信和同步通信。 2.1 异步通信 2.2同步通信 3.按照数据的传输方向,又可以分为…

【JAVA WEB】Web标签

目录 注释标签 标题标签 h1-h6 段落标签 换行标签 格式化标签 加粗:strong 标签和 b 标签 倾斜:em 标签和 i 标签 删除线: del 标签 和 s 标签 下划线:ins 标签 和 u 标签 图片标签:img 单标签 src属性&#…

零基础学Python之网络编程

1.什么是socket 官方定义: 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用…

外汇天眼:台中女老板扮演诈团「假币商」,诓134人投资吸金1.8亿

自从比特币问世以来,加密货币为金融领域带来极大的转变,而且随着区块链与各种技术发展,其影响力逐渐扩大,受到愈来愈多投资人重视,相关的金融商品与合约也愈来愈多元,更带起一波投资热潮。 然而&#xff0…

【开源】SpringBoot框架开发超市账单管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要 1.1 项目介绍 基于…

thinkadmin的form.html表单例子

<style>textarea {width: 100%;height: 200px;padding: 10px;border: 1px solid #ccc

基于 GPU 渲染的高性能空间包围计算

空间包围检测在计算机图形学、虚拟仿真、工业生产等有着广泛的应用。 现代煤矿开采过程中&#xff0c;安全一直是最大的挑战之一。地质空间中存在诸多如瓦斯积聚、地质构造异常、水文条件不利等隐蔽致灾因素&#xff0c;一旦被触发&#xff0c;可能引发灾难性的后果。因此在安…

LeetCode 200:岛屿数量(图的简化版之网格结构上的BFS、DFS)

图的BFS和DFS 首先让我们回顾一下图的BFS和DFS遍历。可以看到这种BFS和DFS板子适用于图形状&#xff0c;或者说结构已经确定&#xff0c;即我们遍历的时候只需要从根节点从上往下遍历即可&#xff0c;不用考虑这个节点有几个叶子节点&#xff0c;是否会遍历到空节点等边界情况…

如果品牌刚刚开始,切入私域社群团购,快团团是最好的选择

如果品牌刚刚开始&#xff0c;切入私域社群团购&#xff0c;快团团是最好的选择&#xff0c;借力新渠道社群团购&#xff0c;快团团&#xff0c;成就你的新品牌&#xff0c; 社群团购平台本身就有大量的信任你平台的流量&#xff0c;这个流量基数是巨大的。 你要知道的是&…

【DDD】学习笔记-服务行为模型

如果将服务视为一种行为&#xff0c;就必然需要考虑客户端与服务之间的协作。服务行为的调用者可以认为是服务消费者&#xff08;Service Consumer&#xff09;&#xff0c;提供服务行为的对象则是服务提供者&#xff08;Service Provider&#xff09;。为了服务消费者能够发现…

C++ STL: vector使用及源码剖析

vector使用 vector定义 语句 作用 vector<int> a(n); 指定容器大小为n vector<int> a(n, x); 指定容器大小为n&#xff0c;并初始化所有元素为x vector<vector<int>> a(m, vector<int>(n)); m行n列的二维数组&#xff0c;可以直接…

游戏开发-会飞的小鸟(已完结,附源码)

游戏开发-会飞的小鸟&#xff08;已完结&#xff0c;附源码&#xff09; 你将学到的课程链接详细介绍 你将学到的 掌握Java编程的基本技能开发出自己的“会飞的小鸟”游戏对面向对象编程有深刻的理解学会运用常见算法和数据结构解决问题能够独立调试和优化自己的代码 课程链接…

(2)(2.14) SPL Satellite Telemetry

文章目录 前言 1 本地 Wi-Fi&#xff08;费用&#xff1a;30 美元以上&#xff0c;范围&#xff1a;室内&#xff09; 2 蜂窝电话&#xff08;费用&#xff1a;100 美元以上&#xff0c;范围&#xff1a;蜂窝电话覆盖区域&#xff09; 3 手机卫星&#xff08;费用&#xff…

Android.mk 语法详解

一.Android.mk简介 Android.mk 是Android 提供的一种makefile 文件,注意用来编译生成&#xff08;exe&#xff0c;so&#xff0c;a&#xff0c;jar&#xff0c;apk&#xff09;等文件。 二.Android.mk编写 分析一个最简单的Android.mk LOCAL_PATH : $(call my-dir) //定义了…

[Python] opencv - 什么是直方图?如何绘制图像的直方图?如何对直方图进行均匀化处理?

什么是直方图&#xff1f; 直方图是一种统计图&#xff0c;用于展示数据的分布情况。它将数据按照一定的区间或者组进行划分&#xff0c;然后计算在每个区间或组内的数据频数或频率&#xff08;即数据出现的次数或占比&#xff09;&#xff0c;然后用矩形或者柱形图的形式将这…

『运维备忘录』之 TAR 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

绕过安全狗

本节我们想要绕过的安全狗版本为v4.023957 &#xff0c;它是网站安全狗的Apache版。 首先搭建环境。渗透环境选用DVWA漏洞集成环境&#xff0c;下载地址 为http://www.dvwa.co.uk/ 。DVWA是一款集成的渗透测试演练环境&#xff0c;当刚刚入门 并且找不到合适的靶机时&#xff…