网络空间安全论文笔记4

发布于:2022-12-13 ⋅ 阅读:(507) ⋅ 点赞:(0)

VulDeePecker: A Deep Learning-Based System for Vulnerability Detection. (NDSS 2018)

VulDeePecher:一种基于深度学习的漏洞检测系统

研究背景:现有漏洞检测往往使用人工静态检测方法,依赖人类专家密集劳动且具有高误报率

e.g. 基于代码相似性的VUDDY和VulPecker系统具有较低的漏报率,但代价是高误报率

文章贡献:1)在漏洞检测任务中引入了深度学习方法,使用code gadgets来表征程序;

2)提出了VulDeePecker系统,做到:处理多种漏洞、与人类知识结合、效果优于其他方法;

3)给出了一个评估漏洞检测效果的数据集,采集自NVD和SARD 

模型实现:整体模型可以分为学习阶段和检测阶段两部分

学习阶段:

1)先提取库/API函数调用并生成参数相对应的程序片段(使用Checkmarx工具);

2)提取code gadgets并标记它们的ground truth

3)将code gadgets转换为向量(使用word2vec)

4)训练BLSTM模型

检测阶段:使用训练好的模型检测漏洞

评价指标:误报率(FPR),漏报率(FNR),召回率(TPR),准确率(P),F1度量

本文追求低 FNR 和 FPR

数据集:来自 NIST 维护的两个漏洞数据源 NVD(产品漏洞)和 SARD(产品、合成、学术)

从中选取了缓冲区错误(CWE-119)和资源管理错误(CWE-399)两类漏洞

缓冲区错误(CWE-119) 资源管理错误(CWE-399)
NVD 520 320
SARD 8122 1729

实验设置:80%训练集,20%测试集

训练参数:code gadgets 的向量表示中的标记数设置为 50,dropout 设置为 0.5,batch size 设置为 64,epoch 数设置为 4,使用 minibatch 随机梯度下降与 ADAMAX 训练,默认学习率为 1.0,选择 300 个隐藏节点

Neural Machine Translation Inspired Binary Code Similarity Comparison beyond Function Pairs (NDSS 2019)

受神经机器翻译启发的函数间二进制代码相似性比较

研究目标:解决以下两个问题

1)给定来自不同指令集架构(ISA)的基本块,判断它们的相似性(等价问题);

2)给定一段代码,判断其是否包含在不同ISA的另一段代码中(包含问题)

研究背景:二进制代码相似性检测中还没有使用NLP方法的尝试;跨架构代码包含是一个新的课题

论文贡献:提出了一个高精度的跨架构代码相似性检测模型;同时给出了第一个解决跨架构代码包含问题的模型

模型实现:本文主要思路是将二进制代码反汇编成为汇编语言,然后采用NLP中NMT类似方法进行判断

1)代码克隆任务

预处理:先将变量、常量、函数名等转换为统一符号

提取指令向量:与NLP类似,将一条指令作为单词,将一个基本块作为语句;使用word2vec方法,skip-gram学习出每个指令的向量表示

LSTM模型:使用基于LSTM的暹罗网络,将两个代码各自提取为一个向量,最后计算出相似性

2)代码包含任务

使用CFG对控制流进行分析,对于目标代码,在长代码中通过图搜索算法深搜出不同的路径,使用LCS方法对比路径的相似程度

数据集:本文自己提出了一个用于训练和评估的测试集,具体方法如下

1)对每个高级程序语言代码,先进行ID标注

2)对于每个特定ID的代码进行编译,前端不变,在编译框架下更改不同的汇编语言,得到不同汇编代码及二进制代码,这些代码相似度标注为1

3)对于不同ID的代码,使用n-gram进行相似性比较,根据结果标注其编译后的二进制代码

MVP: Detecting Vulnerabilities using Patch-Enhanced Vulnerability Signatures (USENIX Security 2020)

MVP:使用补丁增强漏洞标签检测漏洞

研究背景:重复性漏洞的检测任务现在有两个主流方法——基于克隆的方法和基于函数匹配的方法,但这两个方法都存在高误报率和高漏报率的问题

补丁的存在使得有漏洞的代码和修复漏洞的代码极为相似,难以通过当前主流方法检测到,导致高误报率;而现有的相似检测算法也难以精确的捕捉到表征漏洞的标签,导致高漏报率

论文贡献:提出了一种基于切片方法提取函数和补丁标签的重复性漏洞检测方法,带来精度的提升

模型实现:MVP模型可以分为提取函数标签,提取漏洞和补丁标签,匹配标签检测漏洞三个部分

1)提取函数标签

先解析目标函数的AST和PDG;

然后对函数规范化处理;

最后生成函数标签:计算每条语句的哈希值,然后提取出所有具有数据或控制依赖的语句组成三元组(h1, h2, type)

2)提取漏洞和补丁标签

由于切片的准则难以定义,既不能漏过真正的漏洞语句,也不能包含太多噪声语句,本文的方法根据不同的语句类型执行不同的前向/后向切片准则

同时,为了进一步减少噪声语句,本文还利用了信息熵的思路,当漏洞相关切片集合的信息熵超过一定阈值,删减可能是噪声的边缘语句

3)将函数标签与漏洞和补丁标签进行匹配

对于满足以下5条判别准则的函数,我们认为是有漏洞的

数据集:本文对10个开源的C/C++项目代码进行测试,包含了25377个patch和34,378个有改动的函数


网站公告

今日签到

点亮在社区的每一天
去签到