在容器安全方面,有很多使用開源工具阻止安全災(zāi)難的故事,例如前不久發(fā)生的特斯拉 Kubernetes 集群入侵事件。容器的安全性一直是一件很棘手的事情,因此如何巧妙使用開源工具就成為一件重要的事情。
如果你已經(jīng)花了大量精力找到了最佳的應(yīng)用程序安全性測試工具,并確保你的應(yīng)用程序盡可能安全,那么你肯定不希望運行它的容器是不夠安全的。幸運的是,有一些商業(yè)版的容器安全產(chǎn)品可供選擇,但是有許多開源項目也很不錯。其中有許多項目側(cè)重于審計、跟蹤公共漏洞和通用披露數(shù)據(jù)庫(CVE)以及由 CIS 網(wǎng)絡(luò)安全智能系統(tǒng)、國家漏洞數(shù)據(jù)庫和其他機構(gòu)建立的安全基準(zhǔn)。這些工具會對容器鏡像進行掃描,并將掃描后的結(jié)果與這些已知的漏洞清單進行交叉比對。
通過使用自動化容器審計或者容器安全流程,可以幫助團隊在項目早期捕獲問題,從而為企業(yè)帶來巨大的好處。
目前有很多開源容器安全工具,這里列出了一些最好的、最成熟的、擁有廣大用戶群體的工具。
Docker Bench for Security(Docker 安全工作臺)
Docker Bench 是一個根據(jù)安全基準(zhǔn)對 Docker 容器進行審計的腳本。
該工具面向的是使用 Docker 社區(qū)版本進行容器管理的開發(fā)者,Docker Bench for Security 是一個根據(jù)通用的安全最佳實踐設(shè)計的開源腳本,用于對 Docker 容器進行安全審計。
Docker Bench 的測試基于行業(yè)的 CIS 基準(zhǔn),可以自動完成繁瑣的手工漏洞測試過程。
Docker 安全主管 Diogo Mónica 將其描述為“一個測試容器的容器”。你可以按照如下操作對容器進行初始化:
復(fù)制代碼
docker run -it --net host --pid host --userns host --cap-add audit_control -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST -v /var/lib:/var/lib -v /var/run/docker.sock:/var/run/docker.sock -v /usr/lib/systemd:/usr/lib/systemd -v /etc:/etc --label docker_bench_security docker/docker-bench-security
運行結(jié)果會將每個安全配置基準(zhǔn)的日志分為普通信息、警告信息以及通過信息。你可以直接在 Docker 容器中運行這個工具,也可以通過 Docker Compose 來克隆或者直接在你的 Docker 宿主機上運行這個腳本。
這個工具有一個缺點,它的輸出結(jié)果在機器可讀性上有所欠缺。社區(qū)有許多工具包實現(xiàn)了對 Docker Bench 的改進,比如,Docker Bench Test、drydock 以及 Actuary。
Clair
Clair 是一個 API 驅(qū)動的基于龐大的 CVE 數(shù)據(jù)庫的靜態(tài)容器安全分析工具。
Clair 是由 CoreOS 開發(fā)的靜態(tài)容器漏洞分析工具。在 Quay.io 上也可以使用這個工具,Quay.io 是一個公共容器注冊中心,是 Docker Hub 的一個 替代品。
Clair 從許多漏洞數(shù)據(jù)源獲取信息,比如 Debian 安全漏洞跟蹤庫、Ubuntu CVE 跟蹤庫以及 Red Hat 安全數(shù)據(jù)庫。由于 Clair 涵蓋了大量的 CVE 數(shù)據(jù)庫,所以它的審計是非常全面的。
Clair 首先會為容器鏡像中的特性列表建立索引。然后通過 Clair API,開發(fā)人員可以查詢與特定鏡像相關(guān)的漏洞數(shù)據(jù)庫。
你可以通過 Clair 入門文檔來開始使用 Clair。在 Kubernetes 集群上部署也是很簡單的:
復(fù)制代碼
git clone https://github.com/coreos/clair cd clair/contrib/helm cp clair/values.yaml ~/my_custom_values.yaml vi ~/my_custom_values.yaml helm dependency update clair helm install clair -f ~/my_custom_values.yaml
Clair 的一大特性就是它的靈活性。它允許你為一些行為添加自己的驅(qū)動。此外,通過單獨的 API 調(diào)用來審計特定的容器鏡像是一種漂亮的、機器驅(qū)動的替代方法,可以代替對大量的日志報告進行搜索的方法。
Cilium
Cilium 是一個內(nèi)核層的 API 感知網(wǎng)絡(luò)和安全工具。
Cilium 專注于解決安全網(wǎng)絡(luò)連接,與 Docker、Kubernetes 等 linux 容器平臺有良好的兼容性,它增加了安全可視化以及控制邏輯。
它基于 Linux 內(nèi)核技術(shù) BPF(以前被稱為 Berkeley packet filter)。其功能在底層進行實現(xiàn)的有趣之處在于,你可以直接應(yīng)用和更新 Cilium 安全策略,無需更改應(yīng)用程序代碼或容器配置。CoreOS 開發(fā) Cilium 的目的是為了響應(yīng)現(xiàn)代微服務(wù)開發(fā)和快速容器部署的易變生命周期。它可以與 Kubernetes 直接進行集成,你可以使用下面的命令進行部署:
復(fù)制代碼
$ kubectl create -f ./cilium.yaml clusterrole "cilium" created serviceaccount "cilium" created clusterrolebinding "cilium" created configmap "cilium-config" created secret "cilium-etcd-secrets" created daemonset "cilium" created $ kubectl get ds --namespace kube-system NAME DESIRED CURRENT READY NODE-SELECTOR AGE cilium 1 1 1 <none> 2m
Cilium 的周邊支持和開發(fā)社區(qū)非常棒。你能找到大量的指南和文檔、一個 Slack 頻道,甚至還有每周與項目維護者的聚會。
Anchore
Anchhore 是一個使用 CVE 數(shù)據(jù)庫和用戶定義策略檢查容器安全性的工具。
Anchore Engine 是一個分析容器鏡像的工具。不僅僅加入了 CVE 的安全漏洞報告,Anchore 引擎還可以使用自定義策略來對 Docker 鏡像進行評估。
不同策略會導(dǎo)致通過或失敗的結(jié)果。策略可以基于白名單 / 黑名單、安全憑證、文件內(nèi)容、配置類型或其他用戶提示。
Anchore 打包成 Docker 容器鏡像后,既可以獨立運行,也可以在 Kubernetes 這樣的容器編排平臺上運行。它也可以集成 Jenkins 和 GitLab 實現(xiàn) CI/CD。
使用 Anchore 命令行工具(CLI)是操作 Anchore 引擎的好方法。例如,你可以使用如下命令來查看鏡像內(nèi)容的詳細信息:
復(fù)制代碼
anchore-cli image content INPUT_IMAGE CONTENT_TYPE
再例如,你可以使用如下命令來對一個鏡像進行漏洞掃描:
復(fù)制代碼
anchore-cli image vuln docker.io/library/debian:latest os
Anchore 能夠輸出漏洞細節(jié)、威脅級別、CVE 標(biāo)識符和其他相關(guān)信息的列表。由于用戶定義的規(guī)則是通過 Anchore 云服務(wù)圖形用戶界面(GUI)創(chuàng)建的,所以它的操作類似于 SaaS。
OpenSCAP Workbench
OpenSCAP Workbench 是一個為各種平臺創(chuàng)建和維護安全策略的環(huán)境。
OpenSCAP 是一個 IT 管理員和安全審計員的生態(tài)系統(tǒng),其中包括許多開放的安全基準(zhǔn)指南、安全配置基準(zhǔn)和開源工具。
使用 Fedora、Red Hat Enterprise Linux、centos 或 Scientific Linux 的用戶可以將 OpenSCAP 工作臺安裝為 GUI 的形式,以便在虛擬機、容器和容器鏡像上運行掃描。你可以使用如下命令安裝 OpenSCAP 工作臺:
復(fù)制代碼
# yum install scap-workbench
如果要根據(jù) SCAP 策略指南和 CVE 來評估容器,請使用 OpenSCAP 附帶的 oscap-docker 程序。
OpenSCAP 以 NIST 認證的安全內(nèi)容自動化協(xié)議(SCAP)為核心,提供了許多機器可讀的安全策略。OpenSCAP 安全指南指出,該項目的目標(biāo)是允許多個組織通過避免冗余來有效地開發(fā)安全內(nèi)容。
由于 OpenSCAP 比列表中的其他工具應(yīng)用范圍更廣泛,所以對于希望為整個平臺創(chuàng)建安全策略的團隊來說,OpenSCAP 是一個很好的選擇。
Dagda
Dagda 是一個掃描 Docker 容器中漏洞、木馬、病毒和惡意軟件的工具。
Dagda 是又一個用于容器安全性靜態(tài)分析的工具。它的 CVE 來源包括 OWASP 依賴項檢查、Red Hat Oval 以及 Offensive Security 數(shù)據(jù)庫。
要使用 Dagda 掃描 Docker 容器,首先要建立一個包含漏洞數(shù)據(jù)的 Mongo 數(shù)據(jù)庫。之后,執(zhí)行此命令來分析單個 Docker 鏡像:
復(fù)制代碼
Python3 dagda.py check --docker_image jboss/wildfly
你可以在遠程運行它,或者不斷地調(diào)用它來監(jiān)視活動的 Docker 容器。結(jié)果輸出能夠顯示出漏洞的數(shù)量、嚴重性級別以及其他細節(jié),可以幫助開發(fā)者進行安全修復(fù)。
Dagda 的優(yōu)勢之一是它廣泛覆蓋了各種漏洞數(shù)據(jù)。這意味著你可以直接訪問大量最新的、全面的漏洞數(shù)據(jù)。同時,它也很靈活,你可以通過 CLI 命令行工具以及 REST API 來控制它。
Notary
Notary 是一個增強容器安全性的框架。
Notary 實際上是一個 Docker 的鏡像簽名框架,現(xiàn)在開源用于其他實現(xiàn)。Docker 開發(fā)了它,然后在 2017 年將其捐贈給了云原生計算基金會。
Notary 主要是用于職責(zé)分離的。使用 Notary,開發(fā)人員可以委派角色并在容器之間定義職責(zé)。該工具提供了服務(wù)端工具和客戶端工具,提供了一種內(nèi)容發(fā)布和驗證的加密安全方法。
如果要在本地部署 Notary,你需要先把代碼倉庫克隆到本地。之后使用 Docker Compose 來部署一個本地配置項:
復(fù)制代碼
$ docker-compose build $ docker-compose up -d $ mkdir -p ~/.notary && cp cmd/notary/config.json cmd/notary/root-ca.crt ~/.notary
它依賴于 The Update Framework 以及 Go 語言,可以驗證容器應(yīng)用程序鏡像的加密完整性。
Grafaes
Grafaes 是一個用于幫助管理內(nèi)部安全策略的元數(shù)據(jù) API。
Grafaes 可以幫助你創(chuàng)建自己的容器安全掃描項目。該容器安全工具是由 IBM 和谷歌于 2017 年底發(fā)布的。
開發(fā)人員可以使用 Grafaes 組件元數(shù)據(jù) API 來定義虛擬機和容器的元數(shù)據(jù)。IBM 的 Vulnerability Advisor 也集成到了該項目中。
如果需要參考一個可靠的案例研究,請參見 Shopify 是如何使用 Grafaes 管理 500,000 個容器鏡像的元數(shù)據(jù)的。與 Kritis 合作,該團隊對使用 Grafeas 元數(shù)據(jù)的 Kubernetes 集群實施安全策略管理。
Grafaes 能夠快速獲取容器元數(shù)據(jù),這有助于加快補救安全問題,減少漏洞被暴露以及被利用的窗口期。雖然 Grafaes 是開源的,但它是由大型軟件供應(yīng)商維護的,這對工具的長期支持是有好處的。
Sysdig Falco
Sysdig Falco 是一個可以提供深度容器可見性的行為活動監(jiān)視工具。
Falco 是一個 Kubernetes 感知安全審計工具,它是由 Sysdig 開發(fā)的,強調(diào)對容器、主機和網(wǎng)絡(luò)活動的行為監(jiān)視。使用 Falco,開發(fā)人員可以對其基礎(chǔ)設(shè)施進行持續(xù)檢查、異常檢測,并為任何類型的 Linux 系統(tǒng)調(diào)用設(shè)置警報通知。
Falco 文檔建議用戶將 Falco 作為 Docker 容器運行。你可以使用這些命令安裝它。安裝完成后,F(xiàn)alco 警報標(biāo)準(zhǔn)輸出如下所示:
復(fù)制代碼
stdout_output: enabled: true 10:20:05.408091526: Warning Sensitive file opened for reading by non-trusted program
通過 Falco 可以監(jiān)視 shell 何時在容器中運行、容器在哪里掛載、對敏感文件的意外讀取、出站網(wǎng)絡(luò)嘗試以及其他可疑調(diào)用。Sysdig 提供了更多的容器故障排查資料。
Banyanops Collector
Banyanops Collector 是一個 Docker 容器鏡像靜態(tài)分析框架。
Collector 是一個 Banyanops 提供支持的開源實用程序,它可以用來查看 Docker 容器中的鏡像文件。開發(fā)人員可以使用 Collector 收集容器數(shù)據(jù),執(zhí)行安全策略等等。
首先,Banyanops 既支持私有容器注冊中心,也可以作為 Docker Hub 上的容器運行。Banyanops 還提供 SaaS 產(chǎn)品,可以提供更深入的數(shù)據(jù)分析,因此,如果遇到功能受限的情況,你可能需要購買其服務(wù)。
其他優(yōu)秀開源工具
- Dockerscan:一個 Git 提交次數(shù)不多的安全漏洞掃描器。
- Batten:一個類似于 Docker Bench 的審計工具包,但是他們提供的支持并不活躍。
- BlackDuck Docker security:一個以 Web 服務(wù)形式構(gòu)建的容器鏡像安全掃描工具。遺憾的是,目前不建議以 Web 的形式使用該產(chǎn)品。
- Inspec:一個具有 Docker 容器測試功能的審核、測試框架。
具體情況,具體分析
由于容器化已經(jīng)發(fā)展成為一種流行的部署方式,因此最重要的是需要使用適當(dāng)?shù)陌踩刂苼碓鰪娺@些容器。值得慶幸的是,你會發(fā)現(xiàn)一個強大的開源安全解決方案生態(tài)系統(tǒng),這些解決方案是為許多不同的環(huán)境定制的。
這些工具的整體強度取決于檢查的深度。有效性還取決于 CVE 數(shù)據(jù)庫和基準(zhǔn)本身是否及時進行漏洞更新并發(fā)布新的最佳實踐。值得慶幸的是,各種工具現(xiàn)在正在努力減少零日漏洞的利用以及容器漏洞被利用的窗口期。
開發(fā)人員也會被那些具有更好體驗的工具所吸引,這些體驗更好的工具能夠減少無效日志以及重復(fù)數(shù)據(jù)。這類偏好只能通過反復(fù)試驗和試錯來確定,這取決于你的構(gòu)建活動和個人偏好。