大约在两年前,开源数据库解决方案MongoDB以及Hadoop曾遭受过大量恶意攻击,这些攻击后被统称为“勒索软件”,因为其攻击者会擦除或加密数据,然后向被攻击者索要资金以恢复数据。自今年以来,不少恶意软件开始频繁向Hadoop集群服务器下手,受影响最大的莫过于连接到互联网且没有启用安全防护的Hadoop集群。
一直以来,Hadoop集群服务器都是一个非常稳定的平台,因此企业愿意选择搭建并使用。但是,自9月下旬以来,被攻击的服务器已经从最初的每天几台发展到70多台,DemonBot(新型的恶意软件)可以主动在网上搜索易受攻击的Hadoop集群服务器并对其发起进攻。一家名为Radware的网络安全公司跟踪DemonBot发现,其每天可以发起超过一百万次的尝试。
虽然很多安全研究人员尝试扫描并解决DemonBot,但最终只是找寻到了部分踪迹。唯一被证实的是,直到真正的DDos攻击发生的前一秒,机器都是保持沉默的。目前只知道DemonBot的DDoS攻击向量是UDP和TCP floods。
目前可知的攻击过程
据查证,DemonBot利用了企业网络中使用的资源调度系统——YARN模块中未经身份验证的远程代码执行漏洞以进行集群资源管理和作业调度。自今年3月起,GitHub上就出现了证明安全漏洞概念的验证代码。目前看来,问题似乎是YARN中的配置错误导致的,它暴露了REST API并允许远程应用程序向集群添加新的作业。YARN提供有默认开放在8088和8090的REST API(默认前者)允许用户直接通过API进行相关的应用创建、任务提交执行等操作,如果配置不当,REST API将会开放在公网导致未授权访问的问题发生。利用这种疏忽,攻击者可以轻易提交DemonBot恶意软件。
Radware表示,目前处于离线状态的恶意软件代码引用了名为Owari的Mirai变种。然而,由于代码中出现了不熟悉的函数名称和逻辑,研究人员决定将其命名为DemonBot,并标记为新的恶意软件。研究人员已经在Pastebin上发现了完整的恶意软件源代码,由一个别名为Self-Rep-NeTiS的人创建,其中包含部分源代码以及用于创建多平台机器人的脚本。
自今年以来,新的恶意软件——XBash和DemonBot发动了多起针对Apache Hadoop集群服务器进行的比特币挖掘和DDoS攻击。这种恶意软件可以扫描互联网上的所有Hadoop集群,不安全的集群一被放置在互联网上,几分钟内就可能被感染。
保护Hadoop集群免受恶意软件攻击的方法:
1、不要将集群直接暴露给互联网
将集群直接暴露给互联网相当于为恶意软件的攻击提供了便利,DemonBot只需轻易扫描便可锁定目标集群,并利用漏洞发起攻击。
2、使用Kerberos进行强身份验证
Hadoop集群本身提供简单的安全防御手段,但这对于企业而言远远不够,Kerberos成为了不少研发人员的选择。其实,大部分攻击都利用了系统已有漏洞,并不是攻击手段有多高明,这就好比小偷从大开的家门进入一样简单。如果没有Kerberos,任何与集群交互的用户都可以伪装成其他用户,甚至不需要特定密钥,任何用户都可以执行任何操作,类似于一个所有人都知道root密码的Linux系统。
在一个正确配置且使用Kerberos进行身份验证的Hadoop集群中, 用户与集群进行任何交互都必须输入凭据(如用户名和密码)以证明自己的身份和权限,此验证提供了用户和管理员期望的安全性:用户在系统中的功能无法被他人访问,只有管理员可以访问管理帐户。
如果没有Kerberos,任何人都可以访问Hadoop集群并执行各种操作。安全研究人员在Hack.lu会议上演示的攻击案例就是提交一个简单的YARN作业,并在集群的所有机器上执行代码,这可用于在该集群的每台机器上获取shell。XBash发起的攻击之一就是使用Metasploit模块向YARN提交比特币挖掘工作。DemonBot使用相同的技术对受感染的Hadoop服务器运行DDoS攻击。这种攻击并不复杂,目标Hadoop服务器连接到开放式互联网,并且未启用Kerberos身份验证。
3、勾选安全服务
Cloudera的工程师使用Cloudera Altus创建了一个Hadoop集群。Altus是一个云服务平台,其能够使用CDH在公有云基础架构内大规模分析和处理数据。虽然使用Altus创建不受这些攻击影响的安全集群很简单,但也可以设置易受攻击的集群。
在Altus中,制作易受攻击的集群意味着不要选中Secure Clusters,也不要使用允许互联网上任何位置传入流量的AWS安全组。在创建对世界开放的不安全集群的几分钟内,我们就可以观察到攻击行动。YARN Web UI会显示许多正在提交和运行的作业:DemonBot大约每隔一分钟就会对集群发起攻击。
要想设置一个更加安全的集群,我们需要满足两大目标:一是仅允许从一组有限的计算机对集群进行SSH访问;二是通过Kerberos启用强身份验证,这在一些工具中很容易实现,比如Cloudera Altus。在Cloudera Altus中,集群是在环境中创建的,环境描述了如何访问用户的程序帐户及其包含的资源,指定了创建集群的基础知识。因此,我们需要重点注意的是Altus环境配置。创建环境有两种方法:一是通过简单的快速入门或设置向导,快速入门教程当然最简单。创建环境时,选择“Environment Quickstart”,然后选择“Secure Clusters”的“Enable”即可。
启用安全集群后,将启用Kerberos。Quickstart还将创建一个外部世界无法访问的安全组 ,我们在此环境中创建的集群,基本不会被现有恶意软件攻击。如果需要使用环境创建向导,可以单击“ Quickstart”中的“Secure Clusters”。不同的是,在第二种方式中,用户必须自己提供安全组。创建安全组时,请确保它仅允许从Altus IP地址进行SSH访问。当然,无论你选择什么工具和平台,都需要保证勾选了安全服务,国内各大厂商在设计时应该都将其考虑在内了。
结论
综上,企业在搭建Hadoop集群时需要注意三点:一是不要将集群直接暴露给互联网;二是始终启用Kerberos身份验证;三是选用合适的平台或者工具时需要确保勾选了安全服务。