代码审计是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。现在主流的审计方式一般都是工具扫描加人工审计的方式,因此在着手Java代码之前我们必须具备一定的Java编程能力,漏洞分析能力,以及局部代码调试能力。本篇文章主要包括Java代码审计的学习路线、要学习的Java基础和框架、Java代码审计的checklist,使用比较得心应手的工具以及人工做审计时的一些方法总结。根据 TIOBE 官方最新发布了 8 月的编程语言榜单显示Java语言依旧还是稳居前三(排行榜如下),Java语言距今已有26年发展历史,被称之为企业级编程语言,更新至今已是相当的成熟。这样表明Java代码审计工作是比较有前景的。
java基础和框架学习这块针对的是没有Java基础的同学,可以从以下:前端学习、基础与逻辑运算、面向对象,Java SE java web、框架学习等六个方面逐个的进行学习充能,方便在之后的漏洞审计中可以快速的确定存在漏洞的点。如果是有开发经验的同学可以直接绕过这个环节,直接对漏洞模块进行学习。
漏洞初级主要针对那些没有从事过渗透测试和安服工作的同学,在这个阶段我们必须对常规漏洞要明白其原理,危害以及常规的防御手段。而漏洞晋级阶段是将漏洞深入Java代码层中学习其产生和修复方法,这个阶段我们需要找一些漏洞代码事例来自行研究分析,以便加深自己对Java中漏洞的理解和掌握。以下是一个根据信息安全技术-代码安全审计规范(GB-T 39412-2020)总结的Java代码审计checklist
俗话说“工欲善其事,必先利其器” 针对代码审计常用的工具分为三个方面:开发编辑器,代码扫描工具以及反编译工具。本文根据自己喜好主推一下三个工具和一个不错的小脚本
代码扫描工具推荐fortify
反编译工具推荐jdk-gui
另外附上比较好用的危险函数扫描的python2小脚本
https://github.com/Cryin/JavaID
距今为止市面还没有一个工具可以完全的代替人工,高深层次漏洞还是需要人工自己去审计,代码扫描出的漏洞也是五花八门,往往需要我们人工去审计一遍,一般常用一下三种方法:
正向追踪法是先找出外部传入接口的请求,对参数一路追踪,看参数是否传入高危方法中,或者在传递过程中是否有逻辑漏洞产生,数据流一般是:api接口->控制类controller->service的逻辑处理->dao层。反向追踪法是检查函数和方法的参数并查看参数传递与处理,看最初调用的实参是否可控。此方法最常用的有mybatis框架审计SQL注入。功能点定向审计法是比较依赖审计人员的安全经验和代码审计经验,针对业务功能点快速审查该功能点可能存在的漏洞。此方法多用于熟悉的某业务功能点模块化的审计。
相关资源