在容器安全方面,有很多使用开源工具阻止安全灾难的故事,例如前不久发生的特斯拉 Kubernetes 集群入侵事件。容器的安全性一直是一件很棘手的事情,因此如何巧妙使用开源工具就成为一件重要的事情。
如果你已经花了大量精力找到了最佳的应用程序安全性测试工具,并确保你的应用程序尽可能安全,那么你肯定不希望运行它的容器是不够安全的。幸运的是,除了商业版的容器安全产品可供选择之外,还有许多开源项目也很不错。其中有许多项目侧重于审计、跟踪公共漏洞和通用披露数据库(CVE)以及由 CIS 网络安全智能系统、国家漏洞数据库和其他机构建立的安全基准。这些工具会对容器镜像进行扫描,并将扫描后的结果与这些已知的漏洞清单进行交叉比对。
通过使用自动化容器审计或者容器安全流程,可以帮助团队在项目早期捕获问题,从而为企业带来巨大的好处。
目前市面上有很多开源容器安全工具,这里列出了一些最值得推荐的、最成熟的、拥有广大用户群体的工具。
1 Docker Bench for Security(Docker 安全工作台)
Docker Bench 是一个根据安全基准对 Docker 容器进行审计的脚本。
该工具面向的是使用 Docker 社区版本进行容器管理的开发者,Docker Bench for Security 是一个根据通用的安全最佳实践设计的开源脚本,用于对 Docker 容器进行安全审计。
Docker Bench 的测试基于行业的 CIS 基准,可以自动完成繁琐的手工漏洞测试过程。
Docker 安全主管 Diogo Mónica 将其描述为“一个测试容器的容器”。你可以按照如下操作对容器进行初始化:
- 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
运行结果会将每个安全配置基准的日志分为普通信息、警告信息以及通过信息。你可以直接在 Docker 容器中运行这个工具,也可以通过 Docker Compose 来克隆或者直接在你的 Docker 宿主机上运行这个脚本。
这个工具有一个缺点,它的输出结果在机器可读性上有所欠缺。社区有许多工具包实现了对 Docker Bench 的改进,比如,Docker Bench Test、drydock 以及 Actuary。
2 Clair
Clair 是一个 API 驱动的基于庞大的 CVE 数据库的静态容器安全分析工具。
Clair 是由 CoreOS 开发的静态容器漏洞分析工具。在 Quay.io 上也可以使用这个工具,Quay.io 是一个公共容器注册中心,是 Docker Hub 的一个 替代品。
Clair 从许多漏洞数据源获取信息,比如 Debian 安全漏洞跟踪库、Ubuntu CVE 跟踪库以及 Red Hat 安全数据库。由于 Clair 涵盖了大量的 CVE 数据库,所以它的审计是非常全面的。
Clair 首先会为容器镜像中的特性列表建立索引。然后通过 Clair API,开发人员可以查询与特定镜像相关的漏洞数据库。
你可以通过 Clair 入门文档来开始使用 Clair。在 Kubernetes 集群上部署也是很简单的:
- 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 的一大特性就是它的灵活性。它允许你为一些行为添加自己的驱动。此外,通过单独的 API 调用来审计特定的容器镜像是一种漂亮的、机器驱动的替代方法,可以代替对大量的日志报告进行搜索的方法。
3 Cilium
Cilium 是一个内核层的 API 感知网络和安全工具。
Cilium 专注于解决安全网络连接,与 Docker、Kubernetes 等 Linux 容器平台有良好的兼容性,它增加了安全可视化以及控制逻辑。
它基于 Linux 内核技术 BPF(以前被称为 Berkeley packet filter)。其功能在底层进行实现的有趣之处在于,你可以直接应用和更新 Cilium 安全策略,无需更改应用程序代码或容器配置。CoreOS 开发 Cilium 的目的是为了响应现代微服务开发和快速容器部署的易变生命周期。它可以与 Kubernetes 直接进行集成,你可以使用下面的命令进行部署:
- $ 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 的周边支持和开发社区非常棒。你能找到大量的指南和文档、Slack 频道,甚至还有每周与项目维护者的聚会。
4 Anchore
Anchhore 是一个使用 CVE 数据库和用户定义策略检查容器安全性的工具。
Anchore Engine 是一个分析容器镜像的工具。不仅仅加入了 CVE 的安全漏洞报告,Anchore 引擎还可以使用自定义策略来对 Docker 镜像进行评估。
不同策略会导致通过或失败的结果。策略可以基于白名单 / 黑名单、安全凭证、文件内容、配置类型或其他用户提示。
Anchore 打包成 Docker 容器镜像后,既可以独立运行,也可以在 Kubernetes 这样的容器编排平台上运行。它也可以集成 Jenkins 和 GitLab 实现 CI/CD。
使用 Anchore 命令行工具(CLI)是操作 Anchore 引擎的好方法。例如,你可以使用如下命令来查看镜像内容的详细信息:
- anchore-cli image content INPUT_IMAGE CONTENT_TYPE
再例如,你可以使用如下命令来对一个镜像进行漏洞扫描:
- anchore-cli image vuln docker.io/library/debian:latest os
Anchore 能够输出漏洞细节、威胁级别、CVE 标识符和其他相关信息的列表。由于用户定义的规则是通过 Anchore 云服务图形用户界面(GUI)创建的,所以它的操作类似于 SaaS。
5 OpenSCAP Workbench
OpenSCAP Workbench 是一个为各种平台创建和维护安全策略的环境。
OpenSCAP 是一个 IT 管理员和安全审计员的生态系统,其中包括许多开放的安全基准指南、安全配置基准和开源工具。
使用 Fedora、Red Hat Enterprise Linux、CentOS 或 Scientific Linux 的用户可以将 OpenSCAP 工作台安装为 GUI 的形式,以便在虚拟机、容器和容器镜像上运行扫描。你可以使用如下命令安装 OpenSCAP 工作台:
- # yum install scap-workbench
如果要根据 SCAP 策略指南和 CVE 来评估容器,请使用 OpenSCAP 附带的 oscap-docker 程序。
OpenSCAP 以 NIST 认证的安全内容自动化协议(SCAP)为核心,提供了许多机器可读的安全策略。OpenSCAP 安全指南指出,该项目的目标是允许多个组织通过避免冗余来有效地开发安全内容。
由于 OpenSCAP 比列表中的其他工具应用范围更广泛,所以对于希望为整个平台创建安全策略的团队来说,OpenSCAP 是一个很好的选择。
6 Dagda
Dagda 是一个扫描 Docker 容器中漏洞、木马、病毒和恶意软件的工具。
Dagda 是又一个用于容器安全性静态分析的工具。它的 CVE 来源包括 OWASP 依赖项检查、Red Hat Oval 以及 Offensive Security 数据库。
要使用 Dagda 扫描 Docker 容器,首先要建立一个包含漏洞数据的 Mongo 数据库。之后,执行此命令来分析单个 Docker 镜像:
- python3 dagda.py check --docker_image jboss/wildfly
你可以在远程运行它,或者不断地调用它来监视活动的 Docker 容器。结果输出能够显示出漏洞的数量、严重性级别以及其他细节,可以帮助开发者进行安全修复。
Dagda 的优势之一是它广泛覆盖了各种漏洞数据。这意味着你可以直接访问大量最新的、全面的漏洞数据。同时,它也很灵活,你可以通过 CLI 命令行工具以及 REST API 来控制它。
7 Notary
Notary 是一个增强容器安全性的框架。
Notary 实际上是一个 Docker 的镜像签名框架,现在开源用于其他实现。Docker 开发了它,然后在 2017 年将其捐赠给了云原生计算基金会。
Notary 主要是用于职责分离的。使用 Notary,开发人员可以委派角色并在容器之间定义职责。该工具提供了服务端工具和客户端工具,提供了一种内容发布和验证的加密安全方法。
如果要在本地部署 Notary,你需要先把代码仓库克隆到本地。之后使用 Docker Compose 来部署一个本地配置项:
- $ 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 语言,可以验证容器应用程序镜像的加密完整性。
8 Grafaes
Grafaes 是一个用于帮助管理内部安全策略的元数据 API。
Grafaes 可以帮助你创建自己的容器安全扫描项目。该容器安全工具是由 IBM 和谷歌于 2017 年底发布的。
开发人员可以使用 Grafaes 组件元数据 API 来定义虚拟机和容器的元数据。IBM 的 Vulnerability Advisor 也集成到了该项目中。
如果需要参考一个可靠的案例研究,请参见 Shopify 是如何使用 Grafaes 管理 500,000 个容器镜像的元数据的。与 Kritis 合作,该团队对使用 Grafeas 元数据的 Kubernetes 集群实施安全策略管理。
Grafaes 能够快速获取容器元数据,这有助于加快补救安全问题,减少漏洞被暴露以及被利用的窗口期。虽然 Grafaes 是开源的,但它是由大型软件供应商维护的,这对工具的长期支持是有好处的。
9 Sysdig Falco
Sysdig Falco 是一个可以提供深度容器可见性的行为活动监视工具。
Falco 是一个 Kubernetes 感知安全审计工具,它是由 Sysdig 开发的,强调对容器、主机和网络活动的行为监视。使用 Falco,开发人员可以对其基础设施进行持续检查、异常检测,并为任何类型的 Linux 系统调用设置警报通知。
Falco 文档建议用户将 Falco 作为 Docker 容器运行。你可以使用这些命令安装它。安装完成后,Falco 警报标准输出如下所示:
- stdout_output: enabled: true 10:20:05.408091526: Warning Sensitive file opened for reading by non-trusted program
通过 Falco 可以监视 shell 何时在容器中运行、容器在哪里挂载、对敏感文件的意外读取、出站网络尝试以及其他可疑调用。Sysdig 提供了更多的容器故障排查资料。
10 Banyanops Collector
Banyanops Collector 是一个 Docker 容器镜像静态分析框架。
Collector 是一个 Banyanops 提供支持的开源实用程序,它可以用来查看 Docker 容器中的镜像文件。开发人员可以使用 Collector 收集容器数据,执行安全策略等等。
首先,Banyanops 既支持私有容器注册中心,也可以作为 Docker Hub 上的容器运行。Banyanops 还提供 SaaS 产品,可以提供更深入的数据分析,因此,如果遇到功能受限的情况,你可能需要购买其服务。
11 其他优秀开源工具
Dockerscan:一个 Git 提交次数不多的安全漏洞扫描器。
Batten:一个类似于 Docker Bench 的审计工具包,但是他们提供的支持并不活跃。
BlackDuck Docker security:一个以 Web 服务形式构建的容器镜像安全扫描工具。遗憾的是,目前不建议以 Web 的形式使用该产品。
Inspec:一个具有 Docker 容器测试功能的审核、测试框架。
12 具体情况,具体分析
由于容器化已经发展成为一种流行的部署方式,因此最重要的是需要使用适当的安全控制来增强这些容器。值得庆幸的是,你会发现一个强大的开源安全解决方案生态系统,这些解决方案是为许多不同的环境定制的。
这些工具的整体强度取决于检查的深度。有效性还取决于 CVE 数据库和基准本身是否及时进行漏洞更新并发布新的最佳实践。值得庆幸的是,各种工具现在正在努力减少零日漏洞的利用以及容器漏洞被利用的窗口期。
开发人员也会被那些具有更好体验的工具所吸引,这些体验更好的工具能够减少无效日志以及重复数据。这类偏好只能通过反复试验和试错来确定,这取决于你的构建活动和个人偏好。