Java 源代码审计-工具篇

admin 2022年7月6日10:18:03评论1,111 views字数 3508阅读11分41秒阅读模式

IDE

Eclipse

使用Eclipse的Import功能将程序代码导入workspace,打开任一java源文件,选择Source Analyse菜单下的条目进行关键方法搜索,搜索结果在窗口下面显示,然后进行人工分析。
Java 源代码审计-工具篇

Idea

IDEA 全称IntelliJ IDEA,是用于 java语言开发的集成环境 (也可用于其他语言),IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码 自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计 等方面的功能可以说是超常的。
Java 源代码审计-工具篇
使用Idea打开审计的项目,如果项目是使用IDEA开发的,可以自动导入项目配置信息,否则根据自身需求自行配置。使用Find功能进行全局查找,
Java 源代码审计-工具篇
在追踪函数调用过程中,如果遇到jar包,可以将jar包或者jar包所在的目录配置成library,IDEA自行对相应jar包进行反编译,方便审计人员查看,反编译的结果在IDEA中不提供检索功能,如果需要进行检索,建议使用IDEA自带的反编译工具或者其他反编译工具,批量反编译再检索。对于反编译工具,接下来的文章会讲到,请拭目以待。
Java 源代码审计-工具篇

Sublime

Sublime Text 是一个轻量、简洁、高效、跨平台的编辑器。Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。
审计过程中可以将配置好的sublime拷贝到用户的设备上,使用sublime主要看重它的轻量级,检索速度快等优点。sublime搜索支持正则表达式,感兴趣的童鞋可以尝试一下。
Java 源代码审计-工具篇

Notepad++

以前碰到过一个同事喜欢使用Notepad++,人肉审计代码,审计能力高到毫无人性可言,一直让我很敬佩,该工具不推荐,视能力来使用。通常直接使用Notepad++ 打开文件夹来加载项目目录,方便审计。

Vscode

Vscode是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。功能大同小异,总体来说Vscode提供海量的插件方便开发,但是对于审计的话,离线安装配置插件就比较费劲了,审计的童鞋请自行决断。


静态代码分析

在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。Java 静态代码分析(static code analysis)工具能够在代码构建过程中帮助开发人员快速、有效的定位代码缺陷并及时纠正这些问题,从而极大地提高软件可靠性并节省软件开发和测试成本。

什么是静态代码分析

静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。
但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。

静态代码分析工具的优势

  1. 帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。

  2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。

  3. 显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。

Java 静态代码分析理论基础和主要技术

• 缺陷模式匹配:缺陷模式匹配事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行模式匹配,从而完成软件的安全分析。这种方式的优点是简单方便,但是要求内置足够多缺陷模式,且容易产生误报。
• 类型推断:类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。这种技术首先将预定义一套类型机制,包括类型等价、类型包含等推理规则,而后基于这一规则进行推理计算。类型推断可以检查代码中的类型错误,简单,高效,适合代码缺陷的快速检测。
• 模型检查:模型检验建立于有限状态自动机的概念基础之上,这一理论将被分析代码抽象为一个自动机系统,并且假设该系统是有限状态的、或者是可以通过抽象归结为有限状态。模型检验过程中,首先将被分析代码中的每条语句产生的影响抽象为一个有限状态自动机的一个状态,而后通过分析有限状态机从而达到代码分析的目的。模型检验主要适合检验程序并发等时序特性,但是对于数据值域、数据类型等方面作用较弱。
• 数据流分析:数据流分析也是一种软件验证技术,这种技术通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、引用以及传递等情况。对数据流进行分析可以确定变量的定义以及在代码中被引用的情况,同时还能够检查代码数据流异常,如引用在前赋值在后、只赋值无引用等。数据流分析主要适合检验程序中的数据域特性。


主流 Java 静态分析工具

FindBugs

FindBugs 是由马里兰大学提供的一款开源 Java 静态代码分析工具。FindBugs 通过检查类文件或 JAR 文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。FindBugs 既提供可视化 UI 界面,同时也可以作为 Eclipse 插件使用。文本将主要使用将 FindBugs 作为 Eclipse 插件。在安装成功后会在 eclipse 中增加 FindBugs perspective,用户可以对指定 Java 类或 JAR 文件运行 FindBugs,此时 FindBugs 会遍历指定文件,进行静态代码分析,并将代码分析结果显示在 FindBugs perspective 的 bugs explorer 中,如下图 所示:

Java 源代码审计-工具篇

图中 Bug Explorer 中的灰色图标处为 Bug 类型,每种分类下红色图标表示 bug 较为严重,黄色的图标表示 bug 为警告程度。Propreties 列出了 bug 的描述信息及修改方案。此外,FindBugs 还为用户提供定制 Bug Pattern 的功能。用户可以根据需求自定义 FindBugs 的代码检查条件,如下图 所示:

Java 源代码审计-工具篇


PMD

PMD 是由 DARPA 在 SourceForge 上发布的开源 Java 代码静态分析工具。PMD 通过其内置的编码规则对 Java 代码进行静态检查,主要包括对潜在的 bug,未使用的代码,重复的代码,循环体创建新对象等问题的检验。PMD 提供了和多种 Java IDE 的集成,例如 Eclipse,IDEA,NetBean 等。本文主要使用 PMD 以插件方式与 Eclipse 集成。如下图所示:在 Violations Overview 视图中,按照代码缺陷严重性集中显示了 PMD 静态代码分析的结果。

Java 源代码审计-工具篇

PMD 同样也支持开发人员对代码检查规范进行自定义配置。开发人员可以在下图中的面板中添加、删除、导入、导出代码检查规范。

Java 源代码审计-工具篇

checkmarx

Checkmarx CxEnterprise静态源代码安全扫描和管理工具是以色列Checkmarx 公司研发新一代源代码静态扫描方案。Checkmarx CxEnterprise的主要功能是通过扫描源代码发现代码中存在的质量缺陷和安全问题,从而提高代码的质量,减少人工代码审查和测试的时间。Checkmarx CxEnterprise扫描工具目前总共支持200多种代码质量和安全问题。其中质量问题包括:运算错误、边界溢出、异常处理、编码规范和逻辑错误。安全问题包括:注入型漏洞,内存溢出,跨站脚本,信息泄露等。
Java 源代码审计-工具篇

fortify sca

Fortify SCA 是一个静态的、白盒的源代码安全测试工具。它通过内置的五大主要分析引擎对源代码进行静态的分析和检测,分析的过程中与其特有的软件安全漏洞规则集进行全面地匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并整理生成完整的报告。扫描的结果中不但包括详细的安全漏洞的信息,还会有相关的安全知识的说明,并提供相应的修复建议。

Java 源代码审计-工具篇

Fortify SCA会将找出的安全问题分类,并通过其对系统的危害严重程度作等级分类,可提高相关人员审查安全问题的速度,提高开发人员修补程序的效率。

Java 源代码审计-工具篇

定期提供并更新安全规则,由Fortify Software的安全专家和研发团队提供持续的更新,以保持最新的源代码安全分析能力。并且提供自定义安全规则功能,以指导精灵化的方式指导客户轻松定制自己的规则。

Java 源代码审计-工具篇


原文始发于微信公众号(代码审计SDL):Java 源代码审计-工具篇

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月6日10:18:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Java 源代码审计-工具篇https://cn-sec.com/archives/908062.html

发表评论

匿名网友 填写信息