背景
传统的Web应用防护技术,如WAF(Web Application Firewall),因为是依据已定的则进行拦截,因此常常不能应对各种经过编码或是变形的攻击,同时规则的好坏对漏报、误报率影响较大,且无法对未披露利用方式的漏洞进行防御。
因此,本文基于新兴的RASP技术,设计并实现了一个针对Java的漏洞防护系统。通过在漏洞利用的关键函数上埋下RASP探针,实现运行时实时检测和日志记录,在能检测到漏洞并实现告警页面重定向的同时,借助ELK(Elasticsearch、Logstash、Kibana)架构来对攻击者信息进行可视化管理以便溯源分析。最后,实验结果表明,本文设计的系统具有良好的拦截效果和兼容性,有一定的应用场景。
关键词:RASP;漏洞防护;Java Web;检测和拦截;ELK;日志可视化
成果及展望
✔漏洞防护:
- RCE
- 任意文件读取
- SQL注入
- 反序列化
- JNDI注入
- SpEL表达式注入
✔兼容性:
- Spring Boot、Tomcat
- Java17、Java8
- 高低版本Servlet(高版本中包名为Jakarta而不是Javax)
✔攻击日志可视化管理:
- 总日志浏览
- 攻击信息可视化
❌防护规则还需完善(ORZ,目前非常简陋,后期赶时间,大多用的JRASP的规则,哈哈哈,Sorry
❌漏洞的覆盖面较低,目前完成六类漏洞
❌缺少一个用户配置读取模块,只能硬编码规则
❌做着做着发现,Byte Buddy其实好像比Javassit更好用,哈哈 ,但是不想重构
1.准备工作:
git clone https://github.com/chenlvtang/TinyRASP.git
下载elasticsearch-8.7.0、kibana-8.7.0、logstash-8.6.2、mysql,并把Config目录中的配置文件放入对应的组件,手动依次开启服务,或使用run.bat批量开启。
在MySQL中创建spring用户,密码默认为spring,并创建spring数据库,将foo.sql文件导入Spring数据库。
2.Agent编译:
mvn install
mvn clean package shade:shade
3.JDK17启动SpringVulTest,JDK8启动TomcatVulTest,并添加JVM启动参数:
-javaagent:/path/to/Agent.jar
运行测试环境
感谢各位师傅的技术博客、开源项目的慷慨大方,感谢ChatGPT,JRASP、OpenRASP,感谢感谢(●ˇ∀ˇ●)
本项目遵循WTFPL协议,即"Do What The Fuck You Want To Public License"。
https://github.com/jvm-rasp/jrasp-agent
https://github.com/baidu/openrasp
https://www.cnblogs.com/bitterz/p/15152287.html