一.摘要

​ 首先从源代码中提取方法体,形成方法集;为方法集中的每个方法构建抽象语法树,借助抽象语法树抽取方法中的语句,形成语句集;替换语句集中程序员自定义的变量名、方法名及字符串,并为每条语句分配一个独立的节点编号,形成节点集。其次,运用数据流和控制流分析提取节点间的数据依赖和控制依赖关系。然后,将从方法体中提取的节点集、节点间的数据依赖关系以及控制依赖关系组合成方法对应的特征表示,并运用one-hot编码进一步将其处理为特征矩阵。最后,为每个矩阵贴上是否含有漏洞的标签以生成训练样本,并利用神经网络训练出相应的漏洞分类模型。为了更好地学习序列的上下文信息,选取BiLSTM神经网络,并在其上增加了Attention层,以进一步提升模型性能。漏洞检测结果的精确率和召回率分别达到了95.3%和93.5%。

二.主要贡献

  1. 结合抽象语法树分析、数据流分析和控制流分析技术,提出了一种融合代码结构、数据依赖和控制依赖信息的源代码特征提取方法。
  2. 结合深度神经网络技术和程序静态分析技术,提出了一种基于BiLSTM 模型的漏洞检测方法。

三.方法介绍

  1. 整体架构

    ​ 从源代码中提取方法体,形成方法集;为方法集中的每个方法构建抽象语法树,借助抽象语法树抽取方法中的语句,形成语句集;替换语句集中程序员自定义的变量名、方法名及字符串,并为每条语句分配一个独立的节点编号,形成节点集。其次,运用数据流和控制流分析提取节点间的数据依赖和控制依赖关系。然后,将从方法体中提取的节点集、节点间数据依赖关系以及控制依赖关系组合成方法对应的特征表示,并运用one-hot编码进一步将其处理为特征矩阵。最后,为每个矩阵贴上是否含有漏洞的标签以生成训练样本,并增设Attention机制来辅助BiLSTM神经网络训练出更好的漏洞分类模型。

  2. 生成节点集

    ​ 根据抽象语法树中的节点类型,筛选出用户自定义的变量名、方法名以及字符串,并对其做统一替换,以在将文本表示转换为向量时压缩词汇表的大小。例如,同样是bool类型的变量,程序员A命名为isTrue,程序员B命名为isRight,程序员C命名为exist等,上万个程序员可能产生数千个变量名,将这些自定义的变量名统一替换为某一标识符(如cid)之后,可以有效地减少词汇的数量,从而在将token展开为one-hot向量时降低向量的维度。同一方法体中的不同变量用cid_1和cid_2进行区分。最后,将每一个处理完的语句当作方法的一个节点,并为其分配一个独立的节点编号。

    ​ 缓冲区漏洞示例源码:

    ​ 生成语句集:

    ​ 生成节点集:

  3. 生成特征矩阵

    • 以分号为间隔,将节点集、节点间的数据依赖关系和节点间的控制依赖关系中所有语句组合而成的文本,即为方法体所对应的特征表示。
    • 以空格为分隔符对文本做分词处理,即可将每个方法对应的特征表示转换为一个token序列。将token序列设置为固定长度400(长度超过400的约占总数量的1.77%,舍弃这极小部分样本对实验结果的影响可忽略不计)。
    • 使用one-hot编码将代码token映射到向量空间,得到特征矩阵。
    • 为防止特征矩阵向量维度过大(信息过于稀疏,不利于学习),引入embedding层对原始向量进行压缩。

四.实验结果

​ 实验结果显示,本文方法的精确率和召回率最高达到了95.3%和93.5%,召回率与VulDeePecker相比更是高出了11个百分点。VulDeePecker在数据预处理时,主要提取源代码中的API和库方法调用,生成codegadgets。然而,该过程只针对API和库方法调用做提取,丢失了一些代码信息,导致其在召回率上的表现稍显逊色。

​ 与 AEGKNN相比,本文方法在准确率和召回率上分别高出了约2和6个百分点。AEGKNN 提取方法的API序列并量化为特征向量,然后对特征向量进行聚类,提取每一类中异常值排序高的样本函数以匹配漏洞库。因此,该方法的表现很大程度上依赖于其制定的漏洞库,并没有彻底解放人力。相比之下,本文方法不需要领域专家的参与,能够自动化地从 漏洞样本中提取一些隐含的漏洞模式,省时省力,且具备良好的可扩展性。

五.总结

​ 为检测软件中隐含的大量漏洞,本文将代码的语句以及语句间的数据流和控制流依赖抽象为一种特征表示,并采用基于Attention的BiLSTM神经网络学习且训练出相应的漏洞分类模型。实验在CWE-120,CWE-121和CWE-122这3种漏洞的小规模数据集上取得了95.3%的精确率和93.5%的召回率,优于现有的基于机器学习的漏洞检测方法。

论文笔记-基于BiLSTM 模型的漏洞检测相关推荐

  1. 自然语言处理之基于biLSTM的pytorch立场检测实现

    七月 上海 | 高性能计算之GPU CUDA培训 7月27-29日三天密集式学习  快速带你入门阅读全文> 正文共1468个字,15张图,预计阅读时间10分钟. LSTM理解了,biLSTM其实 ...

  2. 第二篇 基于自然语言处理的漏洞检测方法综述

    杨伊等 来源:计算机研究与发展 目录 1 相关技术 1.1 自然语言处理 1.2 漏洞检测与分析 据2021年CVE漏洞趋势安全报告,当前漏洞类型占比最大的5类漏洞分别是代码执行.拒绝服务.溢出.跨站 ...

  3. 【轩说AI】基于GAN模型的异常检测

    文章目录 基于GAN模型的异常检测 AnoGAN 基本思想 工作流程 在迭代z时的损失函数 问题 Conditional GAN 简单回顾. Info GAN 基本思想 网络结构 实验结果 VAE-G ...

  4. 【FPGA教程案例91】机器视觉2——通过FPGA实现基于肤色模型的人脸检测,使用MATLAB辅助测试

    FPGA教程目录 MATLAB教程目录 本课程成果预览(将FPGA处理结果导入到matlab显示效果) 目录 1.软件版本 2.基于肤色模型的人脸检测原理

  5. 首届中国eBPF大会分享---基于eBPF的内核漏洞检测实践

    背景 随着智能化.数字化.云化的飞速发展,全球基于Linux系统的设备数以百亿计,而这些设备的安全保障主要取决于主线内核的安全性和健壮性.传统的内核安全存在周期长.效率低以及版本适配的问题,有没有实用 ...

  6. 论文《基于深度学习的表面缺陷检测方法综述》学习笔记

    <基于深度学习的表面缺陷检测方法综述>学习笔记 前段时间完成了<基于图像的零部件缺陷识别系统设计>毕业课程设计,过程中收获了很多,老师也分享了很多论文,在此记录一下学习的收获. ...

  7. 论文笔记-基于代码属性图和Bi-GRU的软件脆弱性检测方法

    一.摘要 ​提出了一种基于代码属性图和Bi-GRU的软件脆弱性检测方法.该方法通过从函数的代码属性图中提取出抽象语法树序列.控制流图序列作为函数表征的表征方式,减少代码表征过程中的信息的损失,并通过选 ...

  8. 论文笔记 | 基于双线性CNN模型的细粒度视觉识别

    细粒度视觉识别之双线性CNN模型 [1] Lin T Y, RoyChowdhury A, Maji S. Bilinear cnn models for fine-grained visual re ...

  9. 论文笔记 | 基于深度学习的乳腺转移瘤识别(Deep Learning for Identifying Metastatic Breast Cancer)

    论文阅读笔记:原文链接 摘要 生物医学图像国际研讨会(International Symposium on Biomedical Imaging,ISBI)举办了一个在前哨淋巴节点全幻灯图中自动检测转 ...

最新文章

  1. centos mysql数据迁移_Mysql 5.7.17 离线版安装和数据迁移(centos 7)
  2. 大话移动开发之QT-Quick
  3. php怎么看回调的异步通知的数据_php app支付宝回调(异步通知)详解
  4. C++ functor 仿函数
  5. 95-32-010-ChannelPipeline-ChannelPipeline简介
  6. python thread.event
  7. C#文件夹的创建和定期删除
  8. java实现人脸识别源码【含测试效果图】——前期准备工作及访问提示
  9. libiconv android编译,编译cBPM-android-19—CodeBlocks—CentOS7— ndk10—编译libiconv和xerces-c...
  10. 斗鱼开源基于Go实现的微服务框架 Jupiter
  11. 微信小程序可滑动周日历组件
  12. “深入浅出”学Golang!就选《Head First Go》
  13. 时间管理表 - 《待办清单列表》
  14. python文件去重软件_python去重工具
  15. 局域网内两台电脑无法共享文件问题
  16. mysql analyze_技术分享 | MySQL EXPLAIN ANALYZE
  17. 中国建设银行信息技术类校招笔试心得
  18. 如何阻止iCloud照片库使用手机数据
  19. AI工程师的自我修养
  20. 盘点最近 火火火火 的 GitHub 项目

热门文章

  1. 优化音质是直播电商源码不能忽略的
  2. 高保真原型 | XMind优化方案的设计过程
  3. C语言实现生成BMP图片文件(BMP文件格式,二进制文件读写)
  4. 年销售额5亿爆款单品“螺蛳粉“营销策略分享!
  5. hid keyboard device异常,电脑键盘驱动出现问题,无法输入,利用虚拟键盘解决问题
  6. CMGAN: Conformer-based Metric GAN for Speech Enhancement
  7. 项目中的软件质量管理
  8. Inpaint如何去水印?Inpaint图片去水印教程
  9. 本地缓存、分布式缓存以及多级缓存
  10. 使用MAKER进行基因注释(高级篇之AUGUSTUS模型训练)