iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0

鬆獅容器小白22連拍

https://ithelp.ithome.com.tw/upload/images/20201005/20025481QCgCUEnCI5.jpg

容器安全防堵對策

Docker安全性的五個面向:

在開發階段,基於容器的應用程序時需要注重以下四個面向:

  • 通過支持Namespace和cgroup來保護kernel
  • 保護Docker Daemon(守護進程)
  • 容器配置檔案中可能的安全漏洞風險
  • 不必要的調整與清除

Docker Container安全技術部份會參照Linux Kernel,如下圖結構層級所示
https://ithelp.ithome.com.tw/upload/images/20200928/20025481H2p3TGsy9b.png

Namespace

https://ithelp.ithome.com.tw/upload/images/20200928/20025481cfoRFA5b8d.png

  • 內核Namespace本身是Linux的原生功能,可借重將內核資源隔離在不同的執行容器和程序間。
  • 當使用docker run建立容器時,就會在Linux宿主機上建立自己的Namespace與Cgroup。容器中執行程序在隔離的環境中會擁有自己專屬的資源集區。
  • Namespace會限制並隔離Container,讓跑在Container內的Process無法查看與宿主機的任何程序互動,同樣也不能查看其他的Container的程序互動(除非另外設置Docker network如:Link綁定)。
  • 每個容器彼此獨立,同時都自認為是個專屬的完整主機,內核Namespace提供Network stack隔離,故一個容器中執行的程序並無法存取到另一個容器的NNI(網路介面端口)和Socket。

補充以下Namespace個細節欄位代表的用途意義

  1. Process ID (PID):這裡指在 container 裡面的 PID。每個 container 都有自己的 PID namespace,所以假設 container_1 使用了 PID=1,那 container_2 也可以使用 PID=1,因為都在各自的 namespace,兩者不會互相干擾到。
  2. Network:每個 container 都有自己的 net namespace,所以 container 會有 virtual network interface,自己的 container 只能管理自己虛擬網卡的 IP、route table 等。
  3. Filesystem/Mount:每個 container 可以使用自己的 filesystem,例如:container_1 使用 xfs,container_2 使用 ext4。
  4. Inter-process Communication (IPC):container 裡面,process 間的溝通還是使用 Linux 的 IPC 方法,例如:signal、share memory 等。
  5. User:每個 container 都可以在 container 裡面建立自己的 user。
  6. UNIX Time-sharing System (UTS):每個 container 都擁有自己的 hostname 和 domain name,使其可以被視為一個獨立的網路節點而不是主機上的一個程序。

Cgroup

https://ithelp.ithome.com.tw/upload/images/20200928/20025481nC9uOqsCec.png
Cgroup是Linux的一項功能,可作為監視,限制正在執行程序資源的分配任務。
從Docker角度來看,Cgroup能確保執行中的容器間公平分配系統資源如:CPU,MEM,Disk Space,Disk I/O。
cgroups的限制功能可確保不允許單個容器通過耗盡可用資源來關閉系統。
它有效防禦阻斷服務DOS攻擊,確保平台服務模型正在執行容器的運作穩定時間。

Docker Daemon

https://ithelp.ithome.com.tw/upload/images/20200928/20025481lByjAPDAAI.jpg

  • Docker守護程序是在宿主機的主要程序服務,它可以偵測所有Docker API發來的需求來處理無論是Container,Volume等對象。當你執行任何容器時,就意味著Docker守護程序在後台背景持續運行,並接收處理各種作業動作。
  • Docker守護程序需要root用戶特權,並只允許受信任的用戶控制守護程序。
  • 應適當管理虛擬化後的檔案系統共享,以避免Docker容器可不受限制的變更主機檔案系統。
  • 將靜態服務佈建到容器時需謹慎用戶的身份驗證登入,以避免惡意執行可能的命令,如:任意建立,刪除容器等行為。
  • Docker守護程序開始使用Unix Domain Socket而非TCP端口來保護Docker其他端點。

Container file configuration

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容器常見攻擊手法與防護對策
https://ithelp.ithome.com.tw/upload/images/20200928/2002548102IiZd1e0I.jpg


上一篇
Day21. Docker Compose 嘗試一次搞定多容服務
下一篇
Day23. Docker Swarm 新手上路
系列文
現代化小白也要嘗試的容器手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言