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
mod_security
将 `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