跳转到: 导航, 搜索

OSSN/OSSN-0076


Glance 镜像服务 v1 和 v2 API image-create 漏洞

总结

对于经过身份验证的用户,Glance 镜像服务的 v1 和 v2 `/images` API POST 方法都没有强制执行限制,这可能导致通过数据库表饱和攻击造成拒绝服务攻击。

受影响的服务 / 软件

所有版本的 Glance 镜像服务。

讨论

在 Glance 镜像服务中,对 v1 或 v2/images 方法的 POST 请求会创建处于 `queued` 状态的镜像(记录)。Glance API 对单个租户可以创建的镜像数量没有限制,仅对单个用户可以使用的总存储量有限制。

因此,用户可能出于恶意或无意的原因,用无用的镜像记录填充多个数据库表(images、image_properties、image_tags、image_members),从而通过延长 Glance 数据库中的事务响应时间来造成拒绝服务。

建议的操作

对于暴露 v1 和 v2/images API 的所有版本的 Glance,建议操作员部署外部速率限制代理或 Web 应用程序防火墙,为 Glance 提供第一层保护。应监控 Glance 数据库是否存在异常增长。虽然速率限制不能消除此攻击向量,但它会减慢攻击速度,以便您可以在发生拒绝服务之前做出反应。

可以考虑以下解决方案,但是操作员在配置任何速率限制功能时,必须仔细规划并考虑 OpenStack 云中用户和服务的各个性能需求。

Repose

Repose 提供速率限制过滤器,可以使用 IP、角色(OpenStack Identity v3 过滤器)或标头进行限制。

https://repose.atlassian.net/wiki/display/REPOSE/Rate+Limiting+Filter

NGINX

NGINX 提供 limit_req_module,可用于提供全局速率限制。通过 `map`,可以将其限制为仅 POST 方法。

更多详细信息可在 nginx 网站上找到:https://nginx.ac.cn/en/docs/http/ngx_http_limit_req_module.html

HAProxy

HAProxy 可以使用带有通用目的计数器 (gpc) 的 stick-tables 提供固有的速率限制

更多详细信息可在 haproxy 网站上找到

http://blog.haproxy.com/2012/02/27/use-a-load-balancer-as-a-first-row-of-defense-against-ddos

Apache

可以探讨以下几种解决方案。

mod_ratelimit

https://httpd.apache.org/docs/2.4/mod/mod_ratelimit.html

mod_qos

http://opensource.adnovum.ch/mod_qos/dos.html

mod_evasive

https://www.digitalocean.com/community/tutorials/how-to-protect-against-dos-and-ddos-with-mod_evasive-for-apache-on-centos-7

mod_security

https://www.modsecurity.org/

将 `add_image` 限制为 admin 角色

另一种可能的缓解措施是将镜像创建限制为 admin 角色,但是仅当存在专用于最终用户访问的 Glance 节点时才应这样做。仅在为 OpenStack 服务提供服务的 Glance 节点上限制为 admin,将删除从 Compute API 创建快照或从 Cinder 创建可启动卷的能力。

要将镜像创建限制为 admin 角色,请相应地修改 `/etc/glance/policy.json`。

   "add_image": "role:admin",

联系方式 / 参考文献

作者:Luke Hinds, Red Hat

此 OSSN:https://wiki.openstack.org/wiki/OSSN/OSSN-0076

原始 LaunchPad Bug:https://bugs.launchpad.net/ossn/+bug/1545092

OpenStack Security ML:openstack-security@lists.openstack.org

OpenStack Security Group:https://launchpad.net/~openstack-ossg