【创宇小课堂】Java代码审计入门指南

发布于 2021-09-04 17:23 ,所属分类:软件编程学习资料

代码审计是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。现在主流的审计方式一般都是工具扫描加人工审计的方式,因此在着手Java代码之前我们必须具备一定的Java编程能力,漏洞分析能力,以及局部代码调试能力。本篇文章主要包括Java代码审计的学习路线、要学习的Java基础和框架、Java代码审计的checklist,使用比较得心应手的工具以及人工做审计时的一些方法总结。

根据 TIOBE 官方最新发布了 8 月的编程语言榜单显示Java语言依旧还是稳居前三(排行榜如下),Java语言距今已有26年发展历史,被称之为企业级编程语言,更新至今已是相当的成熟。这样表明Java代码审计工作是比较有前景的。

2021年8月份编程语言榜单

建议学习路线


对于安全从业者学习路线为:
对于开发从业者的学习路线为:

Java 基础及框架学习


java基础和框架学习这块针对的是没有Java基础的同学,可以从以下:前端学习、基础与逻辑运算、面向对象,Java SE java web、框架学习等六个方面逐个的进行学习充能,方便在之后的漏洞审计中可以快速的确定存在漏洞的点。如果是有开发经验的同学可以直接绕过这个环节,直接对漏洞模块进行学习。

漏洞初级与晋级


漏洞初级主要针对那些没有从事过渗透测试和安服工作的同学,在这个阶段我们必须对常规漏洞要明白其原理,危害以及常规的防御手段。而漏洞晋级阶段是将漏洞深入Java代码层中学习其产生和修复方法,这个阶段我们需要找一些漏洞代码事例来自行研究分析,以便加深自己对Java中漏洞的理解和掌握。以下是一个根据信息安全技术-代码安全审计规范(GB-T 39412-2020)总结的Java代码审计checklist

审计模块
审计类型
代码审计具体项
业务功能安全
数据清洗
XSS(跨站脚本攻击)
SQL注入
命令执行
逻辑判断缺陷(死循环,永真或永假)
过滤器存在缺陷
URL重定向
日志伪造
XML注入
外部实体注入
Xquery注入
XPath注入
CSRF(客户端跨站请求伪造)
SSRF(服务端跨站请求伪造)
LDAP注入
CRLF注入
CORS(跨域资源共享)
IP伪造
数据加密与保护
弱口令(长度,复杂度)
弱加密算法
弱密钥(长度,复杂度)
明文传输
密码自动填充
硬编码(代码中,配置文件中)
重要数据未脱敏
密码明文存储
敏感信息暴露
邮件服务器建立未加密的连接
不安全的SSL:过于广泛的信任证书
会话安全
会话固定
注销的会话使用
访问控制
用户名枚举
暴力破解
越权(垂直越权/水平越权)
未授权访问
日志安全
日志伪造
代码实现安全
面向对象程序安全
反序列化漏洞
并发程序安全
拒绝服务
函数调用安全
不安全的随机数
异常抛出信息泄露
资源使用安全
资源管理
未及时释放文件资源
文件管理
不安全的临时文件
未及时释放文件资源
任意文件上传
任意文件下载
任意文件删除
任意文件读取
路径遍历
文件包含
环境安全
环境安全
遗留调试代码
使用不安全的第三方组件
不安全的配置

工具使用


俗话说“工欲善其事,必先利其器” 针对代码审计常用的工具分为三个方面:开发编辑器,代码扫描工具以及反编译工具。本文根据自己喜好主推一下三个工具和一个不错的小脚本

开发编辑器推荐IDEA

代码扫描工具推荐fortify


反编译工具推荐jdk-gui


另外附上比较好用的危险函数扫描的python2小脚本

https://github.com/Cryin/JavaID

人工审计方法总结


距今为止市面还没有一个工具可以完全的代替人工,高深层次漏洞还是需要人工自己去审计,代码扫描出的漏洞也是五花八门,往往需要我们人工去审计一遍,一般常用一下三种方法:

正向追踪法是先找出外部传入接口的请求,对参数一路追踪,看参数是否传入高危方法中,或者在传递过程中是否有逻辑漏洞产生,数据流一般是:api接口->控制类controller->service的逻辑处理->dao层。

反向追踪法是检查函数和方法的参数并查看参数传递与处理,看最初调用的实参是否可控。此方法最常用的有mybatis框架审计SQL注入。

功能点定向审计法是比较依赖审计人员的安全经验和代码审计经验,针对业务功能点快速审查该功能点可能存在的漏洞。此方法多用于熟悉的某业务功能点模块化的审计。


相关资源