首页 > 系统相关 >论文阅读: CCF A(ICSE) 2022 MVD: 基于流敏感图神经网络的内存相关漏洞检测

论文阅读: CCF A(ICSE) 2022 MVD: 基于流敏感图神经网络的内存相关漏洞检测

时间:2023-02-04 19:44:59浏览次数:49  
标签:语句 检测 ICSE 漏洞 MVD 内存 2022 节点

Abstract:

  内存相关漏洞对现代软件的安全构成了严重威胁。 尽管基于深度学习的方法在一般性漏洞检测方面取得了成功,但在应用于内存相关漏洞检测时,仍然受到流信息利用不足的限制,导致高误报率。 本文提出了一种基于流敏感图神经网络(FS-GNN)的语句级内存相关漏洞检测方法MVD。 利用FS-GNN联合嵌入非结构化信息(即源代码)和结构化信息(即控制流和数据流)来捕获隐式内存相关漏洞模式。 我们在包含4353个真实世界内存相关漏洞的数据集上评估MVD,并将我们的方法与三种最先进的基于深度学习的方法以及五种流行的基于静态分析的内存检测器进行比较。 实验结果表明,MVD具有较好的检测精度,优于基于状态DL和基于静态分析的检测方法。 此外,MVD在准确性和效率之间做出了很大的权衡。

Motibation:

  内存相关漏洞会导致性能下降和程序崩溃,严重威胁到现代软件的安全性。

  静态分析方法使用一些预定义的漏洞规则或模式来搜索不正确的内存操作,然而,定义良好的漏洞规则或模式高度依赖于专家知识,因此很难涵盖所有情况。并且大规模软件的复杂编程逻辑使得手工提取规则的难度大大提升。所以静态分析方法很难应用。

  基于深度学习(DL)的方法可以自动地从先前的易受攻击代码中提取隐含的漏洞模式,而不需要专家的参与,但现有的的DL-based方法也存在着流信息利用不足和粒度粗的局限。

Challenge:

  • 流信息利用不足
  1. 缺乏过程间分析:现有方法以函数级漏洞代码为输入,忽略了函数间的调用关系,对特征提取进行过程中分析。然而实际的程序中,调用用户定义的函数来实现内存分配或释放的操作是普遍存在的。 缺少过程间分析可能导致语义建模不完整,导致查全率和查准率较低;
  2. 模型训练中部分流信息丢失:BILSTM、GGNN和GCN等模型处理多重关系的能力的限制,在模型训练过程中会丢失部分流信息。
  • 粒度粗:

   现有方法检测粒度多在代码级或程序切片级,开发人员仍然需要花费大量时间手工缩小可疑语句(或操作)的范围。由于各种漏洞之间的巨大差异,现有的基于DL的通用漏洞检测方法必须牺牲特定漏洞特有的语义特征,以保证训练的模型能够覆盖大多数漏洞的通用特征。( 与其他漏洞相比,内存相关漏洞通常只需一行或几行代码即可修复,这使得细粒度检测成为可能。)

Contribution:

  • 提出了一种新的流敏感图神经网络(FS-GNN,联合嵌入语句和流信息,从漏洞代码中捕获程序语义)来支持内存相关漏洞的有效检测;

(为了获取更全面和精确的程序语义,MVD将程序依赖图(PDG)和调用图(CG)相结合,以获取过程间的控制和数据流信息。通过使用CG扩展PDG并添加额外的语义信息(包括函数之间的调用关系和返回值)来进行过程间分析。代码段和关系(即边)被嵌入到紧凑的低维表示中,以保留非结构化(即源代码)和结构化(即控制流和数据流)信息。)

  • 将漏洞检测形式化为细粒度的节点分类问题,以识别可疑的漏洞语句;

(将易受攻击语句的检测形式化为一个节点分类问题)

  • 验证。

Methodology:

                MVD分为两个阶段,训练阶段和检测阶段。

  训练阶段分为三步:

1. 基于数据流和控制流建立程序依赖图(PDG);

  为了获取全面而精确的程序语义,MVD扩展了PDG,增加了诸如调用关系和从调用图(CG)中获得的返回值之类的语义信息,以进行过程间分析;为了减少无关语义噪声,MVD从感兴趣的程序点进行节目切片。

2. 用DOC2VEC将每个切片的语句转换为低维向量表示;

3. 使用流敏感图神经网络(FS-GNN)联合嵌入节点和关系,学习隐含的漏洞模式,重新平衡节点标记分布。

  最后,构造了一个训练良好的模型,用于语句级的内存相关漏洞检测。 

  检测阶段:

  通过过程间分析,首先提取目标程序的控制和数据依赖性进行程序切片,以捕获与存储器使用有关的精确程序语义。 然后,对于每个切片,以它的非结构化(即doc2vec的语句嵌入)和结构化(控制流数据流)信息为输入使用DL模型进行漏洞检测。

 

特征提取:

  使用静态分析工具Joern[1]解析源代码,构造程序依赖图(PDG)。然后,通过调用关系和调用图(CG)返回值等语义信息对PDG进行扩展,进行过程间分析,保留了完整的控制数据流信息。

  为了提高识别关键特征的性能,MVD不以整个程序为输入,而是以c前后范围做切片为输入。

  关注的程序点:

1. system API call (滥用System Apicalls是造成漏洞的主要原因之一,包括与内存相关的漏洞。) 2. pointer variable(指针变量)

  图三为一个示例,节点5为关注的程序点,因为节点6不依赖于节点5的数据,所以它被移除。

 节点嵌入:

  略。

 图学习:

Graph Embedding:利用知识图嵌入方法[2]中使用的实体-关系复合操作

标签:语句,检测,ICSE,漏洞,MVD,内存,2022,节点
From: https://www.cnblogs.com/Liuyaaa/p/17091194.html

相关文章

  • 从2022三季度报看智能安防芯片未来潜力几何?
    目前,安防行业已历经模拟监控、数字监控、网络高清和智能监控四个发展阶段。每一次迭代更新,作为安防行业核心部件之一的芯片都起到积极的作用。它在整个行业演变过程和未来发......
  • 2022年正式赛题网络系统管理Linix模块 系统优化+Cokpit部分
    系统优化系统资源限制设置:设置所有用户的硬件跟软件的最大进程数、最大文件打开数为65535;开启IPV4恶意icmp错误消息保护;开启SYN洪水攻击保护;允许系统打开的端口范围......
  • Go操作elasticsearch 基础操作
    安装ES集群(Liunx版本)参考链接​​这个博主的很不错​​连接客户端//连接EsfuncconnectEs()(*elastic.Client,error){returnelastic.NewClient(//设置Elastic服......
  • 2022西湖论剑pwn
    pwnmessageboard程序保护首先查程序保护、沙箱,只能读取flag。另外题目给了libc库的附件,需要我们对程序先进行patch再调试。可以利用patchelf进行patch,因为与解题并......
  • 2022React学习笔记,欢迎批评和指正。
    前言:这是一篇自学笔记,帮助自己的React学习,此学习笔记中只记录教程中对我来说比较又触动的点。观看的视频教程链接如下:001_尚硅谷react教程_react简介_哔哩哔哩_bilibili......
  • 2022浙江高考数学导数压轴解析
    题目:已知函数\(f(x)=\frac{e}{2x}+\ln{⁡x}\)上存在不同的三点\((x1,f(x1)),(x2,f(x2)),(x3,f(x3)),\)且曲线\(y=f(x)\)经过这三点的切线都经过点\((a,b).\)(Ⅰ)......
  • P8368 [LNOI2022] 串 题解
    题目链接题目分析题目要求我们构造一个最长的\(T\)序列,我们首先从每个\(T_i\)入手,思考如何安排才能合法。容易观察到对于每个\(T_i\),合法的\(T_{i-1}\)有两种方......
  • 「解题报告」[省选联考 2022] 学术社区
    摆烂了,不想写代码了。我怎么这么菜啊,看题解里说的各种思路,我一个都没想到。哭考虑给每个消息建一个点,每两个点之间连边\(x\toy\),边权为将\(y\)接在\(x\)后头能......
  • VS2022使用WSL调试程序时卡在下载vsdebugger-已解决
    注:如果是安装一半以为卡了把控制台关了。后来使用WSL启动一直提示报错,但也不能像初次启动那样出现安装VisualStudio调试器的提示下述方法也能解决,缘由是删了子系统重装发......
  • 番外篇:2022 不尽如人意的一年
    写在前面说实话,2022年真的没有达到我预想的那样,晋升没有没有我的机会,年底绩效平平无奇,究竟是能力不行还是其他问题?能力不行?首先公司测试团队70多人,测试开发只有两个,其......