為何在 Docker 中執行特權容器不是個好主意?

所謂的特權容器 (privileged container),簡而言之就是 Docker 環境中擁有主機完整系統權限 (root) 的容器,它可存取一般容器無法存取的資源。特權容器的用途之一,就是在 Docker 容器當中執行另一個 Docker daemon;另一個用途就是當容器需要對硬體進行直接存取時。原本,在 Docker 中執行 Docker (也就是所謂的 Docker-in-Docker) 的用意是為了開發 Docker 本身。但今天,特權容器已經出現各種不同的使用情境,例如在開放原始碼自動化伺服器 Jenkins 當中將持續整合/持續交付 (CI/CD) 工作自動化。然而,執行特權容器卻可能帶來安全上的疑慮。以下我們將詳細說明,執行一個擁有特權但卻不安全的容器,如何讓網路犯罪集團有機會在企業的系統當中植入後門。

特權容器的問題

一般來說,使用 Docker-in-Docker 是為了在現有容器當中再執行另一個容器。不過,使用一個缺乏安全的特權容器,可能會引發一些嚴重問題。

繼續閱讀

何謂容器(Container)?

什麼是「容器 (Container) 」? 「容器 (Container)? 」 是一個軟體單元,裡面包含了所有讓應用程式在各種不同環境 (如不同電腦硬體、基礎架構或雲端環境) 都能順利執行的必要元素,包括:程式碼、執行時期環境、系統工具、系統程式庫、軟體相依性等等。

採用容器,讓軟體開發更加方便。傳統上,一個軟體要從某個運算環境移植到另一個運算環境上執行,會遭遇許多困難。例如,當底層支援的軟體環境不同時,就可能帶來許多挑戰。而容器之所以能解決此問題,就是因為容器將所有必要的元素全部包裝在一起。如此一來,就能消除底層作業系統和基礎架構差異性所帶來的問題,因為容器執行時期環境已抽離這些差異性。

什麼是容器映像(container image)?

容器映像 (container image) 包含了可執行程式碼、支援程式庫、運算要求條件,以及在某種 IT 基礎架構上運作一個執行程序所需的其他物件。每個容器都需要載入一個容器映像來執行。

繼續閱讀

AESDDoS 殭屍網路變種,經由暴露在外的 Docker API 滲透容器

AESDDoS 殭屍網路變種,經由暴露在外的 Docker API 滲透容器

組態設定錯誤的問題早已不是新聞,不過對網路犯罪集團來說,這類問題卻是他們入侵企業電腦資源以從事惡意活動的一項有效管道,同時也是資安的首要問題之一。在這篇文章,我們將詳細說明 Docker Engine-Community 這套熱門的開放原始碼 DevOps 工具如何因為組態設定上的錯誤,而讓駭客滲透到容器內部並執行 Linux 殭屍網路惡意程式 AESDDoS 的某個變種 (趨勢科技命名為 Backdoor.Linux.DOFLOO.AA,我們是經由誘捕網路所發現)。

在容器主機上運作的 Docker API 可讓主機接收所有容器相關的指令,然後交由具備系統管理 (root) 權限執行的容器引擎來執行。如果這些 API 的連接埠因為蓄意或組態設定上的錯誤而提供給外部存取,就可能讓駭客有機會掌控主機,在主機上的容器內植入惡意程式,然後從遠端存取使用者的伺服器與硬體資源。先前,我們曾見過暴露在外的 Docker 主機遭歹徒植入虛擬加密貨幣挖礦惡意程式

[延伸閱讀:Container Security: Examining Potential Threats to the Container Environment]

攻擊方式

在這項新的攻擊中,歹徒會先從外部掃瞄某個 IP 範圍的主機,發送 TCP SYN 封包到連接埠 2375,這是 Docker 引擎接收通訊的預設連接埠。一旦找到有效的連接埠,歹徒就會試圖建立連線來尋找運作中的容器。一旦找到,就會利用 docker exec 指令在容器內植入 AESDDoS 殭屍病毒,讓駭客經由指令列存取該主機上所有可存取的執行中容器。如此一來,惡意程式就能在運作中的容器內執行並隱藏蹤跡。

繼續閱讀