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

简介: 本文讲的是Hadoop集群容易被攻击的几个场景,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端口,例如浏览文件:

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

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

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

证明通过嗅探攻击,可以直接获取明文传输的数据。包括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
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
相关实践学习
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
21天前
|
存储 分布式计算 资源调度
Hadoop【环境搭建 04】【hadoop-2.6.0-cdh5.15.2.tar.gz 基于ZooKeeper搭建高可用集群】(部分图片来源于网络)
【4月更文挑战第1天】Hadoop【环境搭建 04】【hadoop-2.6.0-cdh5.15.2.tar.gz 基于ZooKeeper搭建高可用集群】(部分图片来源于网络)
51 3
|
7天前
|
分布式计算 监控 Hadoop
Ganglia监控Hadoop与HBase集群
Ganglia监控Hadoop与HBase集群
|
13天前
|
存储 分布式计算 Hadoop
Hadoop集群搭建
Hadoop集群搭建
|
13天前
|
分布式计算 负载均衡 Hadoop
Hadoop集群节点添加
Hadoop集群节点添加
|
13天前
|
存储 分布式计算 Hadoop
Hadoop集群规模扩展
【4月更文挑战第14天】Hadoop集群扩展可通过添加更多节点、垂直扩展(增强单节点资源)和水平扩展(增加节点数量)来实现。关键点包括规划扩展策略、确保集群稳定性和优化配置。注意在扩展过程中要保证数据完整性,并根据需求调整以提升集群性能和效率。
12 1
|
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
|
21天前
|
存储 分布式计算 Hadoop
【Hadoop】Hadoop的三种集群模式
【4月更文挑战第9天】【Hadoop】Hadoop的三种集群模式
|
21天前
|
分布式计算 资源调度 Hadoop
Hadoop【环境搭建 03】【hadoop-3.1.3 集群版】(附:集群启动&停止Shell脚本)
【4月更文挑战第1天】Hadoop【环境搭建 03】【hadoop-3.1.3 集群版】(附:集群启动&停止Shell脚本)
37 2
|
22天前
|
存储 分布式计算 资源调度
centos 部署Hadoop-3.0-高性能集群(二)
centos 部署Hadoop-3.0-高性能集群(二)
13 0
centos 部署Hadoop-3.0-高性能集群(二)

相关实验场景

更多