Prometheus 未授权访问漏洞处理(basic_auth_users)

背景

经常收到甲方的各种安全漏洞通知单,这次就是几年前部署的prometheus未授权访问漏洞。

漏洞现象

分析

prometheus收集所有exporter的指标数据,汇总后通常由grafana去调用它,界面来展示,类似与kibana。当然也有可能是其他组件来调用,本项目主要只有grafana去调用它,且grafana也部署在本机,其实处理的办法也很简单,防火墙启动起来,只允许本机调用,对外接口不暴露,就能解决问题。但这不是解决问题的初衷。既然是未授权访问,那就加上身份的认证来解决问题。关键参数:Basic Auth。
通过Basic Auth功能进行加密,在浏览器登录UI的时候需要输入用户密码,访问Prometheus api的时候也需要加上用户密码。
生产的prometheus版本2.17.1,版本太古老,Prometheus于2.24版本(包括2.24)之后提供Basic Auth功能进行加密访问,因此还需要做个升级。(跨大版本的升级,不考虑历史数据的兼容问题,不保留历史数据)

升级

##下载升级包地址
wget https://github.com/prometheus/prometheus/releases/download/v3.0.0/prometheus-3.0.0.linux-amd64.tar.gz
##解压
tar -zxf prometheus-3.0.0.linux-amd64.tar.gz
cd prometheus-3.0.0.linux-amd64
mv prometheus.yml  prometheus.yml_bak
##拷贝生产prometheus.yml到新版目录下
cp ../prometheus-2.17.1.linux-amd64/prometheus.yml .
##修改systemctl配置文件
vim /etc/systemd/system/multi-user.target.wants/prometheus.service
-----
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus-3.0.0.linux-amd64/prometheus \
                   --config.file=/usr/local/prometheus-3.0.0.linux-amd64/prometheus.yml \
                   --storage.tsdb.path=/usr/local/prometheus-3.0.0.linux-amd64/data \
                   --web.console.templates=/usr/local/prometheus-3.0.0.linux-amd64/consoles \
                   --web.console.libraries=/usr/local/prometheus-3.0.0.linux-amd64/console_libraries \
                   --storage.tsdb.retention.time=90d
Restart=on-failure

[Install]
WantedBy=multi-user.target
-----
cd ..
chown -R prometheus:prometheus prometheus-3.0.0.linux-amd64
systemctl daemon-reload
systemctl stop prometheus
systemctl start prometheus


查看targets,收集的指标数据也都上来了(图略)

查阅官方文档

参考:https://prometheus.io/docs/prometheus/latest/configuration/https/

意思是说,prometheus是支持这种基础的身份验证的方式和TLS,但这个将来将会改变。需要将配置写到yaml格式的文件里面,再通过--web.config.file来调用文件。

参考:https://prometheus.io/docs/prometheus/latest/command-line/prometheus/

配置身份认证

生成bcrypt哈希值

yum -y install httpd-tools
htpasswd -nBC 12 ‘’ | tr -d ‘:\n’
强烈建议密码写到草稿上,再复制粘贴进去两遍

配置密码配置文件

touch web-auth.yml
vim web-auth.yml
basic_auth_users:
  admin: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

验证文件语法是否正确

./promtool check web-config web-auth.yml

修改systemctl配置文件

vim /etc/systemd/system/multi-user.target.wants/prometheus.service
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus-3.0.0.linux-amd64/prometheus \
                   --config.file=/usr/local/prometheus-3.0.0.linux-amd64/prometheus.yml \
                   --storage.tsdb.path=/usr/local/prometheus-3.0.0.linux-amd64/data \
                   --web.console.templates=/usr/local/prometheus-3.0.0.linux-amd64/consoles \
                   --web.console.libraries=/usr/local/prometheus-3.0.0.linux-amd64/console_libraries \
                   --storage.tsdb.retention.time=90d \
                   --web.config.file=/usr/local/prometheus-3.0.0.linux-amd64/web-auth.yml
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl restart prometheus

重启服务

服务启动正常

验证

http://127.0.0.1:9090/metrics

http://127.0.0.1:9090

不输入密码提示

输入密码后:

适配grafana

配置grafana-yum源

参考https://grafana.com/docs/grafana/latest/setup-grafana/installation/redhat-rhel-fedora/

或者直接执行
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.3.0-1.x86_64.rpm
参考https://grafana.com/grafana/download?pg=get&plcmt=selfmanaged-box1-cta1
systemctl restart grafana-server

登录grafana页面配置数据源


点测试

查看面板

数据展示没问题,部分数据库无法正常显示,可能是是node_exporter也需要升级,可能是采集数据的字段有变化,或者grafana的json也需要改,这是后话了,有时间再折腾。

posted @ 2024-11-22 18:19  海yo  阅读(10)  评论(0编辑  收藏  举报