Hadoop集群容易被攻击的几个场景

本文讲的是Hadoop集群容易被攻击的几个场景


前言

Hadoop是成为大数据分析平台的主流产品,其安全性一直深受诟病,而针对安全的各种配置也都比较复杂,因此我们在一些场景的配置下进行安全测试,看看究竟哪些场景可能会被攻击。

1、HDFS脆弱性测试

1.1、用户冒充,访问任意文件操作

受影响的环境:在hdfs-core.xml文件中配置,Simple模式,dfs.permissions.enabled开启或关闭均可。

方法:利用客户机1远程进行操作,如果当前客户机1和2分别建立不同密码的用户user1,并以user1为当前shell用户执行命令:

[user1@s1~]$ hadoop fs -ls hdfs://192.168.1.185:8020/

可查看集群中目录和文件列表

[user1@s1~]$ hadoop fs -mkdir hdfs:// 192.168.1.185:8020/user1

则可创建user1目录,其owner为user1

[user1@s1~]$ hadoop fs -put data.txt hdfs:// 192.168.1.185:8020/user1/data.txt

则可以上传data.txt文件至hdfs中,其owner为user1

[user1@s1~]$ hadoop fs -chmod 700 hdfs:// 192.168.1.185:8020/user1/data.txt

则是将文件data.txt文件的权限设为仅有属主user1可读,其他用户都无法读写执行。

[user1@s1~]$ hadoop fs –cat hdfs://192.168.1.185:8020/user1/data.txt

可查看文件内容。

这个过程可以看到两个user1,均无需密码就可以连接到hdfs中,访问集群时,所访问的对象都是一样的,因此可证明冒充攻击的有效性。

1.2、普通用户越权访问

受影响的环境:在hdfs-core.xml文件中配置,Simple模式或kerberos模式开启,dfs.permissions.enabled关闭。

方法:可以在客户机1上新建user2,执行指令:

[user2@s1~]$ hadoop fs –cat hdfs://host:port/user1/data.txt

可查看权限为700的data.txt文件,说明用户可任意越权访问。

 1.3、特权用户越权访问

受影响的环境:在hdfs-core.xml文件中配置,Simple模式或kerberos模式开启,dfs.permissions.enabled开启。

方法:开启permissions验证以后,user2无法访问data.txt文件

[user2@s1~]$ hadoop fs –cat hdfs://host:port/user1/data.txt
cat: Permission denied: user=user2, access=READ, inode="/user1/data.txt":user1:supergroup:-r--------

接下来在客户机2上su到root用户,执行指令:

[root@s1~]# hadoop fs –cat hdfs://host:port/hadoop/hacker/data.txt

则可查看权限为700的data.txt文件,说明在开启最严格的kerberos和permissions 验证以后,root用户可对任意数据进行越权访问。

2.Hbase脆弱性测试

2.1用户冒充,访问任意文件操作

受影响的环境:在hdfs-core.xml文件中配置,Simple模式,dfs.permissions.enabled开启或关闭均可。

hbase-site.xml文件中,org.apache.hadoop.hbase.security.access.AccessController配置开启或关闭ACL功能。

方法:hbase客户端访问远程服务器需要修改客户端配置,配置客户端的hbase-site.xml,设置Zookeeper集群的IP,从而协调Hbase各节点。

<name>hbase.zookeeper.quorum</name>
<value>192.168.1.185</value>

利用客户机1和客户机2分别使用user1登录到hbase上。

user1@ubuntu:/usr$ hbase shell

启用hbase客户端

hbase(main):000:0> create 'user1','name','age'

新建一个表,表名user1,列名name,列名age

hbase(main):001:0>scan user1

对表进行扫描操作

hbase(main):002:0>disable user1

关闭表

hbase(main):003:0>drop user1

删除表

这个过程可以看到两个user1,均无需密码就可以连接到hbase中,访问集群时,所访问的表内容都是一样的,因此可证明冒充攻击的有效性。

2.2、普通用户越权访问

受影响的环境:在hdfs-core.xml文件中配置,Simple模式或kerberos模式开启,dfs.permissions.enabled关闭。hbase-site.xml文件中,org.apache.hadoop.hbase.security.access.AccessController配置关闭ACL功能。

方法:先用user1新建表:

hbase(main):004:0> create 'user1','name','age'

新建一个表,表名user1,列名name,列名age

可以再客户机1上user2,执行指令:

hbase(main):005:0>disable user1

关闭表

hbase(main):006:0>drop user1

可直接删除user1表,说明user2用户可任意越权访问user1的表。

2.3、特权用户越权访问

受影响的环境:在hdfs-core.xml文件中配置,Simple模式或kerberos模式开启,dfs.permissions.enabled开启。hbase-site.xml文件中,org.apache.hadoop.hbase.security.access.AccessController配置开启ACL功能。

方法:开启hbase的ACL以后,user2无法访问user1表

hbase(main):007:0>disable user1

关闭表失败

hbase(main):008:0>drop user1

删除表失败

接下来在客户机2上su到root用户,执行指令:

hbase(main):009:0>disable user1

关闭表

hbase(main):010:0>drop user1

删除表

说明在开启最严格的kerberos、permissions 以及hbase的ACL验证以后,root用户可对任意用户的表进行越权访问。

3、MR2 Yarn脆弱性测试

受影响的环境:Simple模式或kerbors模式,dfs.permissions.enabled开启或关闭。

方法:在无防护的情况下,可以对Yarn环境中的任务进行终止操作。

通过JAVA API 远程调用进行list Job 和Kill Job ,hadoop 只校验用户名。

 代码实现:

1 . new yarnclient 实例

YarnClient client = YarnClient.createYarnClient();

2. 获取任务ID 列表

appsReportList = client.getApplications();

3. 遍历list 拿到任务ID ,调用killApplication 杀掉用户提交的任务

 client.killApplication(ApplicationId.newInstance(timeStamp, id))

如果启动集群的用户名为root,那么root则可以kill任何用户的任务。

4、暴力破解

受影响的环境:Simple模式,dfs.permissions.enabled开启或关闭。

方法:Hadoop一直以来都没有密码的概念,但可以尝试穷举用户,可不断尝试不同的用户名来进行操作。

[user1@s1~]$ hadoop fs -ls hdfs://192.168.1.185:8020/
[user2@s1~]$ hadoop fs -ls hdfs://192.168.1.185:8020/
[user3@s1~]$ hadoop fs -ls hdfs://192.168.1.185:8020 /

在permissions关闭的情况下,如果用户名无效,则会返回无权限的提示,直到可列出目录内容,证明暴力猜解成功。

在permissions开启的情况下,则会在系统中新建多个用户。

Hbase和Yarn同理可穷举用户名。

5、嗅探webhdfs协议

受影响的环境:未启用SSL加密的集群

方法:在客户端上安装Wireshark,然后访问hadoop的50070端口,例如浏览文件:

抓包能够看到的内容全部为明文: 

证明通过嗅探攻击,可以直接获取明文传输的数据。包括Block ID,所在的datanode的IP地址。

6、datanode直接访问

受影响环境:未启用网络边界防护、未启用kerberos认证、未启用访问控制的集群。

方法:不通过namenode的情况下,通过抓包,我们获得了datanode的IP,端口,那么就可以直接访问数据了,例如构造如下地址:

http://192.168.1.188:50075/webhdfs/v1/aa.txt?op=OPEN&namenoderpcaddress=mycluster&offset=0

则可直接下载文件aa.txt。

7、物理攻击,磁盘文件直接读取

受影响环境:攻击者能够物理接触集群节点的机器,或可通过SSH可登录datanode节点的操作系统。

方法:在hadf中上传一个data.txt文件,例如:

内容为:qwqeqyangfansa

利用hadoop客户端上传到集群中,此时在datanode的文件系统中新增了一个文件。

/opt/hadoop-2.5.2/dfs/data/current/BP-1162247907-192.168.1.186-1487671083826/current/finalized/subdir0/subdir0/blk_1073741886

此时将该机器的硬盘拔下来,接到别的电脑上,将此文件考出来,然后用记事本打开,能够看到的内容为:qwqeqyangfansa

由此可见block文件是明文存储,并未做加密或转换格式,可直接造成泄密。

8、端口扫描

受影响环境:未启用网络边界控制

方法:集群建立好以后,利用nmap对整个集群进行扫描,如:

localhost:~ like1$ nmap -p0-65535 192.168.1.185-188

端口列表


192.168.1.185


192.168.1.186


192.168.1.187


192.168.1.188


0/tcp     

22/tcp    

2181/tcp  

3306/tcp   

3888/tcp  

8019/tcp  

8020/tcp  

35272/tcp

50010/tcp

50020/tcp

50070/tcp

50075/tcp

 


0/tcp      

22/tcp    

2181/tcp  

2888/tcp  

3888/tcp  

8019/tcp  

8020/tcp  

8480/tcp  

8485/tcp  

33901/tcp

50010/tcp

50020/tcp

50070/tcp

50075/tcp

 


0/tcp      

22/tcp     

2181/tcp  

3888/tcp  

8480/tcp  

8485/tcp  

50010/tcp

50020/tcp

50075/tcp

50751/tcp

 


0/tcp      

22/tcp     

8480/tcp  

8485/tcp  

50010/tcp

50020/tcp

50075/tcp

 

扫描结果可以看到不管是datanode还是namenode,所开放端口一览无遗,对内网来说,链路上没有实施任何访问控制,可导致针对端口的直接访问,风险巨大。

9、物理攻击导致datanode被冒充

受影响环境:攻击者能够物理接触集群节点的机器,或可通过SSH可登录datanode节点的操作系统。

方法:在集群中任意增加新的datanode节点是非常容易的,而天生就为容灾机制设计的hadoop集群,认为datanode节点的损坏是常态,因此有十分强大的纠错和恢复机制。

在5个节点的集群中,先将其中一个datanode网线拔出,将该机器磁盘卸下,然后利用Ext3/4的文件系统读取工具,可以轻松读取/etc/hadoop/slaves和

/etc/hosts两个文件,将这两个文件考入冒充笔记本电脑的系统中,如开启kerberos,则将kerberos证书也复制一份。再将笔记本接回网线连到集群中,即可轻松导出集群中的数据。攻击完成后,可以随时将原datanode连上网线恢复,中间无需做过多操作,甚至不需要系统权限。

原文发布时间为:2017年3月11日

本文作者:guanshukeji

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-10-31 21:17:11

Hadoop集群容易被攻击的几个场景的相关文章

手动安装Hadoop集群的过程

最近又安装 Hadoop 集群,由于一些原因,没有使用 Hadoop 管理工具或者自动化安装脚本来安装集群,而是手动一步步的来安装,本篇文章主要是记录我手动安装 Hadoop 集群的过程,给大家做个参考. 这里所说的手动安装,是指一步步的通过脚本来安装集群,并不是使用一键安装脚本或者一些管理界面来安装. 开始之前,还是说明一下环境: 操作系统:CentOs6.4 CDH版本:4.7.0 节点数:4个 在开始之前,你可以看看我以前写的一篇文章 使用yum安装CDH Hadoop集群,因为有些细节已

Ubuntu12.04 Server下安装部署Cloudera Hadoop集群

部署环境 OS: Ubuntu12.04 Server Hadoop:CDH3U6 机器列表:namenode 192.168.71.46:datanode 192.168.71.202,192.168.71.203,192.168.71.204 安装Hadoop 添加软件源 /etc/apt/sources.list.d/cloudera-3u6.list 插入 deb  http://192.168.52.100/hadoop maverick-cdh3 contrib deb-src  h

如何删除恢复Hadoop集群中的DataNode

有时候因为做临时调整可能需要删除hadoop集群中的DataNode,具体方法如下: 首先在/etc/hadoop/conf/dfs.exclude 中添加要删除节点的机器名 在控制台页面中看见显示了一个Dead  Datanodes 使用命令刷新节点信息: [hdfs@hmc ~]$ hadoop dfsadmin -refreshNodes 查看hdfs的使用报告:[hdfs@hmc ~]$ hadoop dfsadmin -report  红色字体状态表示节点退出 Name: 192.16

大数据虚拟化零起点(六) 使用CLI创建Apache Hadoop集群

在大数据虚拟化基础运维第五步创建Hadoop集群开始之前,我想先说明,这里我不通过BDE提供的可视化界面来创建集群.原因是,我们之前部署好的vApp包括BDE管理服务器,是通过虚机的方式在运行.此时,它还没能跟vSphereWeb Client进行绑定,从而暂时无法交付可视化管理界面.在之后的博客文章里,我将介绍如何交付可视化界面. 但大家不要担心,BDE管理服务器自身已经提供了完备的对外服务接口(RestAPI),用户只需通过命令行(CLI)的方法操控它,就能开始对Hadoop集群进行快速部署

虚拟化Hadoop集群的部署和管理:基本操作

在Big Data Extensions(BDE)上不仅可以在分钟级别非常快速地部署Hadoop集群,这点可以通过前文<大数据虚拟化零起点-6基础运维第五步-使用CLI创建Apache Hadoop集群>和<大数据虚拟化零起点-7基础运维第六步-安装Big Data Extensions Plugin>感受到.部署完成后,BDE还能够方便地管理它们,从软件定义的角度,通过简单的图形界面和直观的命令行两种方法对集群的对象进行管理.下面我们就具体展开,讨论这些日常所需的集群运行管理.

Hadoop集群运行JNI程序

  要在Hadoop集群运行上运行JNI程序,首先要在单机上调试程序直到可以正确运行JNI程序,之后移植到Hadoop集群就是水到渠成的事情. Hadoop运行程序的方式是通过jar包,所以我们需要将所有的class文件打包成jar包.在打包的过程中,无需将动态链接库包含进去. 在集群中运行程序之前,Hadoop会首先将jar包传递到所有的节点,然后启动运行.我们可以在这个阶段将动态链接库作为附件和jar包同时传递到所有的节点.方法就是给jar命令指定-files参数.命令如下: hadoop

【Big Data】HADOOP集群的配置(一)

                       Hadoop集群的配置(一) 1.    实验准备 1.1    目的: 在虚拟机环境下,让同学们学会从零开始配置Hadoop-2.2集群,并尝试在真实环境下搭建集群. 1.2    主要内容: 物理机器总共4台,想配置基于物理机的Hadoop集群中包括4个节点: 1 个 Master, 3个 Salve ,节点之间局域网连接,可以相互 ping通.IP的分布如表1所示.             表1        4个节点的IP地址分配及角色 Ma

hadoop集群搭建完成,其他进程都启动了,但是namenode没有启动,查看日志,报错了

问题描述 hadoop集群搭建完成,其他进程都启动了,但是namenode没有启动,查看日志,报错了 hadoop集群搭建完成,其他进程都启动了,但是namenode没有启动,查看namenode的日志信息,报错了, 192.168.100.70:8485: Call From anlulu-1/192.168.100.10 to anlulu-7:8485 failed on connection exception: java.net.ConnectException: 拒绝连接; For

hadoop集群搭建详述

1.集群搭建策略 分析: 我手上只有3台电脑,两台华硕笔记本i7.i3的处理器,一台台式机Pentium4处理器.为了更好的测试zookeeper的功能, 我们总共需要6台ubuntu(Ubuntu 14.04.3 LTS)的主机.以下是我的主机分布策略: i7:开启4台ubuntu虚拟机分别是 虚拟机名 内存 硬盘 网络连接 master 1G 20G 桥接 master2 1G 20G 桥接 rm 512M 20G 桥接 slave3 1G 20G 桥接 i3: 安装ubuntu系统 ,作为