​那些年我们堵住的洞 – OpenRASP纪实
2019-07-23 23:50:37 Author: mp.weixin.qq.com(查看原文) 阅读量:108 收藏

 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()))).newInstance().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

因此,无论服务端的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群主(仅限北京地区)。

更多内容请移步:


文章来源: https://mp.weixin.qq.com/s?__biz=MzA3NTQ3ODI0NA==&mid=2247485066&idx=1&sn=8f56f5c6ec1abf1ba823e22ae71893db&chksm=9f6ea301a8192a17ae01d136584b7cea0a3e1efdab81e3ef057b287d3ff29dcdaff934c45440&scene=21#wechat_redirect
如有侵权请联系:admin#unsafe.sh