Docker - 安全性



Docker安全至關重要,它確保容器化應用程式保持完全功能和可靠性。Docker安全的主要問題之一是有效的容器隔離,防止惡意活動傳播。Docker利用Linux核心名稱空間和組或控制組來隔離程序和資源。

透過建立名稱空間,每個容器都可以擁有一個專屬環境,並且無法直接訪問其他容器持有的資源。另一方面,組限制了容器可以消耗的資源,無論是CPU、記憶體、磁碟I/O等,以保持分配公平並防止系統資源耗盡。僅使用這些Linux核心功能,Docker就能維護出色的基本安全模型,從而幫助減輕常見威脅。

映象管理和Docker守護程序的正確處理是確保Docker安全的另一個關鍵領域。這包括確保映象來自受信任的儲存庫並定期掃描漏洞,以此避免部署受損的容器。一些示例工具可以幫助驗證映象的完整性和安全性,例如Docker Content Trust和映象掃描服務。

在審查Docker安全時,需要考慮四個主要方面

  • 核心的內在安全性以及對名稱空間和cgroups的支援
  • 僅由Docker守護程序暴露的攻擊面
  • 容器配置配置檔案中的漏洞,無論預設情況下還是使用者自定義時。
  • 核心的“加固”安全功能以及安全功能如何與容器互動。

本章將討論Docker容器安全的更多方面。

核心名稱空間

名稱空間基本上是Docker用來隔離執行容器的方式。名稱空間劃分核心資源,其中一組程序看到一組資源,另一組程序看到另一組資源。

Docker使用以下型別的名稱空間:

  • PID名稱空間 - 它隔離程序ID,這意味著容器內的程序ID與主機上的程序ID不同。
  • 掛載名稱空間 - 這隔離了檔案系統中的掛載點,以確保容器內看到的檔案系統與主機上的檔案系統隔離。
  • 網路名稱空間 - 透過介面、IP地址和路由表隔離網路。
  • UTS名稱空間 - 隔離核心和版本識別符號。
  • IPC名稱空間 - 隔離IPC資源,例如訊息佇列、訊號量和共享記憶體等。
  • 使用者名稱空間 - 隔離使用者和組ID,允許容器在容器內以非root使用者身份執行,但在主機上對映為root使用者。

Docker透過使用這些名稱空間來實現容器彼此之間以及與主機的隔離。

控制組

Docker的另一個重要安全功能是控制組,它提供資源隔離和管理。cgroups控制容器可以消耗的系統資源量,防止單個容器耗盡系統資源並佔用主機系統資源,影響其他容器。

cgroups提供的一些關鍵資源控制示例包括:

  • CPU - 與容器共享CPU並設定容器的CPU使用限制。
  • 記憶體 - 限制容器的記憶體使用量,以及交換記憶體 - 防止容器使用超過分配的記憶體。
  • 磁碟I/O - 確定程式讀取和寫入磁碟的速度。
  • 網路 - 管理網路的頻寬分配。

Docker在容器之間公平分配資源,避免資源競爭,從而提高整體系統穩定性和安全性。

Docker守護程序攻擊面

Docker守護程序以root許可權執行,這是一個嚴重的安全問題。攻擊者可以破壞它並控制整個主機系統。為了減少攻擊面,必須遵循最佳實踐:

  • 限制訪問 - 只允許特定使用者訪問Docker守護程序,同時控制可以執行Docker命令的使用者 - 限制對Unix套接字許可權或使用TLS的TCP的受保護通訊的訪問。
  • 使用無根模式 - 儘可能使用Docker的無根模式;在這種模式下,守護程序和容器在沒有root許可權的情況下執行。這被認為是減少許可權提升可能性的一種方法。
  • 網路安全 - 確保Docker守護程序API沒有公開在公共網際網路上。如果需要從遠端位置訪問Docker守護程序API,請透過防火牆規則和VPN對其進行保護。
  • 定期更新 - 保持Docker和基礎作業系統更新,以防範任何已知的漏洞。

Linux核心的功能

Linux核心功能提供對授予程序的許可權的細粒度控制。Docker使用功能來減少可以分配給容器的許可權數量,其中容器歷史上只被分配其操作所需的必要功能。以下功能正在使用:

  • CAP_NET_BIND_SERVICE - 允許繫結到低於1024的埠。
  • CAP_SYS_ADMIN - 此功能允許許多不同的系統管理操作。
  • CAP_SYS_PTRACE - 此功能允許程序跟蹤其他程序。

Docker預設情況下會刪除許多功能,以減少許可權提升的可能性。使用者可以使用`--cap-add`和`--cap-drop`選項分別在啟動容器時新增或刪除其他特定功能,從而根據其應用程式的特定需求微調安全配置檔案。

Docker Content Trust簽名驗證

Docker Content Trust (DCT) 提供映象簽名和驗證。這保證了映象沒有被篡改,並且來自它們聲稱的來源。啟用DCT後,Docker會在拉取或執行之前檢查映象的數字簽名,確保只使用受信任的映象。

以下是一些使DCT成為安全供應鏈中必不可少的部分的關鍵特性:

  • 映象簽名 - 開發人員可以使用他們的私鑰簽名映象。
  • 簽名驗證 - Docker會針對與附加的公共金鑰驗證這些簽名,以確保映象未被更改或篡改。
  • 不可變標籤 - 防止意外覆蓋已簽名的映象。

啟用DCT可以增強整個系統的安全性,從而只部署經過驗證和信任的映象,防止被篡改或惡意映象。

其他核心安全功能

除了名稱空間、組和功能之外,其他增強Docker安全性的Linux核心安全功能如下:

Seccomp(安全計算模式)

Linux中的核心功能,可用於過濾容器可以執行的特定系統呼叫,從而減少執行潛在不安全操作的能力。Docker使用seccomp配置檔案來定義允許和拒絕的系統呼叫。

AppArmor是一個限制應用程式的應用程式,它限制Linux中程式的行為。Docker使用AppArmor配置檔案將強制訪問控制規則應用於容器,限制其功能。

SELinux

這是一個安全模組,可用於實現有關應用程式如何訪問資源的安全策略。Docker可以配置為使用SELinux以獲得更高的安全性。

使用者名稱空間重新對映

將容器內的使用者 ID 和組 ID 對映到主機上的不同 ID,透過隔離容器程序和主機程序來提升安全性。

Docker 安全最佳實踐

雖然 Docker 極大地簡化了應用程式的建立、分發和部署,但在容器化環境中也出現了一些安全問題。Docker 安全性的一個基本方面是 Docker 映象的選擇和管理。透過實施有關映象選擇、構建過程和漏洞掃描的最佳實踐,可以有效提高 Docker 部署的安全性。

從可信來源選擇合適的基映象並保持其精簡

首先,在確定需要使用 Docker 映象後,需要選擇一個基映象。基映象必須始終來自任何官方來源,例如 Docker Hub 或任何其他信譽良好的儲存庫。官方映象會定期更新,漏洞較少。此外,保持基映象精簡將減小其攻擊面,並最大限度地減少不必要的軟體包和依賴項的包含;因此,它可以更安全。

使用多階段構建

多階段構建是 Docker 中的一項功能,允許在一個 Dockerfile 中使用多個 FROM 指令。此功能在構建更小、更安全的映象時非常有用。例如,您可以使用大型基映象來構建和編譯應用程式構件,然後將這些構件複製到小型最終映象中。這減小了最終映象的大小,並消除了在最終映象中包含所有構建工具和依賴項的需要,從而最大限度地減少安全漏洞。

重建映象

定期重建 Docker 映象,以始終受益於最新的安全補丁和更新。如果在構建基映象或其依賴項後發現任何缺陷,則必須重建這些映象以整合修復程式。自動構建和部署確保在安全更新可用時重建和重新上傳映象。

驗證映象是否存在漏洞

在將 Docker 映象部署到生產環境之前,務必掃描其是否存在漏洞。有幾種工具可以幫助您掃描 Docker 映象中已知的漏洞,包括 Clair、Docker 安全掃描和其他第三方漏洞掃描服務。這些工具會識別映象中的安全問題,並建議如何緩解這些問題,例如更新依賴項或使用不同的基映象。

結論

保護 Docker 映象對於安全的容器化環境至關重要。圍繞選擇可信基映象、確保其精簡、多階段構建、頻繁重建映象和掃描漏洞的正確實踐將有助於降低安全漏洞的風險,並確保 Docker 部署的完整性。這些實踐不僅會增強安全態勢,而且對於 Docker 環境的可靠性和效能也至關重要。此外,深入瞭解核心名稱空間、cgroups、DCT 等的工作原理有助於獲得更精細的控制。

常見問題

問 1. 使用 Docker 時主要的安全性問題是什麼?

Docker 與任何其他技術一樣,也存在安全問題。這包括容器映象、Docker 引擎或容器的漏洞;容器中的錯誤配置會暴露敏感資料或埠;以過高的許可權執行容器;以及透過容器漏洞攻擊主機系統。

問 2. 如何確保 Docker 映象的安全性?

對基映象使用可信來源。從可信來源構建映象——定期更新它們,以便修補任何漏洞。不要在映象中包含敏感資訊,例如密碼和 API 金鑰。使用掃描工具檢查映象中是否存在潛在的 CVE,並對映象進行簽名以確保其完整性。

問 3. 安全執行 Docker 容器的一些最佳實踐是什麼?

根據最小許可權原則執行容器:僅允許執行所需的操作。儘可能避免以 root 使用者身份執行容器。在開啟的埠級別仔細配置網路訪問,並使用防火牆限制流量。監控容器的活動及其日誌中的任何可疑行為。

問 4. 我是否應該擔心 Docker 容器會影響我的主機系統的安全性?

雖然容器建立了隔離,但它們並非免受潛在威脅。例如,在某些情況下,在容器中執行的惡意程式碼可能會利用 Docker 引擎或主機核心中的某些漏洞,從而突破容器並進入主機系統。使您的 Docker 安裝和主機作業系統保持最新安全補丁,以將此風險降至最低。

問 5. 是否有針對 Docker 推薦的特定安全工具或實踐?

是的,有相當多的工具和實踐可以提高 Docker 的安全性。使用映象掃描工具(例如 Clair 或 Trivy)來檢測漏洞。您可能需要應用額外的工具(例如 AppArmor 或 SELinux)來對容器強制執行更嚴格的安全策略——定期檢查和稽核 Docker 配置,以查詢潛在的錯誤配置。關注 Docker 安全更新和建議,以便迅速解決新出現的威脅。

廣告