不,Docker容器並不比VM更安全。
引用 Daniel Shapira:
僅在2017年,發現了434個Linux內核利用程序,正如您在本文中所看到的那樣,內核利用程序對於容器化環境可能是毀滅性的。這是因為容器與主機共享同一內核,因此僅依靠內置保護機制是不夠的。
1。來自容器的內核漏洞利用
如果有人利用了容器內部的內核錯誤,他們就會在主機操作系統上對其進行利用。如果此漏洞利用允許代碼執行,它將在主機操作系統上執行,而不是在容器內部。
如果此漏洞利用允許任意的內存訪問,攻擊者可以更改或讀取任何其他容器的任何數據
在VM上,過程更長:攻擊者必須同時利用VM內核,管理程序和主機內核(這可能與VM內核不同)。 / p>
2。資源匱乏
由於所有容器共享相同的內核和相同的資源,因此,如果不限制對某些資源的訪問,則一個容器可以用盡所有資源並使主機操作系統和操作系統耗盡
在虛擬機上,資源是由管理程序定義的,因此,虛擬機管理程序本身可以配置為限制使用資源,因此任何虛擬機都不能拒絕任何資源的主機操作系統。
p>
3。容器突破
如果容器內的任何用戶能夠使用某些利用或配置錯誤逃脫該容器,則他們將有權訪問主機上運行的所有容器。發生這種情況是因為運行Docker引擎的用戶是運行容器的用戶。如果任何漏洞利用程序在主機上執行代碼,它將在docker引擎的特權下執行,因此它可以訪問任何容器。
4。數據分離
在Docker容器上,有一些未命名空間的資源:
- SELinux
- Cgroups
-
/ sys
, / proc / sys
, -
/ proc / sysrq-trigger
, / proc / irq
, / proc / bus
-
/ dev / mem
, / dev / sd *
文件系統 - 內核模塊
如果有任何攻擊者可以利用這些元素中的任何一個,他們將擁有主機操作系統。
VM操作系統將無法直接訪問任何這些元素。它將與管理程序進行對話,管理程序將對主機OS進行適當的系統調用。它將濾除無效呼叫,從而增加了一層安全保護。
5。原始套接字
默認的Docker Unix套接字( /var/run/docker.sock
)可以在沒有適當保護的情況下通過任何容器安裝。如果某些容器安裝了此套接字,則它可以關閉,啟動或創建新映像。
如果已正確配置和保護它,則可以使用Docker容器實現高級別的安全性,但是它將小於正確配置的VM。無論使用多少強化工具,VM始終將更加安全。裸機隔離甚至比VM更安全。某些裸機實現(例如IBM PR / SM)可以保證分區就像在單獨的硬件上一樣分離。據我所知,無法逃避PR / SM虛擬化。