1.写在前面🎂
市面上关于java代码审计的课程和教程比较少,所以我打算开设一个新的专栏,在这个专栏里面免费和大家分享一些从0到1的关于java代码审计相关的知识
我们将研发部门视为一类重要的读者群体。我们曾经和规模大小不一、业务类型各异的客户进行过交流。在交流的时候,可以明显地感觉到“偏科现象”。例如,产品经理、项目经理重业务而轻安全,开发人员可以编写丰富多彩的应用却不了解网站安全漏洞,测试人员可以抓住Bug但擒不住漏洞🎂
2.为什么要学java代码审计
背景需求
在我们实战经验中,Java相关组件的高危漏洞出现频次是比较高的。在网络空间攻防战中,如果能抢先攻击者一步掌握漏洞信息,就能在防守中占据主导地位。代码审计是发现漏洞非常有效的一种手段,是黑盒渗透测试的一个重要补充。
随着国内网络空间安全技术的发展,最初的一些只会使用黑客工具的“脚本小子”逐渐被能够进行代码分析、编写脚本的专业安全人员所代替。可以说,一个优秀的安全人员,必须要懂编程。但是懂编程仅仅是第一步,懂编程的人不胜其数,但将编程能力演变成代码审计能力,并且利用代码审计能力去挖掘漏洞的人却少之又少。代码审计是一门技术活,而对于Java 代码审计来说,又因为 Java 语言的多样性,导致 Java 审计技术难度更大,在市面上也很少能够看到系统性的Java代码审计的教程
黑夜给了我黑色的眼睛,我却用它寻找漏洞👀
实际需求
在“攻”方面,传统的通过扫描器扫描站点或利用 NDay来渗透的方式已经受到了很大的制约,现在及未来的典型渗透测试流程是:确定站点指纹→通过旁站扫描备份或开源程序得到源代码→代码审计→利用审计出来的漏洞制定修订措施,所以代码审计能力也越发重要
在“防”方面,国内有大量网站都曾遭到过拖库,其中相当一部分漏洞是因为代码导致的。如果企业安全人员具备代码审计的能力,能够提前做好代码审计工作,在黑客发现系统漏洞之前找出安全隐患,提前部署相应安全防御措施,可落实“安全左移”,提高应用系统的安全性,从而“治未病”
3.JAVA代码审计概述
代码审计(Code Audit)是一种以发现安全漏洞、程序错误和程序违规为目标的源代码分析技能。在实践过程中,可通过人工审查或者自动化工具的方式,对程序源代码进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议
4.代码审计的常用思路
接口排查(“正向追踪”):先找出从外部接口接收的参数,并跟踪其传递过程,观察是否有参数校验不严的变量传入高危方法中,或者在传递的过程中是否有代码逻辑漏洞(为了提高排查的全面性,代码审计人员可以向研发人员索要接口清单)
危险方法溯源(“逆向追踪”):检查敏感方法的参数,并查看参数的传递与处理,判断变量是否可控并且已经过严格的过滤
功能点定向审计:根据经验判断该类应用通常会在哪些功能中出现漏洞,直接审计该类功能的代码
第三方组件、中间件版本比对:检查Web应用所使用的第三方组件或中间件的版本是否受到已知漏洞的影响
补丁比对:通过对补丁做比对,反推漏洞出处
“黑盒测试”+“白盒测试”:我认为“白盒测试少直觉,黑盒测试难入微”。虽然代码审计的过程须以“白盒测试”为主,但是在过程中辅以“黑盒测试”将有助于快速定位到接口或做更全面的分析判断。交互式应用安全测试技术IAST就结合了“黑盒测试”与“白盒测试”的特点
“代码静态扫描工具”+“人工研判”:对于某些漏洞,使用代码静态扫描工具代替人工漏洞挖掘可以显著提高审计工作的效率。然而,代码静态扫描工具也存在“误报率高”等缺陷,具体使用时往往需要进一步研判
开发框架安全审计:审计Web应用所使用的开发框架是否存在自身安全性问题,或者由于用户使用不当而引发的安全风险
5.使用Vulhub快速搭建漏洞验证环境
Vulhub简介
Vulhub是基于Docker-compose技术的一款漏洞集成环境,旨在帮助研究人员更快速地搭建漏洞环境,避免在环境配置上浪费不必要的时间,使漏洞研究更专注于漏洞本身。Vulhub操作简单,即使没有Docker知识基础也可以轻松进行环境搭建。研究者只需进入特定的文件夹,使用命令即可完成一个特定漏洞环境的搭建。
下载vulhub到服务器
git clone https://github.com/vulhub/vulhub.git
下载并解压Vulhub后,目录结构如图所示。所有与Tomcat相关的漏洞都存放在Tomcat文件夹中,可根据Tomcat的每个漏洞的CVE编号细分文件夹。要启动相应的漏洞环境时,只需进入相应的文件夹使用Docker-compose
命令启动即可。
启动漏洞环境
启动漏洞环境十分简单,进入相应的漏洞文件夹中,输入一条命令即可完成。例如启动一个漏洞编号为CVE-2017-10271的漏洞环境,操作步骤如下。
进入\weblogic\CVE-2017-10271文件夹中
在cmd中输入docker-compose up –d,启动命令会根据该文件夹中的docker-compose.yml定义将相应的镜像拉取到本地,并且会自动启动容器以及进行必要的端口映射
启动成功:
成功运行容器后,即可通过浏览器访问漏洞环境,进行相应的漏洞验证和研究工作