论文学习:漏洞检测SnapVuln

SnapVuln

SnapVuln是一种基于学习的漏洞检测方法,它应用多个针对特定漏洞的跨函数算法来识别源和汇点,以捕捉各种漏洞类型的精确程序语义。通过从源代码中提取跨函数的图形(IG),SnapVuln可以综合使用PDG、CFG和调用图(CG)。然后,针对不同漏洞类型,设计了多个专门的切片算法来捕获精确的漏洞语义,识别源和汇点,并在跨函数图形上进行操作。此方法还使用门控图神经网络(GGNN)结合注意力机制为每种漏洞类型构建子模型,并针对未被切片算法覆盖的漏洞类型使用图神经网络(GNN)模型。最终,将这些子模型和GNN模型的输出整合以预测漏洞。
然而,提供的上下文并未明确说明SnapVuln是否可以直接应用于源码级的漏洞识别。上下文中也提到了其他采用切片算法用于提取漏洞语义的工作[3],但这些切片算法不能区分源和汇点,可能会引入噪音,导致提取的漏洞语义不精确。因此,在没有其他信息的情况下,无法确定SnapVuln是否适用于源码级的漏洞识别。如有必要,建议查阅与源码级漏洞识别相关的其他文献或方法。

SnapVuln使用切片算法来提取漏洞的语义信息。以下是SnapVuln中切片的提取步骤的简述:

提取跨函数图(Inter-procedural Graph,简称IG)

:从源代码中提取IG,该图结合了程序依赖图(PDG)、控制流图(CFG)和调用图(CG)。IG可以保留精确的程序语义信息。
设计针对不同漏洞类型的专门切片算法:为了捕获不同漏洞类型的准确语义,SnapVuln为每种漏洞类型设计了专门的切片算法。这些切片算法通过在IG上进行操作,识别源和汇点,并提取相关的语义信息。
切片生成子图:根据切片算法,从IG中生成与漏洞相关的子图。子图可以捕获与漏洞相关的程序结构语义信息。
子模型构建与训练:对于每种漏洞类型,SnapVuln为其构建一个子模型。子模型利用门控图神经网络(GGNN)结合注意力机制,对子图进行建模和训练,以学习不同子图的权重和代码表示。
综合预测:将所有子模型的输出以及跨函数图(IG)输入到GNN模型中,以捕获全面的程序语义信息。最后,将子模型和GNN模型的输出进行综合,得出综合的漏洞预测结果。
通过上述步骤,SnapVuln能够提取精确和全面的漏洞语义信息,从而实现漏洞的有效识别。

切片生成子图是在SnapVuln中用于捕获与漏洞相关的程序结构语义信息的重要步骤。下面是切片生成子图的详细解释:

针对特定漏洞类型设计切片算法:对于每种特定的漏洞类型,SnapVuln设计了针对该漏洞类型的切片算法。这些算法根据该漏洞类型的特征,确定源和汇点的条件,并在程序中进行切片操作。
选择切片起点和切片条件:根据切片算法,需要选择一个合适的切片起点以及切片的条件。切片起点一般为与特定漏洞类型相关的危险操作(例如,危险的API调用或变量)。切片条件则是判断哪些语句是与漏洞相关的条件。
根据切片条件进行切片操作:从切片起点开始,根据切片条件进行切片操作,逐步向外扩展,直到不再满足切片条件为止。切片过程中保留与漏洞相关的程序语句和控制流信息,并排除与漏洞无关的代码。
提取切片子图:根据切片操作的结果,提取与漏洞相关的切片子图。切片子图以切片起点为根节点,包含了与漏洞相关的程序片段和它们的控制流关系。
子图表示与权重学习:切片子图需要进行图形表示,并为切片子图学习权重。SnapVuln使用图神经网络(GNN)或门控图神经网络(GGNN)来对子图进行表示和训练,以捕捉子图的结构语义和学习不同子图的权重。
通过以上步骤,切片生成子图能够提取与特定漏洞类型相关的精确的程序结构语义信息。这些子图将作为输入进一步进行训练和预测,以实现对漏洞的准确识别。

结合CWE具体的分析

切片生成子图是SnapVuln中的一个关键步骤,用于捕获与特定漏洞类型相关的程序结构语义信息。下面我们以CWE-415(Double Free)漏洞为例,详细解释切片生成子图的步骤:

针对CWE-415设计切片算法:为了捕获Double Free漏洞的语义信息,SnapVuln为CWE-415设计了相应的切片算法。该算法会考虑到Double Free的特征,如对同一指针进行多次释放。
选择切片起点和切片条件:在Double Free漏洞中,切片起点可以是free()函数的调用点,因为这是释放内存的关键操作。为了定义切片条件,算法可以检查内存释放之后是否存在对已释放的内存进行潜在的使用操作。
根据切片条件进行切片操作:从切片起点开始,切片算法根据切片条件对程序进行切片操作。它会追踪与free()函数相关联的任何语句,并跟踪可能对已释放的内存进行访问的语句。
提取切片子图:根据切片操作的结果,SnapVuln提取与Double Free漏洞相关的切片子图。该子图将包含与free()函数调用点和可能对已释放内存进行访问的语句相关联的代码片段和控制流。
子图表示与权重学习:为了将子图作为输入,SnapVuln使用图神经网络(GNN)或门控图神经网络(GGNN)对子图进行表示和权重学习。这样可以捕捉子图的结构特征和学习不同子图的权重,以进一步提高漏洞检测的准确性。
通过以上步骤,SnapVuln能够生成与Double Free漏洞相关的切片子图,从而捕获Double Free漏洞的精确程序结构语义信息。利用这些子图表示和之后的训练,SnapVuln可以更准确地检测和预测Double Free漏洞。类似地,对于其他漏洞类型,SnapVuln会根据其特征设计相应的切片算法,并按类似的步骤生成相关的切片子图。

SnapVuln在C/C++代码中针对以下六种常见漏洞类型实现了切片算法[1]。这些漏洞类型和对应的切片算法如下:

缓冲区溢出(Buffer Overflow):切片起点可以是与缓冲区溢出相关的语句,切片条件可以是检测写入缓冲区的语句。切片子图将包含与缓冲区溢出相关的语句和控制流。
空指针解引用(Null Pointer Dereference):切片起点可以是空指针解引用的语句,切片条件可以是对空指针的解引用操作。切片子图将包含与空指针解引用相关的语句和控制流。
使用未初始化的变量(Uninitialized Variable):切片起点可以是未初始化变量的使用语句,切片条件可以是检测变量是否已被初始化的条件语句。切片子图将包含与未初始化变量相关的语句和控制流。
释放后使用(Use After Free):切片起点可以是释放内存的语句,切片条件可以是使用已释放内存的语句。切片子图将包含与释放后使用相关的语句和控制流。
跨缓冲区写入(Out-of-Bounds Write):切片起点可以是与跨缓冲区写入相关的语句,切片条件可以是检测写入位置是否超出缓冲区边界的条件语句。切片子图将包含与跨缓冲区写入相关的语句和控制流。
整数溢出(Integer Overflow/Underflow):切片起点可以是与整数溢出相关的算术运算语句,切片条件可以是检测数字溢出的条件语句。切片子图将包含与整数溢出相关的语句和控制流。
以上是SnapVuln实现的针对C/C++中六种常见漏洞类型的切片算法的简述。具体的切片操作和算法细节可以进一步参考原始论文以获得更详细的信息。

空指针解引用是SnapVuln中针对空指针解引用漏洞实现的切片算法。下面是对空指针解引用的切片步骤的详细描述:

切片起点选取:切片算法将选择与空指针解引用相关的语句作为切片起点。空指针解引用指的是在代码中对空指针进行解引用操作的语句,如*ptr,其中ptr为空指针。
切片条件确定:切片算法需要确定哪些语句是与空指针解引用相关的条件。例如,判断指针是否为空指针的条件语句可以作为切片条件,如if (ptr == NULL)。
进行切片操作:从切片起点开始,切片算法会根据切片条件在程序中进行切片操作。它会追踪与空指针解引用相关的语句,并跟踪可能依赖于空指针解引用的语句。
提取切片子图:根据切片操作的结果,提取与空指针解引用相关的切片子图。切片子图将包含与切片起点(空指针解引用语句)以及可能依赖于空指针解引用的语句相关联的代码片段和控制流信息。
子图表示与权重学习:切片子图需要进行图形表示,并为切片子图学习权重。SnapVuln使用图神经网络(GNN)或门控图神经网络(GGNN)来对子图进行表示和训练,以捕获子图的结构语义特征和学习不同子图的权重。
通过以上步骤,SnapVuln能够生成与空指针解引用漏洞相关的切片子图,捕获该漏洞的精确程序结构语义信息。这些子图表示和训练将用于漏洞的检测和预测,以提高对空指针解引用漏洞的准确性。

详细的描述:对比NPDHunter—>空指针这块

空指针解引用的切片操作可以通过以下步骤来实现,并在每个步骤中提供相关示例以更好地说明:

切片起点选取:切片算法将选择与空指针解引用相关的语句作为切片起点。例如,在以下代码段中,*ptr表示对指针ptr进行解引用操作:

int *ptr = NULL;
int value = *ptr; // 空指针解引用

切片条件确定:切片算法需要确定哪些语句是与空指针解引用相关的条件。例如,在以下代码段中,if语句中的条件判断了指针ptr是否为空指针:

int *ptr = NULL;
if (ptr != NULL) {
int value = *ptr; // 空指针解引用
}

进行切片操作:从切片起点开始,切片算法会根据切片条件在程序中进行切片操作。它追踪与空指针解引用相关的语句,并跟踪可能依赖于空指针解引用的语句。在上述示例中,切片算法将追踪和探索与空指针解引用操作相关的语句,如下所示:

int *ptr = NULL;
if (ptr != NULL) {
int value = *ptr; // 空指针解引用
printf("%d\n", value);
}

在这个示例中,切片算法将追踪并包括了int value = *ptr;以及其依赖语句printf(“%d\n”, value);。
4. 提取切片子图:根据切片操作的结果,提取与空指针解引用相关的切片子图。切片子图将包含与切片起点(空指针解引用语句)以及可能依赖于空指针解引用的语句相关联的代码片段和控制流信息。在上述示例中,切片子图可以表示如下:

┌───────┐
│       ▼
int *ptr = NULL;
if (ptr != NULL) {
int value = *ptr;
printf("%d\n", value);
}

在这个切片子图中,包含了与空指针解引用操作相关的语句和控制流信息,包括了切片起点*ptr和其依赖语句printf(“%d\n”, value);。
通过以上步骤,切片算法可以识别与空指针解引用相关的代码,并提取出相应的切片子图,以便进一步进行漏洞的检测和预测。

可以改进的地方:

这篇文章可以在以下几个方面进行改进:

对多函数漏洞的处理:文章指出实际情况中漏洞通常跨越多个函数,因此需要引入跨函数的分析来捕获完整的漏洞语义信息[2]。对于多函数漏洞,目前的学习方法主要关注单个函数,因此有必要引入跨函数的分析以获得完整的漏洞语义信息。
对切片算法的改进:文章提到了切片算法在空指针解引用漏洞检测方面可能存在不足,并且引入切片算法可以提取准确的漏洞语义信息[1]。因此,可以通过改进切片算法来提高对不同漏洞类型的切片准确性,进而改善漏洞的检测和预测能力。
减少噪声信息:文章指出引入多函数的分析方法可能会引入大量与漏洞无关的语义信息,从而增加模型的噪声[1]。因此,可以尝试减少噪声信息的引入,特别是在处理真实世界的数据集时,通过优化数据集或改进模型来减少对漏洞无关信息的依赖。
进一步完善漏洞语义提取:文章提到,完整的漏洞语义对于获得良好的性能并不足够,还需要使用一些切片算法来提取准确的漏洞语义[1]。因此,可以进一步研究和改进漏洞语义的提取方法,以提高对不同漏洞类型的准确性和覆盖度。
总之,这篇文章可以改进的方面包括对多函数漏洞的处理、切片算法的改进、减少噪声信息以及进一步完善漏洞语义的提取。这些改进有助于提高漏洞检测的准确性和性能。

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

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

相关文章

WebDAV之π-Disk派盘 +Polaris Office

推荐一款可以实现在Windows桌面PC,Mac,Android设备和iOS设备上同步的移动办公软件,还支持通过WebDAV添加葫芦儿派盘。Polaris Office是一款功能全面的办公自动化套件,软件集成了Word、Excel、幻灯片(PPT)、ODT等文档格式,并且可以完美兼容任何Microsoft Office,PDF,TXT或…

封装、继承、多态的概念

封装:将数据(属性)和函数(操作)合成一个整体,封装在类里面。 继承:派生与独立设计若干相关的类,前者工作量更少,重复的部分可以从基类继承来,不需要单独编程…

html web前端 登录,短信验证码登录

html web前端 登录,短信验证码登录 1,手机号码格式校验 2,按钮点击60秒倒计时,按钮限制点击 3,验证码/或密码长度校验(被注释,公司发的验证码长度不一致,不一定是6位) 4…

linux两块硬盘挂载同一个目录

参考:https://zhuanlan.zhihu.com/p/456193585 第一步:查看磁盘信息 查看现有物理卷信息 pvdisplay如果没有安装逻辑卷管理系统工具 apt install lvm2 ## 我用的 Ubuntu查看磁盘分区 fdisk -l我要用以下两块 SSD 来挂载到同一目录。 执行结果&…

虹科培训 | 虹科携手PLCopen开展IEC 61131-3国际工程师培训

文章来源:虹科工业控制 阅读原文:https://mp.weixin.qq.com/s/MLYhBWiWx7qQSApx_3xhmA (一)课程背景 什么是IEC 61131-3? IEC 61131-3 是工业自动化行业唯一得到大量应用的组态编程语言国际标准;主导制定…

xcode15一直显示正在连接iOS17真机问题解决

前言 更新xcode15之后,出现了各种报错问题,可谓是一路打怪啊,解决一个报错问题又来一个。没想到到了最后还能出现一个一直显示正在连接iOS17真机的问题 一直显示正在连接iOS17真机的问题 问题截图如下: 解决方法 1. 打开De…

apple-app-site-association nginx

项目里面配置 applinks: 域名 eg: baidu.com 2. 创建 apple-app-site-association 文件,无json等后缀名 eg: appID 构成 teamId bundleId {"applinks": {"apps": [],"details": [{"appID": "2TEAM6D5.…

STM32之Bootloader、USB、IAP/DFU下载

STM32 IAP应用开发——通过内置DFU实现USB升级(方式2) STM32 IAP应用开发——通过内置DFU实现USB升级(方式1) STM32程序下载4:通过STM32CubePro-USB下载 STM32程序下载3:通过STM32CubePro-UART下载 STM…

计算机视觉与深度学习 | 基于点线融合的视觉惯性SLAM前端

===================================================== github:[https://github.com/MichaelBeechan] CSDN:[https://blog.csdn.net/u011344545] ===================================================== 引言 本文中将介绍视觉惯性SLAM的前端部分,首先是传感器数据处理…

mysql查询最近7天 每天销售额 统计销售额

sql统计每一天的支出数目,支出金额,收入数目,收入金额 finance_type0:收入 finance_type1:支出 部分建表语句: CREATE TABLE finance (finance_id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,finance_u…

Anaconda安装教程(Windows环境下)

下面的步骤是根据一个大佬的博文操作的,然后自己写了操作步骤和遇到的一些问题, 大佬博客在这: 【精选】Anaconda超详细安装教程(Windows环境下)_conda安装-CSDN博客 1、 Anaconda的下载: 一般两个选择&a…

05、Python -- 爬取ts文件格式视频思路

目录 第一步:爬取一段5秒视频找url代码结果第二步:下载整个视频的所有片段代码:结果:第三步:合成视频安装模块代码:结果简洁代码代码:结果:最终代码简洁前代码简洁后代码思路: 1、爬取视频,但是每次只能爬取一段5秒的视频。 2、一个视频有很多秒,所以需要爬取很多片…

用户需求深层挖掘的6大注意事项

在竞争日趋激烈的市场环境中,我们通过深入挖掘用户需求,更好地理解用户需求和痛点,从而有针对性的改进产品的使用体验,增强产品竞争力,尽可能地满足用户的需求和期望,提高用户满意度,避免产品开…

Pytorch:model.train()和model.eval()用法和区别,以及model.eval()和torch.no_grad()的区别

1 model.train() 和 model.eval()用法和区别 1.1 model.train() model.train()的作用是启用 Batch Normalization 和 Dropout。 如果模型中有BN层(Batch Normalization)和Dropout,需要在训练时添加model.train()。model.train()是保证BN层能够用到每一…

【JavaEE重点知识归纳】第11节:认识异常

目录 一:异常的概念和体系结构 1.概念 2.体系结构 3.异常分类 二:异常的处理 1.防御式编程 2.异常的抛出 3.异常的捕获 4.异常的处理流程 三:自定义异常 一:异常的概念和体系结构 1.概念 (1)在…

vue3使用Element ui plus中MessageBox消息框+radio框配合使用

想要达到的效果 首先安装element ui plus 省略~~ 官网地址: https://element-plus.gitee.io/zh-CN/component/message-box.htmlhttps://element-plus.gitee.io/zh-CN/component/message-box.html 需要用到的 引入 import { h } from "vue"; import {E…

为什么需要山洪灾害监测预警系统?

在山洪高发地区,安装山洪灾害监测预警系统能够通过实时监测,预警山洪信息,对于保障我们的生命财产安全具有重要意义。 监测山洪不仅需要对山体进行监测,还要监测降雨量以及水位上升情况。山洪灾害监测预警系统是由GNSS监测站和水…

天锐绿盾加密软件——企业数据透明加密、防泄露系统

天锐绿盾是一种企业级数据透明加密、防泄密系统,旨在保护企业的核心数据,防止数据泄露和恶意攻击。它采用内核级透明加密技术,可以在不影响员工正常工作的前提下,对需要保护的数据进行加密操作。 PC访问地址: https:/…

bootstrap_study

<meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" content"widthdevice-width, initial-scale1"> <!-- 新 Bootstrap 核心 CSS 文件 --> <link href"https://cdn.staticfile.org/…

选择工业交换机时,需要关注哪些方面的性能?

在工业自动化、能源、交通等领域的网络通信中&#xff0c;工业交换机是一种非常重要的网络设备。它的性能和可靠性直接影响到整个网络的稳定性和安全性。因此&#xff0c;在选择工业交换机时&#xff0c;我们需要关注以下几个方面的性能&#xff1a; 1. 抗干扰性能&#xff1a;…