两个同名不同源的 Druid
Java 应用集成数据库连接池 Druid 后,默认会开启监控页(常见路径 /druid/index.html),未加保护时页面会展示 SQL 语句、会话参数、URI 统计等运行时信息,泄露的表名与字段足以支撑下一步攻击;Apache Druid 分析数据库的控制台(默认端口 8888)默认也不带认证。两者名字都含 Druid,但要先分清是连接池还是分析数据库。
基本信息
| 组件一 | 阿里 Druid 连接池的 stat-view-servlet |
|---|---|
| 组件二 | Apache Druid 分析数据库控制台(8888) |
| 默认状态 | 监控页默认开启,控制台默认不带认证 |
| 处置方式 | 加登录与来源限制,或生产环境直接关闭 |
| 识别方式 | 请求 /druid/index.html 观察响应码与页面内容 |
典型使用场景
- 上线核查:请求 /druid/index.html 确认监控页是否对外可达
- 来源收敛:即使加了登录,也把 allow 列表从整段内网收窄到监控网段
- 生产决策:非必要则关闭 stat-view-servlet,从根上消除该暴露面
- 组件辨认:页面提示与响应头能区分连接池监控页与分析数据库控制台
- 例行巡检:纳入 Web 暴露面扫描的固定检查路径
暴露验证
暴露验证
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/druid/index.html
# 200 表示监控页可直接访问,应加保护或关闭
curl -s http://127.0.0.1:8080/druid/sql.html | head -c 200 # SQL 监控页
curl -sI http://127.0.0.1:8888/ | head -n 5 # Apache Druid 控制台收敛配置示例
收敛配置示例
druid.stat-view-servlet.enabled=true
druid.stat-view-servlet.login-username=monitor
druid.stat-view-servlet.login-password=<强口令>
druid.stat-view-servlet.allow=10.0.0.0/8
druid.stat-view-servlet.deny=0.0.0.0/0
# 或生产环境直接关闭 stat-view-servlet,改由指标系统采集两种组件的辨认与处置
| 组件 | 典型路径或端口 | 处置重点 |
|---|---|---|
| Druid 连接池 | /druid/index.html、/druid/sql.html | 加登录与来源限制,或直接关闭 |
| Apache Druid | 8888 控制台与查询接口 | 启用认证,限制来源,不进公网 |
| 混淆情形 | 两者都常用 druid 前缀 | 先确认进程与依赖,再定加固方案 |
监控页加了登录但 allow 列表覆盖整段内网时,横向可达的主机仍可尝试登录:来源收敛要和认证一起做,才形成真正的收敛效果。
关闭监控页前先确认依赖:部分团队用页面做日常巡检,关掉后要提前把指标切到监控系统,否则运维侧会立刻反弹。