OpenRASP是百度安全推出的一个自适应安全产品,凝聚百度多年黑产对抗经验,保护引擎集成在应用内部,可以在应用服务层面进行深度保护和异常检测,实现去边界化防护,运维成本也更低。OpenRASP已经开源、免费提供给用户,并且与OWASP联合在全球范围内重点推广。
同时,OpenRASP也是OASES智能终端安全生态联盟(Open AI System Security Alliance,简称OASES联盟)的核心开放技术之一。OASES联盟是国内首个致力于AI时代提升智能终端生态安全的联盟组织,联盟秉承“技术赋能、标准驱动、生态共建、产业共赢”的宗旨,对外提供多项安全服务。OASES联盟是一个开放的组织,欢迎更多合作伙伴的加入,共建安全生态。
据第一个版本发布相隔约2个月,百度安全实验室此次发布为OpenRASP v0.20版本。
What's New
首先,该版本使用Mozilla Rhino引擎替换了之前使用的J2V8。对于RASP类型的轻量级规则,直接运行在JVM上的Rhino引擎比分离在外的v8有显著的性能优势。
同时,我们也测试了 Lua 引擎的性能,由于Lua和最新版的Rhino引擎性能相差无几,所以我们决定继续使用JavaScript插件系统。
我们配置100线程,绑定2个CORE,使用 wrk 将CPU打满,然后观察最大QPS。详细的测试报告和数据,可在官方文档里查看。 具体测试结论如下图所示:
在这个测试下性能overhead约2%
其次,该版本增设了许多的新功能。例如在友好性上,增加了自定义拦截页面,发生攻击时不会再抛出异常。为了方便用户排查问题,我们在URL里增加了request_id 参数,方便查找对应的报警日志。
最后,该版本引入服务器安全基线检查功能 。安全基线可以有效的降低服务器被入侵的风险,比如不允许使用root/sa/sys等账号连接数据库服务器等等。我们目前仅支持tomcat,一共支持5种策略,具体可参考官方文档 (https://rasp.baidu.com/doc/usage/security_policy.html)
算法改进
在 v0.20 里,我们公开了两种零规则漏洞检测算法。
第一个算法是SQL注入检测算法#1。这个算法通过识别查询语句里的用户输入来实现,当用户的输入改变了查询语句的逻辑,OpenRASP就会判定为注入。
举个例子,当攻击者发起这样一个请求时,
?id=abc--')/*!UNION/**/ALL*//*!SELECT*//*!USER*/(),/*!user*//*!FROM*/users#
OpenRASP 会看到完整的SQL查询语句,e.g
SELECT * FROM users WHERE id = 'abc--')/*!UNION/**/ALL*//*!SELECT*//*!USER*/(),/*!user*//*!FROM*/users#
此时,OpenRASP便可以关联数据库的查询语句和Web请求参数,实现零规则SQL注入检测。那么具体是如何实现的呢?
首先,检测插件会调用RASP.sql_tokenize这个API,对语句进行token解析
['SELECT', '*', 'FROM', 'users', 'WHERE', 'id', '=', 'abc', '--', '\'', ']/*!', 'UNION', 'ALL', '*//*!', 'SELECT', '*//*!', 'USER', '*/()', ',', '/*!', 'user', '*//*!', 'FROM', '*/', 'users' ]
然后,在语句里去掉匹配到的用户输入,
SELECT * FROM users WHERE id =
并再次进行token解析,
[ 'SELECT','*', 'FROM', 'users', 'WHERE', 'id', '=' ]
当token个数相差超过2,即表明当前的查询语句逻辑发生了改变,也就意味着这里就存在SQL注入漏洞。具体算法可以参考最新的官方插件。
对于传统WAF的来说,一方面拿不到数据库的查询语句,只能在请求里寻找SQL注入特征;另一方面也无法识别用户输入,所以存在绕过的可能。而 OpenRASP能够结合上下文和语义引擎,实现更加灵活的检测算法。
第二个算法是WebShell行为识别算法。当黑客上传后门,他通常会做如下几种事情
1. 访问敏感文件,比如服务器配置信息、管理员执行的命令记录
2. 下载数据库
3. 尝试入侵更多机器
OpenRASP通过文件和数据库探针,能够准确的识别上述恶意行为并进行拦截。具体要探测哪些敏感文件,请看官方插件(https://github.com/baidu/openrasp/blob/master/plugins/official/plugin.js)
在后续的小版本里,我们还会增加慢查询检测功能,以及更多的零规则检测算法,敬请期待。
新增功能
• 支持自定义拦截页面
• 通过 `block.url` 配置
• 默认页面: 小恐龙页面 (https://rasp.baidu.com/blocked/ )
• 增加服务器安全基线检查功能,目前仅支持 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 开放
• 支持敏感文件下载漏洞检测