小心暗藏惡意軟件:淺談 Docker 安全性
Docker 可能你已正在使用,通過 Docker 你可以輕易的下載由第三方製作的 image 從而極速完成不同服務的安裝及部署;這些 image 是由第三方的註冊用户製作並放上 Docker Hub 之中,情況與流行的各種 App Store 無分別,而硬要說出一點點的分別的話,大概就是大部份老字號的 App Store 例如 Apple App Store 又或者 Google Play 等等均有專人審批由第三方上傳的應用是否暗藏危機,而 Docker Hub 則沒有或有但檢查得不夠詳細,因此由第三方製造的 image 之中其實可隨時插入不同的惡意程式,萬一你是旦就手地採用了其中個插入了惡意代碼的 image 的話,那定必為企業帶來一定風險。
可能你會說,那採用 Docker 豈不十分危險?其實亦非全然,只是我們要找些信用度較高的 image 分享者便會較小機會「中招」。例如我們可通過於 Docker 官方網頁之中找尋較為知名的開發者,從而降低風險。
除了關注 Docker image 本身的安全性之外,其實很多用户對於 Docker 似乎抱有過高期望。沒錯!Docker 能為你的應用獨立以 Container 的形式盛載著,但假如你把 Docker 當作 Sandbox 看待的話,那可是個危險的想法;除此之外,筆者亦希望大家先問問自己有沒有對 Docker 抱有過多錯誤觀念:
1. Docker 擁有與 VMs/KVM 的特性亦代表著它擁有絕對安全?
2. 所以我喜歡隨意下載由不同上傳者上傳的 images!
3. 更甚者即使作為惡意程式測試平台,系統本身亦絕對安全?
4. 而且我樂意授予天皇一般的 root 權限 >_<…
如果有上面的想法,我看你們是高估了 Docker 的安全性。當然假如你本身只是於 VM 之上先安裝 Linux 系統然後再次執行 Docker 的話,就好像筆者平日測試的環境般,的確你大可放心,因為有 VM 神一樣眷顧著你;但假如你先入為主地認為 Docker 擁有類近 VM 的獨立特性,亦自認為 Docker 同樣提供與世隔絕的環境,那恐怕是時間尚早(請勿發夢)。
那我們應如何看待 Docker?
簡單,大家應把 Docker 當作一個運行在 Linux 系統之中的應用看待,只不過是此應用本身是個 Container 而已,因此在權限以及設定之上亦應該保持應有的態度,例如請你:
1. 授予較低權限。
2. 即使在 Container 之中,亦請小心處理權限及進行每個動作以確保安全性。
筆者明白對於劃時代的產物,抱有好奇之心亦十分正常,就好像當年一旦有新的免費軟件或 RPM package,我們總會快快手手從網絡上下載回來,又再快快手手即時授於最高權限希望更快試用新發現的軟件,然而「今非昔比」,當年病毒有現時般多嗎?當時有這樣多 Malware 嗎?所以請勿常常「話當年」了,否則「中招」便是自作孽。
我還不明所以….?為甚麼 Docker 不像 VM 般安全?
先說明,其實 VM 亦絕非 100% 安全,只需攻破 Hypervisor 便足以令整個 VM 毀於一旦,但問題是「你能攻破嗎?」。不過 Docker 做到的分隔感覺主要運用所謂的 namespaces 技術。傳統上 Linux 之中的 pid 是唯一且獨立的,在正常情況下,你不會看見有重複的 pid;然而於 Docker 之中,便採用了 namespaces,從而令相同的 pid 可於不同的 namespaces 之中獨立存在;舉個例子,A Container 之中 pid=1 是 A 程序,而 B Container 之中的 pid=1 同樣可以是 A 程序。雖然 Docker 可透過 namespaces 的方式分隔出看似是獨立的空間,然而 Linux 核心(kernel)卻不能 namespaces,所有即使你有多個 Container,所有的 system call 其實都是通過 Host 的 kernel 處理,這便為 Docker 留下了不可否認的安全問題!
傳統的 VM 同樣地很多動作都需要通過 kernel 處理,但這亦只是 VM 的 kernel,並非 Host kernel,因此萬一出現問題時,最多只是影響到虛擬系統本身;當然你可以說我可以先 Hack 入 VM 的 kernel,然後再於 Hypervisor 找尋漏洞同時不被發現,及後再攻破 SELinux,然後向 Host kernel 發動,真是文字表達都縑繁複,更何況實際執行?加上還要與如時間及防守人員競賽?說到這裡,大家可能已知問題所在。沒錯!Docker 之所以不能像 VM 般全因為其溝通的 kernel 是 Host kernel。所以 Docker 是好用,但請勿誤以為擁有 VM 特性。
相關文章:
顛覆 VM 玩法:Docker 或動搖傳統虛擬化?
顛覆 VM 玩法:幾步極速完成安裝無難度
50% 簡化!活用 Docker、5 分鐘極速安裝 LAMP
小心暗藏惡意軟件:淺談 Docker 安全性
節省麻煩設定:尋找 Docker 專用的寄存服務
淺談 Docker 優劣:誰是虛擬化黑馬?