论文阅读: CCF A 2022 MVD: 基于流敏感图神经网络的内存相关漏洞检测 (ICSE)
Motivation:
内存相关漏洞会导致性能下降和程序崩溃,严重威胁到现代软件的安全性。
静态分析方法使用一些预定义的漏洞规则或模式来搜索不正确的内存操作,然而,定义良好的漏洞规则或模式高度依赖于专家知识,因此很难涵盖所有情况。并且大规模软件的复杂编程逻辑使得手工提取规则的难度大大提升。所以静态分析方法很难应用。
基于深度学习(DL)的方法可以自动地从先前的易受攻击代码中提取隐含的漏洞模式,而不需要专家的参与,但现有的的DL-based方法也存在着流信息利用不足和粒度粗的局限。
Challenge:
- 流信息利用不足:
- 缺乏过程间分析:现有方法以函数级漏洞代码为输入,忽略了函数间的调用关系,对特征提取进行过程中分析。然而实际的程序中,调用用户定义的函数来实现内存分配或释放的操作是普遍存在的。 缺少过程间分析可能导致语义建模不完整,导致查全率和查准率较低;
- 模型训练中部分流信息丢失: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不以整个程序为输入,而是以前后范围做切片为输入。
关注的程序点:
1. system API call (滥用System Apicalls是造成漏洞的主要原因之一,包括与内存相关的漏洞。) 2. pointer variable(指针变量)
图三为一个示例,节点5为关注的程序点,因为节点6不依赖于节点5的数据,所以它被移除。
节点嵌入:
略。
图学习:
Graph Embedding:利用知识图嵌入方法[2]中使用的实体-关系复合操作 (·)联合嵌入语句节点和多个流边,将边嵌入结合到节点信息的更新中。
Resampling:分层图学习后,由于非易损节点和易损节点的分布极不平衡,直接在所有语句节点上训练分类器有偏差。为了生成一些合成的易损节点来重新平衡分布,采用图级过采样框架Graphsmote[3]作为重采样的基本组件。在易损节点周围邻居节点之间生成合成节点,再生成边和设置阈值。合成边的类型被设置为“控制”。重采样增加了内存相关漏洞语句的比例,避免了由于漏洞节点和非漏洞节点分布不均衡而造成的检测模型的偏差。
三个合成节点(粉红色阴影)与一个易受攻击的节点(即节点5)和一个非易受攻击的节点(即节点11)相连。
Classification:
略。
漏洞检测:
与训练阶段类似,通过过程间分析捕获反映在源代码图形表示中的程序语义。 为了减少内存操作无关语句的数量,通过切片操作获得一批程序切片。程序切片中的语句节点通过DOC2VEC嵌入到低维向量中。最后,将非结构化(即语句嵌入)和结构化(即控制流和数据流)信息作为图形输入,输入到经过良好训练的检测模型中进行漏洞检测。
Experiment:
数据集:从SARD和CVE手动构建的(包括CWE119,-120,-121,-122,-124,-125,-126,-401,-415,-416,-476,-787和-824),并对语句节点标注是否易受攻击。
针对DL-based方法,静态分析方法和其他GNN方法做了对比实验。
Reference:
[1] Fabian Yamaguchi, Nico Golde, Daniel Arp, and Konrad Rieck. 2014. Modeling and Discovering Vulnerabilities with Code Property Graphs. In 2014 IEEE Symposium on Security and Privacy, SP 2014, Berkeley, CA, USA, May 18-21, 2014. IEEE Computer Society, 590–604.
[2] Antoine Bordes, Nicolas Usunier, Alberto García-Durán, Jason Weston, and Oksana Yakhnenko. 2013. Translating Embeddings for Modeling Multi-relational Data. In Advances in Neural Information Processing Systems 26: 27th Annual Conference on Neural Information Processing Systems 2013. Proceedings ofa meeting held December 5-8, 2013, Lake Tahoe, Nevada, United States. 2787–2795.
[3]Tianxiang Zhao, Xiang Zhang, and Suhang Wang. 2021. GraphSMOTE: Imbalanced Node Classification on Graphs with Graph Neural Networks. In WSDM’21, The Fourteenth ACM International Conference on Web Search and Data Mining, Virtual Event, Israel, March 8-12, 2021. ACM, 833–841.
论文阅读: CCF A 2022 MVD: 基于流敏感图神经网络的内存相关漏洞检测 (ICSE)的更多相关文章
- 【论文阅读】ICLR 2022: Scene Transformer: A unified architecture for predicting future trajectories of multiple agents
ICLR 2022: Scene Transformer: A unified architecture for predicting future trajectories of multiple ...
- Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读
Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读 Action4D: Online Action Recognition in the Crowd and Clutter 论文链接 ...
- Deep Reinforcement Learning for Dialogue Generation 论文阅读
本文来自李纪为博士的论文 Deep Reinforcement Learning for Dialogue Generation. 1,概述 当前在闲聊机器人中的主要技术框架都是seq2seq模型.但 ...
- 论文阅读:Review of Visual Saliency Detection with Comprehensive Information
这篇文章目前发表在arxiv,日期:20180309. 这是一篇针对多种综合性信息的视觉显著性检测的综述文章. 注:有些名词直接贴原文,是因为不翻译更容易理解.也不会逐字逐句都翻译,重要的肯定不会错过 ...
- 论文阅读笔记 Improved Word Representation Learning with Sememes
论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...
- AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法
AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法 2018-01-18 16:13蚂蚁金服/雾霾/人工智能 导读:词向量算法是自然语言处理领域的基础算法,在序列标注.问答系统和机 ...
- 【医学图像】3D Deep Leaky Noisy-or Network 论文阅读(转)
文章来源:https://blog.csdn.net/u013058162/article/details/80470426 3D Deep Leaky Noisy-or Network 论文阅读 原 ...
- 论文阅读 | FCOS: Fully Convolutional One-Stage Object Detection
论文阅读——FCOS: Fully Convolutional One-Stage Object Detection 概述 目前anchor-free大热,从DenseBoxes到CornerNet. ...
- 论文阅读 | FoveaBox: Beyond Anchor-based Object Detector
论文阅读——FoveaBox: Beyond Anchor-based Object Detector 概述 这是一篇ArXiv 2019的文章,作者提出了一种新的anchor-free的目标检测框架 ...
- 论文阅读 | Region Proposal by Guided Anchoring
论文阅读 | Region Proposal by Guided Anchoring 相关链接 论文地址:https://arxiv.org/abs/1901.03278 概述 众所周知,anchor ...
随机推荐
- [Leetcode]移除链表元素
题目 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * Li ...
- java 进阶P-2.3+P-2.4
封闭的访问属性 private 封装:把数据和对数据的操作放在一起. (所谓封装就是把数据和对这些数据的操作放在一个地方,通过这些操作把这些数据保护起来,别人不能直接接触到这些数据) 1 privat ...
- 读Java8函数式编程笔记02_流
1. 外部迭代 1.1. for循环是一个封装了迭代的语法糖 1.1.1. 本质上来讲是一种串行化操作 1.2. 很难抽象出不同操作 2. 内部迭代 2.1. 内部迭代中的相应接口:Stream 2. ...
- USACO 2023 January Contest, Bronze Problem 3. Moo Operations
这道题目灰常简单,我们先从最简单的3个字符串开始 有以下几种情况: 可以看到,只有在中间是O的情况下才有可能变成MOO 辣么我们不妨在在s串中枚举这个中间 O 每枚举到一个就看看能不能用他的本身操作次 ...
- BST 插入节点传新版本(原痛恨JavaScript每一天 __ 没有指针)
2023年2月2日更新 perform代码上传到GitHub了,新方法比老方法慢,不建议在生产环境使用 GitHub地址:https://github.com/Dou-fugan/webDemo/tr ...
- 我这.NET菜鸟,用它开发RabbitMQ消息队列后,竟被老板一夜提拔为架构师
[讲故事] 自2022年末推出此工具以来,相关文章已被圈内顶尖的几家.NET头条号转载,而且短短数月,已有超100个团队/个人开发者使用它来操控RabbitMQ消息队列,反响可谓十分火爆.故本次经典重 ...
- springcloud 10 spring cloud gateway02 基本使用
官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 注册 ...
- 关于opencv3.2的parallel_for_函数不支持bind function的处理(基于ch8代码)
1.换opencv4 2.修改程序 改程序针对slambook2/ch8/direct_method.cpp #include <opencv2/opencv.hpp> #include ...
- window.alert和console.log()
使用 window.alert() 您能够使用警告框来显示数据: 实例 <!DOCTYPE html> <html> <body> <h1>我的第一张网 ...
- SpringMVC的表单组件、国际化
spring mvc 的表单标签库 1.Student实体类 package com.southwind.POJO; import lombok.Data; @Data public class St ...