JAVA审计学习笔记

前言:
代码审计涉及知识面较广,审计人员一方面要提高自身代码掌控能力,另一方面要多总结一些常用的高效审计技巧。
个人的思路是借助自动化的工具给出可能存在的缺陷清单,人工审计弥补工具的不足,先易后难。


工具准备:
IDEA(反编译)、
Eclipse、
Sublime Text、
Fortify SCA(基于源代码查找)、
Findbugs(基于字节码查找)

工作环境:
1.甲方公司审计专岗,
一般项目数量都比较多,有自己定制的SDL规范扫描器,代码审计更多变成了对SDL落地彻查。
2.外包服务的代码审计,
基本上不提供搭建环境的条件,因为很多情况下不给数据库,
有的提供项目大部分源代码,有的仅提供小部分源代码。
3.最理想环境,
搭建有环境可以进行Debug,通常在驻场审计服务中会碰到。


工作成果:
依据CVE公共漏洞字典表、OWASP十大Web漏洞,以及设备、软件厂商公布的漏洞库,
结合代码扫描工具结果验证编写报告,报告中给出风险等级、修复方法以及安全编码规范建议等服务。


一些老生常谈的JAVA技能:
常见框架:Strusts2、Spring boot、Spring MVC、SSH(Struts2+Spring+Hibernate)
注意ORM框架特殊性(Hibernate)
Filter、Interceptor
@RequestMapping注解
Application-context.xml、struts.xml、web.xml作用(审计切入点)
JavaWeb Servlet线程竞争

 

四种思路:
    逆向回溯审计
        逆向回溯的审计方式针对特征明显的安全漏洞挖掘是非常有效的。
        大多数安全问题是由于函数使用不当造成的,
        比如命令注入通常会使用Runtime.getRuntime().exec(command)执行外部的程序或者命令,
        另外比如SQL注入可以直接搜索查看SQL语句是否使用字符串动态拼接。
        OWASP TOP10的指纹识别率较高的安全问题
        Hibernate的HQL是对对象进行操作
        搜索有关字符串拼接的关键字。如Concat、append等。
        
    正向业务审计
        挖掘更有价值的漏洞,甲方进行自研产品的代码审计,就需要了解整个应用的业务逻辑,
        比如越权类漏洞,需要了解应用中权限划分,每一级别用户的功能,
        这样才能很好的发现并确定哪些操作是非法的。
        正向审计通常从前端页面开始,因为页面会有系统中大部分功能展示,
        找出功能所对应的URL就是我们所审计数据流的输入点,某系统修改个人资料处存在平行越权。
        SpingMVC的常用@RequestMapping注解为控制器指定可以处理哪些 URL 请求,
        也就是说可以直接通过在控制层搜索URL请求,即可找到控制层所对应的业务逻辑代码。
        
        根据Http请求跟踪到业务逻辑代码:
        1、SpringMVC或Spring boot
        在Java文件中相应的方法会有@RequestMapping(“/Login.do”)表示了直接把请求映射到业务逻辑代码上。
        2、Struts在config目录下有公共配置文件struts.xml,需要在xml配置一个action对应的处理类方法和返回的页面,
        通过对应的Action所在的路径找到业务逻辑代码。    
        
    敏感清单审计
        企业中进行代码审计工作的系统有以下几类:网银系统、门户类网站(包括后台管理系统)、购物类网站等,
        针对这几类系统身份权限校验是都需要审计的机制,网银系统着重审计转账交易功能,门户类网站主要是后台管理系统。
        其次弄清楚当前源代码项目所采用的框架结构,比如SSH(Struts+Spring+Hibernate)、Spring MVC等,
        这里可以通过查看lib目录下所使用的第三方Jar包来判断使用的框架类型,
        struts2框架需要struts2-core-xxxx.jar提供核心包,spring框架需要spring-core-xxxx.jar提供核心包。
        根据项目中所引入的jar包来判断使用的框架类型是一种比较快捷的方式。
        如果想全面的了解此项目中具体的框架使用、过滤器、Servlet分布等情况,可以通过web.xml配置文件来查看,
        最后跟踪数据流来定位缺陷代码。
        
    通读全文审计
        比较耗时,不好把握,不建议采用。


工作流程:
1.逆向回溯审计,拿到源代码后,Fortify SCA加载Firebug执行扫描,人工对扫描结果验证,编写代码审计报告。

2.正向业务审计,门槛较高,准备工作做好后,读配置文件熟悉项目结构,根据安全编码经验按业务模块进行,找常规漏洞和业务逻辑漏洞,编写代码审计报告。准备工作有三点,
    明确项目类型:该类型的项目可能存在常见漏洞的代码层原理及典型案例。
    配置文件分析:Application-context.xml、struts.xml、web.xml。    
    代码学习能力:熟读若干个有代表的业务用例,脑子里跟读一遍代码和画数据流图辅助理解业务。

3.通读全文审计,根据用户提供的测试环境、设计文档、使用手册,对应用系统的业务功能进行学习,对业务数据流进行梳理,检查关键环节是否进行了业务安全控制,检测完成后,需要从业务角度对威胁进行分析并归类。
全文审计最好搭配自动化扫描器进行。


补充:自动化审计基本原理
1.常规漏洞代码审计
根据规则,grep匹配源码文件内容。
2.检测不安全组件
根据规则,读取配置文件信息(匹配maven的依赖检测规则),是否包含已知缺陷版本。
3.正则检测硬编码
扫描出所有代码中的硬编码,需要人工验证内容属于敏感信息。
4.检测mybatis不安全SQL编码
获取项目文件中的mybatis配置文件(pom.xml和mapper.XML文件)


补充:业务层的Checklist
    程序初始安装
    站点信息泄漏
    文件上传
    文件管理
    登陆认证
    任意密码重置
    数据库备份恢复
    验证码绕过或爆破
    越权查看用户资料
    消费负数
    抓包改包充值漏洞
    交互页面存储型XSS

补充:代码层的Checklist
    Servlet线程竞争
    XML注入
    不正当的错误处理,更多见WebGoat8项目。

你可能感兴趣的:(路漫漫)