Dubbo一开始把自己定位为一个RPC框架,专注于服务之间的调用。随着微服务的概念越来越火爆,Dubbo开始重新思考自己的定位,除了服务调用,开始逐渐向服务治理、服务监控、服务网关等方向扩展,随着Dubbo生态圈的逐渐完善,Dubbo慢慢地演变为一个成熟的微服务框架。
【技术干货】Apache Dubbo框架风险解读
2023-07-25阅读:315
Dubbo一开始把自己定位为一个RPC框架,专注于服务之间的调用。随着微服务的概念越来越火爆,Dubbo开始重新思考自己的定位,除了服务调用,开始逐渐向服务治理、服务监控、服务网关等方向扩展,随着Dubbo生态圈的逐渐完善,Dubbo慢慢地演变为一个成熟的微服务框架。
Dubbo介绍
Dubbo定位
Dubbo一开始把自己定位为一个RPC框架,专注于服务之间的调用。随着微服务的概念越来越火爆,Dubbo开始重新思考自己的定位,除了服务调用,开始逐渐向服务治理、服务监控、服务网关等方向扩展,随着Dubbo生态圈的逐渐完善,Dubbo慢慢地演变为一个成熟的微服务框架。
Dubbo核心的服务治理功能定义:
简单总结和概括一下什么是Dubbo?
其实,Dubbo就是一个实现服务调用的分布式框架。核心部分其实在于服务系统之间的远程通讯,包括多种线程模型、序列化以及“请求-响应”模式的信息交换方式;提供基于接口方法的透明远程调用,包括多协议支持以及负载均衡,失败容错、地址路由、动态配置等集群支持;基于注册中心目录服务,使服务消费方能动态的查某提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo基本架构
调用流程:
容器启动、加载、运行服务提供者。
服务提供者启动,提供自己的服务。提供服务的过程主要包括:提供服务的接口、注册服务(本地注册、注册中心注册)、暴露服务、启动Tomcat、Netty接受处理请求。把自己的主机地址、端口等信息注册到注册中心。
注册中心接受注册请求,保存服务名与服务器的地址映射关系,或感知服务地址变动通知消费者。
服务消费者启动时,从注册中心获取服务提供者的地址信息并缓存起来,根据负载均衡算法,从服务提供者地址列表里选择一个服务进行服务调用。
服务提供者和消费者在产生调用时,在内存中统计调用次数和时间,定时发送到监控中心。
微服务生态
Dubbo和众多优秀的开源项目一起构建了丰富的微服务生态支持,而这个微服务生态,其实就是基于Dubbo在实现统一管理配置和各个系统服务间的调用这个功能,而衍生出的服务注册、发现、监控、链路追踪、多协议等等服务的支持。
官网上微服务生态示例架构图:
Dubbo攻击面
在对Dubbo框架及其微服务生态有一定了解之后,我们需要思考一下Dubbo框架存在哪些安全风险,或者说以Dubbo为基础构建的整个微服务生态又存在哪些安全风险。接下来,将从攻击者的角度对Dubbo框架及微服务生态的安全风险或者攻击面进行梳理。
1. Dubbo框架本身
Dubbo框架本身存在多种攻击漏洞,例如由于Dubbo框架使用序列化在服务之间传输数据,支持Hessian、Fastjson、Kryo等反序列化协议,当没有采取任何防御措施或防御方法被绕过时,会导致反序列化漏洞;由于代码层的过滤器过滤不够严格,攻击者可以构造恶意请求调用恶意方法,造成远程代码执行漏洞;由于Dubbo中的某些组件会尝试打印输入参数的格式化字符串,攻击者可以利用自定义带有特殊toString方法的bean,导致远程命令执行漏洞;还有一些与Dubbo框架特性或功能相关的漏洞等等。
以CVE-2021-30179和CVE-2023-23638为例:
两个漏洞产生的本质都是利用了Dubbo泛化调用功能,用户可以向Dubbo服务端传入任意类,这就导致攻击者可以通过反序列化的方式,来触发特定Gadget,达到远程命令执行的目的。而CVE-2023-23638是对CVE-2021-30179防御方式的绕过。
这里简单提一下Dubbo处理泛化调用的方式是通过filter机制实现的,核心类是org.apache.dubbo.rpc.filter.GenericFilter
具体的漏洞分析可以参考:https://mp.weixin.qq.com/s/9K7z93qxTtFYcLdTGRi14A
2. Dubbo生态中其他开源组件
3. Dubbo架构中各系统服务
4. Dubbo组件—管理控制台
总结
实际上,Dubbo所面临的安全风险主要来自于框架本身的安全漏洞、业务风险以及数据泄露的风险。然而,考虑到Dubbo作为一个成熟的微服务框架,我们还必须关注它所构建的微服务生态系统中其他组件或相关服务存在的安全风险。
地址:北京市海淀区海淀大街38号银科大厦6层
Copyright © 2022 北京星阑科技有限公司. 京ICP备19053406号
提交成功