前言
本篇文章对Java代码审计进行简单讲解与认识,对其审计过程有充分了解。
一、代码审计概述
代码审计(Code Audit)是一种以发现安全漏洞、程序错误和程序违规为目标的源代码分析技能。在实践过程中,可通过人工审查或者自动化工具的方式,对程序源代码进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。
二、代码审计所需的基础能力
Java代码审计要求代码审计人员能够 "动静结合"
。在 "动"
方面,要求代码审计人员具备调试程序的能力。若代码逻辑比较复杂,则可以通过多次调试或关键位置设置断点辅助理解。在 "静"
方面,要求代码审计人员具备一定的编程基础,了解基本语法与面向对象思想。若代码审计人员能够通过阅读代码理解代码逻辑,并善于查阅文档和资料,就能解决大多数问题。
三、代码审计的常用思路
为了在应用代码中寻找目标代码的漏洞,需要有明确的方法论做指导。方法论的选择则要视目标程序和要寻找的漏洞类型而定,以下是一些常用思路。
(1)接口排查("正向追踪"
):先找出从外部接口接收的参数,并跟踪其传递过程,观察是否有参数校验不严的变量传入高危方法中,或者在传递的过程中是否有代码逻辑漏洞(为了提高排查的全面性,代码审计人员可以向研发人员索要接口清单)。
(2)危险方法溯源("逆向追踪"
):检查敏感方法的参数,并查看参数的传递与处理,判断变量是否可控并且已经过严格的过滤。
(3)功能点定向审计:根据经验判断该类应用通常会在哪些功能中出现漏洞,直接审计该类功能的代码。
(4)第三方组件、中间件版本比对:检查Web应用所使用的第三方组件或中间件的版本是否受到已知漏洞的影响。
(5)补丁比对:通过对补丁做比对,反推漏洞出处。
(6)"黑盒测试"
+ "白盒测试"
:在代码审计的过程中虽然已白盒审计为主,但是如果在过程中辅以黑盒测试将有助于快速定位到接口或做更全面的分析判断。交互式应用安全测试技术IAST就结合了 "黑盒测试"
与 "白盒测试"
的特点。
(7)"代码静态扫描工具
" + "人工研判"
:对于某些漏洞,使用代码静态扫描工具代替人工漏洞挖掘可以显著提高审计工作的效率。然而,代码静态扫描工具也存在 "误报率高"
等缺陷,具体使用时往往需要进一步研判。
(8)开发框架安全审计:审计Web应用所使用的开发框架是否存在自身安全性问题,或者由于用户使用不当引发的安全风险。