探索典型 Docker 和 Kubernetes 安裝的(缺少的)安全性

探索典型 Docker 和 Kubernetes 安裝的(缺少的)安全性
我從事 IT 工作已經 20 多年了,但不知何故,我從來沒有抽出時間接觸容器。 從理論上講,我了解它們的結構和工作原理。 但由於我從未在實踐中遇到過它們,所以我不確定它們引擎蓋下的齒輪到底是如何轉動的。

此外,我不知道他們的安全狀況如何。 但同樣,這個理論聽起來不錯,「隨著安全性的增加,可用性降低」這句老歌在我的腦海中揮之不去。 所以我想,既然用容器做一切都很容易,那麼那裡的安全性就低於標準。 事實證明,我是對的。

為了快速開始,我報名了課程 黑帽 2020年題為“從白手起家:Docker Swarm 與 Kubernetes 環境的滲透與防護“。

該課程由 Sheila A. Berta 和 Sol Ozzan 教授,首先描述了 Docker 容器的工作原理以及部署到 Kubernetes 時的流程。 這是一門完全實用的課程 - 學生必須在上課前在他們的機器上安裝 Docker 和 microk8s - 這是了解這些工具如何相互交互、找到弱點以及最重要的是嘗試阻止它們的好方法。

不幸的是,雖然課程承諾兩天后成為“王子”,但我感覺一切才剛開始,我還有很多東西要學。

探索典型 Docker 和 Kubernetes 安裝的(缺少的)安全性

在深入探討我的崇高觀察之前,有必要先解釋一下什麼是容器。 在開發世界中,在個人電腦上編寫的程式碼完美運行被認為是正常的,但是當您嘗試在某個伺服器上運行它時,它根本無法運行。 容器試圖透過提供獨立的機器來克服這個問題,您可以輕鬆地將這些機器從一台伺服器移動到另一台伺服器,並且知道它們將始終工作。 顧名思義,它們包含完成工作所需的程式碼、函式庫和其他軟體。 另一方面,Kubernetes 是 容器編排平台。 原則上,它可以用來無縫管理數百或數千個不同的容器。

以下是我從紅隊和藍隊角度的一些發現。

紅隊

大多數容器內容以 root 身分執行:這意味著如果容器遭到破壞,您將擁有對該容器的完全存取權。 這使得接下來的步驟變得更加容易。

在容器內安裝 docker.sock 是危險的:如果您在容器內擁有 root 權限,並且還在具有 Docker 套接字 (/var/run/docker.sock) 的容器內安裝了 Docker,則您有可能探索整個集群,包括存取任何其他容器。 此類存取無法透過網路隔離或其他方式來阻止。

環境變數通常包含秘密數據:在大多數情況下,人們使用普通環境變數將密碼傳送到容器。 因此,如果您有權存取該帳戶,則可以監視這些環境變量,以便以後擴展您的權限。

Docker API可以給出很多信息:預設配置的 Docker API 會在未經授權的情況下運行,並且會產生大量資訊。 使用 Shodan,您可以輕鬆找到開放連接埠的列表,然後獲取有關集群的詳細資訊 - 並繼續進行完整捕獲。 趨勢科技寫了這篇文章 最有趣的文章.

藍隊

不要以 root 身分執行容器內容:儘管以 root 身分運行更容易,但您不應該這樣做。 相反,透過顯示 uid 來運行具有重置權限的應用程序,或在從 CLI 運行時使用 --user 選項,或在 Dockerfile 中指定 USER。

不允許將軟體安裝在容器中:幾乎每次攻擊都是從種植東西開始的。 從 nmap 到 ifconfig 再到 Docker 本身(在容器內),在容器中安裝任何東西已經很常見了。 出於同樣的原因,您應該始終阻止所有未使用的連接埠。 這也有助於防止在您的電腦被感染時傳輸控制命令。 除了防止安裝程式之外,值得確保在容器本身中安裝完成任務所需的最少數量的應用程式。

保護 docker.sock:必須受到保護,因為容器和集群之間的通訊是透過此套接字進行處理的。 由於我不想在本文中詳細介紹,請閱讀 來自 Docker 的註釋,會發生什麼,以及如何阻止這一切。

使用 Docker 金鑰取代環境變數: 有秘密 大約從2017年開始。 儘管這並不安全,但它仍然比環境變數更好地將秘密資料傳遞到容器。

如果本文激起了您對容器的興趣,您可以輕鬆安裝 Docker 或 microk8s(Kubernetes 的小型版本)。 這裡 有針對 Linux 和 MacOS 安裝 Docker 的說明,以及 這裡 — 有關為 Windows、Linux 和 MacOS 安裝 microk8s 的說明。

安裝後就可以去 這是一個快速入門指南 來自 Docker,類似的選項 提供 以及 microk8s。

如果您想要或需要參加有關 Docker 的綜合課程,其中實用的演講者會檢查其所有工具:從基本抽像到網路參數、使用各種作業系統和程式語言的細微差別,那麼請嘗試“Docker 視頻課程」 您將熟悉該技術並了解在何處以及如何最好地使用 Docker。 同時,獲得最佳實踐案例 - 最好在安全的情況下並在從業者的支持下從有關耙子的故事中學習,而不是親自從帶有鑲釘手柄的耙子本身學習。

來源: www.habr.com

添加評論