HadoopYARN资源管理系统RESTAPI未授权访问
- 行业动态
- 2025-05-13
- 3
Hadoop YARN REST API未授权访问破绽允许攻击者绕过认证,通过API接口执行反面操作(如提交任务、改动配置),可能导致集群资源滥用、数据泄露或系统控制权丧失
Hadoop YARN资源管理系统REST API未授权访问详解
问题背景与定义
Hadoop YARN(Yet Another Resource Negotiator)是Hadoop生态系统的核心资源管理组件,负责集群资源的分配与调度,YARN通过REST API暴露了资源管理、应用提交、状态查询等关键功能。未授权访问指攻击者无需经过身份验证或权限校验,即可通过REST API直接操作YARN资源,可能引发严重的安全风险。
风险分析
风险类型 | 描述 | 影响等级 |
---|---|---|
资源滥用 | 攻击者提交大量占用资源的作业,导致合法业务无法运行。 | 高 |
数据泄露 | 通过API获取集群敏感信息(如节点状态、应用日志)。 | 中 |
权限绕过 | 修改其他用户的作业优先级或直接终止其任务。 | 高 |
服务拒绝(DoS) | 频繁调用API接口,耗尽YARN ResourceManager的线程或网络资源。 | 高 |
攻击场景示例
未授权任务提交
攻击者通过/ws/v1/cluster/apps
接口提交反面作业(如无限循环的MapReduce任务),消耗集群算力。curl -X POST http://<resourcemanager>:8088/ws/v1/cluster/apps -d '{"application":"{"name":"MaliciousJob"}'}'
敏感信息窃取
调用/ws/v1/cluster/nodes
接口获取所有NodeManager的状态信息,包括IP地址、版本号等,为后续攻击提供情报。curl http://<resourcemanager>:8088/ws/v1/cluster/nodes
权限改动
通过/ws/v1/cluster/apps/<app_id>
接口修改其他用户的作业优先级或强制终止任务。
检测方法
端口扫描
检查YARN ResourceManager的8088端口(默认REST API端口)是否对公网开放。nmap -p 8088 <ResourceManager_IP>
API响应测试
发送无认证的GET请求,若返回成功响应(HTTP 200)且包含敏感数据,则存在破绽。curl http://<ResourceManager>:8088/ws/v1/cluster/info
日志分析
检查YARN日志中是否存在异常的REST API调用记录(如高频访问、非授权用户操作)。
解决方案与防护措施
防护层 | 具体措施 |
---|---|
身份认证 | 启用Kerberos认证,强制REST API调用需携带有效票据。 配置SPNEGO/LDAP集成。 |
网络隔离 | 将ResourceManager部署在内网,仅允许信任节点访问。 使用防火墙限制8088端口访问。 |
访问控制 | 配置IP白名单,仅允许特定源调用API。 细化ACL权限,按用户/组限制操作范围。 |
加密传输 | 启用HTTPS,防止流量劫持。 禁用未加密的HTTP服务。 |
审计与监控 | 开启YARN审计日志,记录所有API操作。 集成监控系统(如Prometheus)检测异常行为。 |
实施步骤
启用Kerberos认证
- 编辑
yarn-site.xml
,添加:<property> <name>yarn.resourcemanager.principal</name> <value>HTTP/<FQDN>@<REALM>.COM</value> </property> <property> <name>yarn.resourcemanager.keytab</name> <value>/etc/krb5/rm.keytab</value> </property>
- 重启ResourceManager并验证认证生效。
- 编辑
配置HTTPS
- 生成SSL证书并配置
yarn-site.xml
:<property> <name>yarn.resourcemanager.https.enable</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.https.port</name> <value>8090</value> </property>
- 生成SSL证书并配置
IP白名单设置
- 在
yarn-site.xml
中添加:<property> <name>yarn.resourcemanager.address</name> <value>192.168.1.100:8088</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>192.168.1.100:8030</value> </property>
- 在
案例分析
某互联网公司因未限制YARN API访问,攻击者通过公网IP调用/ws/v1/cluster/apps
接口提交挖矿程序,导致集群CPU利用率飙升至100%,事后分析发现:
- ResourceManager直接暴露在公网。
- 未启用任何身份认证机制。
- 缺乏API调用频率限制。
最佳实践建议
- 最小化暴露面:关闭不必要的REST API端点(如测试接口)。
- 动态令牌:为短期操作生成临时访问令牌,避免长期凭证泄露。
- 定期审计:每月检查YARN日志中的API调用记录,识别异常行为。
- 版本升级:使用Hadoop 3.x及以上版本,修复已知的安全破绽(如CVE-2020-1533)。
FAQs
问题1:如何确认YARN是否启用了Kerberos认证?
答:检查yarn-site.xml
中是否存在以下配置:
yarn.resourcemanager.principal
yarn.resourcemanager.keytab
若存在且已重启服务,则表示启用,可通过发送带Kerberos票据的请求验证(如krb-curl
工具)。
问题2:如何限制REST API仅允许特定IP访问?
答:在ResourceManager主机的防火墙中配置规则,
# 仅允许192.168.1.0/24网段访问8088端口 iptables -A INPUT -p tcp --dport 8088 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 8088 -