OpenRASP v0.20 发布 性能提升与零规则漏洞检测

RASP

RASP 英文为 Runtime application self-protection,它是一种新型应用安全保护技术,它将保护程序想疫苗一样注入到应用程序和应用程序融为一体,能实时检测和阻断安全攻击,使应用程序具备自我保护能力,当应用程序遇到特定漏洞和攻击时不需要人工干预就可以进行自动重新配置应对新的攻击。

文档备份

Evernote
OpenRASP v0.20 发布 | 性能提升与零规则漏洞检测

基本介绍

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。详细的测试报告和数据,可在官方文档里查看。 具体测试结论如下图所示:

其次,该版本增设了许多的新功能。例如在友好性上,增加了自定义拦截页面,发生攻击时不会再抛出异常。为了方便用户排查问题,我们在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 开放
• 支持敏感文件下载漏洞检测