解构Hadoop安全攻防技术-王鹏鸣 2018-01-15 14:55
2017年12月14日,由知名网络安全媒体Freebuf发起的FIT世界互联万安全大会在上海举行。

观数科技尖针实验室高级安全研究员王鹏鸣分享议题:《解构Hadoop安全攻防技术》。以下是演讲实录(有删减)。



大家好,我是观数科技尖针实验室高级安全研究员王鹏鸣。

首先感谢主办方的邀请,今天在这里主要是跟大家分享一下,我们对于Hadoop大数据安全的理解。

演讲内容主要从Hadoop平台简介、Hadoop攻击之道、目前的解决办法、大数据安全解决方案等四个方面展开。

1.Hadoop平台简介

Hadoop 是一个开源框架,它允许使用简单的编程模型在计算机集群中对大型数据集进行分布式处理。

目前国内的大数据平台搭建商主要有红象云腾、东方国信。红象云腾在政企使用的比较多,东方国信在运营商领域运用的比较多。

真实的大数据环境,是由以下几个方面构成:



Hadoop核心引擎有三个,包括YARN、MapReduce、HDFS。

在Hadoop集群中,每个文件会被分割成多个文件块(默认情况是128MB),每个文件块被分配复制、存储到多个数据节点上。

在集群中有两种类型的节点:一些 DataNodes, 存储真实的文件块在Hadoop的文件系统中;一个 NameNode, 存储文件块跟DataNode 位置的映射关系列表

二、如何攻击大数据平台

大数据平台本身存在一些安全隐患:



前三项是大数据本身的安全隐患,下面我们就第四个开源组件问题,给大家分享一些我们已掌握到漏洞情况:

·       CVE-2012-3376 Apache Hadoop爆信息泄漏漏洞

·       CVE-2014-085 Apache ZooKeeper信息泄露漏洞

·       CVE-2015-1775 Apache Ambari服务器端请求伪造漏洞

·       CVE-2015-1776 Apache Hadoop MapReduce信息泄露漏洞

·       CVE-2015-1836 Apache HBase多个远程漏洞

·       CVE-2015-5210 Apache Ambari开放重定向漏洞

·       CVE-2016-0707 Apache Ambari信息泄露漏洞

·       CVE-2017-7669-远程控制

接下来给大家详细解释一下CVE-2017-7669-远程控制的情况:

在Hadoop中有一个容器的概念,是实现资源隔离的基础,YARN提供了两种容器的配置的方式,其中一种linuxContainerExecutor,可以刚好的实现资源隔离。可以将其容器进程运行在Docker容器中,这个程需要有setuid权限,这就造成了我们这个漏洞直接可以以root身份执行命令。



攻击过程如下:

1.启动msf攻击框架。

2.生成后门程序设置本地回连端口

3.提交Hadoop任务

4.远程下载后门

5.运行后门返回系统shell

6.获取系统最高权限操作大数据集群

启动msf攻击框架

三、大数据安全解决方案

目前的解决办法也大致有如下四种:



常见的保护思路有三种:

1.护城河模式,用一个堡垒机把内外网隔离,优势是降低风险来源,节点之间通信效率高;劣势是内外网无法直接交换数据,内网完全无防护能力。

2.架构模式,就是我们把外面的墙拆了,但是各组件之间、用户跟组件之间加一个认证授权关系,比如采用SSL、TLS加密传输、kerberos做凭证服务。

它的优势在于,可对外网提供服务,无需部署边界,密文传输;劣势在于部署复杂,运维成本高。

3.对数据进行标记化处理,对数据中心进行标记、脱敏、加密。这可以解决数据共享问题,但系统复杂度增加,性能下降。

根据我们的总结,政企单位对于大数据安全主要有以下四方面需求:

1.合规性。法律法规上的合规,也就是等级保护,还要满足账户、授权、认证、审计的4A体系。

2.数据治理。如果没有一套很好的数据治理方案,这些数据是很难实现它的价值。我们需要一个角色化、属性化、人物化的数据治理方案。

3.安全事件。大数据会产生大量的这个访问日志,但是我们无法从中看到客户的原始行为,同时我们也没法从日志里,记住这些安全事件。

4.敏感数据。数据敏感数据使用这一块的主要是,透明的加解密,输出脱敏这一块儿需求比较明显。

四、观数科技的解决方案

我们的解决方案是结合上面三种防护思路和四种解决方案的一个优化。



首先我们是把这个大数据分为一个墙内墙外的概念:墙外的是我们的业务,我们对这个墙进行了改造,通过墙代理内部大数据组件的访问接口,同时加上了身份认证的功能。

让外面访问我的墙就跟使用里面的组件一样,我们也在各个组件里部署我们的plugin插件,这个插件是干什么的呢?就是实施访问控制。

比如说HBASE你要访问哪个表、哪个字段的时候。他应该能不能访问,由谁访问。我们是通过plugin来实现这个功能的。

Admin这个组件是干什么的呢?这是一个管理后台,我们的管理后台允许安全管理员,审计管理员登陆到这个后台,由安全管理员来实施配置他的规则,ACL访问控制列表,谁可以访问谁,RBAC怎么配?全部是由安全管理员去操作Admin来进行配置。

一旦规则生效就有Plugin来进行执行。这就是我们自己提出的一套解决方案。

我的分享大致就是这些,谢谢大家。