內容來源: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框架實現通道加密,一方面使用壓縮檔案的能力對資料塊直接加密。