值得推薦的十大安全加固容器方法
譯文眾所周知,網絡安全事件會對一個組織的聲譽、以及市場競爭力造成嚴重的影響,甚至可能導致由最終用戶發起的訴訟、以及各種不必要的法律糾紛。根據IBM的一份??調查報告??,全球范圍內的各個組織平均每次由數據泄露所帶來的總體成本約為392萬美元。通常,一個組織會因為如下方面的疏漏,而拉低整體的安全態勢:
- 缺乏安全管理工具和實踐的技能和培訓
- 缺乏風險的可見性和漏洞的發現機制
- 未能持續監控當前系統與服務的安全狀態
而根據PaloAlto Networks最近的一份《??云安全狀況調查報告??》表明,有94%的組織正在使用著一個或多個云平臺,并且其中有大約45%的計算會發生在他們容器或CaaS(容器即服務)上。隨著應用容器的主導地位的逐步攀升,由此引發的安全威脅也在不斷增加。同時,該報告也羅列出了如下八大主要安全威脅:
- 由惡意軟件引發的數據泄露
- 應用程序的代碼級漏洞
- 系統身份驗證組件的薄弱或被破壞
- 應用的配置錯誤
- 不正確的訪問或權限過高
- 源自內部的威脅
- 身份認證憑據的泄漏
- 不安全的端點
針對上述威脅,我們將在下面和您討論一些有關容器安全性的優秀實踐。您可以通過遵循并實施,來降低容器化工作負載中的各種安全風險,進而實現對于應用程序的保護。
1. 來自受信存儲庫的基于源代碼的鏡像
當我們創建容器鏡像時,通常會依賴那些來自流行的、私有的或公共注冊表的種子鏡像。不過請注意,在鏡像制作的供應鏈中,有人可能會滲透進去,并植入能夠為攻擊者打開“大門”的惡意代碼。例如,在2018年,一些黑客曾攻擊了英國航空公司的軟件供應鏈。他們將惡意的JavaScript代碼插入英國航空公司的Web應用程序之中。具體請參見鏈接--https://www.wired.com/story/british-airways-hack-details/。同樣,就在幾年前,Docker在其Docker Hub上也發現了一些被安裝了Cryptominers(加密貨幣挖礦軟件)的??鏡像??。
因此,您需要在如下方面引起足夠的重視:
- 在創建容器鏡像時,請使用來自知名可信發布者的、經過安全加固的基礎性鏡像源。
- 請選擇那些經常被更新的、帶有最新安全修復和補丁的鏡像。
- 請使用那些經過簽名和標記的鏡像,并在拉取的過程中驗證鏡像的真實性,以阻斷中間人攻擊。
2. 安裝經過驗證的包
出于同樣的原因,我們也需要保障被安裝在基礎鏡像上的軟件包,也源自經過驗證和受信任的來源。
3. 最小化鏡像中的攻擊面
我們常說應用的受攻擊面與鏡像中已安裝的軟件包和庫的數量有關。通常,如果此類對象的數量較少,那么出現漏洞的機率也就越低。可見,我們應當在滿足應用程序運行時的基本要求的前提下,盡可能地保持鏡像的體積最小。理想狀況下,我們最好在一個應用程序容器中,僅保留一個應用程序。同時,您可以從如下方面入手:
- 刪除不必要的工具和軟件,包括:包管理器(如,yum和apt)、網絡工具、客戶端、以及鏡像中的shell和netcat(可用于創建反向的shell)等。
- 使用多階段(multi-stage)的Dockerfile,并從生產環境的鏡像中刪除各個用于軟件構建的組件。
- 為了減少威脅,請不要在容器中暴露不必要的網絡端口、套接字、以及運行不需要的服務(如SSH的守護程序等)。
- 與其選用帶有完整操作系統的鏡像,不如選擇alpine鏡像、臨時鏡像或專為容器優化了的操作系統。
4.不要在鏡像中留存信任憑據
所有的信任憑據都應該“遠離”鏡像和Dockerfile。包括SSL證書、密碼、令牌、以及API密鑰在內的各種機密信息,都應當被保存在外部,并通過容器編排引擎、或外部密鑰管理器,進行安全地掛載。目前,Hashicorp Vault工具,由AWS Secrets Manager、Kubernetes Secrets、Docker Secrets Management、以及CyberArk等提供的云端密鑰管理服務,都可以改善您在此方面的安全態勢。
5. 使用安全的私有或公共注冊表
企業通常擁有自己的基礎鏡像,其中包含了各種他們不想公開分發的專有軟件庫。為了確保鏡像能夠被托管在安全且受信的注冊表處,以防止未經授權的訪問,請使用具有可信根CA的TLS證書,并實施強身份驗證,以防范MITM(中間人)攻擊。
6.不要使用特權或root用戶,在容器中運行應用程序
這是容器化工作負載中最常見的配置錯誤。請牢記最低權限原則,創建一個應用程序的專用用戶,并使用它在容器內運行應用程序的對應進程。您也許會問為何不能用root用戶呢?其原因是:除了通過其帶有的額外元數據,來識別是否為容器的一部分,在容器中運行的進程,與在主機操作系統上運行的進程十分相似。而一旦容器中的root用戶有了UID和GID,那么它可以訪問、甚至修改其在宿主機上的文件。
注意,如果您沒有在Dockerfile中定義任何USER的話,那么容器就會以root用戶運行。
7. 在CI/CD中實施鏡像漏洞掃描
在為容器的構建和交付設計CI/CD時,請包含一個鏡像掃描方法,以識別那些由CVE公布到的知名漏洞。同時,請不要在沒有修復的情況下,部署任何可用的鏡像。常見的漏洞掃描工具包括:Clair、Synk、Anchore、AquaSec、Twistlock等。同時,AWS ECR和Quay.io等容器注冊表也需要配備各種相應的掃描方案。
8. 啟用AppArmor等內核安全配置文件
AppArmor是一個Linux安全模塊,可被用于保護操作系統、及其應用程序免受各種安全威脅。Docker通過提供默認配置文件的方式,允許程序訪問諸如:網絡訪問、內核功能、文件權限等有限的資源。該方法不但減少了潛在的攻擊面,而且提供了很好的深度防御。
9. 安全集中式的遠程日志記錄
通常,容器將所有內容記錄到標準輸出--STDOUT上。顯然,這些日志會因為中斷而丟失。因此,我們需要將日志安全地、以傳輸流的方式集中到一處,以供未來的審計和按需取證。當然,我們需要確保此類日志系統的安全性,以免敏感數據信息從日志中泄漏出去。
10. 部署運行時(Runtime)的安全監控
前面給出的九項安全建議,只是最大限度地減少了安全威脅,并不能完全阻止攻擊的發生。對此,我們仍然需要通過持續監控和記錄應用程序的行為,來及時檢測并發現任何可疑或惡意的活動。同時,我們還可以實施分層防御,對不同的監控范圍,部署不同的審計與容器保護工具。
可用于安全控制的開源工具
常言道:“工欲善其事,必先利其器”。為了簡化上述針對容器的安全加固,我在此為您羅列了如下六大開源和商業工具,以方便您按需采用:
- ??Docker-bench-security??– 屬于Docker的官方工具。作為由??CIS Benchmark??針對Docker提出的行業標準,它可以被用于審計容器的各種工作負載。
- ??Hadolint Linter for Dockerfile?? – 可以使用linter對Dockerfile進行靜態代碼分析。作為一種優秀實踐,linter可與各種流行的代碼編輯器和集成管道相整合。
- ??Clair?? – 是一種流行的應用容器靜態漏洞掃描工具。它會定期從各種漏洞數據庫中獲取元數據。其同類工具包括:??Anchore??、??Synk??、以及??Trivy??。
- ??OWASP Cheatsheet??– 該漏洞備忘錄來自備受安全專家歡迎的開放社區--OWASP。
- ??OpenSCAP for Container??– SCAP(Security Content Automation Protocol,安全內容自動化協議)是一個多用途的規范框架,可以支持自動化配置、漏洞和補丁檢查、技術控制的合規活動與安全測量等。它執行的是NIST各項標準。
- ??Sysdig Falco???– 隨著黑客的持續進步和新漏洞的不斷涌現,靜態掃描工具已顯得力不從心。我們需要能夠持續進行行為監控、以及基于AI/ML的高級引擎。而作為一種可用于實現運行時安全性的工具,Falco使用高效的eBPF去攔截各種調用與流量,并能實時進行監控和取證。
此外,您還可以選用AquaSec、Twistlock、Sysdig、Synk、以及Qualys等企業級安全工具和商業產品。
希望上述各種解決方案能夠真正為您抵御黑客攻擊,協助您及時發現當前系統中的異常狀態,以及為您的容器負載提供合理化的改進建議。
譯者介紹
陳峻 (Julian Chen),51CTO社區編輯,具有十多年的IT項目實施經驗,善于對內外部資源與風險實施管控,專注傳播網絡與信息安全知識與經驗;持續以博文、專題和譯文等形式,分享前沿技術與新知;經常以線上、線下等方式,開展信息安全類培訓與授課。
原文標題:Top 10 Ways To Secure Containers,作者:Anjul Sahu