現代化小白也要嘗試的容器手札 - Docker 容器安全防堵對策
Day22. Docker 容器安全防堵對策
容器安全防堵對策
Docker安全性的五個面向:
在開發階段,基於容器的應用程序時需要注重以下四個面向:
- 通過支持Namespace和cgroup來保護kernel
- 保護Docker Daemon(守護進程)
- 容器配置檔案中可能的安全漏洞風險
- 不必要的調整與清除
Docker Container安全技術部份會參照Linux Kernel,如下圖結構層級所示
Namespace
- 內核Namespace本身是Linux的原生功能,可借重將內核資源隔離在不同的執行容器和程序間。
- 當使用docker run建立容器時,就會在Linux宿主機上建立自己的Namespace與Cgroup。容器中執行程序在隔離的環境中會擁有自己專屬的資源集區。
- Namespace會限制並隔離Container,讓跑在Container內的Process無法查看與宿主機的任何程序互動,同樣也不能查看其他的Container的程序互動(除非另外設置Docker network如:Link綁定)。
- 每個容器彼此獨立,同時都自認為是個專屬的完整主機,內核Namespace提供Network stack隔離,故一個容器中執行的程序並無法存取到另一個容器的NNI(網路介面端口)和Socket。
補充以下Namespace個細節欄位代表的用途意義
- Process ID (PID):這裡指在 container 裡面的 PID。每個 container 都有自己的 PID namespace,所以假設 container_1 使用了 PID=1,那 container_2 也可以使用 PID=1,因為都在各自的 namespace,兩者不會互相干擾到。
- Network:每個 container 都有自己的 net namespace,所以 container 會有 virtual network interface,自己的 container 只能管理自己虛擬網卡的 IP、route table 等。
- Filesystem/Mount:每個 container 可以使用自己的 filesystem,例如:container_1 使用 xfs,container_2 使用 ext4。
- Inter-process Communication (IPC):container 裡面,process 間的溝通還是使用 Linux 的 IPC 方法,例如:signal、share memory 等。
- User:每個 container 都可以在 container 裡面建立自己的 user。
- UNIX Time-sharing System (UTS):每個 container 都擁有自己的 hostname 和 domain name,使其可以被視為一個獨立的網路節點而不是主機上的一個程序。
Cgroup
Cgroup是Linux的一項功能,可作為監視,限制正在執行程序資源的分配任務。
從Docker角度來看,Cgroup能確保執行中的容器間公平分配系統資源如:CPU,MEM,Disk Space,Disk I/O。
cgroups的限制功能可確保不允許單個容器通過耗盡可用資源來關閉系統。
它有效防禦阻斷服務DOS攻擊,確保平台服務模型正在執行容器的運作穩定時間。
Docker Daemon
- Docker守護程序是在宿主機的主要程序服務,它可以偵測所有Docker API發來的需求來處理無論是Container,Volume等對象。當你執行任何容器時,就意味著Docker守護程序在後台背景持續運行,並接收處理各種作業動作。
- Docker守護程序需要root用戶特權,並只允許受信任的用戶控制守護程序。
- 應適當管理虛擬化後的檔案系統共享,以避免Docker容器可不受限制的變更主機檔案系統。
- 將靜態服務佈建到容器時需謹慎用戶的身份驗證登入,以避免惡意執行可能的命令,如:任意建立,刪除容器等行為。
- Docker守護程序開始使用Unix Domain Socket而非TCP端口來保護Docker其他端點。
Container file configuration
- 針對使用預設配置運作的容器,報告許多容器映像安全性漏洞。建議自訂檔案配置最適的安全需求。
- 自定義Docker檔案配置更容易受到容器威脅影響,建議閱讀原始文件中的源代碼。
- 建議遵循最佳實踐並使用安全性基準測試工具。
「應用安全」Docker 安全配置(一)
「應用安全」Docker 安全配置(二)
Feature removal
Docker守護程序需要一些Linux功能才能正常運行。它不需要所有Linux功能,而過多功能將更暴露了攻擊的弱點。
以下試試如何透過刪除以下功能來提高其安全性層級:
- CAP_MAC_ADMIN:MAC配置和狀態更改權限。
- CAP_MAC_OVERRIDE:Smack LSM的強制性訪問控制(MAC)替代。
- CAP_SETPCAP:根進程可以設置另一個進程的功能。
- CAP_SYS_NICE:修改其他進程的優先級。取消此功能是隔離容器的重要一步。
- CAP_SYS_RESOURCE:覆蓋系統資源,並且可能影響cgroup。
- CAP_SYS_TIME:不允許在docker容器執行程序間變更Linux環境的系統時間。
- CAP_NET_ADMIN:此功能使進程可以配置引擎的網絡動態。
- CAP_SYSLOG:由於Linux內核利用printk來記錄系統信息,因此這種能力的消除無疑是一大進步。
- CAP_SYS_RAWIO:已刪除內核記憶體的修改,確保容器內進行惡意內核記憶體修改。
雖然是2017年的IT專欄發表,剖析很有深度,值得當作範本研究
專家深入剖析Docker容器常見攻擊手法與防護對策
留言
張貼留言