Kibana 未认证访问的问题
Kibana 在未启用 Elastic Stack 安全功能时默认不校验登录,5601 端口一旦可达,仪表盘、索引模式与部分数据就能被匿名浏览。内置的 Dev Tools 控制台还能直接向 Elasticsearch 发起查询,等于把数据读取能力一并放出去。这个问题通常与 Elasticsearch 9200 同样缺少认证一起出现,两者要同时核查。
基本信息
| 组件 | Kibana 与后端 Elasticsearch |
|---|---|
| 默认端口 | 5601 Kibana,9200 Elasticsearch |
| 主要风险 | 未启用认证时可匿名访问、Dev Tools 可直接查询、9200 直连无认证 |
| 加固方向 | 启用安全功能(TLS 加账号体系)、反向代理加认证、限制来源、收敛 Dev Tools 权限 |
| 检查方式 | 未认证请求 /api/status 与 /app/kibana 观察返回码 |
| 关联检查 | Kibana 与 Elasticsearch 一起核查,避免只挡住一端 |
核查项与期望
| 核查项 | 检查方式 | 期望状态 |
|---|---|---|
| 匿名访问 | 请求 /api/status | 返回 401 |
| 应用页面 | 请求 /app/kibana | 跳转登录页 |
| Dev Tools | 界面中的开发工具入口 | 仅授权角色可见 |
| 后端 Elasticsearch | 直连 9200 根路径 | 需要认证 |
| 来源限制 | 反向代理与防火墙规则 | 仅内网或指定网段可访问 |
| 索引敏感度 | 检查索引中的字段 | 敏感字段已脱敏或受限 |
匿名访问测试
匿名访问测试
# 未认证请求 Kibana,期望 401
curl -s -o /dev/null -w '%{http_code}\n' http://kibana.example.com:5601/api/status
curl -s -o /dev/null -w '%{http_code}\n' http://kibana.example.com:5601/app/kibana
# 顺带核查后端 Elasticsearch 是否也需要认证
curl -s -o /dev/null -w '%{http_code}\n' http://es.example.com:9200/
# 期望 401;返回 200 表示未启用认证收敛要点
收敛要点
1. 启用 Elastic Stack 安全功能(TLS 加账号体系)
2. 无法启用时置于带认证的反向代理之后,并限制来源网段
3. 关闭或收敛 Dev Tools 的使用权限,按角色授予
4. 关注 Elastic 安全公告中的 Kibana 与 Elasticsearch 修复版本
5. 审计异常查询与批量导出行为,监控索引访问典型使用场景
- 日志与可观测平台上线前的访问控制核查
- 季度巡检中的未认证服务排查
- 渗透测试报告里未授权访问问题的整改
- 内网数据平台对外提供访问前的复核
- 应急时确认是否存在异常查询与数据导出
- 审计举证:给出访问控制配置与账号清单
Kibana 匿名可读往往意味着 Elasticsearch 同样缺少认证。两个组件要一起核查,只给 Kibana 加认证而 9200 仍可直连,等于留了后门。
通过 Dev Tools 可以直接执行查询语句,读取数据的门槛与登录用户相同。把 Dev Tools 开放给只读角色,也会扩大数据暴露面。