作为 API 网关,它具有管理集群南北流量的功能,一般也可能作为集群流量的入口和出口(ingress/egress)。而作为标榜云原生特性的 API 网关产品,似乎无一例外都会具有动态配置、灵活修改、远程管理的特性,而这些特性往往以 REST API 对外提供服务。
然而在远程配置逻辑的鉴权能力上,身为网关这种基础网络的产品,各个受欢迎的开源组件在默认安全的实现上似乎还需努力。
以 Kong 为例,Kong API 网关 (https://github.com/Kong/kong) 是目前最受欢迎的云原生 API 网关之一,有开源版和企业版两个分支,被广泛应用于云原生、微服务、分布式、无服务云函数等场景的 API 接入中间件,为云原生应用提供鉴权,转发,负载均衡,监控等能力。
我们曾经在一次渗透测试中使用 Kong 的远程配置能力突破外网进入到内网环境中,可以参考之前的预警文章《腾讯蓝军安全提醒:开源云原生 API 网关 Kong 可能会成为攻击方进入企业内网的新入口》
Kong 使用 Kong Admin Rest API 作为管理 Kong Proxy 能力的关键入口,以支持最大程度的灵活性;在开源分支里,这个管理入口是没有鉴权能力的 (Kong 企业版支持对 Kong Admin Rest API 进行角色控制和鉴权),Kong 建议用户在网络层进行访问控制;当攻击方可以访问到这个 API,他就具有了 Kong Proxy 的所有能力,可以查看和修改企业当前在南北流量管理上的配置,可以直接控制 API 网关使其成为一个开放性的流量代理 (比 SSRF 更便于使用和利用);从攻击方的角度思考,控制了这个 API 等于是拥有了摸清网络架构和打破网络边界的能力。
当蓝军可以访问到 Kong Admin Rest API 和 Kong Proxy 时,蓝军可以通过以下步骤创建一个通往内网的代理:
至此,蓝军从外网发往 Kong Proxy 的流量只要 host 头带有 target.com 就会转发到内网的 target.com:443 中,实际利用手法会根据内网和目标站点配置的不同而变化。
而目前 Kong 的开源分支里是不支持给 Kong Admin Rest API 添加相应的鉴权能力的,只可以改变监听的网卡,或使用设置 Network Policy、 iptables、安全组等方式进行网络上隔离。现在最常见的方式就是不开放外网,只允许内网访问。也因为如此,如果已经进入到内网,API 网关的管理接口会成为我首要的攻击目标之一,借此我们可以摸清当前集群对内对外提供的相关能力,更有可能直接获取流量出入口容器的 Shell 权限。