原文标题:Project Achilles: A Prototype Tool for Static Method-Level Vulnerability Detection of Java Source Code Using a Recurrent Neural Network
原文作者:Nicholas Saccente, Josh Dehlinger, Lin Deng, Suranjan Chakraborty, Yin Xiong
原文链接:https://ieeexplore.ieee.org/abstract/document/8967427
发表期刊:ASE WorkShop’19
笔记作者:NING@SecQuan
笔记小编:ourren@SecQuan
1 研究介绍
网络攻击正在威胁网络空间的方方面面,例如,通过利用软件漏洞、窃取敏感信息或攻击关键基础设施,在这些攻击中,最有效的一种是利用软件安全漏洞,它利用了这样一个事实,即当今的软件不再是孤立的、具有数千行代码的小程序,而是复杂的、集成的、连接的关键系统到社会的各个方面。因此软件安全漏洞检测格外重要,但当前工具误报率高,并且缺乏足够的自动化。因此,本研究的目标是设计和实现一种自动化、可靠、有效和高效的软件安全漏洞分析工具,减少网络安全分析师的工作量,缩短发现漏洞的时间,降低知识和技术要求为人员。
2 整体方法及部分细节
-
提取源代码中的方法 -
代码分词 + 向量化表示 -
LSTM 模型特征提取 -
模型分类(文中并未说明 cluster 部分)
RQ1: 如何处理代码风格不同样问题?
例如 K&R 风格和 Allman 风格不同,会将函数内的大括号与控制结构的排列在不同行内,针对这一问题,使用正则表达式来解决风格问题。
RQ2: 使用什么对 java 源代码分词?这里使用的是一个 python 包 Javalang 来进行分词,他是区别于仅用空格字符来分词的结果。
3 实验设计及结果
在本次实验评估中,使用了 29 种类型的 CWE 漏洞。虽然 Juliet 测试套件包括 112 个 CWE,但由于只有这 29 个类型至少有 100 个类才能满足 Project Achilles 的设定阈值。表一列出了所有这些漏洞和每个漏洞的测试用例数。最大的 CWE 漏洞测试集是 CWE 190,它有 7,015 个测试用例。最小的 CWE 漏洞测试集是 CWE 506,它有 116 个测试用例。总体而言,在实验评估中使用了 44,495 个测试用例。
作者从 epoch、dropout 两个超参数出发,做了对比实验,最终实现了超过 90% 精度的效果。
4 个人思考
-
完全直接静态分析源代码,可以结合一些现成的分析方式进行辅助。可能会有处理不到的问题,需要动态分析使用; -
模型还可以提升,分词使用的是 Javalang 标记器,可以考虑其他方法去处理机器理解 Java 语法信息; -
对真实效果存疑,因为真实场景的 java 可能更加复杂,同时样本分布可能也大有区别?
安全学术圈招募队友-ing
有兴趣加入学术圈的请联系 secdr#qq.com
原文始发于微信公众号(安全学术圈):Project Achilles:使用 RNN 对 Java 源代码进行静态漏洞检测的原型工具