Docker部署流程就擁有許多潛在弱點,讓不法人士有機可趁發動攻擊。例如,映像檔儲存庫上可能有惡意映像檔,如果不慎讓這些映像檔發布到容器主機上執行,攻擊者就可以對容器主機或儲存庫伺服器發動攻擊。或是容器間溝通也很容易遭到竊聽、攔截,甚至駭客可以直接攻擊存在漏洞的容器,藉此取得完整系統權限。

圖片來源: 

趨勢科技

在全球IT界引起使用熱潮的Docker,不再是門叫好不叫座的新興技術,當前在正式環境導入容器技術,在業界已逐漸形成風氣。因此容器相關資安議題,也將成為眾人的關注焦點。趨勢科技研究開發部資深技術經理李勁頤表示,利用容器技術只能將應用程式打包,還需要透過其他服務,才能完成集中、派送容器的任務,「提及容器安全,我們得建立更廣的認識。」

在常見Docker部署流程中,開發者從儲存庫下載容器映像檔供開之用後,更新程式再上傳到儲存庫,接著容器映像檔會被發布到容器主機上執行。

但李勁頤表示,光是這常見的使用流程中,就擁有許多潛在弱點,讓不法人士有機可趁。例如,公開的映像檔儲存庫上可能有惡意映像檔,如果不慎讓這些映像檔發布到容器主機上執行,攻擊者就可以對容器主機或儲存庫伺服器發動攻擊,或是容器間溝通也很容易遭到竊聽、攔截,甚至駭客可以直接攻擊存在漏洞的容器,藉此取得完整系統權限。

借用Linux Kernel技術建立隔離環境

雖然Docker開啟輕量虛擬化技術的熱潮,不過在容器技術的實作上,李勁頤表示,Docker借用許多Linux Kernel的技術,確保容器的隔離性,例如命名空間(Namespace)機制,確保容器僅能存取、讀取部分被核准的資源。但在命名空間機制尚未涵蓋的漏網之處,駭客就可藉此為跳板破壞系統。再者,Linux Kernel本身亦存在漏洞,讓攻擊者可以突破命名空間的隔離機制,進一步取得更高的系統權限。

除了利用命名空間機制,達到基本的隔離效果外,Docker也透過cgroup,對資源進行管理。李勁頤解釋,cgroup除了可以對CPU、記憶體資源進行控制,「其中一個特別的功能是建立裝置白名單(Device Whitelist)」,可以限制容器可存取的裝置類型。

不只透過命名空間、cgroup,實現Docker容器的資源隔離性,Docker也引入其他Linux Kernel機制,限制容器執行程式的權限,加強容器環境的安全。

李勁頤舉例,開發者可以用安全機制Linux Kernel Capabilities,針對相異容器權限,控制其允許執行的程序。他解釋,使用者透過Root,就擁有完整存取權限,而Linux Kernel Capabilities則把權限細分成幾十個類別,根據需求分配給不同的容器,「有效減少容器可以執行程式的權力。」他表示,Docker也預設移除許多重大執行權限,例如修改、插入Kernel模組,「因為這些權限都能直接影響Docker主機的安全。」

另外還有Linux內建的安全模組AppArmor,此機制也被Ubuntu Linux大量使用。他解釋,利用AppArmor,開發者可以限制每個容器、程序的執行權限,像是存取網路、掛載特定文件系統等。

再者是安全運算模式(Secure computing mode,Seccomp),用於限制容器進行某些系統呼叫。李勁頤表示,Docker目前禁止容器執行超過40種系統呼叫,像是尚未支援命名空間隔離的資源外,也可以過濾某些潛在安全疑慮的系統呼叫。

可用內容認證機制確保映像檔安全

Docker之所能達到輕量、快速部署的特性,其中映像檔是個關鍵,平時它僅儲存在映像檔儲存庫,直到開發者有部署需求,再發布到容器主機執行即可。而李勁頤表示,Docker為了確保映像檔來自可信來源,推出了內容認證機制(Content Trust),透過更新框架(The Update Framework,TUF)這個公開金鑰基礎架構(PKI),驗證、簽署Docker映像檔,不需要額外申請特殊憑證。

「TUF是所有認證機制的根源」,李勁頤表示,在每個相異的帳號都有一隻Root金鑰,用於簽署Root中介檔案文件。而Root金鑰又可往下細分,其中包括了時間戳記金鑰(Timestamp Key)、目標金鑰(Target Key)、快照金鑰(Snapshot Key)以及授權金鑰 (Delegation Key)。

每個金鑰也擁有不一樣用途,例如時間戳記金鑰,除了用於簽署時間戳記中介檔案,確保檔案都是最新版本外,它也用於確保快取文件的一致性。再者是目標金鑰,其目的是用於簽署目標中介檔案,此文件的重要性在於確保容器儲存庫內檔案的一致性。第三個金鑰則是簽署快取中介檔案的快取金鑰,而快取中介文件紀錄容器儲存庫內所有中介檔案的大小、雜湊值等資訊。

在2015年時,Docker推出了Notary專案,其運作的Notary服務是由Notary伺服器及Notary簽署工具所組成。使用者可以透過Notary伺服器,對已經過簽署的中介檔案,進行更新、儲存,而Notary簽署工具的用途則是儲存私密金鑰,並且協助Notary伺服器簽署中介檔案。

而李勁頤表示,Docker內容認證機制的運作原理,是透過Notary伺服器,管理TUF中介資料以及相關金鑰。除了Notary客戶端,開發者也可以利用Docker客戶端與Notary伺服器溝通,「但是更進階的金鑰管理,必須透過Notary客戶端操作。」

但是危險的不僅是容器映像檔,提供映像檔儲存的基礎架構也是一大隱憂,根據趨勢科技的研究就發現,去年光是美國就有超過1,000個公開儲存庫,緊接著在中國也發現超過500個公開儲存庫。李勁頤表示,公開儲存庫的危險在於,駭客可以上傳遭感染的映像檔,「一旦它被部署到正式環境,攻擊者就可以透過這個容器,攻擊容器網路或是容器主機。」為了加強容器儲存庫的安全性,他建議開發者必須開啟TLS認證。

也能靠漏洞掃描工具加強容器安全

同時李勁頤建議,開發者也要搭配容器漏洞掃描工具,確保映像檔內容安全。像是Docker官方推出的漏洞掃描工具Docker Security Scanning,讓開發者可以在私人容器儲存庫,對容器映像檔進行掃描,確認它們是否暴露在已知風險,或是存在漏洞。開發者啟用Docker內容認證機制後,當映像檔上傳至儲存庫後,系統自動會啟動Docker Security Scanning,進行漏洞掃描。

而Docker Security Scanning完成掃描後,除了可以看到哪些系統元件存在風險,必須進行更新,同時也會列出每一層Image Layer存在的可能風險,「但這樣呈現方式的缺點在於,開發者必須要自行彙整資訊,判讀映像檔中存在哪些已知漏洞。」

李勁頤認為,易於使用是Docker Security Scanning的優點,不僅掃描結果準確,它也能辨認應用程式究竟是透過手動安裝還是自動安裝。不過他表示, Docker與作業系統廠商對系統漏洞的看法並不一致,「有時它雖然掃出漏洞,但在作業系統廠商的觀點中,那並不是漏洞。」

另外,他也推薦CoreOS釋出的開源容器掃描工具Clair,用於分析應用程式容器中的漏洞。李勁頤表示,Clair擁有許多漏洞資源來源,包含Debian Security Bug Tracker、Ubuntu CVE Tracker、紅帽資安檔案、Oracle Linux資安檔案。當這些來源更新漏洞資料,Clair除了會發布通知,也會透過API,比對映像檔過去及當前狀態的差異,確認容器是否受到新漏洞影響。

常見容器攻擊手法

另外李勁頤表示,開發者也常疏忽對容器引擎進行權限控管,使得容器成為公開容器節點(Open Container Node),導致外部人士可以任意存取、操作,他舉例,去年趨勢科技的研究員光是在美國,就發現超過300個門戶大開的公開容器節點,「其中還有某家知名美國企業在AWS上的容器引擎也對外開放,沒有進行權限控管。」

他表示,目前公開容器節點總共有兩種攻擊方式。第一種攻擊手法中,首先駭客得要取得開放Docker主機的控制權,建立一個特權容器。進一步,利用這個容器,攻擊容器主機或是主機中的容器。

第二種攻擊手段則是瞄準存在資安漏洞的容器。李勁頤表示,即使該容器並未開放網路存取權限,駭客仍可以透過容器網路與管理介面連線,藉此取得容器主機的權限。

因此李勁頤建議,開發者可以利用外部工具,確認組態設定的正確性。例如CIS Docker Benchmark就能指引使用者,進行安全的組態設定。此外企業也能利用開源專案Docker Bench Security,替部署在正式環境的Docker容器進行組態設定檢查。

 

 3種常見Docker容器攻擊手法 

 第一種  攻擊手法中,首先駭客得要取得公開Docker主機的控制權,建立一個特權容器。進一步,利用這個容器,攻擊容器主機或是主機中的容器。(圖片來源/趨勢科技)

 

 第二種  攻擊手段是瞄準存在資安漏洞的容器,即使該容器並未開放網路存取權限,駭客仍可以透過容器網路與管理介面連線,藉此取得容器主機的權限。(圖片來源/趨勢科技)

 

 第三種  攻擊手段則是利用映像檔作為媒介,駭客可以上傳遭感染的映像檔,在它被部署於正式環境後,攻擊者就可以透過這個容器,攻擊容器網路或是容器主機。(圖片來源/趨勢科技)

 

容器網路得要設定加密

再者是容器網路傳輸資訊的安全,李勁頤表示,目前Docker總共提供3種不同的網路架構。首先是Docker預設的橋接網路架構(Bridge Network),系統會自動建立一個Docker0的橋接器,並將所有容器都會加入此容器網路。

在此架構中,容器主機扮演Routing及NAT伺服器的角色,無論是容器連線至外部網路,或是對外提供服務,都必須經過容器主機。因此李勁頤指出,橋接網路架構存在的危險在於,在此容器網路中,不只所有都可和容器主機連線,容器間預設的連線也沒有使用防火牆保護。

再者,第二種網路架構則為MacVLAN,它是一個輕量級的網路虛擬化技術,相比過去Linux常用橋接模式達到網路隔離的作法,MacVLAN則與Linux乙太網路介面連接,加強與實體網路的隔離效果,但李勁頤表示,在此種網路模型中,位於同一虛擬網路下的容器,彼此間連線也沒有進行權限管控。

最後則是Overlay Network,透過VXLAN技術,結合不同的容器主機,形成一個巨大虛擬網路。李勁頤點出,此架構最大的問題在於VXLAN的網路流量並沒有加密,讓傳輸內容容易遭竊取、竄改。此外,就如前面的橋接網路、MacVLAN,內部容器間連線亦未受控制。李勁頤歸納,目前容器網路普遍存在的共通問題,除了沒有限制內部容器彼此間的傳輸行為,亦沒有控制容器對容器主機的連線。不過李勁頤表示,其中的Overlay Network架構,雖然系統預設VXLAN並不加密,但 Docker使用者在設定IPsec Tunnl參數時,可以選擇加密,藉此強化容器網路的安全。

Docker提供了一種網路架構Overlay Network,透過VXLAN技術,結合不同的容器主機,形成一個巨大虛擬網路。此架構最大的問題在於VXLAN的網路流量並沒有加密。雖然系統預設VXLAN並不加密,但 Docker使用者在設定IPsec Tunnel參數時,可以選擇加密,藉此強化容器網路的安全。(圖片來源/趨勢科技)

 

 HITCON創辦人3招安全術加強容器安全 

HITCON創辦人徐千洋表示,使用者可透過Docker中內建的3個原生機制,加強使用容器的安全性。第一個安全術是善用命名空間(Username Space),讓容器不再使用Root權限執行。過去推出的Docker 1.9.0版本中,Docker就將此機制納入其中,「即使在容器用Root權限執行服務,也並非Host主機握有的Root權限。」

當容器在運作程式時,位在使用者命名空間的執行環境,系統會透過Host主機取得其執行身份。即使在容器中,某使用ID利用Root權限執行程式也不會有影響,「因為Username space中,系統會以該使用者真正握有Root權限」,但是在容器底下有Root權限的帳號,僅是Host主機底下的一般權限帳號,「從Host主機的角度來看,所有容器下執行的程序都只是一般權限執行而已。」

第二是善用安全機制Capabilities,劃分特權帳號所能能執行的數十個程序,一一給予控制。徐千洋表示,雖然此機制早在Linux中就能使用,但是礙於使用者必須要熟悉Unix底層操作,並且具備Linux Kernel的相關知識,「因此一直無法普及。」

利用Capabilities機制,使用者可以將Root權限所能執行的功能,向下切割成數十個,讓無Root權限的使用者也能執行某些程序。舉例,在Unix的設計中,使用者如果想要啟用數字小於1024的port,必須取得Root權限。但是利用Capabilities,不需要透過Root權限,就可以讓某些服務開啟低於1024的port。

最後一招則是Linux內建的安全模組AppArmor,掌管某程式在執行的當下,對於其他檔案的操作。例如,如果某檔案被限定只能讀取,即使使用者取得可以任意讀寫的Root權限,也會被AppArmor所阻擋。

徐千洋也歸納,使用者可以利用3個基本法則,加強網站服務的安全性。第一原則就是避免使用Root權限運作服務,「即便使用容器也盡量不要使用Root權限。」

再者,不得將網頁程式、設定檔寫入納入服務執行的權限。他表示,許多開發者會因為使用者群組的設定而輕忽此事。例如網站管理者、網頁應用程式擁有者都給予相通的權限,當駭客成功利用遠端攻擊打入網站時,就可以將許多惡意程式植入其中。但是,要防範此事,「只要讓網頁應用程式擁有者的權限,跟網站伺服器擁有者的權限不一致即可。」最後則是服務程序具有寫入權限的檔案不可以被執行。

HITCON創辦人徐千洋表示,可善用命名空間(Username Space),讓容器不再使用Root權限執行。過去推出的Docker 1.9.0版本中,Docker就將此機制納入其中。


Advertisement

更多 iThome相關內容