在这里首先感谢百度安全团队对安全事业的贡献精神,让我得以接触到这款国内为数不多的功能完善、成熟的RASP产品。其次也感谢百度安全团队的大牛 @c0de::bre@k 在我进行调研实施的时候,给予了最大的帮助和耐心的解答。
后面我将分几篇文章介绍我在调研Openrasp时的一些心得,希望对大家能有所帮助和启发。
公司的核心业务其实大部分使用python和go语言来进行开发,因此一直以来包括waf策略等防护手段更多针对python和go语言的特性做一些防护规则的配置,其他的技术栈关注较少。但使用较少不代表没有,前段时间经过对业务的排查梳理,意外发现支付业务等一系列应用其实还是使用了java技术栈,而恰恰这块安全的防护较为薄弱。此时恰好了解到openrasp项目,便由此想调研下这个项目是否适合公司的环境,也正好可以弥补java安全的短板。
下面的内容呢大部分来自Openrasp的官网,了解一个项目最好的途径,莫过于看它的官方手册和指南。
详细内容大家可以直接访问官网,我这里只挑出一些重要的信息,帮大家快速了解。
OpenRASP 官网:https://rasp.baidu.com/
项目文档:https://rasp.baidu.com/doc/
OASES(Open AI System Security Alliance)智能终端安全生态联盟是国内首个致力于提升智能终端生态安全的联合组织,由百度、华为、中国信通院联合发起成立,成员包括安全厂商、行业安全专家、设备厂商、⾼校和各行业安全专家等。OASES 目前包含 KARMA、OASP、OpenRASP、MesaLink、MesaLock Linux 等几个子项目。其中,OpenRASP 主要应⽤于云端应用安全防护,以及上线前的应用安全测试。Gartner 在2014年提出了「 运行时应用自我保护」技术的概念,即对应⽤服务的保护,不应该依赖于外部系统;应⽤应该具备自我保护的能⼒。OpenRASP 是该技术的开源实现,它改变了防⽕墙依赖请求特征来拦截攻击的模式。以注入类的漏洞举例,Openrasp 可以识别用户输入的部分,并检查程序逻辑是否被修改。由于不依赖请求特征,确保每条告警都是有效的。
License:目前 OpenRASP 是开源项目,项目 license 是 Apache License 2.0,相对较为宽松。
目前项目主要由百度安全团队维护。
1)web攻击检测:包含sql注入、命令注入、xss、敏感文件下载、任意文件读取、xxe、反序列化(fastjson等)、Struts OGNL 代码执行、ssrf、敏感日志打印等。另外还集成了一些 CVE 的检测。
2)服务器安全基线检查:关键 Cookie 是否开启 HttpOnly(Tomcat)、进程启动账号检查、后台密强度检查(Tomcat)、不安全的默认应用检查(Tomcat)、Directory Listing 检查(Tomcat)、数据库连接账号审计 (jdbc) 备注:基线检查会在应用服务启动时进行检查,可设置不符合检查项禁止启动。
3)应用加固:当应用收到请求,我们会通过输出响应头的方式,实现对应用的加固。
4)openrasp-iast 灰盒扫描:openrasp-iast 作为 openrasp 的一个插件集成到 openrasp 中,采用被动扫描的方式,java 探针在请求结束后会将本次请求参数、hook 点信息提交给服务端进行分析并选择性的 fuzz 目标。openrasp 会根据 hook 点信息精确检测漏洞。
在 Java 技术栈下,RASP 引擎以 javaagent 的形式实现,并运⾏在 JVM 之上。在应⽤服务器启动的时候,RASP 引擎借助 JVM 自身提供的 instrumentation 技术,通过替换字节码的方式对关键类⽅法进行挂钩。RASP 的技术原理与 APM 是一样的,只是挂钩的函数要少很多。以 OpenRASP 为例,我们挂钩了 SQL 查询、文件读写、反序列化对象、命令执⾏等关键操作,具体列表可参考:Hook 函数表。
IAST(交互式扫描)技术是一种实时动态交互的漏洞检测技术,通过在服务端部署 agent 程序,收集、监控 Web 应用程序运行时函数执行、数据传输,并与扫描器端进行实时交互,高效、准确的识别安全缺陷及漏洞。目前 OpenRASP 项目已实现相当于 IAST agent端的 OpenRASP agent,在此基础上引入一个扫描端,即可实现一个完整的 IAST 扫描工具。
灰盒扫描工具采用 Python3 实现,数据库采用 MySQL,通讯采用 HTTP+JSON 的方式。整体架构图如下:
工具分为扫描器端和 agent 端,Agent 端用于收集 web 应用的运行信息,扫描器端用于处理插件产生的请求信息,并完成整个 IAST 扫描逻辑。
目前 openRASP 支持单机部署和大规模部署(支持容器化部署)。部署架构可参见下图,在每个应用节点需安装 agent,管理后台负责策略下发和节点的集中管理。