大数据平台基础架构hadoop安全分析-程序员宅基地

技术标签: 安全架构  操作系统  大数据  



内容来源:2017 年 07 月 29 日,威客安全技术合伙人安琪在“CDAS 2017 中国数据分析师行业峰会”进行《大数据平台基础架构hadoop安全分析》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:5817 | 15分钟阅读

嘉宾演讲视频地址及PPT:suo.im/5dKZpw

摘要

分析hadoop现有安全技术架构,对hadoop框架组件的应用、结构进行分析,对现有的安全措施进行说明,分析分布式文件系统、MapReduce、kerberos、Hive、Hbase等相关组件的安全以及大数据平台网络访问、数据安全的机制,并总结研究hadoop的安全技术架构。

Hadoop安全现状

Hadoop安全漏洞

上图是列出的是Hadoop近年来的一些安全漏洞,接下来会针对其中的几个案例进行简要说明。

Apache的Ambari引用给Hadoop带来了很多便利,可以直接通过外部的管理对Hadoop的生态组件进行管控,但在这个过程中由于外部技术的引用,导致了一些外部应用层的漏洞,主要是SSRF伪造请求漏洞。这是由恶意攻击者通过SSRF攻击,远程对Hadoop服务以及进程进行操纵和读取数据。

MapRedure信息漏洞主要是由于数据文件、用户产生的数据以及加密秘钥都存储在同一个文件和磁盘中,导致恶意用户获取到加密秘钥同时读取了数据块中的数据。

Ambari重定向漏洞是由于target的URI参数被修改成了黑客指定的任意网址,由此造成了钓鱼攻击,甚至结合Linux底层的操作系统漏洞以及Hadoop的其他漏洞还能实现恶意代码的加载。

2017年hadoop的一个新的漏洞被曝光,漏洞的主要原因在于Hadoop引入了Docker组件,但是在linux这层没有输入过程的认证,并且Docker命令又是通过root身份来执行的。因此黑客就通过Docker命令伪造了root身份,然后对Hadoop进行了全线账户的提权,实现了整个操作系统的权限控制。

Hadoop由于自身的业务特点,一般都是部署在用户内网中,所以在早期设计的时候不是太注重安全方面的设计,而更多的专注于实现业务的功能。通过分析可以发现,这些漏洞的产生大部分都是由于Hadoop的身份认证授权没有做好。

早期Hadoop在的默认情况下,是没有身份认证和访问控制机制的,基本上是继承了Linux的权限控制体系。另外它在数据传输的过程中和静态数据保存过程中都没有有效的加密措施。

Hadoop关键安全因素

基于Hadoop面临的这些问题反过来思考,我们认为要想实现安全的Hadoop要从这几点出发。

一是认证,提供单点的登录,通过这种方式实现用户身份的认证。

二是授权,要能够确定用户访问权限,比如对数据集的访问、服务请求等。

三是访问控制,要有一个基于细粒度和角色的访问控制机制。

四是数据加密,包括数据处理过程中对中间数据的处理,以及在数据传输和数据存储过程中的处理,都需要引入数据加密的技术。

五是网路安全,是否有一个有效的隔离措施,以及对业务行为的安全控制是否有保障。

六是系统安全,Hadoop大部分是基于Linux操作系统,要有对底层操作系统漏洞的防护。

七是基础架构安全,物理层面的安全以及基于安全架构逐步完善的安全措施。

最后是审计监控,是否能够对所有的用户行为和授权行为等进行有效监控,并基于这些来识别潜在的危险行为。

Hadoop认证授权

Hadoop自身认证模型的缺陷

上图是服务和数据块的结构图。Hadoop使用的是HDFS分布式存储文件系统。当用户登录到DataNode访问数据的时候,用户的权限可以访问到DataNode目录下的所有数据块。这实际上是一个安全风险,因为Hadoop没有对用户、用户组和服务进行有效的认证,当执行Hadoop命令的时只是单单通过whoami确定用户身份,这个过程中黑客可以编写whoami脚本模拟超级用户。

Hadoop需要实现的安全认证

提高Hadoop的安全要从两个层面着手,一是用户层次访问控制,二是服务层次访问控制。

用户层次访问控制,要有对用户和用户组的认证机制。(以下为具体细节)

  • Hadoop用户只能访问授权的数据。

  • 只有认证的用户可以向Hadoop集群提交作业。

  • 用户可以査看、修改和终止他们的作业。

  • 只有认证的服务可以注册为DataNode或TaskTrackero

  • DataNode中数据块的访问需要保证安全,只有认证用户 才能访问Hadoop集群中存储的数据。

服务层次控制,服务之间的互相认证。(以下为具体细节)

  • 可扩展的认证:Hadoop集群包括大量的节点,认证模型需要能 够支持大规模的网络认证。

  • 伪装:Hadoop可以识别伪装用户,保证正确的用户作业隔离。

  • 自我服务:Hadoop作业可能执行很长时间,要确保这些作业可 以自我进行委托用户认证,保证作业完整执行。

  • 安全的IPC : Hadoop服务要可以相互认证,保证它们之间的安全 通信。

Kerberos

Kerberos是Hadoop的安全基础,未来Hadoop的所有安全措施都要基于Kerberos认证原理才能实现。

Kerberos其实是网络的认证协议,可以实现在网络中不传输密码就能完成身份认证。其原理在于通过对称加密算法生成时间敏感的授权票据。下面来看下Kerberos的基本实现原理。

首先Hadoop的客户端向KDC请求,获得授权票据授权(TGT),之后KDC会返回TGT和Session Key给客户端。(TGT是一个特殊的票据,作用在于客户端访问目标服务器的时候,提供一个允许访问的票据,失效时间大概为8到10个小时。Session Key用于加密客服端与服务端通信过程中的数据。)接着客户端会使用TGT向目标服务端请求服务票据,这时KDC会再返回Session Key和目标服务器的服务票据,本次的Session key已经成为了服务器私用的,也就是说Kerberos实现了每个服务端都有一个私钥。最后客户端会使用TGT向目标服务器请求,目标服务器则使用私有Session Key解密,识别客户端为合法请求后返回私有Session Key,并且用私有Session Key加密这段通信。这样客户端和服务端就实现了传输通信上的加密以及身份上的认证。

安全Hadoop加护行为

Kerberos认证使Hadoop拥有了一定的安全能力。由于实现了用户和服务的认证,Hadoop各个组件和用户交互过程中会有三个概念,分别是授权令牌、作业令牌和数据块访问令牌。

客户端向NameNode请求的时候,Kerberos会进行身份认证,这时NameNode会给客户端返回授权令牌,基于令牌客户端可以无需再对Kerberos进行认证就能做后续的操作。

客户端向Hadoop提交作业指令的时候,要确定被认证的用户在Node下的文件权限必须是该认证用户的权限。这时就要依靠作业令牌对权限进行控制。

数据块访问的时候一般都是客户端先向NameNode请求,请求完成之后NameNode会进行认证然后返回授权令牌,这时如果身份合法NameNode会再返回文件块ID以及DataNode的位置信息,最终客户端使用这些信息向DataNode请求相应数据块的信息。这段过程中NameNode和客户端有认证,但DataNode和客户端没有认证,因此就有了数据块的访问令牌,通过这个令牌就平移NameNode和客户端之间的认证信息,实现一次授权两次认证的机制。

整个访问的交互过程一共就三步,第一步是服务向KDC注册,注册内容包括DataNode向NameNode注册,TaskTracker向JobTracker注册。第二步四客户端向KDC注册,通过授权令牌客户端向NameNode的注册。第三步是数据块的注册 ,通过DataNode给数据块的访问令牌识别客户端的相应数据访问权限。以上基本就是Kerberos实现的整个生态体系的认证。

Hadoop网络访问安全

统一身份认证管理机制

关注安全的企业往往都有一套统一身份认证管理机制,用来管理企业内部的终端、网路设备、上网行为等。Kerberos则实现了Hadoop内部的身份认证管理。Kerberos如何和企业统一身份认证管理进行有效结合是实现企业网络生态安全的第一步。

向Hadoop请求的客户端用户需要在EIM(统一身份认证管理系统)中注册身份,再由EIM向终端用户发放Kerberos授权票据,这时客户端会使用该票据向Hadoop请求。整个过程中EIM系统需要和Hadoop的本地KDC进行数据同步,建立跨域信任。

Hadoop网络访问安全

目前主流的Hadoop网络安全措施是通过防火墙将客户端和Hadoop集群进行逻辑隔离。防火墙作为网络层面的控制,对于恶意端口、无用协议进行有效过滤,之后部署有很多Hadoop生态组件工具的网关服务器,客户端用户通过统一登录网关服务器对Hadoop集群进行维护以及提交作业。这样就初步实现了网络层的访问控制、用户的认证授权以及行为的访问控制过滤。

Hadoop网络访问之HUE

随着Hadoop的发展,它又在网关层上引入了开源项目HUE,基本的架构和前面类似,只不过多了HUE的相关功能。HUE可以与EIM系统的身份认证结合,支持LDAP同步用户和用户组信息,采用HttpFS代理,通过SPANWFO-Base认证协议访问SSL加密,实现了细粒度的用户访问控制。

Hadoop网络访问之Know Gateway Server

随后Hadoop又有了Know Gateway Server,它结合了HUE和传统的优势,内部还是以网关的形式做代理,实现了防火墙的功能对端口和协议进行过滤,同时对用户进行细粒度的访问控制,不仅如此,它还是实现了单点登录。

Hadoop数据安全

Hadoop数据传输的通道加密

对于传输数据加密目前Hadoop采用SASL框架,它可以实现客户端向服务端请求过程中的数据加密。SASL分为SSL和Hadoop的RPC协议,SSL用于web层面的数据通道加密,客户端向NameNode以及DataNode请求的时候走的则是RPC协议或者是基于TCP的 HTTP协议。这种情况下就必须封装SASL安全框架进行整体加密,同时SASL还支持JDBC保护,与第三方数据库交互时也能加密。

Hadoop静态数据加密

静态数据的保护我们有两种思路。

第一个是先加密后存储,但是这种方案存在问题。它在向Hadoop存储文件时,首先把整个文件进行加密,然后存储。这样,每个DataNode中数据块无法被解密。因此这种方案是不太可行的。

第二个是加密数据块,确保MapReduce程序可以独立的访问每个数据块,解密逻辑可以在 MapReduce作业中进行。解密密钥需要告诉 MapReduce作业。这种方案是可扩展的。

Hadoop安全审计和监控

Hadoop安全监控要点

用户登录和授权事件:当用户或服务标识在KDC或EIM系统进行认证时会生成用户登录事件,在集中EIM系统(活动 目录或相似系统)将记录用户授权事件。用户向Hadoop 进程每次请求服务票据都会生成日志。

HDFS文件操作错误:当用户访问HDFS , Name Node会验证用户的访问权限。当存在越权访问时会在hadoop日志文件中产生错误事件,Hive 或Pig作业遇到任何访问HDFS 权限问题时都会产生相同的错误。

RPC授权错误:任何对Hadoop进程未授权的访问请求,异常会记录至到Hadoop 安全日志文件中。监控这些异常可以识别未授权访问。

RPC认证错误:Hadoop RPC使用Java SASL APIS进行验证。这个交互过程可以设置质量保护,确保客户端可以安全的联机Hadoop服务,任何中间人攻击导致的验证失效都可以被记录下来。

HDFS敏感文件下载:Hadoop支持记录每一个文件系统操作到HDFS审计日志文件。该审计文件,可以识别哪些用户访问或下载了敏感文件。

MapReduce作业事件:Hadoop支持在日志中记录所有MapReduce 作业提交和执行事件。审计日志会记录作业的提交、启动、査 看和修改行为。因此 该审计文件可以用来识别哪个用户访问和运行了集群上的作业。

Oozie、HUE和 WebHDFS 的访问:用户访问Oozie并进行工作流提交都 会记录到Oozie的审计日志。所有用户与Oozie的交互也会记录到日志,可以用来跟踪执行特定工作流的用户信息。

其他异常:除了用户认证和授权产生的异常,记录Hadoop中任何其他类型的异常也很有用。这些异常提供潜在讯息发现系统的脆弱性,也可以识别潜在的安全事故。

Hadoop安全监控与审计系统

对于Hadoop的安全监控和审计系统也有着相应的开源组件——OSSEC,它是一个基于主机入侵检测系统的开源项目,支持收集Hadoop集群中的各种日志和事件。原理是通过在各个组件内部署日志代理,收集各组件的日志,然后统一汇总到管理端,之后由管理端进行统一展示 ,最后通过制定的安全规则做筛查和告警。

Hadoop审计日志的配置

下图展示的是开启日志的各种方法。

对于Hadoop的安全监控和审计系统也有着相应的开源组件——OSSEC,它是一个基于主机入侵检测系统的开源项目,支持收集Hadoop集群中的各种日志和事件。原理是通过在各个组件内部署日志代理,收集各组件的日志,然后统一汇总到管理端,之后由管理端进行统一展示 ,最后通过制定的安全规则做筛查和告警。

Hadoop安全技术架构总结

上图是Hadoop现有的安全架构。首先是基础设施安全,包括物理安全和Kerberos。操作系统层面采用主机加护的方式,通过白名单的机制对系统的服务、进程、端口、软件等等进行控制,从而抵御非法攻击。应用安全是通过HUE在网关之上提供的一些用户细粒度的访问控制。网络边界安全是利用堡垒机和防火墙的技术实现了网络和应用的控制。数据加密一方面使用SASL框架实现通道加密,一方面使用压缩文件的能力对数据块直接加密。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34337381/article/details/87944501

智能推荐

hive序列生成_Hive实现自增列的两种方法-程序员宅基地

文章浏览阅读3.9k次。多维数据仓库中的维度表和事实表一般都需要有一个代理键,作为这些表的主键,代理键一般由单列的自增数字序列构成。Hive没有关系数据库中的自增列,但它也有一些对自增序列的支持,通常有两种方法生成代理键:使用row_number()窗口函数或者使用一个名为UDFRowSequence的用户自定义函数(UDF)。用row_number()函数生成代理键INSERT OVERWRITE TABLEmy_hi..._hive 生成序列

qml 音乐播放器_qt qml 音频播放-程序员宅基地

文章浏览阅读992次,点赞2次,收藏5次。最近学习了qml的QtMultimedia,看了一个音乐播放器的例子,非常简单。主要就是播放器的模块比较重要,因为它可以获得播放的时长那个,进度,等等,然后用按钮添加播放器模块的事件,用text文本框来显示播放的进度以及状态。import QtQuick 2.5import QtMultimedia 5.0import QtQuick.Window 2.0import QtQuick.Layouts 1.0import QtQuick.Controls 2.0Window{ visibl_qt qml 音频播放

npm install经常失败解决办法_npm install qrcodejs-weapp 安装不上-程序员宅基地

文章浏览阅读2.3w次,点赞4次,收藏11次。npm install经常失败解决方法 由于npm包管理服务器在米国,故我们如果直接使用npm -install安装某包,有些时候会出现安装失败(原因你懂的)。所以,为了更好的使用体验采用了淘宝的 NPM 镜像,它是一个完整的npmjs.org镜像。 1.通过定制的 cnpm 命令行工具代替默认的 npm npm install -g cnpm --registr_npm install qrcodejs-weapp 安装不上

662页PYTORCH 官方教程最新中文版(1.11+CU10.2)_pytorch中文文档pdf-程序员宅基地

文章浏览阅读1.5k次。pytorch1.11官方教程中文版_pytorch中文文档pdf

signature=4141330e1a228f5ed38c55aea5ac3564,Document and bearer verification system-程序员宅基地

文章浏览阅读109次。摘要:Apparatus and a method are disclosed for verifying the identity of applicants applying for documents, issued documents, and the identity of bearers of documents by obtaining information from the ap...

#ifndef的用法-程序员宅基地

文章浏览阅读10w+次,点赞142次,收藏395次。头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的: #ifndef #define_#ifndef

随便推点

js_02 windows对象及函数_js 如何自定义window方法-程序员宅基地

文章浏览阅读1.2k次。文章目录1.函数2.函数的分类2.1 系统函数2.2 自定义函数3.windows 对象3.1常用属性3.2常用方法3.3常用事件4.Date 对象4.1Date对象的方法4.2Data对象的使用1.函数函数的含义:类似于Java中的方法,是完成特定任务的代码语句块使用更简单:不用定义属于某个类,直接使用2.函数的分类2.1 系统函数parseInt (“字符串”)将字符串转换为整型数字如: parseInt (“86”)将字符串“86”转换为整型值86parseFloat(“字符串_js 如何自定义window方法

python循环删除_python 循环删除不死马php-程序员宅基地

文章浏览阅读178次。想要python循环删除不出问题 ,倒序删除即可正序删除x = [1, 2, 3, 4]for i in x: if i == 2 or i == 3: x.remove(i)print x执行结果倒序删除x = [1, 2, 3, 4]for i in x[::-1]: if i == 2 or i == 3: x.remove(i)print x执行结果至于原因python中循环删除列表中元素时的坑!这篇文章里面写的很清_python 循环删除不死马php

强大工具psexec工具用法简介-程序员宅基地

文章浏览阅读789次。psexec是sysinternals的一款强大的软件,通过他可以提权和执行远程命令,对于批量大范围的远程运维能起到很好的效果,尤其是在域环境下。通常,这个命令,常用的有如下2种方式。l 以系统身份运行指定应用程序这个很简单,但是很有意思,Windows系统中administrator的权限不是最大的,最大的是system,很多信息只有system才能查看,比如注册表的sam信息,administrator是看不了的,如果你非要强行修改sam的权限而不顾安全的话,拿就是另外一种情况。那么现在我们要以s

Flink UI: Flink 1.10 如何查看 数据源 的背压(反压)情况(消费kafka)_flink如何查看背压-程序员宅基地

文章浏览阅读3k次。1.美图2. 概述想对一个flink程序进行性能测试,因此你需要知道flink消费程序的上限,因此,怎么知道你flink程序有没有达到上限呢?在界面上就能看到,比如我kafka写入的速度是 每秒4万条数据写入到kafka。在界面上找到你的数据源,然后点击,这个界面需要等待一会才有数据如果出现上述情况,那么说明已经达到flink消费的最大速度了。背压很高..._flink如何查看背压

Android使用https链接_file:///android_asset/cac/warning.html-程序员宅基地

文章浏览阅读8.8w次。Https与Http类似,只不过Https一般是通过post请求服务器,但是Https与http不同的是Https与服务器会话是处于连接状态。http则发送请求后连接就会断开。另外使用HttpsURLConnection时需要实现HostnameVerifier 和 X509TrustManager,这两个实现是必须的,要不会报安全验证异常。package cn.yws.httpstest_file:///android_asset/cac/warning.html

docker 在push镜像到本地registry出现的500 Internal Server Error_retrying in 1 second-程序员宅基地

文章浏览阅读1.6w次。在push镜像到本地registry时,出现以下错误:]# docker push 192.168.163.131:5000/testThe push refers to a repository [192.168.163.131:5000/test]9ec45e5f0334: Retrying in 1 second 33f1a94ed7fc: Retrying in 1 second_retrying in 1 second

推荐文章

热门文章

相关标签