天天看點

DockerCon 2016 深度解讀: Docker安全前言容器技術Linux系統的安全技術Docker的安全Docker鏡像安全安全生态總結

本文将介紹docker安全相關的一些技術,安全生态和最新的安全特性。

容器技術最早可以追述到1979年在unix上的chroot。linux的目錄結構從根目錄<code>/</code>開始,根目錄下是<code>boot</code>, <code>usr</code>, <code>var</code>, <code>proc</code>等目錄。chroot可以改變程式的根目錄,對于程式來說它看的根目錄并不是系統真正的根目錄,隻是管理者額外準備的一套目錄結構。這麼做的一個重要原因就是安全:chroot之後的程式沒法通路真實系統的的目錄結構和檔案。

這種技術和思想經過發展,最後成為了linux上的<code>namespace</code>,除了檔案系統之外,還可以隔離pid、ipc、網絡等。namespace和用于管理資源cgroup一起構成了linux上的容器技術。容器技術也叫作業系統級虛拟化,對于運作在其中的程序來說,就像運作在一台單獨的機器上一樣,它隻能看到自己容器的程序、隻能看到自己的目錄結構,隻能看到自己的網絡棧,甚至資源也是有限制的,占用的記憶體超過了就會被kill。除了虛拟化,允許同時運作多個應用而不互相幹擾,容器技術還帶來了巨大的安全性。

使用容器雖然增強了安全性,但還遠遠不夠。沒有哪個軟體是完美的,linux核心也一樣,容器也不能完全限制運作在其中的程序,曾經有漏洞允許程序可以突破容器通路到主控端上的資源。除了程式漏洞之外,容器之間共享同一個linux核心,容器可以直接操作核心,可以通過核心漏洞對系統進行攻擊。

docker剛出來的時候,我曾說過docker=容器+鏡像,雖然完全是出于程式員的思維習慣,從技術實作的角度所作出的評價,不過有助于我們了解背後的原理。由于docker是基于容器的,天生具有容器帶來的安全優勢:可以虛拟一個隔離的運作環境,可以限制資源。但是對于容器不能解決的安全問題:逃逸和共享核心,docker解決了嗎?有沒有其他新的安全問題?

docker一直很關注安全的問題,早期的版本就支援設定capabilities,通過drop掉一些capabilities,可以削弱運作在容器中的程序權限。docker提供了友善和lsm內建的機制,可以更容易配置selinux或者apparmor,增強容器安全性。

DockerCon 2016 深度解讀: Docker安全前言容器技術Linux系統的安全技術Docker的安全Docker鏡像安全安全生态總結

上圖是docker/lxc/coreos rkt所支援的安全特性對比。

對于鏡像完整性,docker主要提供了兩方面的功能:registry v2引入的内容可尋址鏡像存儲和鏡像簽名。繼續之前,我們先簡單的回顧下鏡像下載下傳過程(registry v2):

下載下傳manifest,manifest裡包含了鏡像的一些元資訊,以及所有組成這個鏡像的層id。層id是層内容的sha256摘要(也就是内容可尋址)。

下載下傳各個層。

用戶端下載下傳鏡像之後,重新計算sha256,如果不比對層id,則校驗失敗,這種方式既解決了傳輸過程中的資料篡改,也解決了層内容損壞。

鏡像簽名保證了鏡像分發過程中的完整性。在分發過程中,中間人可以修改層内容,同時把manifest也改掉,對下載下傳鏡像的用戶端來說,sha256校驗完全沒有問題,但是下載下傳到的鏡像已經不是期望中的那個鏡像,裡面不知道放了一些什麼奇怪的東西。有了鏡像簽名之後,鏡像建構者在manifest裡加上自己的數字簽名,用戶端可以下載下傳manifest之後根據簽名驗證manifest是否被篡改過。

twistlock和aqua的産品功能很像,都提供了鏡像掃描、運作時容器掃描、通路控制等功能。這裡的通路控制是接管了docker控制api,也就是說不直接通路docker,而是先通路twistlock或者aqua的程式,由它們把請求轉發給docker,轉發之前,會對請求進行一些權限檢查等操作。

DockerCon 2016 深度解讀: Docker安全前言容器技術Linux系統的安全技術Docker的安全Docker鏡像安全安全生态總結

twistlock架構:由控制台和運作在docker機器上的agent組成

docker安全是個很大的話題,涉及從作業系統核心到企業安全政策,包括資料、網絡、存儲等各種安全方案,本文隻能作為一個最簡單的介紹。

總得來說,使用docker,首先千萬不要把對daemon的通路不加防護的暴露到公網,就行本文開頭提到的。其次,如果是多租戶環境或者對運作環境安全要求高的場景,考慮各種核心安全方案配合使用,做到縱深防禦。或者使用虛拟化+輕量級核心的方式。最後,使用鏡像掃描工具,不要讓對外提供的服務存在安全缺陷。

繼續閱讀