Cyber-Security:Linux容器安全的十重境界
容器安全解決方案需要考慮不同技術棧和容器生命周期的不同階段。
- 1.容器操作系統與多租戶
- 2.容器內容(使用可信源)
- 3.容器註冊 (容器鏡像加密訪問)
- 4.構建過程安全
- 5.控制集群中可部署的內容
- 6.容器編排:加強容器平台安全
- 7.網路隔離
- 8.存儲
- 9.API 管理, 終端安全和單點登錄 (SSO)
- 10.角色和訪問控制管理
10 layers of Linux container security | Daniel Oh | Senior Specialist Solution Architect at Red Hat
容器提供了一種簡單的應用程序打包方法將它們無縫地從開發、測試環境部署到生產環境。它有助於確保各種環境中的一致性,包括物理伺服器、虛擬機(VM)或私有或公共雲。領先的組織基於這些好處迅速採用容器,以便輕鬆地開發和管理增加業務價值的應用程序。
企業應用需要強壯的安全性,任何在容器中運行基礎服務的人都會問:「容器是安全的嗎?」、「可以讓我們的應用程序信任容器嗎?」
保護容器非常類似於確保任何正在運行的進程。在部署和運行容器之前,您需要考慮整個解決方案技術棧的安全性。您還需要考慮在應用程序和容器的完整生命周期的安全性。
請嘗試在這 10 個方面加強容器的不同層次、不同技術棧和不同生命周期階段的安全性。
1. 容器操作系統與多租戶
對於開發人員來說,容器使得他們更容易地構建和升級應用程序,它可以作為一個應用單元的被依賴,通過在共享主機上部署啟用多租戶應用程序來最大限度地利用伺服器資源。容器很容易在單個主機上部署多應用程序,並根據需要開啟和關閉單個容器。為了充分利用這種打包和部署技術,運維團隊需要正確的運行容器環境。運維人員需要一個操作系統,該系統可以在邊界處保護容器,使主機內核與容器隔離並確保容器彼此之間安全。
容器是隔離和約束資源的 Linux 進程,使您能夠在共享宿主內核中運行沙盒應用程序。您保護容器的方法應該與確保 Linux 上任何正在運行的進程的安全方法相同。放棄特權是重要的,目前仍然是最佳實踐。更好的方法是創建儘可能少的特權容器。容器應該作為普通用戶運行,而不是 root 用戶。接下來,利用 Linux 中可用的多種級別的安全特性確保容器的安全: Linux 命名空間,安全增強的Linux(SELinux), cgroups,capabilities 和安全計算模式(seccomp)。
2. 容器內容(使用可信源)
當說到安全性的時候,對於容器內容來說意味著什麼呢?。一段時間以來,應用程序和基礎設施都是由現成的組件組成的。很多都來自於開源軟體,例如如 Linux 操作系統,Apache Web 伺服器,紅帽 JBoss 企業應用平台,PostgreSQL 和 Node.js。基於容器的各種軟體包版本現在一應俱全,所以你不需要建立自己。但是,與從外部源下載的任何代碼一樣,您需要知道包的起源、它們是由誰創建,以及它們內部是否存在惡意代碼。
3. 容器註冊 (容器鏡像加密訪問)
你的團隊構建容器的時候基於下載的公共容器鏡像,
所以對它的訪問管理和更新下載是管理的關鍵,需以同樣的方式管理容器鏡像、內建的鏡像及其他類型的二進位文件。許多私有倉庫註冊伺服器支持存儲容器鏡像。選擇一個私有的、存儲使用的容器鏡像自動化策略的註冊伺服器。
4. 構建過程安全
在一個容器化的環境里,軟體的構建是整個生命周期的一個階段,應用程序代碼需要與運行庫集成。管理此構建過程是確保軟體棧安全的關鍵。堅持「一次構建,到處部署(build once, deploy everywhere)」的理念,確保構建過程的產品正是生產中部署的產品。這一點對於維護容器持續穩定也非常重要,換句話說,不要為運行的容器打補丁;而是應該重新構建、重新部署它們。
無論您是在高度規範的行業中工作,還是僅僅想優化團隊的工作,需要設計容器鏡像的管理和構建過程,以利用容器層實現控制分離,從而使:- 運維團隊管理基礎鏡像
- 架構團隊管理中間件、運行時、資料庫和其它解決方案
- 開發團隊僅僅專註於應用層和代碼
最後,對定製的容器簽名,這樣可以確保它們在構建和部署環節之間不會被篡改。
5. 控制集群中可部署的內容
為了防備在構建過程中發生任何問題,或者在部署一個鏡像後發現漏洞,需要增加以自動化的、基於策略的部署的另一層安全性。
讓我們看一下構建應用程序的三個容器鏡像層:核心層(core)、中間件層(middleware)和應用層(application)。一個問題如果在核心鏡像被發現,鏡像會重新構建。一旦構建完成,鏡像將被推入容器平台註冊伺服器。平台可以檢測到鏡像發生了變化。對於依賴於此鏡像並有定義觸發器的構建,該平台將自動重建應用程序並整合已經修復的庫。
一旦構建完成,鏡像將被推入容器平台的內部註冊伺服器。內部註冊伺服器中鏡像的變化能立即檢測到,通過應用程序中定義的觸發器自動部署更新鏡像,確保生產中運行的代碼總是與最近更新的鏡像相同。所有這些功能協同工作,將安全功能集成到您的持續集成和持續部署(CI / CD)過程中。
6. 容器編排:加強容器平台安全
當然,應用程序很少在單個容器中交付。即使是簡單的應用程序通常有一個前端,後端和資料庫。在容器中部署現代微服務應用,通常意味著多容器部署,有時在同一主機上有時分布在多個主機或節點,如圖所示。
當規模化管理容器部署時,您需要考慮:
- 哪些容器應該部署到哪個主機上?
- 哪個主機容量更大?
- 哪些容器需要相互訪問?他們將如何相互發現?
- 如何控制對共享資源的訪問和管理,比如網路和存儲?
- 如何監控容器健康狀態?
- 如何自動擴展應用能力以滿足需求?
- 如何使開發者在自助服務的同時滿足安全需求?
考慮到開發人員和運維人員擁有的廣泛能力,強大的基於角色的訪問控制是容器平台的關鍵元素。例如,編排管理伺服器是訪問的中心點,應該得到最高級別的安全檢查。API 是大規模自動化容器管理的關鍵,用於驗證和配置容器、服務和複製控制器的數據;對傳入的請求執行項目驗證;並調用其他主要系統組件上的觸發器。
7. 網路隔離
在容器部署現代微服務應用程序往往意味著在多個節點分散式部署多個容器。考慮到網路防禦,您需要一種在集群中隔離應用程序的方法。
一個典型的公共雲服務,例如Google Container Engine (GKE),Azure Container Services, 或者 Amazon Web Services (AWS) Container Service,都是單租戶服務。它們允許在您啟動的 VM 集群上運行容器。為了實現多租戶容器安全,您需要一個容器平台,允許您選擇單個集群並將流量分段,以隔離該集群中的不同用戶、團隊、應用程序和環境。
通過網路命名空間,每個容器集合(稱為「POD」)獲得自己的IP和埠綁定範圍,從而在節點上隔離 POD 網路。
默認情況下,來自不同命名空間(項目)的 POD 不能將包發送到或接收來自不同項目的 POD 、服務的數據包,除了下文所述的選項。您可以使用這些特性來隔離集群中的開發人員、測試和生產環境;然而,IP 地址和埠的這種擴展使得網路變得更加複雜。可以投資一些工具處理這種複雜性。首選的工具是採用軟體定義網路(SDN)容器平台,它提供統一的集群網路,保證整個集群的容器之間的通信。
8. 存儲
對於有狀態和無狀態的應用程序來說,容器是非常有用的。
保護存儲是保證有狀態服務的關鍵要素。容器平台應提供多樣化的存儲插件,包括網路文件系統(NFS),AWS Elastic Block Stores(EBS,彈性塊存儲),GCE Persistent 磁碟,GlusterFS,iSCSI,RADOS(CEPH)、Cinder 等等。一個持久卷(PV)可以安裝在由資源提供者支持的任何主機。供應商將有不同的能力,每個 PV 的訪問模式可以設置為特定卷支持的特定模式。例如,NFS 可以支持多個 讀/寫的客戶端,但一個特定的 NFS PV 可以在伺服器上僅作為只讀輸出。每個 PV 有它自己的一套訪問模式,定義特定 PV 的性能指標,例如ReadWriteOnce, ReadOnlyMany, 和 ReadWriteMany。
9. API 管理, 終端安全和單點登錄 (SSO)
保護應用程序安全包括管理應用程序和 API 身份驗證和授權。
Web SSO 功能是現代應用程序的關鍵部分。當開發者構建他們自己的應用時,容器平台可以提供各種容器服務給他們使用。API 是微服務應用的關鍵組成部分。微服務應用具有多個獨立的 API 服務,這導致服務端點的擴張,因此需要更多的治理工具。推薦使用 API 管理工具。所有 API 平台都應該提供各種 API 認證和安全的標準選項,它們可以單獨使用或組合使用,發布證書和控制訪問。這些選項包括標準的 API 密鑰、應用ID、密鑰對和 OAuth 2.0。
10. 角色和訪問控制管理(Cluster Federation)
2016年7月,Kubernetes 1.3 介紹了 Kubernetes Federated Cluster。這是一個令人興奮的新功能,目前在 Kubernetes 1.6 beta 。
在公共雲或企業數據中心場景中,Federation 對於跨集群部署和訪問應用服務是很有用的。多集群使得應用程序的高可用性成為可能,例如多個區域、多個雲提供商(如AWS、Google Cloud 和 Azure)實現部署或遷移的通用管理。
在管理集群聯邦時,必須確保編排工具在不同的部署平台實例中提供所需的安全性。與以往一樣,身份驗證和授權是安全的關鍵 —— 能夠安全地將數據傳遞給應用程序,無論它們在何處運行,在集群中管理應用程序多租戶。
Kubernetes 擴展了集群聯邦包括支持聯邦加密,聯邦命名空間和對象入口。
擴展閱讀: 網路安全專題合輯《Cyber-Security Manual》
- Cyber-Security: Linux 容器安全的十重境界
- Cyber-Security: 警惕 Wi-Fi 漏洞,爭取安全上網
- Cyber-Security: Web應用安全:攻擊、防護和檢測
- Cyber-Security: IPv6 & Security
- Cyber-Security: OpenSSH 並不安全
- Cyber-Security: Linux/XOR.DDoS 木馬樣本分析
- 淺談基於數據分析的網路態勢感知
- Packet Capturing:關於網路數據包的捕獲、過濾和分析
- 新一代Ntopng網路流量監控—可視化和架構分析
- Cyber-Security: 事與願違的後門程序 | Economist
- Cyber-Security: 美國網路安全立法策略
- Cyber-Security: 香港警務處擬增設網路安全與科技罪案總警司
更多精彩內容掃碼關注公眾號,RiboseYims Blog:https://riboseyim.github.io
推薦閱讀:
※APT案例分析:一個基於Meterpreter和Windows代理的攻擊事件
※使用 Burp Infiltrator 進行漏洞挖掘
※威脅警報:Cisco IOS高危漏洞觸發Rockwell工業系統危機
※保護路由器免受DDoS攻擊的5個最新絕招