问题描述
漏洞编号 76311
风险级别 中风险
远程主机正在运行允许明文身份验证的服务。
远程高级消息队列协议(AMQP)服务支持一个或多个身份验证机制,允许以清晰的方式发送凭据。
解决办法 在AMQP配置中禁用明文认证机制。
RabbitMQ鉴权机制
RabbitMQ 支持多种 SASL 鉴权机制。服务器中内置了三种:PLAIN、AMQPLAIN 和 RABBIT-CR-DEMO,以及一种通过插件方式的 EXTERNAL。
更多鉴权机制可以通过插件提供。查阅插件开发指南获取更多关于通用插件开发的信息。
机制类型 | 描述 |
---|---|
PLAIN | SASL PLAIN 鉴权。在 RabbitMQ 服务器和客户端都是默认开启,大部分其他客户端也是该默认设置。 |
AMQPPLAIN | 为像后兼容的非标准版 PLAIN,这个在 RabbitMQ 服务端默认开启。 |
EXTERNAL | 鉴权发生在使用带外机制,如 x509 证书的对等验证,客户端 IP 地址范围,或者类似的。这样的机制通用由 RabbitMQ 插件提供。 |
RABBIT-CR-DEMO | 展示质询-响应鉴权的非标准机制。这个机制安全性与 PLAIN 相等,在 RabbitMQ 服务端默认不开启。 |
RabbitMQ 应用中配置变量 auth_mechanisms
决定了提供哪一种已安装的机制给连接的客户端。该变量应该是相应机制名称的原子列表,如:默认的 [‘PLAIN’, ‘AMQPLAIN’]。该服务端的列表不代表特定的顺序。
验证rabbitMQ服务配置
# 服务器 部署
rabbitmqctl environment
# docker 部署
docker exec rabbitmq rabbitmqctl environment
修改rabbitmq.config
服务器 部署
vi /etc/rabbitmq/rabbitmq.config
[
{rabbit,
[
{ tcp_listeners, [ 5672 ] },
{ ssl_listeners, [ ] },
{default_user, <<"your_user">>},
{default_pass, <<"your_pass">>},
{loopback_users, []},
{auth_mechanisms,['EXTERNAL']}
]
},
{ rabbitmq_management, [
{ listener, [
{ port, 15672 },
{ ssl, false }
]
}
]
}
].
docker部署
我们使用RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS
环境变量,例如,配置channel_max看起来像 -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit auth_mechanisms ['EXTERNAL']"
. 在环境中翻译时,变量 auth_mechanisms 与 [‘EXTERNAL’]之间的空格会翻译成逗号。
# 删除原有的容器
docker stop rabbitmq
docker rm rabbitmq
# 运行新容器
docker run -dit --name rabbitmq -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit auth_mechanisms ['EXTERNAL']" -v /mnt/service-data/rabbitmq/lib:/var/lib/rabbitmq -v /mnt/service-data/rabbitmq/log:/var/log/rabbitmq rabbitmq:3.5.7
# 验证配置
docker exec rabbitmq rabbitmqctl environment