LineVul: 基于Transformer的行号级漏洞预测

文中提出一种基于Transformer的行号级漏洞预测方法 LineVul,以解决最先进的 IVDetect 方法的若干局限性。该方法通过对包含 188k+ C/C++ 函数的大规模真实数据集进行实证评估,LineVul 实现了:(1)函数级预测的 F1-measure 提升160%-379%;(2)行号级预测的 Top-10 Accuracy 提升12%-25%;以及(3)E ffort@20%Recall 比基准方法低29%-53%。附加分析还表明,LineVul 在预测前 25 个最危险的 CWE 所影响的易受攻击函数也非常准确(75%-100%)。

1 问题描述

最近提出的一种基于图的粒度漏洞预测方法,IVDetect,存在以下局限性:

  1. IVDetect 的训练过程仅限于项目特定的数据集。
  2. IVDetect 方法中基于 RNN 的架构仍无法有效捕捉源代码中长期有意义的依赖关系和语义。
  3. IVDetect 的子图解释仍然是粗粒度的。

2 解决方案

文章贡献如下:

  1. LineVul 是一种基于Transformer的行号级漏洞预测方法,解决了现有漏洞预测方法的各种局限性。
  2. 验结果表明,与现有漏洞预测方法相比,LineVul 更准确、更经济、更有效。

在图 1 中,易受攻击的函数 unPremulSkImageToPremul 包含了一行易受攻击的行(即第九行),其中变量类型被错误地定义,并进一步导致了 CWE-787 漏洞类型。IVDetect 生成了 PDG 子图,指出第 5 行、第7 行、第 8 行和第 9 行为易受攻击模式。另一方面,LineVul 直接指出了实际的易受攻击行。

图1 研究动机

3 方法设计

LineVul 方法分为两个阶段:预测漏洞函数和定位漏洞代码行,图2为LineVul的大致架构。

图2 LineVul整体架构图

3.1 函数级漏洞预测

BPE子词标记化。BPE 会将所有单词分割成字符序列,并找出最常出现的符号对(例如,两个连续字符对),将其合并为一个新符号。BPE 是一种将稀有词拆分成有意义的子词,同时保留常用词(即不将常用词拆分成更小的子词)的算法。比如函数名 "unPremulSKImageToPremul" 将被拆分为一串子词 ["un", "Prem", "ul", "Sk", "Image", "To", "Prem", "ul"]。常见的单词 "Image" 被保留,其它罕见的词被拆分。在对各种函数名进行标记化时,使用 BPE 子词标记化将有助于减少词汇量大小,因为它会将罕见的函数名分割成多个子组件,而不是直接将完整的函数名添加到字典中。文中在 CodeSearchNet 语料库中应用了 BPE 方法,以生成一个适用于源代码语料库预训练语言模型的子词标记化器。

LineVul模型构建。基于BERT架构并利用CodeBERT的初始权重建立了 LineVul 模型:(1)LineVul 对子词标记的函数进行词和位置编码,以生成每个词的嵌入向量及其在函数中的位置。(2)然后,将该向量输入 BERT 架构,该架构由 12 个 Transformer 编码器模块堆叠而成,每个编码器由多头自注意层和全连接前馈神经网络组成。(3)最后,输出的向量被送入一个线性层,以便对给定函数进行二元分类。

(1)词和位置编码。步骤的目的是生成编码向量,这些编码向量捕获token的语义及其在输入序列中的位置。为此,对于每个子词标记化的标记,生成两个向量:(1)单词编码向量,表示给定代码标记与其他代码标记之间的有意义关系;(2)位置编码向量,表示给定标记在输入序列中的位置。记号编码向量根据词嵌入矩阵Wte|V|xd生成,其中|V|为词汇表大小,d为嵌入大小。位置编码向量根据位置嵌入矩阵Wpecxd生成,其中c为上下文大小,d为嵌入大小。最后,将单词编码向量和位置编码向量连接起来,得到Transformer 编码器块的输入向量。

(2)具有双向自注意力机制的12个 Transformer 编码器。在这一步中,编码后的向量被送入一个由12个仅含编码器的 Transformer 模块组成的堆栈中(即BERT架构)。每个编码器块由两个组件组成,即双向多头自注意力层和全连接前馈神经网络。

(3)单个线性层。在堆叠 Transformer 编码器模块中建立了多个具有非线性激活函数(即 ReLU)的线性变换,因此最终编码器输出的表示是有意义的。只需要一个线性层来将代码表示映射成二进制标签,即 y = WTX + b。

3.2 行级漏洞定位

给定一个被 LineVul 预测为易受攻击的函数,利用 Transformer 架构内的自注意力机制来定位易受攻击的代码行,从而执行号级的漏洞定位。对预测贡献最大的令牌(token)很可能就是易受攻击的令牌,对于函数中的每个子词令牌,总结 12 个 Transformer 编码器块中其对应的自注意力得分。在获得关注的子词令牌分数后,将这些分数整合为行分数。通过换行控制字符(即 \n)将整个函数拆分成许多令牌列表(每个令牌列表代表一行代码)。最后,对于每个令牌得分列表,将其汇总为一个关注行得分,并按降序排列这些行得分,得分最高的行为易受攻击的代码行。

4 实验设计

文中实验旨在回答以下3个研究问题:

  1. LineVul 的函数级漏洞预测的准确性如何?
  2. LineVul 的行号级漏洞定位的准确率怎样?
  3. 对于行级漏洞定位,LineVul的成本效益是什么?

实验结果分别如下图所示。

(RQ1)图3 LineVul和7个基线关于函数级漏洞预测实验对比的结果

(RQ2)图4 文中自注意力方法和其他五种方法的前10准确率和IFA值得对比

Top-10 Accuracy:在前十名排名中出现至少一个实际易受攻击代码行的易受攻击功能的百分比。

Initial False Alarm(IFA):安全分析人员需要检查的错误预测行(即,错误地预测为易受攻击或错误警报的非易受攻击行)的数量,直到找到给定函数的第一个实际易受攻击行。IFA被计算为安全分析师在发现第一个实际易受攻击的线路之前必须检查的假警报的总数。IFA值越低,说明安全分析人员在检查虚警上花费的精力越少。

(RQ3)图5 自注意力方法和其它五种方法的Effort@20%Recall,Recall@1%LOC值对比结果

表1 LineVul的每个组件对函数级漏洞预测的贡献

表2 LineVul对前25个最危险的CWEs检测的准确性

5 总结

文中提出了一种基于Transformer的漏洞预测方法LineVul,用于预测哪些函数以及哪些代码行存在漏洞。通过对一个包含 188k+ C/C++ 函数的大规模真实数据集进行实证评估,LineVul 在函数级预测上F1-measure 提升了160%-379%;在行号级预测上 Top-10 Accuracy 提升12%-25%;且Effort@20%Recall比最先进的方法低29%-53%。该研究结果表明,LineVul 比现有的漏洞预测方法更准确、更精细。

6 原文链接

论文题目:LineVul: A Transformer-based Line-Level Vulnerability Prediction

论文出处:2022 IEEE/ACM 19th International Conference on Mining Software Repositories (MSR)

原文链接:LineVul: A Transformer-based Line-Level Vulnerability Prediction | IEEE Conference Publication | IEEE Xplore

项目地址:GitHub - awsm-research/LineVul: A Transformer-based Line-Level Vulnerability Prediction

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sublime text的json快捷键

系统 macos 配置 sublime Text->Settings->Key Bindings 效果 可以看到,按:shiftcommandp,会出现快捷键窗口,打pretty,会出现Format JSON,最右侧显示⌘J,说明只需要macos的⌘和J同时按…

ASP.NET医院手麻信息系统源码 .NET6.0+VUE

目录 麻醉记录单 复苏记录单 麻醉文书 手术麻醉信息 1、 体征监控记录 2、 麻醉用药信息 3、 手术事件登记 4、 手术状态变更 5、 麻醉医师交接 6、 其他辅助操作 手麻信息系统是以服务围术期临床业务工作的开展为核心,通过与床边监护设备以及医院H…

物流单打印模板怎么设置,物流发货单打印软件操作教程

物流单打印模板怎么设置,物流发货单打印软件操作教程 一、前言 以下软件操作教程以,佳易王物流货运单管理系统软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 佳易王物流单管理系统软件直接在空白单上打印可以在卷纸…

AI论文速读 | 2024[VLDB]TFB:全面与公正的时间序列预测方法基准测试研究

论文标题:TFB: Towards Comprehensive and Fair Benchmarking of Time Series Forecasting Methods 作者:Xiangfei Qiu ; Jilin Hu(胡吉林) ; Lekui Zhou ; Xingjian Wu ; Junyang Du ; Buang Zhang ; Chenjuan Guo(郭…

mybatisPlus数据字段填充

这里用到的时实体类User import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.…

如何在ubuntu上使用clash

下载CLASH软件 修改配置文件 解压之后,将.env文件中的URL改为自己订阅的URL,然后再执行start.sh脚本 最后按照提示,将clash.sh添加到环境变量 如何修改端口 在start.sh中更改 祝大家在ubuntu上玩得开心

多高的学历才能轻松找到工作?这个热点有点扯吧~

先来唠唠 昨天刷脉脉的时候,热榜第一的内容吸引了我:多高的学历才能轻松找到工作? 现在这行情,不管多高得学历都很难说能轻松找到工作吧~ 评论区也有不少小伙伴发表自己的见解,比如: 学历固然是非常重要…

C++ 小项目 - 通讯录管理系统

C 小项目系列教程: 通讯录管理系统 ➡️➡️➡️本教程参考自 黑马程序员 C 视频课程 其中的 Markdown 文档,仅用于自己学习,源码发布在 Contact-Management。 文章目录 1. 系统需求2. 创建项目3. 菜单4. 主要功能4.1 添加联系人4.2 显示联系…

关于主干布线,你应该知道什么

所有大型建筑都需要复杂的通信网络才能有效运行。这需要多个不同的通信室和电缆将这些房间连接在一起。在这里,骨干布线是任何建筑物通信系统的重要组成部分,可以发挥作用。 那么,什么是骨干布线?它是做什么用的?它究…

Monaco Editor系列(四)版本对比、自定义右键菜单、光标滚动

前言:亲爱的小伙伴们,又见面了!上一篇文章我们一起学习了 Monaco Editor 的几个功能,设置内容、多文件编辑、自定义主题;下面让我们继续Monaco Editor的旅程吧! 前情提要: 上一篇文章我介绍了M…

Facebook隐私保护:用户数据安全的关键挑战

在数字化时代,数据已成为最宝贵的资源之一。社交媒体平台如Facebook为用户提供了便捷的交流和信息分享工具,但同时也面临着如何保护用户数据安全和隐私的挑战。本文将深入探讨Facebook在数据安全方面面临的关键挑战,以及其如何应对这些挑战&a…

部署Zabbix5.0

一.部署zabbix客户端 端口号10050 zabbix 5.0 版本采用 golang 语言开发的新版本客户端 agent2 。 zabbix 服务端 zabbix_server 默认使用 10051 端口,客户端 zabbix_agent2 默认使用 10050 端口。 1.1.关闭防火墙和selinux安全模块 systemctl disable --now fir…

python中的列表、元组、字典、集合(集合篇)

数据类型定义符号访问元素是否可变是否重复是否有序列表 [ ]索引可变可重复有序元组()索引不可变可重复有序字典{key:value}键可变可重复无序集合{ }可变不可重复无序 基本概念 python语言中的集合是无序的、可变的容器类对象,所…

【Web】HTML基础

专栏文章索引:Web 有问题可私聊:QQ:3375119339 目录 一、HTML介绍 1.HTML 定义 2.标签语法 3.HTML 基本骨架 4.标签的关系 5.HTML 注释 二、标签 1.排版标签 1.1 标题标签 1.2 段落标签 1.3 换行标签 1.4 水平线标签 1.5 文本格…

Python学习(四)

文件操作 想想我们平常对文件的基本操作,大概可以分为三个步骤(简称文件操作三步走): ① 打开文件 ② 读写文件 ③ 关闭文件 注意:可以只打开和关闭文件,不进行任何读写 在Python,使用open函数,可以打开一个已经存在的文件&…

4.16作业

1.总结keil5下载代码和编译代码需要注意的事项 一、在编译代码时需要先点击魔术棒点击 修改flash Downlond 和pack 二、可以通过F12转跳到对应的函数中,查看函数的原型 三、注释出现乱码通过 Edit中的中的来修改 四、要先bulid在load 2.总结STM32Cubemx的使用方…

【UE 材质】表面湿润效果

效果 步骤 1. 创建一个材质函数,这里命名为“MF_Weather_Wetness”,打开材质函数添加如下节点 其中输入的默认值分别为: 其中,“Desaturation”节点用于控制饱和度,我们通过给“Fraction”引脚输入一个负值来增加饱和…

【AR开发示例】实现AR管线巡检

写在前面的话 这是一篇旧文档,代码仓库见 https://gitee.com/tanyunxiu/AR-pipe 本文档是基于超图移动端SDK的AR模块开发的示例,仅供参考,SDK在持续迭代中,相关描述可能有变化。 示例介绍 这是一个使用AR查看墙内管线的基础示…

授权协议OAuth 2.0之除了授权码许可还有什么授权流程?

写在前面 源码 。 本文看下OAuth2.0的另外3中授权流程,资源拥有者凭据许可,客户端许可,隐式许可。分别看下具体的使用流程以及该使用场景。 1:资源拥有者凭据许可 资源拥有者凭据许可,这里资源拥有者的凭据是什么呢&…

【C++核心】面向对象的三大特性

面向对象的三大特性 一、封装性1. 封装性的意义1.1 表现事物1.2 权限控制1.3 成员属性设置为私有 2. 封装性的衍生知识2.1 struct和class区别2.2 友元2.2.1 全局函数做友元2.2.2 类做友元2.2.3 成员函数做友元 二、继承性1. 继承的语法2. 继承方式3. 继承中的对象模型3.1 说明3…