- 版本变更纪要
- 1.2.0 版本 - 2019.9.5
- 重大变更
- 新增功能
- Bug 修复
- 1.1.2 版本 - 2019.7.11
- 通用改进
- Bug 修复
- 1.1.1 版本 - 2019.6.17
- 通用改进
- 1.1 版本 - 2019.6.6
- 重大变更
- 新增功能
- Bug 修复
- 1.0 正式版 - 2019.4.12
- 重大变更
- 新增功能
- 算法改进
- Bug 修复
- 1.0.0 RC1 版本 - 2019.1.3
- 新增功能
- 重大变更
- 算法改进
- Bug 修复
- 0.50 版本 - 2018.10.29
- 新增功能
- 算法改进
- 0.42 版本 - 2018.9.26
- 重大变更
- 新增功能
- Bug 修复
- 算法改进
- 0.41 版本 - 2018.9.17
- 重大变更
- 新增功能
- 算法改进
- Bug 修复
- 0.40 版本 - 2018.7.24
- 重大变更
- 新增功能
- 算法变更
- Bug 修复
- 其他变更
- 0.32 版本 - 2018.6.8
- 算法改进
- Bug 修复
- 其他变更
- 0.31 版本 - 2018.5.22
- 重大变更
- 算法变更
- 新增功能
- Bug 修复
- 0.30 版本 - 2018.4.27
- 重大变更
- 新增功能
- API 变更
- 算法改进
- BUG 修复
- 0.24 版本 - 2018.2.2
- BUG 修复
- 其他变更
- 1.2.0 版本 - 2019.9.5
- 0.23 版本 - 2018.1.23
- 重大变更
- 算法改进
- 0.22 版本 - 2018.1.17
- 重大变更
- 新增功能
- 算法改进
- API 变更
- Bug 修复
- 0.21 版本 - 2017.12.6
- 重大变更
- 新增功能
- 算法改进
- API 变更
- 其他变更
- 0.20 版本 - 2017.10.26
- 重大变更
- API 变更
- Hook 点变更
- 拦截日志变更
- 新增功能
- 算法改进
- 其他改动
- 0.13 版本 - 2017.09.22
- Bug 修复
- 0.12 版本 - 2017.09.14
- 新增功能
- 0.11 版本 - 2017.09.13
- Bug 修复
- 0.10 版本 - 2017.08.18
- 新增功能
- 新增功能
版本变更纪要
1.2.0 版本 - 2019.9.5
重大变更
通用变更
- 删除 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 分离的情况
增加
-prepend
参数,若开启则将-javaagent
参数放在最前面- 默认在后面附加
- 解决 jacoco 的兼容性问题 灰盒扫描工具
发布第一版灰盒扫描器,结合RASP挖掘漏洞的扫描器
Bug 修复
Java 版本
- 解决 JRockit 兼容性问题,改为 jni 获取网卡信息
- 解决 org.elasticsearch.client.RestClient 兼容性问题
- 解决 XXE 代码安全开关和 taglib 不兼容的问题
屏蔽 V8 execstack warning PHP 版本
修复报警日志里PHP版本号不对的问题 插件系统
修复
001-dir-1.jsp
即使在插件里关闭all_log
也不会拦截的问题
1.1.2 版本 - 2019.7.11
通用改进
管理后台
- 支持按照攻击类型决定是否报警
- 主机管理页面,支持导出agent列表
- 添加主机页面,修正 SpringBoot + Docker 安装命令
优化多处表格体验 Java 版本
syslog tcp 增加连接、发送超时
支持通过 rasp.jar 获取agent版本信息 检测插件
readFile hook 点忽略 war 包相关操作
Bug 修复
Java 版本
- 当主机名没有在 /etc/hosts 里绑定,会触发大量
hostname
命令执行调用的 BUG - 传给插件的堆栈,修复过滤不正确的问题
- 修复 Undertow 解析参数时的空指针异常问题
- 修复一处 XSS hook 点空指针异常
1.1.1 版本 - 2019.6.17
通用改进
管理后台
- 开启 gzip 压缩支持,减少网络流量
- 报警、基线日志保留时间支持自定义,默认 365 天
优化多处前端体验
- agent 异常日志增加堆栈详情展示
- 加强报警搜索功能
- 支持检测算法高级配置选项 Java 版本
修复堆栈过滤不全的问题
- 解决 emoji 表情包可能造成的编码问题
openrasp-v8 所有异常同步到 rasp.log 检测算法
修复 command_reflect 误报问题
- 删除 xss tag 超过10个就报警的算法
1.1 版本 - 2019.6.6
重大变更
通用变更
- 升级 Google v8 到 7.2 版本
语法解释器由antlr4替换为flex,降低内存占用 PHP 版本
替换 libstdc++ 为 libc++
- 去除 pcre 依赖
二进制包增加 Thread Safety 版本 Java 版本
替换 rhino 为 openrasp-v8
- SQL、SSRF 检测逻辑改为JS实现
暂时去除
JRockit JDK
支持,WebLogic 10.3.6 需要设置JAVA_VENDOR=Sun
来改用 Oracle JDK 插件系统精简 console.log 函数,删除颜色相关代码
- 传给检测插件的堆栈,过滤掉 com.baidu.openrasp 相关内容
新增功能
通用变更
- SQL异常增加密码错误监控
实现数据库连接弱口令检测 Java 版本
增加XXE代码安全开关,可以直接禁止外部实体加载
Bug 修复
通用修复
- 插件更新成功后,立即发出心跳,解决管理后台版本信息滞后问题
报警堆栈过滤掉 openrasp 相关内容 Java 版本
修复文件上传检测点误报问题,改为在用户使用了文件之后再检测
- 修复 Windows下,openrasp.yml 文件编码不正确的问题
- 修复 JBoss 12 以上无法自动安装的问题
- 解决 JSP 无法获取堆栈的问题
- 修复 Tomcat 下面 xss 拦截之后不会跳转的问题
- 修复一次心跳失败后,再也不会心跳的bug
- 解决 Tomcat 5 下面 html 注入功能不正常的问题
- 修复不重启安装,卸载后心跳线程残留问题
与PHP版本统一 log.maxbackup 逻辑,配置为1时保留今天和昨天的日志 管理后台
修复检测插件重复上传问题
- 前端首页增加缓存失效设置
- 修复 debug_level 字段不是数字的问题
- 当应用下面有在线主机,禁止删除应用
- 修复应用加固里 nosniff 拼错的问题,用户保存一次配置即可修复
1.0 正式版 - 2019.4.12
重大变更
通用变更
- 报警日志增加 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的问题
1.0.0 RC1 版本 - 2019.1.3
新增功能
Java 版本
增加 okhttp/okhttp3 hook点,用于 SSRF 检测 其他通用功能
发布管理后台第一版
- 增加远程管理功能,包括日志上传、插件下发、远程配置管理等等
- syslog 日志增加 tag 字段支持,可自定义
- LRU 由插件改为agent实现,覆盖 sql, ssrf, readFile, writeFile 几个检测点
重大变更
PHP 版本
- 正式去除 Windows 支持
算法改进
命令执行
- 增加 JBoss EL 反射命令执行的检测
- 新增 bash 命令解释器,可检测命令注入攻击
Bug 修复
- 修复 dubboRPC 下面,log4j 打印日志时因没有 requestMethod 导致空指针的bug
- 修复 PHP session + mysql handler 一处崩溃问题
- 修复 SpringBoot 1.5.9 + Embedded Tomcat Server 无法获取服务器版本号的问题
0.50 版本 - 2018.10.29
新增功能
Java 版本
正式支持 WebSphere,目前仅测试了 8.5、9.0 两个版本 其他
报警日志增加
algorithm
字段,用于标识具体算法名称
算法改进
任意文件下载
- 修复 ThinkPHP rewrite 导致的一个绝对路径误报问题
0.42 版本 - 2018.9.26
重大变更
通用
删除SQL慢查询hook点,但暂时保留代码 Java 版本
插件获取到的
Dubbo RPC
参数名称,从openrasp-dubbo-XXX
改为dubbo-XXX
新增功能
- 报警日志增加
request_method
字段,即请求方法
Bug 修复
- 修复在某些 tomcat 版本下,获取参数时会产生 No modifications are allowed to a locked ParameterMap 错误的问题
算法改进
Rename
修复 rename_webshell 一个潜在的误报问题 反序列化
堆栈算法增加 commons.collections4 检查
0.41 版本 - 2018.9.17
重大变更
Java 版本
block.url
配置选项改名为block.redirect_url
,并支持模板化配置- 即自动替换模板里的
%request_id%
关键词为当前请求ID PHP 版本
- 即自动替换模板里的
openrasp.block_url
配置选项改名为openrasp.block_redirect_url
- 并支持模板化配置,同Java版本
- 所有日志时间改为系统时间,不再使用PHP时区里的时间
- 解决 OpenRASP 报警日志跟 nginx/apache 访问日志无法一一对应的问题
删除 webshell_include 检测点,统一使用JS插件检测 JS API 接口
对于Java服务器,appBasePath 不再指向 webapps 目录,改为应用部署路径,比如
/tomcat/webapps/vulns
- RASP.sql_tokenize 数组元素改为字典,并增加token起始坐标、token结束坐标两个参数
- 改进后,
sqli_userinput
算法只需要再执行一遍 tokenize - 在有攻击的情况下,大幅度提升性能
- 改进后,
新增功能
Java 版本
- 为 JBoss 增加基线检查
- 检查 /jmx-console/HTMLAdaptor 是否开启认证
- 当请求被拦截,且期望响应类型为 xml/json,用户可以自定义的响应内容
- 通过配置
block.content_xml
、block.content_json
模板来实现 - 主要为了处理 ajax 请求误报的情况
- 通过配置
- 增加 plugin.filter 配置
- 适用于 include/rename/readFile 等 hook 点
- 若开启,当文件不存在时,将不会进入检测逻辑(默认开启)
- 增加获取客户端真实IP的能力
- 用户可以在
openrasp.clientip_header
指定从哪个header里获取客户端真实IP - 默认是
clientip
请求头 - 报警日志里的字段为
client_ip
- 用户可以在
增加 Dubbo RPC 基础数据类型支持
- JS 插件可以获取到RPC参数,名字为
openrasp-dubbo-X
PHP 版本
- JS 插件可以获取到RPC参数,名字为
支持通过
openrasp.hooks_ignore=all
来禁用全部 hook 点- 增加获取客户端真实IP的能力,同 Java 版本
- 当请求被拦截,且期望响应类型为 xml/json,用户可以自定义的响应内容,同 Java 版本
- 增加 openrasp.plugin_filter 配置,同 Java 版本
算法改进
SSRF
修复 @小猪"\ 报告的 XXE、SSRF 绕过问题,默认拦截
netloc://
、jar://
等更多不安全的协议 OGNLhook 点改为
Ognl.topLevelExpression
,以修复 @阿远 报告的 OGNL 检测报警不正确的问题 SQLi增加懒加载和预过滤机制,仅当需要 tokenize 的时候才执行,提升性能
使用链表替换数组,优化JS LRU实现,提升性能 XXE
修复 @凌霄 反馈的 xxe_file 算法,产生大量报警日志问题
- 通过忽略扩展名为 dtd/xml 的实体来解决 文件目录遍历、任意文件包含
增加新的检测算法,当用户输入包含遍历特征,且用户输入位于目录结尾,判定为文件目录遍历
修复 @酒馆游侠 报告的 confluence 5.8 AFD 报警消息不正确的问题
- 当用户传入 file:///etc/passwd,但实际读取的是 /etc/passwd,会导致绕过,已修复 文件写入
writeFile_script 默认改成 ignore,避免大量无用日志 重命名监控
增加过滤,当源文件包含扩展名时才进入检测逻辑,以修复 @萝卜 报告的 larvael 框架下的误报问题
增加过滤,当源和目标都是文件的时候才进入检测逻辑 慢查询
由于无法获取对应的SQL语句,所以默认禁用了慢查询检测;禁用此hook点还可以提高Java版本的性能。
Bug 修复
PHP 版本
- 修复 array_filter 参数处理不正确的问题
- 修正报警日志里, URL 字段缺少域名的问题
0.40 版本 - 2018.7.24
重大变更
Java 版本
- 命令执行 hook 点,命令参数统一改为字符串形式
所有报警消息改为英文,下个版本增加翻译支持 PHP 版本
所有报警消息改为英文,下个版本增加翻译支持
新增功能
PHP 版本
- 正式支持 PHP 7.0-7.2
- 增加对 SQL prepared statement 的支持
使用 v8 default platform 替换自定义 platform,提供更通用的后台任务能力和错误溯源能力 Java 版本
增加 rename hook 点
算法变更
- 命令执行
- 增加对 FreeMarker 模板执行命令的识别
- 修复 @加菲猫 反馈的 cacti 误报问题
- 默认不再拦截所有的命令执行
- 若完全没有命令执行需求请手动修改
command_other
算法开关为block
- 此开关不影响反序列化命令执行的拦截,或者其他算法的检测
- 若完全没有命令执行需求请手动修改
- SSRF
- 增加对特殊协议的检测,以及对应的检测开关。包括
php://
、file://
等等 - 用户输入匹配算法,增加对
127.X.X.X
的识别 - 增加 @dos_man 反馈的一个 dnslog 地址
*.tu4.org
- 增加对特殊协议的检测,以及对应的检测开关。包括
- 文件目录遍历
- 修复一个 @Leesec 报告的
/../../
检出绕过问题
- 修复一个 @Leesec 报告的
- PHP 堆栈检测算法
- 修复 @Ezreal 报告的一个
call_user_func
误报问题
- 修复 @Ezreal 报告的一个
- 后门上传检测
- 增加对 rename 的监控,防止通过重命名写入 webshell
- SQL 注入
- 增加全局LRU缓存,当检测结果为 ignore 时不再重复检测,以提高性能
- 用户输入匹配算法,参数最短长度可配置
- 增加对
into outfile
的检测,并增加相应的检测开关
Bug 修复
PHP 版本
- 增加60多个单元测试,修复2处参数解析错误问题
- 优化不同协议的处理逻辑,若协议不支持写操作,将不再进入检测插件
- 修复一个左右斜杠混用,导致的路径精简失败的问题
其他变更
- 增加新的拦截页面
0.32 版本 - 2018.6.8
算法改进
- 为所有检测算法增加开关
- 用户可通过编辑JS插件头部的配置,来控制某个算法是否开启
- ssrf_common 算法,增加对
ceye.io
、transfer.sh
的检测和拦截
Bug 修复
- 解决 Resin 3.1.8 一个 classloader 兼容性问题
- 修复 SQLParser 一处语法解析错误
- 通过修改包名,解决 mozilla rhino 加载冲突问题
其他变更
- 使用v8引擎的snapshot特性,以加快v8实例启动速度
0.31 版本 - 2018.5.22
重大变更
- Java 版本
- Java 包名改为
com.baidu.rasp
- 在升级前,用户需要手动删除
rasp/conf/rasp-log4j.xml
文件 - 待应用启动后,OpenRASP 会自动生成新的日志配置文件
- 在升级前,用户需要手动删除
- 解决高版本 JDK 兼容性问题,ISSUE: rhino jdk8u162 兼容性问题 #98
- 为了降低 Hook 点开发成本,Hook 框架改为 JavaAssist
- Java 包名改为
- RaspInstall - OpenRASP 自动安装程序
- 为了支持自动卸载,我们调整了 RaspInstall.jar 的命令行参数
- java -jar RaspInstall.jar -install /home/tomcat
- java -jar RaspInstall.jar -uninstall /home/tomcat
- 为了支持自动卸载,我们调整了 RaspInstall.jar 的命令行参数
算法变更
- SQLi 检测算法 #2,默认关闭常量对比算法
- 在真实业务里,经常有编码不规范的情况,会造成误报,e.g
AND ((0='' OR 0='0')
- 在真实业务里,经常有编码不规范的情况,会造成误报,e.g
- 命令执行检测逻辑调整
- 为了检测非常规的反序列化、命令执行漏洞,当命令执行来自非 HTTP 请求,也将会进入检测点
- 适合检测 CVE-2016-8735、CVE-2018-1270 等漏洞
新增功能
- Java 版本增加 ascii banner,启动时打印
- 增加 JDBC Prepared SQL Hook 点
- 支持 Resin 3.X、4.X 服务器
- 增加自定义编码配置,允许用户设置
context.parameter
的编码 - 增加 jnotify 异常的获取
Bug 修复
- 由 @园长MM 反馈
- ProcessBuilder 存在绕过,我们将 Hook 点改为了更底层的 UNIXProcess、ProcessImpl 类
- PHP 版本
- 当文件不存在,file_put_contents 不会调用检测插件,已修复
- 解决日志模块一处内存泄露问题
0.30 版本 - 2018.4.27
重大变更
- Java 版本
- 调试开关配置选项,由
debug_level
改为debug.level
- 调试开关配置选项,由
新增功能
- 增加对 PHP 5.X 的支持
- Linux 5.3 ~ 5.6
- Windows 5.6 (仅线程安全版本)
- Mac homebrew PHP 5.6
- PHP 安全基线检查
- INI 配置审计
- allow_url_include
- expose_php
- display_errors
- yaml.decode
- 数据库连接账号审计
- INI 配置审计
- 其他 PHP 版本支持的功能
- SQL 慢查询审计
- 测试用例增强
- 增加 PHP 测试用例
- 增加简易导航页面
- 统一增加可点击链接,减少对命令行的依赖
- 增加PHP版本性能测试报告
- discuz/wordpress 性能损耗,都在 2% 左右
- 开放基于 docker 的自动化漏洞测试环境 - app-env-docker
API 变更
- directory hook 点,增加 stack 参数
- ssrf hook 点,增加 ip 参数
算法改进
- SQLi 检测算法增强
- 增加对 UNION NULL 语句的检测
- 语句规范检查算法,拦截常见盲注函数,e.g
ord
、chr
- 为数据库管理器检测算法,单独增加控制开关
- SSRF 检测算法增强
- 当请求的URL来自用户输入,且地址是内网地址,将会被并拦截
- Java - 反序列化检测
- 拦截通过 ysoserial 执行命令的攻击代码
- PHP - 增加对中国菜刀的检测
- 基于堆栈识别异常,拦截文件管理器、命令执行操作
- 基于用户输入识别,部分样本可直接拦截,e.g
<?php eval($_POST[0]); ?>
- PHP - 拦截异常的回调操作,e.g
array_map("system", $whatever)
- 具体拦截哪些回调,请参考
openrasp.callable_blacklists
默认配置
- 具体拦截哪些回调,请参考
BUG 修复
- 由 @计算姬 反馈
- SQLi算法#1 - 当用户输入为纯数字时,且多次出现在SQL语句中,会产生误报,已经解决
0.24 版本 - 2018.2.2
BUG 修复
- 自动安装程序
- 解决无法识别 JBoss 4.0.3 的问题
其他变更
- 抓取 RASP.sql_tokenize 错误信息,并打印到
plugin.log
0.23 版本 - 2018.1.23
重大变更
- 删除
reflection
hook 点- 部分框架会大量调用反射,影响性能
- 我们测试了一些金融业务,新版性能损耗由
10%
下降到5%
- 基于反射的检查,移动到
command
hook 点,检测能力不变
算法改进
- SSRF 检测算法增强,增加更多常用域名检测
0.22 版本 - 2018.1.17
重大变更
- 对于Java版本,
SQLi/SSRF
检测算法改为Java原生实现,进一步提高性能- 通过在插件修改
algorithm.config
配置来控制检测逻辑
- 通过在插件修改
- 开源协议由
BSD-3
切换为Apache License 2.0
,方便商用 - 修改
context.parameter
获取逻辑- 当JSP脚本读取过参数,JS插件才能读取到。这样可以减少误报,还可以提高SQLi算法#1的性能
- 支持过期日志自动删除功能,默认保留最近30天日志
- 通过给 log4j 1.X 打补丁来实现
- 升级前,用户需要手动删除
rasp/conf/rasp-log4j.xml
,程序会在启动时,自动生成新的
新增功能
- 支持 JBoss 7.X
- 支持在响应里插入 HTML 代码,可用于检测
CSRF/后台盲打
,该功能默认关闭 - rasp.properties 里的配置选项,除了
hooks.ignore
以外,开始支持动态更新,即修改后立即生效 - 拦截攻击时,支持自定义响应状态码
- 默认
400
- 默认
- 安全基线
- 支持 Tomcat
Directory Index
检查
- 支持 Tomcat
- 预编译JS代码,启动时间由原先的
8s
下降到3s
左右 - 增加调试开关,用于收集hook点进入次数、时间消耗等等
算法改进
- 正式支持 SSRF 漏洞检测,包括以下三种场景
- URL.openConnection
- commons-httpclient
- httpclient
API 变更
RASP.config()
接口改名为RASP.config_set()
,并增加相关调试日志- 增加
RASP.get_jsengine()
接口,用于获取JS引擎名称
Bug 修复
- #84: request.setCharacterEncoding 编码问题
- 解决因为没有写权限,导致
rasp-log4j.xml
释放失败的问题- 在新版本里,RaspInstall 会主动修改
rasp
目录权限
- 在新版本里,RaspInstall 会主动修改
- 基线检查日志,增加调用堆栈信息
- 当应用使用了高权限数据库账号,方便定位具体代码
- 重写
catalina.sh
脚本修改逻辑,支持重复安装- 在修改的配置周围,增加类似
### BEGIN OPENRASP ###
的标记
- 在修改的配置周围,增加类似
0.21 版本 - 2017.12.6
重大变更
- 安全基线日志拆分到单独的文件里
- 方便采集不同类型的日志
- 升级前,用户需要手动删除
rasp/conf/rasp-log4j.xml
文件
新增功能
- 检测 JSTL 方式的文件包含漏洞,或者SSRF漏洞利用
- 支持
DB2
数据库,我们仅测试了免费版本,9.7
和10.5
- 服务器安全基线
- 新增数据库连接账号审计功能,e.g 使用
root
连接 mysql、使用sa
连接 mssql 等等
- 新增数据库连接账号审计功能,e.g 使用
- 增加慢查询审计功能
- 使用
SELECT
语句读取超过500行数据,可配置
- 使用
- 支持
Syslog TCP
方式传输报警日志
算法改进
- 公开SQL注入检测算法 #2 - 基于语句规范,可修改插件配置
- 禁止多语句执行,e.g
select 123; select 456
- 禁止16进制字符串,e.g
load_file(0x41424344)
- 禁止MySQL版本号注释,e.g
/*!12345
- 禁止数字常量比较操作,e.g
SELECT 1 FROM dual WHERE 8778 <> 8778
- 禁止使用黑名单里的函数,e.g
load_file
,benchmark
,pg_sleep
, …
- 禁止多语句执行,e.g
API 变更
- 新增 context.appBasePath 接口,可获取web应用根目录
- 新增 session 操作接口,context.session.setSession、context.session.getSession
其他变更
- 插件拆分,部分不常用的检测逻辑,比如扫描器识别功能,移动到 addons 目录
- RaspInstall 源代码开放
- CVE漏洞覆盖列表开放
0.20 版本 - 2017.10.26
重大变更
- 性能优化
- 由于 jni 性能太差,我们决定使用 Mozilla Rhino 最新版本替换掉 j2v8
- 在最坏的情况下,对服务器影响在
2%
左右,具体可查看性能测试报告
- 放弃对 WebLogic 的支持
API 变更
- 增加 SQL tokenize 接口:
RASP.sql_tokenize
- 增加 SESSION 修改接口:
context.session.getSession / context.session.setSession
readFile
接口,当文件不存在时,将不再调用插件
Hook 点变更
- 增加 webdav hook 点,可检查
MOVE
、COPY
操作
拦截日志变更
- 增加 HTTP Referer 字段
- 增加
request_id
参数,用于标识一个攻击 - 增加
event_type
字段,用于标志日志类型 attack_time
字段改名为event_time
attack_params
字段改为 JSON 形式(以前是字符串,需要重新配置ES mapping)
新增功能
- 支持自定义拦截页面
- 通过
block.url
配置 - 默认是小恐龙页面
- 通过
- 增加服务器安全基线检查功能,目前仅支持 tomcat,可以检测如下非安全配置
- manager/html 存在弱口令
- JSESSION 未开启 httpOnly
- tomcat 以 root启动
- 默认的 webapps 没有删除
- 当发生攻击,插件会额外输出
confidence
字段,用于标识检测结果可靠性 - 所有响应增加
X-Protected-By: OpenRASP
响应头 - 支持 HTTP 报警推送
- 增加对 Jetty、JBoss 5~6 服务器的支持
- 增加 log.maxstack 配置选项,用于配置 alarm 日志里最大堆栈
算法改进
- 增加扫描器识别,根据UA、Header(默认关闭,请手动修改插件)
- SQL注入检测算法 #1 开放
- 敏感文件下载漏洞检测
其他改动
- JBoss XXE Hook 点次数优化,提高性能
0.13 版本 - 2017.09.22
Bug 修复
- 当JS插件发生运行时错误,不应该打印报警日志
- JS插件出错时,在 plugin.log 打印详细堆栈和错误信息
0.12 版本 - 2017.09.14
新增功能
- 增加一个异常流识别,当某些类通过反射进行调用时,会触发插件检测逻辑
0.11 版本 - 2017.09.13
Bug 修复
- 增加 doFilter hook 点,修复 struts 系列框架下,无法检测漏洞的问题
0.10 版本 - 2017.08.18
新增功能
- 支持多种 Java 服务器、数据库服务器
- 支持多种 SIEM 应用
- 完成第一版官方检测插件
- 支持多个 hook 点