内容来源: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集群提交作业。
用户可以査看、修改和终止他们的作业。
只有认证的服务可以注册为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加密这段通信。这样客户端和服务端就实现了传输通信上的加密以及身份上的认证。
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框架实现通道加密,一方面使用压缩文件的能力对数据块直接加密。