Project Achilles:使用 RNN 对 Java 源代码进行静态漏洞检测的原型工具
2022-12-16 16:0:43 Author: 安全学术圈(查看原文) 阅读量:12 收藏

原文标题: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
笔记作者:[email protected]
笔记小编:[email protected]

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

文章来源: http://mp.weixin.qq.com/s?__biz=MzU5MTM5MTQ2MA==&mid=2247488353&idx=1&sn=a7367c34ecceeeea7e50801f5671203c&chksm=fe2eeceac95965fc0de3806c98a4f31d5158270aa710ad2f98cc18c065e0d501c1ff8adfb891#rd
如有侵权请联系:admin#unsafe.sh