说明:最近在系统学习这本书《Java代码审计 入门篇》由徐焱主编。内容来源于此书,笔者做的笔记。有兴趣可以读一下这本书,非常推荐的值得研究的一本书
java代码审计的重要性不言而喻,事前发现、预防,做到未雨绸缪,我认为是安全左移重要的一环,虽前期投入较多,会大大减少被攻击的口子。安全的防御体现在方方面面:代码安全、数据安全、隐私保护、业务安全、供应链安全等等
第一章 初识
1.意义
提前部署相应安全防御措施,可落实“安全左移”
CNVD安全月报显示,web应用漏洞占比仍大(仍需重点关注)
2.渗透测试流程
确定站点指纹—》通过旁站扫描备份或开源程序得到源代码—》代码审计—》利用审计出来的漏洞
3.云原生的代表技术
微服务和声明式 API
云原生安全建设初期源代码审计,将安全投资更多地放到开发安全:安全编码、供应链(软件库、开源软件)安全、镜像(仓库)安全等,可减少安全投资、增加攻击难度的效果
代码安全审计在当下以至未来均可对Web应用安全的防护重要作用。
4.能力
动静结合
动—具备调试程序的能力,代码逻辑比较复杂,通过多次调试或关键位置设置断点辅助理解
静—具备编程基础,了解基本语法与面向对象思想。阅读代码理解代码逻辑,善于查阅文档和资料,就能解决大多数问题
5.常用思路
1)接口排查(“正向追踪”)
找出从外部接口接收的参数,并跟踪其传递过程,
观察是否有参数校验不严的变量传入高危方法中,或者在传递的过程中是否有代码逻辑漏洞
2)危险方法溯源(“逆向追踪”)
检查敏感方法的参数,并查看参数的传递与处理,判断变量是否可控且是否有严格过滤
3)功能点定向审计
根据经验判断哪些功能点容易出现漏洞
4)第三方组件、中间件版本比对
web应用所使用的第三方组件或中间件的版本是否受到已知漏洞的影响
5)补丁比对
对补丁做对比,反推漏洞出处
6)黑盒+白盒测试
“白盒少直觉,黑盒难入微”
以白盒为主,在过程中辅以黑盒将快速定位到接口或做更全面的分析判断
7)代码静态扫描工具+人工研判
代码静态扫描工具代替人工漏洞挖掘可显著提高审计工作效率
但误报率高,需要人工研判
8)开发框架安全审计
审计web应用所使用的开发框架是否存在自身安全性问题
第二章 环境搭建
1.jdk的下载与安装
这里不介绍
2.docker
1)简介
轻量级的虚拟机。借助docker制作漏洞运行环境,便于后续调试和保存漏洞特定环境。
漏洞环境集合Vulhub,基于docker和docker-compose来搭建的
(安全研究可直接使用docker生成一个带有特定漏洞的容器进行调试分析,减少在环境配置上的消耗,专注于研究漏洞本身)
2)安装
下载安装:https://www.runoob.com/docker/docker-tutorial.html
macOS/Ubuntu/CentOS/Windows
3)配置过程(这里是win10)
下载—》运行Docker Desktop Installer.exe—》next直至安装—》运行桌面Docker Desktop右键—》Settings---》网络因素限制,配置国内镜像源---》结合实际分配合理的镜像存放地址、内存大小---》Docker Engine---》registry-mirrors的值设定为“https://hub-mirror.c.163.com/---》Apply & Restart保存修改并重启
4)验证安装成功与否
打开命令行终端---》docker run ubuntu echo“helloworld”---》回显helloworld即成功安装
5)docker基本使用方法
docker镜像类比(软件的模版、系统的快照)
使用命令行方式进行镜 像的搜索、拉取、查看等,或者容器的开启与关闭等操作
6)镜像操作
- 搜索镜像:search命令 搜索指定名称和仓库的镜像,如搜索tomcat的镜像
docker search tomcat
- 拉取镜像:pull命令 拉取指定仓库和名称以及标签的镜像,如获取获取dordoka/tomcat 的镜像
docker pull dordoka/tomcat
- 查看镜像:images命令 读取已经拉取到本地的镜像文件。并列出镜像所存放仓库名、TAG标签、镜像编号、创建时间、镜像大小
- 删除镜像:rmi指令 删除已拉取到本地的镜像
镜像运行态,需先停止以这个镜像为模版生成的容器,容器停止时,可以-f强制删除镜像
注意:镜像被强制删除后,原先的容器仍然可以继续使用(比喻为镜像是修图软件的滤镜,容器是已经使用此滤镜生成的图片,滤镜删了这个使用了滤镜的图片还是存在的~)
7)容器操作
- 生成容器:run指令 以指定的镜像为模版生成对应的容器,并自动从仓库中拉取镜像到本地
如生成一个dordoka/tomcat的容器
docker run dordoka/tomcat
run指令接受多种参数
-p 容器内部端口绑定到指定的主机端口
-P 容器内部端口随机映射到主机的端口
-t 提供终端输入
-i 提供交互
-d 容器在后台运行
docker run -p 8080:8080 –d dordoka/tomcat
启动一个Tomcat的容器,希望可访问它的8080端口,并在容器启动后在后台默默运行(容器生成后可在浏览器访问本地的8080端口访问容器的Tomcat服务127.0.0.1:808/xx/xx)
第一个8080是本机的端口号,第二个是容器中运行Tomcat服务的端口号
生成容器以后,立即获得容器的交互式终端来管理容器内部的配置
docker run -it ubuntu 生成一个简易的Ubuntu系统容器,会获得一个交互式终端,可执行Linux的各类命令
2)退出容器 exit命令 注意终端用户名的变化
3)查看容器 ps命令 列出已生成且仍运行的容器,并且会列出容器的编号、所使用的镜像、端口映射等信息
还可添加参数筛选
-a 列出仍在运行和已经退出的容器
-q 仅列出容器的编号
4)停止容器 stop命令 将不需要运行的容器停止,就如同将电脑关机一样,状态Up变为Exited
docker stop 28
28停止容器、启动容器、进入容器和删除容器等操作,不需要提供完整的容器编号,只需填写编号的部分内容,docker会自动匹配到相应容器
5)启动容器 start命令
docker start 28
6)进入容器 exec命令
有时需要进入容器内部安装软件或修改配置
docker exec –it 6e /bin/bash 进入编号缩写为6e的容器内部
7)删除容器 rm命令
删除之前需要停止正在运行的容器停止,否则无法删除
docker rm 6e s删除编号为6e的容器
8)复制文件进出容器 cp命令
docker cp ./flag.txt 28:/var 将物理机的flag.txt文件复制到编号缩写为28的容器中var目录下
docker cp 28:/var/flag2.txt C:\Users\test 将容器的falg2.txt复制到物理机桌面的test文件夹中
3.使用Vulhub 快速搭建漏洞验证环境
基于docker-compose技术的一款漏洞集成环境
docker-compose简介:compose是用于定义和运行多容器docker应用程序的工具
方便地创建比较复杂的容器
启动漏洞环境:
进入相应的漏洞文件夹—》docker-compose up –d---》通过浏览器访问漏洞环境
4.远程调试
1)对jar包远程调试
使用IDEA
java –jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 xxx.jar作为启 动参数运行Jar 包
5.项目构建工具
1)maven
项目构建工具,可以对Java项目进行构建和管理
pom.xml文件用于管理源代码、配置文件、开发者 的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系 等
2)Swagger
开源软件框架,帮助开发人员设计、构建、记录和使用Restful Web应用,它将代码和文档融为一体
通过http://Path/swagger-ui.html 可为前端展示相关的API文档,并像使用postman以及Curl命令一样,通过web界面进行接口测试
第三章 代码审计辅助工具简介
1.代码编辑器
1)Sublime
轻量级、功能强大的代码及文本编辑器,允许用户以插件的形式扩展功能
2)IDEA
自带反编译、动态调试、代码搜索等
2.测试工具
1)Burp Suite
2)SwitchyOmega
代理管理插件
3)Max HackerBar
插件
4)postman
网页调试工具,能够为用户提供强大的 Web API&HTTP请求调试功能。postman能够发送任何类型的HTTP请求,方便测试人员观察响应的内容
5)postwoman
便捷的API接口调试工具,用于替代postman且免费开源、轻量级、快速美观的API调试工具,支持主流的restful接口调试外,还支持GraphQL 和webSocket
6)Tamper Data
是Firefox浏览器的一款web安全测试插件。功能:查看修改HTTP/HTTPS的请求头和请求参数;跟踪HTTP请求/响应并记时;对web站点进行安全测试(查阅资料,这款插件已经多年了,目前不怎么使用)
7)Marshalsec
开源的java反序列化测试工具,生成各类反序列化利用链,还可以快速启动恶意的RMI服务等
8)MySQL监视工具
监视所执行的SQL记录
a.MySQL日志查询工具
基于MySQL的日志查询、跟踪、分析工具。
b.MySQL monitor
是web版本的SQL记录实时监控工具
9)Beyond Compare
文件比较工具,代码审计人员快速比对两个版本代码的差别
3.反编译工具
需要审计的程序通常是一个.class文件或jar包。需要对程序进行反编译,以便于在代码审计时快速搜索关键字
1)JD-GUI
具有UI界面的反编译工具,界面简洁大方
2)FernFlower
比JD-GUI更强大,没有UI界面
java –jar fernflower.jar tomcat-jni.jar Test/
3)CFR
4)IDEA
4.java代码静态扫描工具
发现隐藏的漏洞,辅助
1)Fortify SCA –收费
2)VCG(VisualCodeGrepper) ---支持多语言
3)FindBugs与FindSecBugs插件
FindBugs 是Bug扫描插件,在IDEA可安装,不具备发现安全漏洞的能力
FindSecBugs 拓展发现安全漏洞的能力
4)SpotBugs
是FindBugs的继任者,二者用法一样
其他工具,收费的CheckMark、开源的Cobra等。或多或少存在误报、漏报
5.公开漏洞查找平台
1)CVE(Common Vulnerabilities & Exposures,通用漏披露)
会列出已公开披露的各种计算机安全漏洞
2)CVSS(通用漏洞评分系统)
3)NVD 美国国家通用漏洞数据库
同CVE一样会收录漏洞信息