版本变更
Last updated
Last updated
管理后台
支持按照主机名、RASP ID或者主机IP搜索报警
增加心跳时间索引,解决大规模主机搜索卡顿问题
为了提高查询效率,主机离线判定方式改为固定的360s,不再根据心跳配置动态计算
支持在后台导出单条报警
支持删除过期依赖库数据,感谢@国产大熊猫反馈
升级beego到v1.12.3,感谢@大剑士反馈后台编译问题
Kafka推送时,将@timestamp从数字改为字符串,
增加漏洞级别字段,aka event_level
推送测试报警时,不再使用写死的假报警,而是从ES里搜索最新的报警作为测试数据
合入@strawberrybiscuits的补丁,解决IAST死锁问题
Java 版本
修复当Java不在$PATH时,resin安装会抛出异常的问题,感谢 @叶 反馈
修复WebLogic Windows下面自动安装失败的问题
修复Weblogic下面无法加载的问题(v1.3.3 引入)
修复log.path配置不生效的问题
修复快手公司反馈的字节流Hook错误的问题
修复@killer1278反馈的NIO文件删除hook点类型错误的问题
修复奇安信公司反馈的依赖库代码问题
合入@jekkay的补丁,修复非HTTP攻击报警数据会被覆盖的问题
合入@strawberrybiscuits的3个补丁,修复Apache Dubbo支持问题 、、
合入安天公司的多个补丁,由@xuing提供
修复某些情况下虚拟网卡mac可能为空的问题
修复Windows JDK9以上版本命令执行hook失效问题
修复MySQL 8.X ClientPreparedStatement Hook无效的问题
合入快手公司多个补丁,由@Venscor提供
修复配置合法性校验代码中,未能检查key长度的问题
修复BESResponseBodyHook参数个数错误问题
合入东方通官方提供的补丁
增加TongWeb 7.X版本支持
增加JNDI检测点,并增加一个阻断所有JNDI加载的算法
增加DNS检测点,并增加DNSLog域名的检测算法
安装程序增加-debuglevel
参数,支持安装时修改调试级别
PHP 版本
增加PHP 7.4支持
修复PHP 5.5下面,include检测点可能会崩溃的问题
检测插件
修复 @月射寒江 发现的Oracle SQL异常无法报警的问题
修复 @mattF123 报告的多个XXE绕过问题
按照 @Holy 的建议,增加反射写jspx文件的检测
管理后台
支持按照RASP目录搜索主机
修复部分报警展示问题
依赖库详情页面,改为按照上报时间排序
修复后台审计日志IP伪造问题,感谢 @k4n5ha0 反馈
修复清空数据时,依赖库信息没有同步删除的问题
Java 版本
支持 MySQL 8.X 驱动
支持开启jnotify、关闭jnotify,或者定期扫描插件目录三种方式;默认改为定期扫描
支持关闭依赖库采集(安装阶段通过 -nodep 参数关闭)
PHP 版本
扩展 webshell_ld_preload 检测点,支持配置环境变量,新版插件默认支持3个
后端请求错误时,同时打印 cURL 错误描述(之前版本仅有错误码)
依赖库数据增加缺失的来源字段,内容固定为 composer
检测插件
修复腾讯报告的SQL注入绕过问题
优化身份证合法性校验逻辑
反序列化、OGNL两个检测算法,黑名单支持配置(需要同时升级后台和插件)
管理后台
由于早期 ElasticSearch mapping 的问题,当 URL 长度超过一定值,将无法搜索到
后台升级完成后,用户需要手动执行 ./rasp-cloud -upgrade 134to135
来更新 mapping
程序会先修改 alias,将索引指向新的 alias,完成数据复制后才删除以前的索引
复制过程中可以有新的报警数据写入,不会丢失
PHP文件上传,展示文件存储路径
增加崩溃信息展示
合并 999-event-logger 功能到官方插件,并支持后台开启
Java 版本
修复自定义 header 失效问题
修复XSS检测,会打印空指针日志问题
修复内置检测插件异常时,不会打印URL的问题
修复 java.io.RandomAccessFile 读操作误报问题
当开启云控后,将不再加载 jnotify
当客户端开启 HTTPS 时,修复 SunJSSE 异常
PHP 版本
修复某些 PHP 5.3 的环境,获取到的 header 可能为空的问题
修复插件里正则写错时,会抛出异常的问题
修复在云控连接成功前,就启动web目录敏感文件检测,导致匹配错误的问题
加强 array_map 兼容性,避免第一个参数为空时打印多余日志
Java 版本
增加宝兰德BES支持,感谢 @枫舞蝶殇 提交的补丁
修复某些情况下,Tomcat 9 启动时候可能会卡顿的问题
修复某些 yum 安装的 tomcat 服务器,RaspInstall 会失败的问题
增加 yaml 反序列化白名单,感谢 @kkskk 提交的补丁
修复 SpringBoot 某些情况下采集不到依赖的问题
对于非HTTP请求,修复报警里缺少资产IP的问题
检测插件
SQL注入: 内部有误报场景,默认关闭十六进制字符串检查
任意文件写入: 拦截基于反序列化写webshell的操作,如fastjson漏洞
管理后台
应用快速切换,改为动态搜索,并展示前100个匹配结果
攻击事件详情增加RASP版本展示
支持自定义日志路径,配置名称为 LogPath
如不配置,默认为 /home/openrasp/logs
主机搜索接口,改为批量搜索模式
支持保留插件配置,开源版本仅保留 action 字段
支持导出应用数据,并导入到商业版
支持清理离线超过N天的主机,默认是1天,可配置
修复JSON请求数据展示不正确的问题
修复当客户端时间不正确,后台不会发出报警的问题
修复弱口令基线报警,未能正确展示数据库类型的问题
通用改进
增加 Alpine docker 环境支持
Java 版本
捕获 UTF16 转换异常
PHP 版本
修复 PHP 5.3.18 之前版本,某些情况下RASP进程会意外退出的问题
管理后台
修复平安报告的 request.param_encoding 默认值错误问题,应该设置为空
Java 版本
修复 @素十八 报告的攻击无法拦截的问题
PHP 版本
修复SSRF重定向检测时,若URL不带协议头,cURL会增加 http://
,导致误报的问题
管理后台
修复Web根目录敏感文件正则默认配置,删除多余的双引号
添加主机界面,优化手动安装提示
Java 版本
修复 SpringBoot 在开启白名单后,可能会导致所有 Hook 点失效的问题
PHP 版本
增加 fastcgi SAPI 支持(之前的版本只支持 php-fpm/apache)
检测插件
敏感信息泄漏检测算法,修正某些情况下手机号识别会误报的问题
当请求JSON解析出错时,对异常日志进行截断,避免硬盘打满
拦截基于 CVE-2020-9547、CVE-2020-8840 的命令执行
IAST 扫描工具
IAST 控制台合入现有管理后台,降低运维成本(iast 不再监听 18664 端口)
IAST 扫描器改为连接 panel 服务器(以前是连接 agent 服务器)
IAST 扫描器使用 websocket 连接管理后台,不兼容 v1.3.0 之前的后台
老版本后台用户可使用 pip3 命令安装老版本
PHP 版本
对于文件相关检测点,若读取文件以流协议开头,将会触发SSRF检测,不会触发文件读写检测
受影响协议为: https/http/ftp
受影响函数为: file/readfile/file_get_content/fopen/copy/include
当 plugin.filter
关闭,文件相关检测点将忽略 open_basedir 配置,继续进入插件检测
通用改进
增加文件删除测点
增加 SSRF 跳转后检测点,可检测重绑定攻击
增加 HTML 响应检测点,默认每分钟采样5次
增加依赖库信息采集,默认6小时采集一次
Java POM 信息
PHP composer.json
补全 SQL 异常检测点
PHP 增加 PostgreSQL、SQLite 异常监控
Java 增加 PostgreSQL、SQLite、Oracle、SQLServer、HSQLDB、DB2 监控
弱口令列表支持远程下发
加强单机版配置校验
当 yaml 最外层键值无法识别时,打印日志
Java 版本
增加 Hibernate SQL 检测点
增加 nio 检测点
增加 SpringBoot 部分注解参数支持
PHP 版本
SSRF 支持 IPv6 地址解析
基线检查: 检测web根目录下是否有压缩包、SQL等敏感文件
增加 mysql_db_query、mysql_unbuffered_db_query 检测点
增加 print 检测点
管理后台
新增 -s restart / -s stop / -s status
指令,可以重启后台、关闭后台以及获取状态
支持主机设置备注,以及按照备注搜索
白名单支持备注
支持日志写 kafka
报警发送间隔改为前端配置
增加报警日志去重,根据请求编号、堆栈MD5、攻击类型计算
后台日志增加大小、文件数量限制,可配置
检测插件
增加任意文件删除漏洞检测
增加 header 注入检测(如SQL注入、命令注入)
增加命令执行语法错误监控,以及可疑的注入检测
增加 DNS Rebind 方式的 SSRF 攻击
增加HTTP响应敏感信息泄漏检查,如银行卡、身份证、手机号
Java 版本
RaspInstall 安装 rasp.jar 时,先重命名再写入新文件
避免修改已经加载的 jar,可能会出现 mmap 问题
老文件以 uuid 随机命名,支持多次安装,会在启动时统一删除
PHP 版本
当后台下发配置不符合预期,主动上报异常日志
修复 Kali 下面日志只会上传一条的问题,感谢 @亿相逢 反馈
修复某些情况下,会出现多个 rasp-log
进程的问题
管理后台
客户端版本聚合接口,没有过滤主机在线状态
增加重复白名单校验
通用改进
Java、PHP 增加崩溃监控(仅支持 Linux/Mac 系统)
监控信号如 segfault/abort 等等
监控范围是 Java主进程、PHP worker/心跳/日志进程/守护进程
崩溃后自动向管理后台发出报警,并上传堆栈日志;后台会同步发出邮件报警
若要测试监控效果,可执行 kill -11 PID
命令触发段错误
管理后台
支持客户端版本枚举
支持一键关闭所有报警
当agent无法获取dubbo等应用版本号时,允许agent注册
Java 版本
修复 syslog 地址修改后,依然会向老地址发送日志的问题(感谢 @й阿桂 反馈)
管理后台
后台升级完成后,还需要再手动执行 ./rasp-cloud -upgrade 121to122
来更新 MongoDB
增加 X-Protected-By: OpenRASP
相关配置
请求 body 大小限制改为 12KB
支持在线升级,但执行过程中请不要在后台修改配置
通用改进
彻底解决 v8::Abort()
崩溃问题
升级 v8 到最新版本: 7.8.279.19
支持隐藏 X-Protected-By: OpenRASP
响应头
自动安装程序
支持通过 -heartbeat/--heartbeat 参数自定义心跳间隔
Java 版本
增加 WebSphere 7.X 支持。由于IBM JDK限制,文件相关检测点无法生效
当插件没有注册 request/requestEnd 检测点,不再构造相关参数以提高性能
检测插件
拦截基于 bsh.servlet.BshServlet 的命令执行操作,e.g CNVD-2019-32204
拦截基于 jdk.scripting.nashorn 的命令执行操作
Java 版本
修复部分情况下,Java 无法获取字符流请求 body 的问题
PHP 版本
修复当关闭 plugin.filter
时,包含 .php/.inc
文件不会进入插件的问题
对于 multipart 请求,单独提取参数,解决产生报警时没有请求 body 的问题
检测插件
修复用户报告的 replaceAll 函数内存占用过高问题
修复 @Looke 报告的 xss_userinput 绕过问题
管理后台
由于早期 ElasticSearch mapping 的问题,对于已经存在的应用,报警消息、基线消息、异常消息均不支持大小写搜索
后台升级完成后,用户需要手动执行 ./rasp-cloud -upgrade 120to121
来更新 mapping
程序会先修改 alias,将索引指向新的 alias,完成数据复制后才删除以前的索引
复制过程中可以有新的报警数据写入,不会丢失
通用改进
支持自定义 RASP ID
安装时使用 --rasp-id (PHP)
或者 -raspid (Java)
来设置
若没有指定,则按照先前的逻辑,根据网卡、RASP路径等信息计算一个
管理后台
增加报警日志去重,目前按照 request_id + stack_md5 进行去重
在 系统设置 -> 后台设置 界面,增加一键清理报警数据支持
主机管理界面,自动记住 主机状态
勾选情况
报警查看界面,支持按照报警消息、堆栈MD5搜索;Referer、URL 支持点击
Java 版本
增加 HSQL 数据库 hook 点,可以检测 WebGoat SQL 注入漏洞
每隔一段时间采集一次单核CPU占用率,若超过阈值且连续3次,启动熔断机制
当下次采集到的占用率低于阈值,自动恢复防护
本功能默认关闭,采集间隔、CPU占用率均可配置
修复 plugin.filter 在 include hook 点不生效的问题
插件系统
命令执行检测点,增加环境变量信息
SQL异常检测改为插件检测,且可在管理后台自定义要监控的错误代码
修复 command_reflect 算法,在某些情况下可能误报的问题
通用修复
增加重新注册支持,当主机离线后被误删除,可自动恢复
Java 版本
修复当中间件支持 multipart 协议,但是用户没有使用文件时,会产生误报的问题
修复当服务器在启动一段时间后才与管理后台连通,Java Agent 不会再次获取注册IP的问题
修复某些情况下,由于 context.language 为空,不会拦截 WebSphere 反序列化命令执行的问题
修复心跳失败时,sleep 失效,会无限打印日志的问题
修复日志推送完毕后,log4j 缓存不会清理的问题(感谢 @忆相逢 反馈)
修复当有多个文件上传时,只会处理第一个文件的问题
修复配置更新失败时,缺少详情的问题
修复 request hook 点无法拦截的问题(感谢 @Looke 反馈)
修复 cloud.X 等配置可以远程下发的问题
修复 SQL prepared statements 产生异常时,不会进入检测插件、不会记录SQL异常的问题
PHP 版本
修复PDO异常监控没有过滤 error code,记录了多余的异常日志的问题
通用变更
删除 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 增加集群支持
修复 v8 在多线程环境运行时,获取 Thread Local 数据会崩溃的问题
增加关键hook点检查: requestEnd, request.parameterMap 不存在时拒绝启动
心跳间隔下限改为 10s
优化内存占用,减少50%左右
启动时打印 RASP ID,方便排查
解决当 Tomcat 主动 flush() 时不会检测 XSS 的问题
同时优化了XSS检测效率
XSS 拦截时不再抛出异常(其他攻击类型还是会抛出)
自动安装程序
增加 SpringBoot 半自动安装,即只释放文件并修改配置,参数名为 -nodetect
增加对 yum 安装的 tomcat 的支持,即 bin 目录与 tomcat_home 分离的情况
增加 -prepend
参数,若开启则将 -javaagent
参数放在最前面
默认在后面附加
解决 jacoco 的兼容性问题
灰盒扫描工具
Java 版本
解决 JRockit 兼容性问题,改为 jni 获取网卡信息
解决 org.elasticsearch.client.RestClient 兼容性问题
解决 XXE 代码安全开关和 taglib 不兼容的问题
屏蔽 V8 execstack warning
PHP 版本
修复报警日志里PHP版本号不对的问题
插件系统
修复 001-dir-1.jsp
即使在插件里关闭 all_log
也不会拦截的问题
管理后台
支持按照攻击类型决定是否报警
主机管理页面,支持导出agent列表
添加主机页面,修正 SpringBoot + Docker 安装命令
优化多处表格体验
Java 版本
syslog tcp 增加连接、发送超时
支持通过 rasp.jar 获取agent版本信息
检测插件
readFile hook 点忽略 war 包相关操作
Java 版本
当主机名没有在 /etc/hosts 里绑定,会触发大量 hostname
命令执行调用的 BUG
传给插件的堆栈,修复过滤不正确的问题
修复 Undertow 解析参数时的空指针异常问题
修复一处 XSS hook 点空指针异常
管理后台
开启 gzip 压缩支持,减少网络流量
报警、基线日志保留时间支持自定义,默认 365 天
优化多处前端体验
agent 异常日志增加堆栈详情展示
加强报警搜索功能
支持检测算法高级配置选项
Java 版本
修复堆栈过滤不全的问题
解决 emoji 表情包可能造成的编码问题
openrasp-v8 所有异常同步到 rasp.log
检测算法
修复 command_reflect 误报问题
删除 xss tag 超过10个就报警的算法
通用变更
升级 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代码安全开关,可以直接禁止外部实体加载
通用修复
插件更新成功后,立即发出心跳,解决管理后台版本信息滞后问题
报警堆栈过滤掉 openrasp 相关内容
Java 版本
修复文件上传检测点误报问题,改为在用户使用了文件之后再检测
修复 Windows下,openrasp.yml 文件编码不正确的问题
修复 JBoss 12 以上无法自动安装的问题
解决 JSP 无法获取堆栈的问题
修复 Tomcat 下面 xss 拦截之后不会跳转的问题
修复一次心跳失败后,再也不会心跳的bug
解决 Tomcat 5 下面 html 注入功能不正常的问题
修复不重启安装,卸载后心跳线程残留问题
与PHP版本统一 log.maxbackup 逻辑,配置为1时保留今天和昨天的日志
管理后台
修复检测插件重复上传问题
前端首页增加缓存失效设置
修复 debug_level 字段不是数字的问题
当应用下面有在线主机,禁止删除应用
修复应用加固里 nosniff 拼错的问题,用户保存一次配置即可修复
通用变更
报警日志增加 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 反射执行命令的攻击
管理后台
修复 docker 拉取的 ElasticSearch 无法连接的问题
PHP 版本
修复当URL没有协议,SSRF检测点拿不到hostname的问题
Java 版本
增加 okhttp/okhttp3 hook点,用于 SSRF 检测
其他通用功能
发布管理后台第一版
增加远程管理功能,包括日志上传、插件下发、远程配置管理等等
syslog 日志增加 tag 字段支持,可自定义
LRU 由插件改为agent实现,覆盖 sql, ssrf, readFile, writeFile 几个检测点
PHP 版本
正式去除 Windows 支持
命令执行
增加 JBoss EL 反射命令执行的检测
新增 bash 命令解释器,可检测命令注入攻击
修复 dubboRPC 下面,log4j 打印日志时因没有 requestMethod 导致空指针的bug
修复 PHP session + mysql handler 一处崩溃问题
修复 SpringBoot 1.5.9 + Embedded Tomcat Server 无法获取服务器版本号的问题
Java 版本
正式支持 WebSphere,目前仅测试了 8.5、9.0 两个版本
其他
报警日志增加 algorithm
字段,用于标识具体算法名称
任意文件下载
修复 ThinkPHP rewrite 导致的一个绝对路径误报问题
通用
删除SQL慢查询hook点,但暂时保留代码
Java 版本
插件获取到的 Dubbo RPC
参数名称,从 openrasp-dubbo-XXX
改为 dubbo-XXX
报警日志增加 request_method
字段,即请求方法
修复在某些 tomcat 版本下,获取参数时会产生 No modifications are allowed to a locked ParameterMap 错误的问题
Rename
修复 rename_webshell 一个潜在的误报问题
反序列化
堆栈算法增加 commons.collections4 检查
Java 版本
block.url
配置选项改名为 block.redirect_url
,并支持模板化配置
即自动替换模板里的 %request_id%
关键词为当前请求ID
PHP 版本
openrasp.block_url
配置选项改名为 openrasp.block_redirect_url
并支持模板化配置,同Java版本
所有日志时间改为系统时间,不再使用PHP时区里的时间
解决 OpenRASP 报警日志跟 nginx/apache 访问日志无法一一对应的问题
JS API 接口
对于Java服务器,appBasePath 不再指向 webapps 目录,改为应用部署路径,比如 /tomcat/webapps/vulns
改进后,sqli_userinput
算法只需要再执行一遍 tokenize
在有攻击的情况下,大幅度提升性能
Java 版本
为 JBoss 增加基线检查
当请求被拦截,且期望响应类型为 xml/json,用户可以自定义的响应内容
通过配置 block.content_xml
、block.content_json
模板来实现
增加 plugin.filter 配置
适用于 include/rename/readFile 等 hook 点
若开启,当文件不存在时,将不会进入检测逻辑(默认开启)
增加获取客户端真实IP的能力
用户可以在 openrasp.clientip_header
指定从哪个header里获取客户端真实IP
默认是 clientip
请求头
报警日志里的字段为 client_ip
增加 Dubbo RPC 基础数据类型支持
JS 插件可以获取到RPC参数,名字为 openrasp-dubbo-X
PHP 版本
支持通过 openrasp.hooks_ignore=all
来禁用全部 hook 点
增加获取客户端真实IP的能力,同 Java 版本
当请求被拦截,且期望响应类型为 xml/json,用户可以自定义的响应内容,同 Java 版本
增加 openrasp.plugin_filter 配置,同 Java 版本
SSRF
修复 @小猪"\ 报告的 XXE、SSRF 绕过问题,默认拦截 netloc://
、jar://
等更多不安全的协议
OGNL
hook 点改为 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版本的性能。
PHP 版本
修复 array_filter 参数处理不正确的问题
修正报警日志里, URL 字段缺少域名的问题
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 报告的 /../../
检出绕过问题
PHP 堆栈检测算法
修复 @Ezreal 报告的一个 call\_user\_func
误报问题
后门上传检测
增加对 rename 的监控,防止通过重命名写入 webshell
SQL 注入
增加全局LRU缓存,当检测结果为 ignore 时不再重复检测,以提高性能
用户输入匹配算法,参数最短长度可配置
增加对 into outfile
的检测,并增加相应的检测开关
PHP 版本
增加60多个单元测试,修复2处参数解析错误问题
优化不同协议的处理逻辑,若协议不支持写操作,将不再进入检测插件
修复一个左右斜杠混用,导致的路径精简失败的问题
为所有检测算法增加开关
用户可通过编辑JS插件头部的配置,来控制某个算法是否开启
ssrf_common 算法,增加对 ceye.io
、transfer.sh
的检测和拦截
解决 Resin 3.1.8 一个 classloader 兼容性问题
修复 SQLParser 一处语法解析错误
通过修改包名,解决 mozilla rhino 加载冲突问题
使用v8引擎的snapshot特性,以加快v8实例启动速度
Java 版本
Java 包名改为 com.baidu.rasp
在升级前,用户需要手动删除 rasp/conf/rasp-log4j.xml
文件
待应用启动后,OpenRASP 会自动生成新的日志配置文件
RaspInstall - OpenRASP 自动安装程序
为了支持自动卸载,我们调整了 RaspInstall.jar 的命令行参数
java -jar RaspInstall.jar -install /home/tomcat
java -jar RaspInstall.jar -uninstall /home/tomcat
SQLi 检测算法 #2,默认关闭常量对比算法
在真实业务里,经常有编码不规范的情况,会造成误报,e.g AND ((0='' OR 0='0')
命令执行检测逻辑调整
为了检测非常规的反序列化、命令执行漏洞,当命令执行来自非 HTTP 请求,也将会进入检测点
Java 版本增加 ascii banner,启动时打印
增加 JDBC Prepared SQL Hook 点
支持 Resin 3.X、4.X 服务器
增加自定义编码配置,允许用户设置 context.parameter
的编码
增加 jnotify 异常的获取
由 @园长MM 反馈
ProcessBuilder 存在绕过,我们将 Hook 点改为了更底层的 UNIXProcess、ProcessImpl 类
PHP 版本
当文件不存在,file_put_contents 不会调用检测插件,已修复
解决日志模块一处内存泄露问题
Java 版本
调试开关配置选项,由 debug_level
改为 debug.level
增加对 PHP 5.X 的支持
Linux 5.3 ~ 5.6
Windows 5.6 (仅线程安全版本)
Mac homebrew PHP 5.6
PHP 安全基线检查
INI 配置审计
数据库连接账号审计
其他 PHP 版本支持的功能
SQL 慢查询审计
测试用例增强
增加简易导航页面
统一增加可点击链接,减少对命令行的依赖
增加PHP版本性能测试报告
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
默认配置
由 @计算姬 反馈
SQLi算法#1 - 当用户输入为纯数字时,且多次出现在SQL语句中,会产生误报,已经解决
自动安装程序
解决无法识别 JBoss 4.0.3 的问题
抓取 RASP.sql_tokenize 错误信息,并打印到 plugin.log
删除 reflection
hook 点
部分框架会大量调用反射,影响性能
我们测试了一些金融业务,新版性能损耗由 10%
下降到 5%
基于反射的检查,移动到 command
hook 点,检测能力不变
SSRF 检测算法增强,增加更多常用域名检测
对于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
检查
预编译JS代码,启动时间由原先的 8s
下降到 3s
左右
增加调试开关,用于收集hook点进入次数、时间消耗等等
正式支持 SSRF 漏洞检测,包括以下三种场景
URL.openConnection
commons-httpclient
httpclient
RASP.config()
接口改名为 RASP.config_set()
,并增加相关调试日志
增加 RASP.get_jsengine()
接口,用于获取JS引擎名称
解决因为没有写权限,导致 rasp-log4j.xml
释放失败的问题
在新版本里,RaspInstall 会主动修改 rasp
目录权限
基线检查日志,增加调用堆栈信息
当应用使用了高权限数据库账号,方便定位具体代码
重写 catalina.sh
脚本修改逻辑,支持重复安装
在修改的配置周围,增加类似 ### BEGIN OPENRASP ###
的标记
安全基线日志拆分到单独的文件里
方便采集不同类型的日志
升级前,用户需要手动删除 rasp/conf/rasp-log4j.xml
文件
检测 JSTL 方式的文件包含漏洞,或者SSRF漏洞利用
支持 DB2
数据库,我们仅测试了免费版本,9.7
和 10.5
服务器安全基线
增加慢查询审计功能
支持 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
, ...
性能优化
由于 jni 性能太差,我们决定使用 Mozilla Rhino 最新版本替换掉 j2v8
放弃对 WebLogic 的支持
增加 SQL tokenize 接口: RASP.sql_tokenize
增加 SESSION 修改接口: context.session.getSession / context.session.setSession
readFile
接口,当文件不存在时,将不再调用插件
增加 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 点次数优化,提高性能
当JS插件发生运行时错误,不应该打印报警日志
JS插件出错时,在 plugin.log 打印详细堆栈和错误信息
增加一个异常流识别,当某些类通过反射进行调用时,会触发插件检测逻辑
增加 doFilter hook 点,修复 struts 系列框架下,无法检测漏洞的问题
支持多种 Java 服务器、数据库服务器
支持多种 SIEM 应用
完成第一版官方检测插件
支持多个 hook 点
合入 @liergou9981 的补丁,增加nio支持、优化iast.js
增加 TongWeb 6.X 服务器部分支持,
简化 JBoss 7 以及更高版本的安装流程,
发布第一版,结合RASP挖掘漏洞的扫描器
删除 webshell_include 检测点,
数组元素改为字典,并增加token起始坐标、token结束坐标两个参数
解决高版本 JDK 兼容性问题,
为了降低 Hook 点开发成本,Hook 框架改为
适合检测 、 等漏洞
开放基于 docker 的自动化漏洞测试环境 -
,e.g 使用 root
连接 mysql、使用 sa
连接 mssql 等等
使用 SELECT
语句读取超过500行数据,
,可获取web应用根目录
,context.session.setSession、context.session.getSession
插件拆分,部分不常用的检测逻辑,比如扫描器识别功能,移动到 目录
在最坏的情况下,对服务器影响在 2%
左右,具体可查看
默认是