在開發階段,基於容器的應用程序時需要注重以下四個面向:
Docker Container安全技術部份會參照Linux Kernel,如下圖結構層級所示
補充以下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是Linux的一項功能,可作為監視,限制正在執行程序資源的分配任務。
從Docker角度來看,Cgroup能確保執行中的容器間公平分配系統資源如:CPU,MEM,Disk Space,Disk I/O。
cgroups的限制功能可確保不允許單個容器通過耗盡可用資源來關閉系統。
它有效防禦阻斷服務DOS攻擊,確保平台服務模型正在執行容器的運作穩定時間。
Docker守護程序需要一些Linux功能才能正常運行。它不需要所有Linux功能,而過多功能將更暴露了攻擊的弱點。
以下試試如何透過刪除以下功能來提高其安全性層級:
雖然是2017年的IT專欄發表,剖析很有深度,值得當作範本研究
專家深入剖析Docker容器常見攻擊手法與防護對策