Apache Dubbo框架风险解读Dubbo介绍

Dubbo介绍

Dubbo一开始把自己定位为一个RPC框架,专注于服务之间的调用。随着微服务的概念越来越火爆,Dubbo开始重新思考自己的定位,除了服务调用,开始逐渐向服务治理、服务监控、服务网关等方向扩展,随着Dubbo生态圈的逐渐完善,Dubbo慢慢地演变为一个成熟的微服务框架。
Apache Dubbo框架风险解读Dubbo介绍_第1张图片
Dubbo核心的服务治理功能定义:
Apache Dubbo框架风险解读Dubbo介绍_第2张图片
简单总结和概括一下什么是Dubbo?其实,Dubbo就是一个实现服务调用的分布式框架。核心部分其实在于服务系统之间的远程通讯,包括多种线程模型、序列化以及“请求-响应”模式的信息交换方式;提供基于接口方法的透明远程调用,包括多协议支持以及负载均衡,失败容错、地址路由、动态配置等集群支持;基于注册中心目录服务,使服务消费方能动态的查某提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo基本架构

Apache Dubbo框架风险解读Dubbo介绍_第3张图片
调用流程:容器启动、加载、运行服务提供者。服务提供者启动,提供自己的服务。提供服务的过程主要包括:提供服务的接口、注册服务(本地注册、注册中心注册)、暴露服务、启动Tomcat、Netty接受处理请求。把自己的主机地址、端口等信息注册到注册中心。注册中心接受注册请求,保存服务名与服务器的地址映射关系,或感知服务地址变动通知消费者。服务消费者启动时,从注册中心获取服务提供者的地址信息并缓存起来,根据负载均衡算法,从服务提供者地址列表里选择一个服务进行服务调用。服务提供者和消费者在产生调用时,在内存中统计调用次数和时间,定时发送到监控中心。微服务生态Dubbo和众多优秀的开源项目一起构建了丰富的微服务生态支持,而这个微服务生态,其实就是基于Dubbo在实现统一管理配置和各个系统服务间的调用这个功能,而衍生出的服务注册、发现、监控、链路追踪、多协议等等服务的支持。
官网上微服务生态示例架构图:
Apache Dubbo框架风险解读Dubbo介绍_第4张图片
Dubbo攻击面在对Dubbo框架及其微服务生态有一定了解之后,我们需要思考一下Dubbo框架存在哪些安全风险,或者说以Dubbo为基础构建的整个微服务生态又存在哪些安全风险。
接下来,将从攻击者的角度对Dubbo框架及微服务生态的安全风险或者攻击面进行梳理。

  1. Dubbo框架本身
    Dubbo框架本身存在多种攻击漏洞,例如由于Dubbo框架使用序列化在服务之间传输数据,支持Hessian、Fastjson、Kryo等反序列化协议,当没有采取任何防御措施或防御方法被绕过时,会导致反序列化漏洞;
    由于代码层的过滤器过滤不够严格,攻击者可以构造恶意请求调用恶意方法,造成远程代码执行漏洞;
    由于Dubbo中的某些组件会尝试打印输入参数的格式化字符串,攻击者可以利用自定义带有特殊toString方法的bean,导致远程命令执行漏洞;
    还有一些与Dubbo框架特性或功能相关的漏洞等等。
    CVE ID漏洞名称CVE-2019-17564Aapche Dubbo Java反序列化漏洞CVE-2020-1948Apache Dubbo Provider 远程代码执行漏洞CVE-2021-25641Apache Dubbo Hessian 协议反序列化漏洞CVE-2021-30179Apache Dubbo 反序列化漏洞CVE-2021-32824Apache Dubbo Telnet handler 远程代码执行漏洞CVE-2021-30180Apache Dubbo YAML 反序列化漏洞CVE-2021-30181Apache Dubbo Nashorn 脚本远程代码执行漏洞CVE-2021-36161Apache Dubbo格式化字符串错误漏洞CVE-2021-36162Apache Dubbo YAML反序列化漏洞CVE-2021-43297Apache Dubbo Hessian2 异常处理时反序列化漏洞CVE-2022-24969Apache Dubbo SSRF漏洞CVE-2023-23638Apache Dubbo CVE-2023-23638 反序列化漏洞以CVE-2021-30179和CVE-2023-23638为例:两个漏洞产生的本质都是利用了Dubbo泛化调用功能,用户可以向Dubbo服务端传入任意类,这就导致攻击者可以通过反序列化的方式,来触发特定Gadget,达到远程命令执行的目的。而CVE-2023-23638是对CVE-2021-30179防御方式的绕过。
    这里简单提一下Dubbo处理泛化调用的方式是通过filter机制实现的,核心类是org.apache.dubbo.rpc.filter.GenericFilter
    Apache Dubbo框架风险解读Dubbo介绍_第5张图片
    具体的漏洞分析可以参考:https://mp.weixin.qq.com/s/9K7z93qxTtFYcLdTGRi14A
  2. Dubbo生态中其他开源组件
    在Dubbo架构或以Dubbo为基础的微服务生态中,存在各类其他开源组件,而这些组件本身可能存在一定的漏洞风险,比如:Zookeeper作为Dubbo的注册中心,可能存在未授权漏洞;Nacos作为Dubbo的注册中心,可能存在未授权、任意用户添加、默认密码登录等安全漏洞风险;Apollo作为Dubbo的配置中心,可能存在未授权风险;SkyWalking作为Dubbo的链路追踪组件,可能存在远程命令执行漏洞。除了上述几种组件的漏洞风险的列举,具体还要看在Dubbo构建的微服务生态或Dubbo架构中使用了哪些相关组件,需要重点关注这些组件本身是否存在安全漏洞。
  3. Dubbo架构中各系统服务
    Dubbo的最主要功能是用于业务系统服务之间的调用,然而这些服务可能存在相关漏洞或数据泄露的风险。例如,缺乏适当的数据验证和输入清理可能导致SQL注入漏洞、XSS漏洞以及API未授权访问漏洞。此外,服务之间的通信缺乏足够的安全性可能导致敏感数据泄露。另外,Dubbo服务没有适当防止流量过多、资源耗尽或滥用等防御措施,从而导致DoS攻击风险。
  4. Dubbo组件—管理控制台
    作为Dubbo微服务治理控制面中的核心组件,Dubbo-Admin负责微服务集群的服务治理和可视化展示。Dubbo-Admin可能会存在弱密码登陆、未授权的API访问和默认登陆凭证等安全风险。而这也是Dubbo以及整个微服务生态的重要攻击点。总结实际上,Dubbo所面临的安全风险主要来自于框架本身的安全漏洞、业务风险以及数据泄露的风险。然而,考虑到Dubbo作为一个成熟的微服务框架,我们还必须关注它所构建的微服务生态系统中其他组件或相关服务存在的安全风险。

你可能感兴趣的:(前端编辑器gitgithub)