使用深度神经网络进行漏洞挖掘的方法调研
传统的漏洞挖掘方法
静态方法
- 基于规则/模板的
- 代码相似性检测
- 符号执行
对源代码分析,高假阳性
动态方法
- 模糊测试
- 污点分析
代码覆盖率低
混合方法
结合静态、动态方法,会继承上述的问题,并且实践上难以应用
介绍
机器学习方法的优点
人类智慧(经验)起到重要指导作用(基于规则、基于提取的特征的)
困难:
- 难以将安全专家对漏洞的理解 转换为 可被检测系统学习的特征向量
- 系统从特征集中学到的东西也可能受到各种因素的影响
例如,模型的表现力、数据过度拟合、数据中的噪声等
一些概念:
-
缺口(GAP):机器学习 要 像人类一样 学习和理解 漏洞代码的语义 (如何将漏洞代码表示为机器可学习的信息)
-
semantic gap: 语义缺口、语义空白
-
传统机器学习方法依赖手工制作的特征
-
深度学习、RNN可以自动通过学习揭示代码语义的复杂模式和软件代码的高级表示
安全从业者人工审查漏洞考虑的因素
漏洞语义差距
对软件漏洞一种不同的表达
定义:缺陷的实例,由软件的设计、开发或配置中的错误引起,从而可以利用它来违反某些显式或隐式的安全策略
安全相关的 bug ==》 被攻击者利用 ==》 导致安全失败或者违反安全策略
人类检查和检测系统的语义鸿沟
对代码语义的高级理解需要:
- 足够的经验
- 编程知识
- 对编程语言本身的理解
- 理解代码的语义和语法
- 对代码库有深入认识(一个例子是心脏滴血漏洞中,需要对n2s函数有了解
- 安全编码的实践
自动检测系统
依赖特征集,来自于:
- 人工提取的(传统机器学习算法
- 自动提取的(深度学习
检测系统无法像从业者那样充分理解易受攻击代码模式的潜在语义。 因此,知识渊博、经验丰富的从业者与基于ML的检测系