大約在兩年前,開(kāi)源數(shù)據(jù)庫(kù)解決方案MongoDB以及Hadoop曾遭受過(guò)大量惡意攻擊,這些攻擊后被統(tǒng)稱為“勒索軟件”,因?yàn)槠涔粽邥?huì)擦除或加密數(shù)據(jù),然后向被攻擊者索要資金以恢復(fù)數(shù)據(jù)。自今年以來(lái),不少惡意軟件開(kāi)始頻繁向Hadoop集群服務(wù)器下手,受影響最大的莫過(guò)于連接到互聯(lián)網(wǎng)且沒(méi)有啟用安全防護(hù)的Hadoop集群。
一直以來(lái),Hadoop集群服務(wù)器都是一個(gè)非常穩(wěn)定的平臺(tái),因此企業(yè)愿意選擇搭建并使用。但是,自9月下旬以來(lái),被攻擊的服務(wù)器已經(jīng)從最初的每天幾臺(tái)發(fā)展到70多臺(tái),DemonBot(新型的惡意軟件)可以主動(dòng)在網(wǎng)上搜索易受攻擊的Hadoop集群服務(wù)器并對(duì)其發(fā)起進(jìn)攻。一家名為Radware的網(wǎng)絡(luò)安全公司跟蹤DemonBot發(fā)現(xiàn),其每天可以發(fā)起超過(guò)一百萬(wàn)次的嘗試。
雖然很多安全研究人員嘗試掃描并解決DemonBot,但最終只是找尋到了部分蹤跡。唯一被證實(shí)的是,直到真正的DDos攻擊發(fā)生的前一秒,機(jī)器都是保持沉默的。目前只知道DemonBot的DDoS攻擊向量是UDP和TCP floods。
目前可知的攻擊過(guò)程
據(jù)查證,DemonBot利用了企業(yè)網(wǎng)絡(luò)中使用的資源調(diào)度系統(tǒng)——YARN模塊中未經(jīng)身份驗(yàn)證的遠(yuǎn)程代碼執(zhí)行漏洞以進(jìn)行集群資源管理和作業(yè)調(diào)度。自今年3月起,GitHub上就出現(xiàn)了證明安全漏洞概念的驗(yàn)證代碼。目前看來(lái),問(wèn)題似乎是YARN中的配置錯(cuò)誤導(dǎo)致的,它暴露了REST API并允許遠(yuǎn)程應(yīng)用程序向集群添加新的作業(yè)。YARN提供有默認(rèn)開(kāi)放在8088和8090的REST API(默認(rèn)前者)允許用戶直接通過(guò)API進(jìn)行相關(guān)的應(yīng)用創(chuàng)建、任務(wù)提交執(zhí)行等操作,如果配置不當(dāng),REST API將會(huì)開(kāi)放在公網(wǎng)導(dǎo)致未授權(quán)訪問(wèn)的問(wèn)題發(fā)生。利用這種疏忽,攻擊者可以輕易提交DemonBot惡意軟件。
Radware表示,目前處于離線狀態(tài)的惡意軟件代碼引用了名為Owari的Mirai變種。然而,由于代碼中出現(xiàn)了不熟悉的函數(shù)名稱和邏輯,研究人員決定將其命名為DemonBot,并標(biāo)記為新的惡意軟件。研究人員已經(jīng)在Pastebin上發(fā)現(xiàn)了完整的惡意軟件源代碼,由一個(gè)別名為Self-Rep-NeTiS的人創(chuàng)建,其中包含部分源代碼以及用于創(chuàng)建多平臺(tái)機(jī)器人的腳本。
惡意軟件日均進(jìn)攻百萬(wàn)次!三大方法保護(hù)Hadoop集群免遭攻擊!
自今年以來(lái),新的惡意軟件——XBash和DemonBot發(fā)動(dòng)了多起針對(duì)Apache Hadoop集群服務(wù)器進(jìn)行的比特幣挖掘和DDoS攻擊。這種惡意軟件可以掃描互聯(lián)網(wǎng)上的所有Hadoop集群,不安全的集群一被放置在互聯(lián)網(wǎng)上,幾分鐘內(nèi)就可能被感染。
保護(hù)Hadoop集群免受惡意軟件攻擊的方法:
1、不要將集群直接暴露給互聯(lián)網(wǎng)
將集群直接暴露給互聯(lián)網(wǎng)相當(dāng)于為惡意軟件的攻擊提供了便利,DemonBot只需輕易掃描便可鎖定目標(biāo)集群,并利用漏洞發(fā)起攻擊。
2、使用Kerberos進(jìn)行強(qiáng)身份驗(yàn)證
Hadoop集群本身提供簡(jiǎn)單的安全防御手段,但這對(duì)于企業(yè)而言遠(yuǎn)遠(yuǎn)不夠,Kerberos成為了不少研發(fā)人員的選擇。其實(shí),大部分攻擊都利用了系統(tǒng)已有漏洞,并不是攻擊手段有多高明,這就好比小偷從大開(kāi)的家門進(jìn)入一樣簡(jiǎn)單。如果沒(méi)有Kerberos,任何與集群交互的用戶都可以偽裝成其他用戶,甚至不需要特定密鑰,任何用戶都可以執(zhí)行任何操作,類似于一個(gè)所有人都知道root密碼的Linux系統(tǒng)。
在一個(gè)正確配置且使用Kerberos進(jìn)行身份驗(yàn)證的Hadoop集群中, 用戶與集群進(jìn)行任何交互都必須輸入憑據(jù)(如用戶名和密碼)以證明自己的身份和權(quán)限,此驗(yàn)證提供了用戶和管理員期望的安全性:用戶在系統(tǒng)中的功能無(wú)法被他人訪問(wèn),只有管理員可以訪問(wèn)管理帳戶。
如果沒(méi)有Kerberos,任何人都可以訪問(wèn)Hadoop集群并執(zhí)行各種操作。安全研究人員在Hack.lu會(huì)議上演示的攻擊案例就是提交一個(gè)簡(jiǎn)單的YARN作業(yè),并在集群的所有機(jī)器上執(zhí)行代碼,這可用于在該集群的每臺(tái)機(jī)器上獲取shell。XBash發(fā)起的攻擊之一就是使用Metasploit模塊向YARN提交比特幣挖掘工作。DemonBot使用相同的技術(shù)對(duì)受感染的Hadoop服務(wù)器運(yùn)行DDoS攻擊。這種攻擊并不復(fù)雜,目標(biāo)Hadoop服務(wù)器連接到開(kāi)放式互聯(lián)網(wǎng),并且未啟用Kerberos身份驗(yàn)證。
3、勾選安全服務(wù)
Cloudera的工程師使用Cloudera Altus創(chuàng)建了一個(gè)Hadoop集群。Altus是一個(gè)云服務(wù)平臺(tái),其能夠使用CDH在公有云基礎(chǔ)架構(gòu)內(nèi)大規(guī)模分析和處理數(shù)據(jù)。雖然使用Altus創(chuàng)建不受這些攻擊影響的安全集群很簡(jiǎn)單,但也可以設(shè)置易受攻擊的集群。
在Altus中,制作易受攻擊的集群意味著不要選中Secure Clusters,也不要使用允許互聯(lián)網(wǎng)上任何位置傳入流量的AWS安全組。在創(chuàng)建對(duì)世界開(kāi)放的不安全集群的幾分鐘內(nèi),我們就可以觀察到攻擊行動(dòng)。YARN Web UI會(huì)顯示許多正在提交和運(yùn)行的作業(yè):DemonBot大約每隔一分鐘就會(huì)對(duì)集群發(fā)起攻擊。
要想設(shè)置一個(gè)更加安全的集群,我們需要滿足兩大目標(biāo):一是僅允許從一組有限的計(jì)算機(jī)對(duì)集群進(jìn)行SSH訪問(wèn);二是通過(guò)Kerberos啟用強(qiáng)身份驗(yàn)證,這在一些工具中很容易實(shí)現(xiàn),比如Cloudera Altus。在Cloudera Altus中,集群是在環(huán)境中創(chuàng)建的,環(huán)境描述了如何訪問(wèn)用戶的程序帳戶及其包含的資源,指定了創(chuàng)建集群的基礎(chǔ)知識(shí)。因此,我們需要重點(diǎn)注意的是Altus環(huán)境配置。創(chuàng)建環(huán)境有兩種方法:一是通過(guò)簡(jiǎn)單的快速入門或設(shè)置向?qū)В焖偃腴T教程當(dāng)然最簡(jiǎn)單。創(chuàng)建環(huán)境時(shí),選擇“Environment Quickstart”,然后選擇“Secure Clusters”的“Enable”即可。
啟用安全集群后,將啟用Kerberos。Quickstart還將創(chuàng)建一個(gè)外部世界無(wú)法訪問(wèn)的安全組 ,我們?cè)诖谁h(huán)境中創(chuàng)建的集群,基本不會(huì)被現(xiàn)有惡意軟件攻擊。如果需要使用環(huán)境創(chuàng)建向?qū)?,可以單?ldquo; Quickstart”中的“Secure Clusters”。不同的是,在第二種方式中,用戶必須自己提供安全組。創(chuàng)建安全組時(shí),請(qǐng)確保它僅允許從Altus IP地址進(jìn)行SSH訪問(wèn)。當(dāng)然,無(wú)論你選擇什么工具和平臺(tái),都需要保證勾選了安全服務(wù),國(guó)內(nèi)各大廠商在設(shè)計(jì)時(shí)應(yīng)該都將其考慮在內(nèi)了。
結(jié)論
綜上,企業(yè)在搭建Hadoop集群時(shí)需要注意三點(diǎn):一是不要將集群直接暴露給互聯(lián)網(wǎng);二是始終啟用Kerberos身份驗(yàn)證;三是選用合適的平臺(tái)或者工具時(shí)需要確保勾選了安全服務(wù)。