代码审计是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。现在主流的审计方式一般都是工具扫描加人工审计的方式,因此在着手Java代码之前我们必须具备一定的Java编程能力,漏洞分析能力,以及局部代码调试能力。本篇文章主要包括Java代码审计的学习路线、要学习的Java基础和框架、Java代码审计的checklist,使用比较得心应手的工具以及人工做审计时的一些方法总结。
根据 TIOBE 官方新发布了 8 月的编程语言榜单显示Java语言依旧还是稳居前三(排行榜如下),Java语言距今已有26年发展历史,被称之为企业级编程语言,更新至今已是相当的成熟。这样表明Java代码审计工作是比较有前景的。
2023年8月份编程语言榜单
建议学习路线对于安全从业者学习路线为:
对于开发从业者的学习路线为:
Java 基础及框架学习java基础和框架学习这块针对的是没有Java基础的同学,可以从以下:前端学习、基础与逻辑运算、面向对象,Java SE java web、框架学习等六个方面逐个的进行学习充能,方便在之后的漏洞审计中可以快速的确定存在漏洞的点。如果是有开发经验的同学可以直接绕过这个环节,直接对漏洞模块进行学习。
漏洞初级与晋级漏洞初级主要针对那些没有从事过渗透测试和安服工作的同学,在这个阶段我们必须对常规漏洞要明白其原理,危害以及常规的防御手段。而漏洞晋级阶段是将漏洞深入Java代码层中学习其产生和修复方法,这个阶段我们需要找一些漏洞代码事例来自行研究分析,以便加深自己对Java中漏洞的理解和掌握。以下是一个根据信息安全技术-代码安全审计规范(GB-T 39412-2023)总结的Java代码审计checklist
审计模块
审计类型
代码审计具体项
业务功能安全
数据清洗
XSS(跨站脚本攻击)
SQL注入
命令执行
逻辑判断缺陷(死循环,永真或永假)
过滤器存在缺陷
URL重定向
日志伪造
XML注入
外部实体注入
Xquery注入
XPath注入
CSRF(客户端跨站请求伪造)
SSRF(服务端跨站请求伪造)
LDAP注入
CRLF注入
CORS(跨域资源共享)
IP伪造
数据加密与保护
弱口令(长度,复杂度)
弱加密算法
弱密钥(长度,复杂度)
明文传输
密码自动填充
硬编码(代码中,配置文件中)
重要数据未脱敏
密码明文存储
敏感信息暴露
邮件服务器建立未加密的连接
不安全的SSL:过于广泛的信任证书
会话安全
会话固定
注销的会话使用
访问控制
用户名枚举
暴力破解
越权(垂直越权/水平越权)
未授权访问
日志安全
日志伪造
代码实现安全
面向对象程序安全
反序列化漏洞
并发程序安全
拒绝服务
函数调用安全
不安全的随机数
异常抛出信息泄露
资源使用安全
资源管理
未及时释放文件资源
文件管理
不安全的临时文件
未及时释放文件资源
任意文件上传
任意文件下载
任意文件删除
任意文件读取
路径遍历
文件包含
环境安全
环境安全
遗留调试代码
使用不安全的第三方组件
不安全的配置
工具使用俗话说“工欲善其事,必先利其器” 针对代码审计常用的工具分为三个方面:开发编辑器,代码扫描工具以及反编译工具。