OpenRASP于2017年4月立项,其初衷是为了提供一套通用的安全框架,并提高应用对未知漏洞的防护能力。Struts2 系列漏洞属于典型的未知漏洞。从 S2-001 到最新的 S2-057,它的特点是请求特征在不断变化,最终通过某种方式执行OGNL语句或者反序列化,接着获取系统权限。
RASP防护引擎运行与应用内部,可以很好的解决这个问题。无论是何种漏洞,它的最终目的无非是: 执行系统命令、上传webshell、拖库等等。于是我们实现了这样的安全框架: 不依赖请求特征检测攻击,而是在应用执行上述关键操作时,执行一段自定义的逻辑检查是否存在异常。
本次发布 OpenRASP 1.0 正式版,加入对 WebLogic、Undertow、PHP 7.3 的支持,实现生产环境可用。
重大变更
通用变更
- 报警日志增加 header 字段,并去除最外面的 user_agent、referer 重复字段
- 单机版配置文件改为 yaml
- 仅当拦截响应码设置为
302
时才输出 Location 头跳转,使用户可以打印自定义拦截内容
管理后台
- 在配置文件里删除 AgentServerURL、PanelServerURL 两个项目,改为在管理后台界面上修改
- 首次访问后台会自动设置上述两个选项,若要开启负载均衡模式,请手动修正 Agent 服务器列表
PHP 版本
- 单机版默认禁用 fswatch。若有需求请使用
--enable-fswatch
编译参数开启 - 替换
rapidjson
为接口更加灵活的nlohmann/json
- cli 模式关闭基线检查,避免多余的日志。若有需求请使用
--enable-cli-support
编译参数开启 - rasp-install 增加 SELinux、open_basedir 检查,避免安装后无法使用的问题
Java 版本
- 去除
rasp-log4j.xml
相关启动参数。改为动态生成 log4j 配置的方式,用户不再需要配置
新增功能
通用功能
- 新增 JSON 参数解析,即
context.json
- 新增应用加固功能,可防护点击劫持、MIME嗅探、下载文件自动运行、反射XSS
- 支持反编译功能,产生报警时可同时获取用户代码(仅 JDK 6-8、PHP 支持)
PHP 版本
- 新增
PHP 7.3
支持
Java 版本
- 新增
SpringBoot + Undertow
支持 - 新增
WebLogic
支持 - 新增
JBoss 6-8
支持(暂不支持自动安装) - 新增
JDK 11
支持 - 增加应用环境变量采集
- 加入实验性的不重启安装、不重启卸载功能,暂不支持不重启升级
管理后台
- 改进多处用户体验,提供更加完善的报警搜索体验
- 新增漏洞聚合展示,避免在漏洞利用阶段攻击刷屏的问题
- 改进审计日志展示,增加类型字段和展示
- 新增客户端异常日志展示
算法改进
通用改进
- 增加开发模式开关,开启后会加载一些消耗性能的检测算法
- 默认开启观察模式
安全基线
- Tomcat 后台弱口令增加空密码检查
Path traversal
- 修复一处使用绝对路径下载文件,造成的 is_path_endswith_userinput 函数误报问题
- 拦截 Windows 下面使用
..\..\
列出目录的攻击
File Inclusion
- 修复在使用百度云BOS业务时,包含 phar:// 文件造成的误报问题
CMDi
- 新增常见渗透命令检测支持,默认只打印日志
SQLi
- 新增SQL异常检测,如语法错误、报错注入
- 修复 char/chr() 误报问题,仅当出现5次才报警
SSRF
- 调用检测插件时增加端口信息
- 拦截对阿里云 metadata 的访问
File Upload
- 报警日志增加 multipart 参数名称字段,方便构造请求
XSS
- 新增 xss_userinput 检测算法,拦截反射XSS
- xss_echo 算法增加内容过滤,避免非攻击事件造成的报警(此算法无误报)
WebShell
- 拦截基于 LD_PRELOAD 的后门
Deserialization
- 拦截基于 JNDI 反射执行命令的攻击
Bug 修复
管理后台
- 修复 docker 拉取的 ElasticSearch 无法连接的问题
PHP 版本
- 修复当URL没有协议,SSRF检测点拿不到hostname的问题