基于深度学习的软件漏洞检测模型在现实数据集上的表现

news2024/11/19 20:24:34

       软件漏洞对日常软件系统的影响令人担忧。尽管已经提出了基于深度学习模型的漏洞检测方法,但这些模型的可靠性仍然是一个重大问题。先前的评估报告这些模型具有高达99%的召回率/F1分数,但研究发现,这些模型在实际应用场景下的表现并不佳,特别是在评估整个代码库而不仅仅是修复提交时,性能会显著下降

1 现有评估方法的局限性

  • 合成数据集: 例如 SARD,这些数据集是人工生成的,无法完全反映真实漏洞的复杂性和多样性。
  • 基于漏洞的实时数据集: 例如 Big-Vul 和 ReVeal,这些数据集只包含漏洞修复提交中的代码片段,无法反映真实场景中漏洞检测模型对整个代码库的扫描。
  • 标签不一致: 一些数据集中存在标签不一致的问题,例如同一个代码片段被标记为漏洞和不确定。

2 Real-Vul数据集

      Real-Vul 是一个针对深度学习漏洞检测模型的新型数据集,旨在解决现有数据集的局限性,并更准确地反映现实场景。

2.1 数据集来源

  • Real-Vul 数据集基于 Big-Vul 数据集构建,Big-Vul 数据集包含来自 348 个开源项目的真实漏洞 C/C++ 函数。
  • 从 Big-Vul 数据集中选择了漏洞数量最多的 10 个项目,这些项目涵盖了 73% 的漏洞样本,具有代表性。

2.2 数据集构建方法

2.2.1 时间序列策略

  • Real-Vul 数据集分为训练集和测试集,模拟了模型在历史数据上进行训练,并随着时间的推移识别漏洞的过程。
  • 训练集包含漏洞修复提交日期最早的 80% 的漏洞函数,测试集包含剩余 20% 的漏洞函数。
  • 这种策略确保了训练集和测试集在时间上的连续性,更符合现实场景。

2.2.2 不确定样本的创建

  • 通过克隆每个项目的远程代码库并创建两个快照(一个用于训练集,一个用于测试集),从每个快照中提取所有函数。
  • 计算每个函数的哈希值,并与训练集中漏洞函数的哈希值进行比较。
  • 如果哈希值不匹配,则将该函数标记为不确定。

2.3 数据集特点

  • 真实性和多样性: 包含来自真实软件系统的漏洞代码,具有更高的多样性和复杂性。
  • 现实场景: 模拟了漏洞检测模型在实际应用中对整个代码库进行扫描的场景,更符合现实需求。
  • 标签一致性: 通过比较哈希值来解决标签不一致的问题,确保了数据的可靠性。
  • 规模: 包含 5,528 个漏洞函数和 1,682,713 个不确定函数,规模较大,有利于模型的训练和评估。

2.4 数据集的优势

  • 更准确的评估: 可以更准确地评估深度学习漏洞检测模型的性能,发现现有模型的局限性。
  • 促进研究: 可以促进漏洞检测领域的研究,推动模型设计和评估方法的改进。
  • 应用价值: 可以用于开发漏洞检测工具,帮助开发者识别和修复软件漏洞,提高软件的安全性。

3 实验

3.1 模型选择

  • DeepWukong: 使用图神经网络 (GNN) 分析代码依赖关系,从代码中提取 XFG (子图) 进行漏洞检测。

      链接: https://github.com/jumormt/DeepWukong

  • LineVul: 基于 CodeBERT 的序列模型,将代码块作为输入,并使用 CodeBERT 模型对其进行分类。

     链接:https://github.com/awsm-research/LineVul

  • ReVeal: 使用图神经网络 (GNN) 检测漏洞,将控制流、数据流、语法树和依赖图整合到代码属性图 (CPG) 中进行综合代码分析。
  • IVDetect: 结合表示学习和基于图的解释模型,分析控制流、数据流、抽象语法树和程序依赖图,创建统一的代码结构以高效检测漏洞。

3.2 数据集

  • Real-Vul: 本研究提出的新数据集,包含 10 个开源项目的完整代码库,并使用时间策略创建漏洞和不确定样本,确保数据集的真实性和多样性。
  • 其他数据集: DeepWukong 使用 SARD 数据集,LineVul 使用 Big-Vul 数据集,ReVeal 使用 ReVeal 数据集,IVDetect 使用 IVDetect 数据集。

3.3 研究问题

  • 真实场景评估 (RQ1): 深度学习模型在真实场景下的表现与原始研究中的表现有何不同?
  • 数据集平衡 (RQ2): 深度学习模型在类似真实场景的训练数据集上进行训练后的表现如何?

3.4 评估指标

  • 准确率: 模型预测正确的样本比例。
  • 精确率: 模型预测为漏洞的样本中,实际为漏洞的比例。
  • 召回率: 模型实际检测到的漏洞样本中,被正确预测的比例。
  • F1 分数: 精确率和召回率的调和平均值,综合评估模型性能。
  • AUC: 模型区分漏洞和非漏洞样本的能力。

3.5 研究方法

  • 初步分析: 在原始数据集上评估模型性能,确保结果可靠性并建立基线。
  • 真实场景评估 (RQ1): 在 Real-Vul 测试数据集上评估模型性能,并与原始数据集上的表现进行比较。
  • 数据集平衡 (RQ2): 使用 Real-Vul 数据集进行训练和评估,并探讨数据集平衡对模型性能的影响。
  • 代码复杂性分析: 分析代码复杂性对模型性能的影响。
  • 过拟合评估: 使用 LIME 工具分析模型决策的特征,并探讨过拟合问题。
  • 数据增强: 使用死代码增强技术提高数据集多样性,并评估其对模型性能的影响。
  • 漏洞类型分析: 分析模型对不同漏洞类型的检测能力。
  • 漏洞严重性分析: 分析模型对不同严重性漏洞的检测能力。
  • 大型语言模型评估: 使用 CodeLlama 和 Mixtral 等大型语言模型进行漏洞检测,并评估其性能。

3.6 实验结果

3.6.1 现实场景下的模型性能下降

原模型测试结果

基于Real-Vul 数据集测试结果

  • 使用 Real-Vul 数据集对 DeepWukong、LineVul、ReVeal 和 IVDetect 模型进行评估,发现这些模型在现实场景下的性能显著下降。
  • 精确度和 F1 分数分别下降了高达 95% 和 91%,这意味着模型产生了大量的误报。
  • t-SNE 可视化结果显示,模型无法清晰地区分漏洞样本和不确定样本,导致误报率上升。

3.6.2过拟合是导致性能下降的主要原因

  • 通过手动分析误报样本,发现模型存在过拟合现象,即模型过度依赖于特定的代码片段进行预测。
  • 为了解决这个问题,提出了数据增强技术,通过在训练数据集中添加死代码来增加样本的多样性,从而降低过拟合的风险。

3.6.3 数据增强技术提高了模型性能

  • 使用增强后的数据集重新训练模型,并发现模型的性能得到了显著提升,AUC 分数提高了 8% 到 32%。
  • 虽然数据增强技术提高了模型的精确度,但召回率有所下降。这说明数据增强技术在提高模型泛化能力的同时,也牺牲了一部分对真实漏洞的识别能力。

3.6.4 模型对不同类型漏洞的检测能力不同

本文分析了模型对不同类型漏洞的检测能力,发现模型在检测信息泄露和代码注入等类型的漏洞时表现较好,而在检测路径遍历和可预测返回值等类型的漏洞时表现较差。

这说明模型对不同类型漏洞的检测能力存在差异,需要针对不同类型的漏洞进行针对性的改进。

3.6.5 模型对高严重性漏洞的检测能力较差

本文分析了模型对不同严重性漏洞的检测能力,发现模型在检测高严重性漏洞时表现较差。这说明模型需要进一步提高对高严重性漏洞的检测能力,以更好地保障软件安全。

3.6.6 大型语言模型在漏洞检测中的应用:

使用 CodeLlama 和 Mixtral 等大型语言模型进行漏洞检测,发现这些模型在 AUC 分数方面优于其他模型,但仍然低于 LineVul 模型。

这说明大型语言模型在漏洞检测方面具有潜力,但需要进一步提高其针对性和效率。

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

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

相关文章

【Python系列】数字的bool值

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【Qwen2部署实战】Ollama上的Qwen2-7B:一键部署大型语言模型指南

系列篇章💥 No.文章1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用4【Q…

Java | Leetcode Java题解之第218题天际线问题

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> getSkyline(int[][] buildings) {PriorityQueue<int[]> pq new PriorityQueue<int[]>((a, b) -> b[1] - a[1]);List<Integer> boundaries new ArrayList&l…

FIND_IN_SET使用案例--[sql语句根据多ids筛选出对应数据]

一 FIND_IN_SET select id,system_ids from intellect_client_info where FIND_IN_SET(5, system_ids) > 0;

做测试/爬虫 selenium 元素定位 谷歌浏览器 插件推荐,提高元素定位效率

注:插件均在谷歌应用商店 下载 1.XPath Helper 插件 作用&#xff1a;用于Html中对目标字段或者属性值进行匹配 快捷启动&#xff1a;ctrl shift x 示例图如下&#xff1a; 2. ChroPath 插件 作用&#xff1a; 提高元素定位效率 启动&#xff1a;谷歌浏览器 按 F12 -&g…

NASA和IBM推出INDUS:高级科学研究的综合大模型

在最近的一项研究中&#xff0c;来自美国宇航局和IBM的一组研究人员合作开发了一种模型&#xff0c;该模型可应用于地球科学&#xff0c;天文学&#xff0c;物理学&#xff0c;天体物理学&#xff0c;太阳物理学&#xff0c;行星科学和生物学以及其他多学科学科。当前的模型&am…

SSM贫困生申请管理系统-计算机毕业设计源码84308

摘要 随着教育信息化的不断推进&#xff0c;越来越多的高校开始借助信息技术手段提升贫困生申请管理的效率与准确性。为此&#xff0c;我们设计并实现了SSM贫困生申请管理系统&#xff0c;旨在通过信息化手段优化贫困生申请流程&#xff0c;提高管理效率&#xff0c;为贫困生提…

【IT领域新生必看】Java编程中的神奇对比:深入理解`equals`与`==`的区别

文章目录 引言什么是操作符&#xff1f;基本数据类型的比较示例&#xff1a; 引用类型的比较示例&#xff1a; 什么是equals方法&#xff1f;equals方法的默认实现示例&#xff1a; 重写equals方法示例&#xff1a; equals与的区别比较内容不同示例&#xff1a; 使用场景不同示…

LeetCode题练习与总结:排序链表--148

一、题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&am…

字节码编程javassist之helloworld

写在前面 源码 。 本文一起来看下&#xff0c;如何使用javassist来生成一个helloworld程序。 1&#xff1a;程序 package com.dahuyou.javassist.helloworld;import javassist.*; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impor…

收银系统源码-营销活动-积分商城

1. 功能描述 营运抽奖&#xff1a;智慧新零售收银系统&#xff0c;线上商城的营销插件&#xff0c;由商户运营&#xff0c;用户通过多种渠道可以获取积分&#xff0c;不仅支持在收银端抵用&#xff0c;还可以在积分商城内兑换优惠券或者真实商品&#xff0c;提升会员活跃度&am…

苹果电脑清理app垃圾高效清理,无需专业知识

在我们的日常使用中&#xff0c;苹果电脑以其优雅的设计和强大的功能赢得了广泛的喜爱。然而&#xff0c;即便是最高效的设备&#xff0c;也无法免俗地积累各种不必要的文件和垃圾&#xff0c;特别是app垃圾。所以&#xff0c;苹果电脑清理app垃圾高效清理&#xff0c;对于大多…

UE5 视频播放(自动播放和自动清除MediaTexture)

媒体播放器的打开时播放和媒体纹理的自动清除 。 在UE5开发视频播放时&#xff0c;遇到了闪帧的现象。合理选择这两个功能可解决。

AE的合成

目录 合成的概念 合成设置 预设 像素长宽比 分辨率​编辑 开始时间码和持续时间 背景颜色 合成的实战理解 在AE的操作界面中&#xff0c;当我们新建了一个项目之后&#xff0c;画面中最主要的位置显示的是新建合成 合成的概念 AE是一款专业特效合成软件&#xff0c;可…

Pandas数据可视化详解:大案例解析(第27天)

系列文章目录 Pandas数据可视化解决不显示中文和负号问题matplotlib数据可视化seaborn数据可视化pyecharts数据可视化优衣库数据分析案例 文章目录 系列文章目录前言1. Pandas数据可视化1.1 案例解析&#xff1a;代码实现 2. 解决不显示中文和负号问题3. matplotlib数据可视化…

昇思25天学习打卡营第18天|Pix2Pix实现图像转换

Pix2Pix概述 Pix2Pix是基于条件生成对抗网络实现的一种深度学习图像转换模型。Pix2Pix是将cGAN应用于有监督的图像到图像翻译&#xff0c;包括生成器和判别器。 基础原理 cGAN的生成器是将输入图片作为指导信息&#xff0c;由输入图像不断尝试生成用于迷惑判别器的“假”图像…

【三】ubuntu24虚拟机集群配置免密登陆

文章目录 环境背景1. 配置域名映射2. 配置免密登录2.1 在每台机器上生成SSH密钥对&#xff1a;2.2 将公钥分发到其他机器&#xff1a;2.2.1 报错问题2.2.2 修复方法 3. 验证免密登录在 ubuntu1 上&#xff1a;在 ubuntu2 上&#xff1a;在 ubuntu3 上&#xff1a; 测试连接 环境…

应急响应-网站入侵篡改指南Webshell内存马查杀漏洞排查时间分析

查看146天的内存马 方法&#xff1a; 1. 日志 这种地址一般在扫描 还要注意post传参注入 对其进行全局定位 发现有sql注入 我们可以也尝试去sqlmap注入 如果以这种方式注入ua头就会改变 2. 了解自己的中间件&#xff0c;框架&#xff0c;cve&#xff0c;等 因为不知道时间…

linux-5.10.110内核源码分析 - Freescale ls1012a pcie host驱动

1、dts pcie设备树 1.1、pcie设备树 pcie1: pcie3400000 {compatible "fsl,ls1012a-pcie";reg <0x00 0x03400000 0x0 0x00100000 /* controller registers */0x40 0x00000000 0x0 0x00002000>; /* configuration space */reg-names "regs", &…

Linux-DNS

DNS域名解析服务 1.DNS介绍 DNS 是域名系统 (Domain Name System) 的缩写&#xff0c;是因特网的一项核心服务&#xff0c;它作为可以将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便的访问互联网&#xff0c;而不用去记住能够被机器直接读取的IP数串。…