Motivation:

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

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

  基于深度学习(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不以整个程序为输入,而是以前后范围做切片为输入。

  关注的程序点:

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)的更多相关文章

  1. 【论文阅读】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 ...

  2. Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读

    Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读 Action4D: Online Action Recognition in the Crowd and Clutter 论文链接 ...

  3. Deep Reinforcement Learning for Dialogue Generation 论文阅读

    本文来自李纪为博士的论文 Deep Reinforcement Learning for Dialogue Generation. 1,概述 当前在闲聊机器人中的主要技术框架都是seq2seq模型.但 ...

  4. 论文阅读:Review of Visual Saliency Detection with Comprehensive Information

    这篇文章目前发表在arxiv,日期:20180309. 这是一篇针对多种综合性信息的视觉显著性检测的综述文章. 注:有些名词直接贴原文,是因为不翻译更容易理解.也不会逐字逐句都翻译,重要的肯定不会错过 ...

  5. 论文阅读笔记 Improved Word Representation Learning with Sememes

    论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...

  6. AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法

    AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法 2018-01-18 16:13蚂蚁金服/雾霾/人工智能 导读:词向量算法是自然语言处理领域的基础算法,在序列标注.问答系统和机 ...

  7. 【医学图像】3D Deep Leaky Noisy-or Network 论文阅读(转)

    文章来源:https://blog.csdn.net/u013058162/article/details/80470426 3D Deep Leaky Noisy-or Network 论文阅读 原 ...

  8. 论文阅读 | FCOS: Fully Convolutional One-Stage Object Detection

    论文阅读——FCOS: Fully Convolutional One-Stage Object Detection 概述 目前anchor-free大热,从DenseBoxes到CornerNet. ...

  9. 论文阅读 | FoveaBox: Beyond Anchor-based Object Detector

    论文阅读——FoveaBox: Beyond Anchor-based Object Detector 概述 这是一篇ArXiv 2019的文章,作者提出了一种新的anchor-free的目标检测框架 ...

  10. 论文阅读 | Region Proposal by Guided Anchoring

    论文阅读 | Region Proposal by Guided Anchoring 相关链接 论文地址:https://arxiv.org/abs/1901.03278 概述 众所周知,anchor ...

随机推荐

  1. ClickHouse ORM 3.x 发布啦

    经过1年断断续续的迭代,ClickHouse ORM 3.x 发布啦-说说它的故事吧. 回顾下2022 说来惭愧上次写博客都是22年4月份了,今年行情不好团队急剧收缩,工作几乎全扑在接手存量业务和主业 ...

  2. Keepalived高可用集群部署

    KeepAlived 目录 KeepAlived KeepAlived安装 KeepAlived部署 准备工作 主备模式 节点配置 验证 正常状态 故障 故障恢复 1+N(一主多备)模式 节点配置 验 ...

  3. ORM执行SQL语句,神奇的双下划线查询,ORM外键字段的创建,外键字段数据的操作,多表查询

    ORM执行SQL语句,神奇的双下划线查询,ORM外键字段的创建,外键字段数据的操作,多表查询 一.ORM执行SQL语句 有时候ORM的操作效率较低,我们是可以自己来编写SQL语句的 方式一: res ...

  4. redisConfig+redisUtil开箱即用

    RedisConfig @Configuration public class RedisConfig { //编写redisTemplate //固定模板,开箱即用 @Bean public Red ...

  5. docker搭建maven私服(nexus3),整合springboot上传下载依赖

    一.前言 我们在JavaWeb开发中必不可少的就是jar包管理-maven,在没有maven之前,都是自己手动下载jar包导入到项目中,非常的繁琐. maven出现之后,又迎来新的问题,对于仓库里人家 ...

  6. 剑指Offer 05. 替换空格(java解题)

    目录 1. 题目 2. 解题思路(通用 3. 数据类型功能函数总结 4. java代码 1. 题目 请实现一个函数,把字符串 s 中的每个空格替换成%20. 示例 1: 输入:s = "We ...

  7. RestTemplate的超全讲解(全)转

    RestTemplate的超全讲解(全)转 https://blog.csdn.net/weixin_47872288/article/details/121842374 (81条消息) RestTe ...

  8. 多变量两两相互关系联合分布图的Python绘制

      本文介绍基于Python中seaborn模块,实现联合分布图绘制的方法.   联合分布(Joint Distribution)图是一种查看两个或两个以上变量之间两两相互关系的可视化图,在数据分析操 ...

  9. 项目与自身毕设对比整理规划6 330 done

    3.30 没用呢- - 功夫不负有心人啊啊啊啊啊啊啊啊啊啊啊啊啊啊 成功了- - 但是很可恶 需要把数据返回然后放在那个文件里面才可以 现在就是问题就是返回数据的时候需要把这个文件存成数据接口 fin ...

  10. Hystrix断路器

    1.介绍 ①产生原因 服务雪崩: 多个微服务之间调用,假设A调用B,C,B和C又调用其他微服务,这就是扇出. 如果扇出的链路上有某个微服务调用响应时间过长或者不可用,那么A调用会占用越来越多的系统资源 ...