那些年我们堵住的洞 – OpenRASP纪实

2019-08-08 18:03:4611499人阅读

OpenRASP 是百度安全推出的一款开源、免费的自适应安全产品,目前与国际知名非盈利安全组织 OWASP(Open Web Application Security Project)达成深度合作,现已加入到OWASP全球技术项目中,在全球范围内进行大规模推广。OpenRASP将新兴的RASP(Runtime Application Self-Protection)安全防护技术普及化,使其迅速成为企业Web安全防护中的一个重要武器,有效增强防御体系纵深和对漏洞防护的适应能力。由于OpenRASP直接在Web服务应用内部对漏洞脆弱环节做针对性防护,所以防护效能与传统WAF等手段相比有着革命性提升。OpenRASP通过开源社区迅速推广和成熟,解决了商业RASP长期以来难以克服的稳定性和兼容性问题,成为目前业界应用最广泛的RASP方案。

近期攻防需求急剧提升,OpenRASP也在多家知名企业生产环境落地,在实战中检测到了一些有意思的漏洞场景,下面我们一起来回顾。


No.1 “这不是一个漏洞,这是一个特性”


产品: 我需要支持复杂查询条件、任意字段排序。

研发: 考虑下自己写SQL语句?

某重要金融机构在线上部署OpenRASP,刚上线5分钟就提示有SQL注入漏洞。不会这么巧吧?我们打开后台一看,发现报警长这个样子(简化示意版):

SQL 查询 :

SELECT * FROM rec WHERE ca = '122' and begin_time >= '2019-06-01' ORDER by end_time desc

请求 BODY :

orderBydata=end_time+desc&query=ca+%3d+'122'+and+begin_time+%3C%3D+'2019-06-01'

以 orderBydata 参数为例,虽然此时并没有攻击行为,但传入的 end_time desc 等内容会改变SQL语句逻辑,因此被OpenRASP检出。类似的注入点一共有5个,经过测试没有发现误报。由于攻防演练时间紧急,领导鉴于之前OpenRASP良好的表现,建议关闭漏洞识别模式,并开启了攻击阻断。


产品: 我需要一个下载附件的功能。

研发: 好的,你想下载什么都可以。

某大型用户将OpenRASP部署到了OA系统,上线后OpenRASP提示存在任意文件下载漏洞,报警详情为:

报警消息:

Path traversal - Downloading files specified by userinput, file is /app/X../Y../Z../0/f/a/QQ.zip

读取的文件:

/app/X../Y../Z../0/f/a/QQ.zip

请求BODY:

file=/app/X../Y../Z../0/f/a/QQ.zip&authorize=***

这是一个使用绝对路径下载文件的漏洞,经过测试可获取 /etc/passwd 文件的内容,因此漏洞存在。


No.2 擅用 ../ 挖漏洞的小伙


这个就比较有意思了,它的报警内容为: SQLi - SQL query structure altered by user input, request parameter name: size, value: ../../../../../../../proc/version。第一眼看过去感觉是误报,毕竟谁也没有见过使用 ../ 进行SQL注入的语句。后台的报警详情如下:

SQL 查询:

SELECT id, title, descr FROM HotQuestion ORDER BY queryTimes limit 0,../../../../../../proc/version

请求BODY:

size=../../../../../proc/version&start=0

虽然 limit 注入利用比较麻烦,不过这里确实没有做整形转换,因此漏洞存在。只是不知道哪个小伙扫到这个接口了,等于免费帮客户挖了个漏洞。


No.3 WebLogic、fastjson 0day 拦截


近期0day不断爆发,厂商的补丁却没有跟上。感谢开源社区里的热心客户,我们5月底就拿到 WebLogic 0day PoC 进行了拦截测试,并验证了OpenRASP的防护能力。

比如无论是通过FileSystemXmlApplicationContext 还是UnitOfWorkChangeSet 来绕过补丁,只要还是通过XMLDecoder 去执行命令,它的堆栈总是相似的:

"java.lang.ProcessBuilder.start",
 …
"java.beans.XMLDecoder.readObject",

OpenRASP通过检查堆栈,就可以在不升级的情况下阻断攻击,以及后续相似的漏洞。fastjson 0day 的防护原理是类似的,经过测试,通过@type 来执行命令的payload都可以拦截。


No.4 JSP defineClass 后门


演练期间见到最多的就是冰蝎动态后门了,其中JSP版本通过自定义ClassLoader + defineClass方法来实现eval特性。

new U(this.getClass().getClassLoader()).g(c.doFinal(new 
sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newIns
tance().equals(pageContext);

因为流量是AES双向加密的,对绕过WAF和IDS会比较有效。但部署在应用内部的OpenRASP,还是能够看到后门操作(安装 999-event-logger 插件即可看到日志):

[event-logger] Listing directory content:/
[event-logger] Execute command: whoami
java.lang.ProcessBuilder.start
...
net.rebeyond.behinder.payload.java.Cmd.RunCMD
net.rebeyond.behinder.payload.java.Cmd.equals

同样,我们依然可以通过命令执行的堆栈识别冰蝎:

java.lang.ProcessBuilder.start
...net.rebeyond.behinder.payload.java.Cmd.RunCMD
net.rebeyond.behinder.payload.java.Cmd.equals

因此,无论服务端的JSP如何变形,只要客户端代码不变,我们通过校验堆栈就可以检测冰蝎动态后门。目前最新版的JS插件 2019-0703-1600 已经支持防护。

相比于传统的WAF,OpenRASP填补了IDC内部横向渗透防护能力缺失的不足。当黑客突破防火墙上传了后门,当EDR缺少相应的文件规则时,OpenRASP依然可以根据应用行为进行检测。目前OpenRASP官方插件提供了 算法3 - 识别常用渗透命令(探针),允许用户审计命令执行并识别服务器上的未知WebShell


写在最后


OpenRASP 是百度AIoT安全解决方案的重要组成部分,也是百度下一代AI安全技术栈的核心技术之一。从新一代安全技术的研发与开源,到为行业提供一体化安全解决方案,再到促进学术、企业、机构间多层面协作,百度安全实验室正在升级打造AI时代的安全生态,打破产业隔阂,避免生态碎片化,以此推动AI时代的安全生态建设。

在攻防需求急剧提升的今天,最让人头疼的就是没有源码的老系统,或者没法及时修复漏洞的系统。尤其是金融行业,大量系统是外包开发或者外购商业系统。在这种情况下可以考虑部署OpenRASP系统来进行防护,很多用户的实战经验都表明OpenRASP起到了非常出色的防护效果。

另外,本月我们会发布基于RASP技术的DevSecOps社区版方案,之后的版本会加入污点追踪支持(精确到字符串索引级别,支持PHP、Java)。若想在第一时间了解我们的动态,请加入QQ技术讨论群 259318664 讨论,微信群由于超过人数需要联系QQ群主加入。若需要进一步线下交流,可单独联系QQ群主(仅限北京地区)。


更多内容请移步:

OpenRASP 项目主页

GitHub 源代码

百度安全的OpenRASP项目,究竟是什么?


0
现金券
0
兑换券
立即领取
领取成功