Project Achilles:使用 RNN 对 Java 源代码进行静态漏洞检测的原型工具

原文标题: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 整体方法及部分细节

图 1 整体工作流
  • 提取源代码中的方法
  • 代码分词 + 向量化表示
  • 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 个测试用例。

图 2 数据集构成

作者从 epoch、dropout 两个超参数出发,做了对比实验,最终实现了超过 90% 精度的效果。

图 3 epoch 参数修改
图 3 dropout 参数修改

4 个人思考

  • 完全直接静态分析源代码,可以结合一些现成的分析方式进行辅助。可能会有处理不到的问题,需要动态分析使用;
  • 模型还可以提升,分词使用的是 Javalang 标记器,可以考虑其他方法去处理机器理解 Java 语法信息;
  • 对真实效果存疑,因为真实场景的 java 可能更加复杂,同时样本分布可能也大有区别?
安全学术圈招募队友-ing 
有兴趣加入学术圈的请联系 secdr#qq.com

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐