Java Runtime Application Self-Protection 意思是Java应用自我保护系统,简称jrasp
。
jrasp-agent 是 jrasp 项目最核心的部分。
jrasp-agent 基于Java Agent技术对Java字节码进行修改,增加安全检测逻辑,对漏洞攻击实时检测与阻断。
- 安全插件可定制
- 检测逻辑低延时
- 插件热更新
- Java进程识别与自动注入
- 支持命令执行等的native方法hook,彻底防止绕过;
- 兼容 windows、mac 和 linux
- 体积小,核心jar包600KB
- cpu增加5% (正常请求下测试)
- 内存占用200MB以下
- 插件、守护进程HASH校验
- Agent与Daemon socket自定义通信协议与RSA非对称加密;
- 核心功能由自定义类加载器加载,与业务类隔离,提高从JVM内部攻击RASP的难度;
- 反射加固:RASP核心方法(如卸载、降级等)反射加固,防止被恶意反射;
- 不使用第三方框架,如servlet、json、sl4j2、apache-common等
jrasp-agent 的安全模块 目前支持的模块有:
- 1.命令执行模块 (native)
- 2.反序列化模块(jdk反序列化、fastjson、yaml、stream)
- 3.http模块(springboot、tomcat、jetty、undertown、spark)(IP黑名单、URL黑名单、扫描器识别)
- 4.xxe模块 (dom4j、jdom、jdk)
- 5.文件访问模块(io、nio)
- 6.表达式注入模块(spel、ognl)
- 7.sql注入(mysql)
- 8.JNDI注入 开发中的进行中的模块:
- 9.SSRF (进行中)
- 10.danger protocol (进行中)
- 11.DNS查询 (进行中)
- 12.Memory (进行中)
- 13.类加载器 (进行中)
- 14.attach (进行中)
- jdk6+ (jdk17以上需要修改jvm参数)
- 1 快速安装
curl https://jrasp-download.oss-cn-shanghai.aliyuncs.com/jrasp-install.sh|bash
需要说明的是:上面的安装脚本会将jrasp安装在/usr/local/
目录下
- 2.1 启动方式1 (debug or test)
使用attach
工具注入Java进程。进入到 jrasp 的安装目录下的bin目录下
cd ./jrasp/bin
对pid为46575的Java进程注入
./attach -p 46575
注入后,日志如下:
2022/09/29 18:04:28 attach java process,pid: 46575
2022/09/29 18:04:28 jvm create uds socket file success
2022/09/29 18:04:28 command socket init success: [0.0.0.0:51370]
2022/09/29 18:04:28 attach jvm success
agent 初始化日志在jrasp/logs
目录下的 jrasp-agent-0.log
- 2.2 启动方式2 (启动守护进程,适用于线上生产环境)
启动守护进程jrasp-daemon, 守护进程会自动发现Java进程、注入和更新配置等。 进入到 jrasp 的安装目录下的bin目录下,执行:
./jrasp-daemon
成功启动日志如下:
➜ ./jrasp-daemon
_ _____ _____ _____
| | | __ \ /\ / ____| | __ \
| | | |__) | / \ | (___ | |__) |
_ | | | _ / / /\ \ \___ \ | ___/
| |__| | | | \ \ / ____ \ ____) | | |
\____/ |_| \_\ /_/ \_\ |_____/ |_|
:: JVM RASP :: (v1.1.1.RELEASE) https://www.jrasp.com
{"level":"INFO","ts":"2023-01-08 22:30:21.150","caller":"jrasp-daemon/main.go:55","msg":"daemon startup","logId":1000,"ip":"192.168.8.145","hostName":"MacBook-Pro","pid":20333,"detail":"{\"agentMode\":\"dynamic\"}"}
{"level":"INFO","ts":"2023-01-08 22:30:21.150","caller":"jrasp-daemon/main.go:57","msg":"config id","logId":1030,"ip":"192.168.8.145","hostName":"MacBook-Pro","pid":20333,"detail":"{\"configId\":1}"}
需要注的是:线上环境 jrasp-daemon
配置进程自动拉起的systemctl
- 3 日志输出
所有的日志均在 jrasp/logs/
目录下
- jrasp-agent-0.log 记录java agent 的日志
- jrasp-daemon.log 记录守护进程的日志
- jrasp-attack-0.log 记录攻击日志
- jrasp-module-0.log 模块自身日志
jrasp-agent 产生的日志在本地磁盘上,可以使用日志收集工具如filebeat
或者logtail
传输给kafka
filebeat一键安装命令:
curl https://jrasp-download.oss-cn-shanghai.aliyuncs.com/filebeat-install.sh|bash
需要注意的是:仅支持公有云(如阿里云、腾讯云和华为云)环境;日志传输到jrasp官方提供的kafka集群上。
- jdk 1.8 (必需)
- golang 1.16+ (必需)
- maven 3.2.5 (必需)
您可以在macos/linux/windows系统上编译该项目,编译的系统必须与运行系统一致(即windows上编译仅限于windows运行)。
进入到 jrsap-agent/bin 目录下, 执行对应环境脚本即可。需要说明的是 macos/windows 仅供开发测试。
- linux
bash packages_linux.sh
- macos
bash packages_darwin.sh
加微信:sear2022
基于字节码修改的开源项目jvm-sandbox ,本项目中的部分hook类与检测算法参考open-rasp 感谢优秀的开源项目。
反哺开源项目:jrasp团队在借鉴开源项目的同时,发现jvm-sandbox/open-rasp等多个bug,并提交给项目社区,受到社区的好评。
如果您在使用该项目,请联系我们,添加在这里。
GPL3.0 (您可以在自身的项目中学习与使用,商业化必须获得授权)