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
































