OpenRASP于2017年4月立项,其初衷是为了提供一套通用的安全框架,并提高应用对未知漏洞的防护能力。Struts2 系列漏洞属于典型的未知漏洞。从 S2-001 到最新的 S2-057,它的特点是请求特征在不断变化,最终通过某种方式执行OGNL语句或者反序列化,接着获取系统权限。
RASP防护引擎运行与应用内部,可以很好的解决这个问题。无论是何种漏洞,它的最终目的无非是: 执行系统命令、上传webshell、拖库等等。于是我们实现了这样的安全框架: 不依赖请求特征检测攻击,而是在应用执行上述关键操作时,执行一段自定义的逻辑检查是否存在异常。
本次发布 OpenRASP 1.2 版本,大幅度降低 Java v8 内存占用,同时发布灰盒测试工具第一版。
重大变更
通用变更
- 删除 enforce_policy 配置,基线检测不再支持拦截
- 去除 MySQL duplicated key 错误监控
- 删除报警日志里的 stack_trace 字符串字段,统一使用 attack_params.stack 获取堆栈
- 若 Java/PHP agent 升级到 v1.2.0,那管理后台也必须升级,否则前端堆栈将展示为空值
新增功能
通用改进
- 主机名发生变化时,同步到管理后台
- 增加 host_type 字段,以标识是否为docker容器
管理后台
- 修复登录后无法跳回原URL的问题
插件系统
- 增加 requestEnd hook 点,请求结束时调用一次
- 增加 RASP.request() 接口,可在插件里发送 HTTP 请求
- 增加 RASP.get_version() 接口,可获取 agent 版本信息
- 增加 context.requestId 等多个字段
- 文件上传增加 dest_path/dest_realpath 两个参数(仅PHP版本)
- 新增 loadLibrary_unc 算法,当要加载的类库来自 UNC 路径时拦截
PHP 版本
- 增加 eval/assert hook 点
- 增加 debuglevel 配置,避免打印多余日志
Java 版本
- 对 JBoss、WebLogic 增加集群支持
- 增加关键hook点检查: requestEnd, request.parameterMap 不存在时拒绝启动
- 心跳间隔下限改为 10s
- 优化内存占用,减少50%左右
- 启动时打印 RASP ID,方便排查
- 解决当 Tomcat 主动 flush() 时不会检测 XSS 的问题
- 同时优化了XSS检测效率
- XSS 拦截时不再抛出异常(其他攻击类型还是会抛出)
自动安装程序
- 增加 SpringBoot 半自动安装,即只释放文件并修改配置,参数名为 -nodetect
- 增加对 yum 安装的 tomcat 的支持,即 bin 目录与 tomcat_home 分离的情况
- 增加
1-prepend
参数,若开启则将
1-javaagent参数放在最前面
- 默认在后面附加
- 解决 jacoco 的兼容性问题
灰盒扫描工具
- 发布第一版,结合RASP挖掘漏洞的扫描器
Bug 修复
Java 版本
- 解决 JRockit 兼容性问题,改为 jni 获取网卡信息
- 解决 org.elasticsearch.client.RestClient 兼容性问题
- 解决 XXE 代码安全开关和 taglib 不兼容的问题
- 屏蔽 V8 execstack warning
PHP 版本
- 修复报警日志里PHP版本号不对的问题
插件系统
- 修复
1001-dir-1.jsp
即使在插件里关闭
1all_log也不会拦截的问题