论文阅读: 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 ...
随机推荐
- SSM框架——SpringMVC
SpringMVC MVC三层架构 Controller层:取得前端数据.调用相关业务逻辑.转发/重定向到其他页面 Model层:实现业务逻辑.保存数据 View层:显示页面 1.第一个MVC程序 新 ...
- ArcGIS实现打点、线路图、色块、自定义弹窗
闲聊: 马上就要过年了,不知道大家过年都放几天假,小颖公司就只放8天假,就这还有一天是集体调休扣年假,就很··············还不如不放,不过庆幸最近这两周项目也做完了也没啥事,不然就静不下心 ...
- djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令
djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令 一.web框架前戏 web 框架可以理解为是基于会联网的web服务端>>>socket服务端 1.w ...
- 网络爬虫及openyxl模块
网络爬虫及openyxl模块 一.第三方模块简介 1.第三方模块的用处 python之所以在这么多的编程语言中脱颖而出的优点是有众多的第三方库函数,可以更高效率的实现开发 2.第三方模块的使用 1.第 ...
- .NET 6学习笔记(6)——SSL证书的导出和格式转换
除了广阔的互联网,这个世界上还存在很多运行在公司内网的Web Application.假设有团队A提供的网站A,现团队B需要将网站B与之集成.网站A已使用了自签的SSL证书.团队B希望能够导出该SSL ...
- Backbone前端框架解读
作者: 京东零售 陈震 一. 什么是Backbone 在前端的发展道路中,前端框架元老之一jQuery对繁琐的DOM操作进行了封装,提供了链式调用.各类选择器,屏蔽了不同浏览器写法的差异性,但是前端开 ...
- react无效渲染优化--工具篇
壹 ❀ 引 本文属于我在公司的一篇技术分享文章,它在我之前 React性能优化,六个小技巧教你减少组件无效渲染一文的基础上进行了拓展,增加了工具篇以及部分更详细的解释,所以内容上会存在部分重复,以下是 ...
- 力扣每日一题2023.1.16---1813. 句子相似性 III
一个句子是由一些单词与它们之间的单个空格组成,且句子的开头和结尾没有多余空格.比方说,"Hello World" ,"HELLO" ,"hello w ...
- HTTPS基础原理和配置 - 1
近期又碰到了SSL相关的事情, 就心血来潮开个新专题 - <HTTPS基础原理和配置> 本文是第一篇文章, 主要介绍SSL TLS加密协议的相关内容. 加密协议历史概要 SSL TLS加密 ...
- Spring04-AOP(Debug查看执行流程)
1 AOP的几个核心技术 AOP-面向切面编程的实现的核心技术:jvm运行期间对字节码进行修改或者动态生成新的字节码文件(asm技术). 2 AOP的几个核心概念 AOP在运行期间我们要对class文 ...