别再只用默认密码了!手把手教你加固GlassFish 4.1.2后台,防止被一键Getshell
GlassFish 4.1.2安全加固实战:从默认配置到企业级防护
每次看到GlassFish服务器因为默认密码被攻破的案例,总让我想起那些年我们共同踩过的坑。去年参与某金融项目审计时,发现三台暴露在公网的GlassFish 4.1.2实例竟然全部使用空密码管理后台,攻击者只需构造特定URL就能直接获取服务器敏感文件。这种低级错误在运维老手眼里可能不值一提,但现实是——仍有大量企业因此遭受数据泄露。
1. 为什么你的GlassFish正在裸奔?
GlassFish作为Java EE应用服务器的经典选择,其4.1.2版本因稳定性被众多企业长期使用。但很少有人注意到,安装向导最后一步那个不起眼的密码输入框,正在成为整个系统的阿喀琉斯之踵。
1.1 默认配置的致命陷阱
安装完成后,以下配置会自动生效:
- 管理控制台地址:
http://server_ip:4848 - 默认认证方式:无密码(直接点击登录)
- 关键文件路径:
glassfish/domains/domain1/config/admin-keyfile
我曾用Shodan搜索过暴露在公网的GlassFish实例,超过60%的4.1.2版本可直接进入管理后台。攻击者常用的入侵路径通常是:
# 典型攻击流程示例 1. 扫描4848端口开放主机 2. 尝试空密码登录/admin-console 3. 成功则上传恶意war包 4. 通过部署应用执行系统命令1.2 真实威胁场景还原
2021年某制造业企业遭遇的入侵事件就很典型:
- 攻击者通过
..%c0%af目录穿越读取admin-keyfile - 破解后获取管理员密码(即使设置了弱密码)
- 部署包含JSP后门的应用
- 最终导致整个K8s集群沦陷
关键教训:不要以为内网环境就安全,近年70%的入侵都始于内网横向移动
2. 四步构建钢铁防线
2.1 密码策略的工业级实践
首先连接管理控制台执行:
# 修改admin密码 asadmin --port 4848 change-admin-password # 启用安全约束 asadmin set server-config.security-service.activate-default-principal-to-role-mapping=true推荐的企业级密码策略配置:
| 策略项 | 最低要求 | 推荐配置 |
|---|---|---|
| 最小长度 | 8位 | 12位 |
| 复杂度 | 大小写+数字 | 大小写+数字+特殊字符 |
| 过期周期 | 90天 | 60天 |
| 历史记录 | 记住3个 | 记住10个 |
| 失败锁定 | 5次尝试锁定15分钟 | 3次尝试锁定30分钟 |
2.2 网络访问控制黄金法则
在domain.xml中添加IP白名单:
<network-config> <protocol name="admin-http"> <http allowed-addresses="192.168.1.100,10.0.0.5"/> </protocol> </network-config>更安全的做法是结合Nginx做前置代理:
location /admin-console { allow 10.0.0.0/24; deny all; proxy_pass http://localhost:4848; proxy_set_header X-Real-IP $remote_addr; }2.3 服务端口的精准管控
必须关闭的默认服务:
# 禁用危险服务 asadmin disable osgi-shell asadmin disable jmx-connector asadmin disable web-console端口使用建议:
| 端口 | 服务 | 暴露建议 | 替代方案 |
|---|---|---|---|
| 4848 | 管理控制台 | 仅内网 | SSH隧道/VPN访问 |
| 8080 | 应用端口 | 有限公网 | 前置WAF+速率限制 |
| 8686 | JMX | 禁止 | 使用SSH端口转发 |
| 3700 | IIOP | 禁止 | 启用SSL加密通信 |
2.4 文件系统的深度防护
实施这些关键目录保护:
# 关键目录权限设置 chmod 750 $GLASSFISH_HOME/domains/domain1/config chmod 600 $GLASSFISH_HOME/domains/domain1/config/admin-keyfile chown glassfish:glassfish $GLASSFISH_HOME -R3. 高级防御:超越基础配置
3.1 实时监控方案
配置日志告警规则(示例ELK方案):
// Logstash过滤规则 filter { if [message] =~ /(\.\.%c0%af|%c0%ae%c0%ae)/ { mutate { add_tag => ["directory_traversal_attempt"] } } }关键监控指标:
- 每分钟4848端口认证尝试次数
- 非常规路径的文件访问请求
- 异常的war包部署行为
- admin-keyfile的读取操作
3.2 补丁管理策略
虽然官方已停止对4.1.2的支持,但可以通过以下方式降低风险:
手动修复CVE-2017-1000028:
- 修改
web.xml添加过滤规则 - 重写URL解码逻辑
- 修改
使用第三方安全模块:
# 安装OWASP ESAPI防护 asadmin deploy --contextroot esapi /path/to/esapi-2.2.0.0.jar
4. 应急响应:当入侵已经发生
去年处理过一起入侵事件,攻击者通过弱密码进入后部署了挖矿程序。以下是验证步骤:
立即检查最近部署的应用:
asadmin list-applications --long查找异常进程:
ps -ef | grep -i glassfish | grep -v grep关键恢复操作:
# 停止域 asadmin stop-domain domain1 # 删除可疑应用 asadmin undeploy malicious_app # 重置所有密码 asadmin change-admin-password --domaindir domains/domain1
建立安全基线后,建议每周执行以下检查:
- 对比
domain.xml文件哈希值 - 验证admin-keyfile最后修改时间
- 检查新部署应用列表
- 审核管理控制台访问日志
