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

渗透技巧 2个月前 admin
100 0 0

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 整体方法及部分细节

Project Achilles:使用 RNN 对 Java 源代码进行静态漏洞检测的原型工具
图 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 个测试用例。

Project Achilles:使用 RNN 对 Java 源代码进行静态漏洞检测的原型工具
图 2 数据集构成

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

Project Achilles:使用 RNN 对 Java 源代码进行静态漏洞检测的原型工具
图 3 epoch 参数修改
Project Achilles:使用 RNN 对 Java 源代码进行静态漏洞检测的原型工具
图 3 dropout 参数修改

4 个人思考

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

原文始发于微信公众号(安全学术圈):Project Achilles:使用 RNN 对 Java 源代码进行静态漏洞检测的原型工具

版权声明:admin 发表于 2022年12月16日 下午3:59。
转载请注明:Project Achilles:使用 RNN 对 Java 源代码进行静态漏洞检测的原型工具 | CTF导航

相关文章

暂无评论

暂无评论...