YARN 远程代码执行(RCE)安全漏洞问题分析与解决方案

简介: YARN 远程代码执行(RCE)安全漏洞问题分析与解决方案

YARN 远程代码执行(RCE)安全漏洞问题分析与解决方案

1 YARN RCE 漏洞问题问题现象

某客户使用Tenable.sc扫描安全漏洞后反馈,YARN 存在Remote code execution (RCE) 安全漏洞问题,攻击者可在未经过身份验证的情况下通过该漏洞在受影响主机执行任意命令,最终控制服务器。 问题描述及细节情况如下图所示:

image.png

2 YARN RCE 漏洞问题分析与复现

  • YARN 内置了Jetty并基于Jetty提供了 restful api,用户可以访问这些 restful api 以获得YARN集群中集群、节点和用用的相关信息。
  • 在未作特殊配置的情况下,普通用户确实可以在未认证的情况下访问yarn这些restful api,通过巧妙地构建特定的JSON输入数据,确实可以通过Remote code execution (RCE) 安全漏洞在受影响主机执行任意命令,最终控制服务器。
  • 我们可以通过开启kerberos安全认证(hadoop.security.authentication=kerberos),来阻止针对整个hadoop集群(包括hdfs/yarn)的基于RPC的未授权访问;
  • 我们可以通过进一步开启 HTTP Web 控制台的 Kerberos 身份验证(hadoop.http.authentication.type=kerberos),来阻止针对整个hadoop集群(包括hdfs/yarn)的基于http的未授权访问;

2.1 未开启kerberos安全认证

在未开启kerberos安全认证的集群中(core-site.xml中hadoop.security.authentication=simple):

  • 用户在未经安全认证的情况下,可以正常使用yarn application -list等客户端命令(底层基于rpc协议):
  • 用户在未经安全认证的情况下,也可以正常访问yarn的restful api(底层基于http协议):

image.png


2.2 开启kerberos安全认证

在开启了kerberos安全认证的集群中(core-site.xml中hadoop.security.authentication=kerberos):

  • 用户只有在经过 kinit安全认证的情况下,才可以使用yarn application -list等客户端命令(底层基于rpc协议);
  • 但可以在未经任何认证的情况下,使用curl等命令或浏览器等正常访问yarn的restful api(底层基于http协议):

image.png

2.3 开启kerberos安全认证和 HTTP Web 控制台的 Kerberos 身份验证

在开启了kerberos安全认证且启用了 HTTP Web 控制台的 Kerberos 身份验证的集群(core-site.xml中hadoop.security.authentication=Kerberos,且hadoop.http.authentication.type=kerberos):

  • 用户只有在经过 kinit安全认证后,才可以正常使用yarn application -list等客户端命令(底层基于rpc协议);
  • 且只有在经过配置和认证的情况下,才可以使用curl等命令或浏览器正常访问yarn的restful api(底层基于http协议):

image.png

3.问题解决

  • 综上所述,可以更改服务端配置,开启集群的kerberos的安全认证和 HTTP Web 控制台的 Kerberos 身份验证(core-site.xml中hadoop.security.authentication=Kerberos,且hadoop.http.authentication.type=kerberos),来阻止YARN的各种未授权访问漏洞,包括未认证Remote code execution (RCE) 安全漏洞;
  • 在CDH/CDP等大数据平台中,可以通过CM界面完成上述操作变更,开启kerberos的安全认证:管理=》安全=》启用kerberos;


  • 在CDH/CDP等大数据平台中,可以通过CM界面一键完成上述操作变更,开启HTTP Web 控制台的 Kerberos 身份验证;

image.png

4. 技术背景

  • 在未开启kerberos安全认证的集群中(core-site.xml中hadoop.security.authentication=simple),用户在未经安全认证的情况下,可以正常使用yarn/hdfs等客户端命令(底层基于rpc协议),也可以正常访问yarn/hdfs等的web控制台或restful api(底层基于http协议);
  • 我们可以通过开启kerberos安全认证(hadoop.security.authentication=kerberos),来阻止针对整个hadoop集群(包括hdfs/yarn)的基于RPC的未授权访问,此时客户端通过 rpc 协议访问大数据服务如 hdfs/yarn/hive/hbase/kafka/zookeeper/spark 等服务端时,只有在经过 kerberos 认证后才能访问成功;
  • 我们可以通过进一步开启 HTTP Web 控制台的 Kerberos 身份验证(hadoop.http.authentication.type=kerberos),来阻止针对整个hadoop集群(包括hdfs/yarn)的基于http的未授权访问,此时用户在通过 web 浏览器或curl等命令基于 http/https访问大数据服务如 namenode/resourceManager/hive hs2/spark History Server 等的 webui或restful api时,spnego 会对用户进行身份验证,用户只有在成功通过了 kerberos 认证拿到了 ticket 后,才能成功访问对应服务的 web ui(需要在浏览器或curl等命令中做相应配置);
  • 开启hdfs/yarn的HTTP Web 控制台的 Kerberos 身份验证,其背后更改的是配置文件core-site.xml中的hadoop.http.authentiation.* 等配置项,如下图所示:

image.png

  • 配置hdfs/yarn之外的其它服务的HTTP Web 控制台的 Kerberos 身份验证,比如Hive等服务,在CDH/CDP中部分版本可能没有一键进行开启或关闭的功能,此时需要通过高级代码端的方式进行配置,且如果配置参数不全的话,对应的服务可能会启动失败:(当然如果这些服务只是提供了web ui页面而没有提供restful api, 也不会有未认证的RCE安全问题):

image.png

5. 相关命令与参数

# 相关命令:
curl -H "Content-Type: application/json" -X GET "http://10.20.39.42:8088/ws/v1/cluster/apps"
curl -H "Content-Type: application/json" -X GET "http://10.20.25.28:8088/ws/v1/cluster/info"
curl "http://10.20.25.28:8088/ws/v1/cluster/apps" -H "Content-Type: application/json" -X POST -d {"am-container-spec":{"commands":{"command":"ping -c 3 -s 500 10.20.25.28"}},"application-id":"application_xx_xx","application-type":"YARN","application-name":"xx"}
#core-site.xml中相关参数:
    <name>hadoop.http.authentication.type</name>
    <value>kerberos</value>
    <name>hadoop.http.authentication.signature.secret.file</name>
    <value>/var/run/cloudera-scm-agent/process/4215-yarn-RESOURCEMANAGER/http-auth-signature-secret</value>
    <name>hadoop.http.authentication.cookie.domain</name>
    <value></value>
    <name>hadoop.http.authentication.kerberos.principal</name>
    <value>HTTP/_HOST@CDH.COM</value>
    <name>hadoop.http.authentication.kerberos.keytab</name>
    <value>yarn.keytab</value>
相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
资源调度 JavaScript
Vue npm yarn webpack 遇到无法加载文件禁止运行脚本解决方案
Vue npm yarn webpack 遇到无法加载文件禁止运行脚本解决方案
97 0
Vue npm yarn webpack 遇到无法加载文件禁止运行脚本解决方案
|
8月前
|
分布式计算 资源调度 监控
Hadoop学习笔记(四)之YARN
Hadoop学习笔记(四)之YARN
|
9月前
|
分布式计算 资源调度 Hadoop
Flink安装部署{单机模式、会话模式(集群部署)、yarn模式(包含hadoop3.1.3部署)}
Flink安装部署{单机模式、会话模式(集群部署)、yarn模式(包含hadoop3.1.3部署)}
302 0
|
17天前
|
分布式计算 资源调度 Hadoop
Hadoop【基础知识 03+04】【Hadoop集群资源管理器yarn】(图片来源于网络)(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
【4月更文挑战第5天】Hadoop【基础知识 03】【Hadoop集群资源管理器yarn】(图片来源于网络)Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
44 9
|
18天前
|
分布式计算 资源调度 Hadoop
Hadoop【基础知识 03】【Hadoop集群资源管理器yarn】(图片来源于网络)
【4月更文挑战第4天】Hadoop【基础知识 03】【Hadoop集群资源管理器yarn】(图片来源于网络)
25 4
|
22天前
|
资源调度 分布式计算 算法
【Hadoop Yarn】Hadoop Yarn 基于优先级的调度算法
【4月更文挑战第7天】【Hadoop Yarn】Hadoop Yarn 基于优先级的调度算法
|
22天前
|
资源调度 分布式计算 监控
【Hadoop Yarn】Yarn 工作机制
【4月更文挑战第7天】【Hadoop Yarn】Yarn 工作机制
|
2月前
|
资源调度 分布式计算 Hadoop
Apache Hadoop YARN基本架构
【2月更文挑战第24天】
|
4月前
|
资源调度 分布式计算 监控
Hadoop中的YARN是什么?请解释其作用和架构。
Hadoop中的YARN是什么?请解释其作用和架构。
57 0
|
5月前
|
分布式计算 资源调度 Hadoop
Hadoop【部署 02】hadoop-3.1.3 单机版YARN(配置、启动停止shell脚本修改及服务验证)
Hadoop【部署 02】hadoop-3.1.3 单机版YARN(配置、启动停止shell脚本修改及服务验证)
56 0