数人云:随着越来越多的企业将生产工作负载迁移到容器当中,关于Docker的安全性,成了普遍关注的问题。
这是一个简单却又没有答案的问题,不要试图用二进制的方式去考虑Docker安全性,最好深入地去了解Docker的工作细节,以了解Docker安全模式的运行方式。
先来看看Docker是如何工作的,以及这对容器安全意味着什么。
Docker有两个关键部分:Docker Engine、Docker Hub。后者是Docker的官方注册中心,这两个部分都非常重要,需要了解每个组件的组成,哪些需要被保护以及如何操作,先从Docker Engine引擎说起:
〓 Docker Engine
Docker Engine 从容器镜像文件中运行容器,以及管理网络和存储容量,保护Docker Engine需要从两个方面——Namespaces 和 Control Groups。
Namespaces是Docker从Linux内核继承的特性,将容器进行隔离,这样容器中的每个进程都无法看到相邻容器中运行的进程。
最初,Docker容器默认是根用户运行,但自V1.10依赖,Docker支持Namespaces允许以非Root用户的身份运行容器,但因其实关闭的,所以在使用之前需要激活。
Docker中支持Control Groups或Cgroups,允许设置CPU、内存、网络和Block IO的限制,容器默认可以使用无限数量的系统资源,所以设置限制非常重要,否则整个系统可能会受到Hungry 容器的影响。
除了Namespaces和Control Groups外,Docker Engine还可以通过使用SELinux和AppArmor等附加工具进一步加强。
SELinux为内核提供访问控制,根据用户为主机设置的策略,可以基于在容器中运行的流程类型或级别来管理访问,基于此,它可以启动或限对主机的访问。
AppArmor在主机上运行的每个进程都有一个安全配置文件,定义了流程可以利用的资源,Docker将默认配置文件应用到流程中,同时用户也可以应用自定义文件。
Similar与AppArmor类似,使用安全配置文件限制进程调用的数量,这是Docker Engine提供的基于Linux的内核安全特性列表。
〓 Docker Hub
虽然Docker Engine可以对容器进行管理,但它需要Docker栈的另外一半来拉取容器镜像,即Docker Hub容器注册表,存储和共享着容器镜像。
任何人都可以创建容器镜像,并将其公开供人下载,这既是一件好事,但同时也是一件坏事,好是因为支持开发者之间的协作,只需点击即可容易地将操作系统或应用实例化,但如果下载一个具有脆弱性的公共容器镜像,就会很糟糕。
根据经验法则,下载官方存储库,大多数常用工具都可以使用,并且不从未知的作者那里下载存储库,最重要的是,每个下载的容器镜像都应该扫描到漏洞。
对于私有存储库的用户,Docker Hub将扫描下载的容器镜像,它可以扫描一些免费的存储库,而后如果将扫描作为一个附加组件的话,需要付费。
Docker Hub并不是Docker容器的唯一注册服务,其他受欢迎的注册中心包括:Quay、AWS ECR、和GitLab Container Registry,这些工具也具备扫描的功能,另外Docker Trusted Registry(DTR)可以在付费后,安装在防火墙之后。
Docker是一个错综复杂的有着各种移动和静态部件的网络,显然插入这些安全工具中的任何一个都不会立即使整个堆栈安全,在所以层面上,都需要结合这些方法来确保Docker的安全。
因此,下次有人问Docker是否安全时,应该反问他们,是指的Docker的哪一个部分?然后,向其解释影响该层的各种安全注意事项。
尽管上面的安全功能为Docker Engine和Docker Hub提供了基本的保护,但它们缺乏专用容器安全工具的强大功能,像Twistlock这样的工具可以完全保护你的Docker栈,它超越了任何一个部分,并且可以让用户对系统有一个整体的看法,下面介绍一些Docker 安全工具:
在生态系统中有非常多的Docker安全工具,这里有一个全面的Docker安全工具列表供以参考。
Docker安全工具的索引
BlackDuck Docker security
Docker capabilities and resource quotas
Docker-bench security
1 Anchore Navigator
授权:商用,一些服务是免费使用的。
场景:预生产分析、漏洞新闻提要。
Anchore Navigator提供了一项免费服务:可以对Docker镜像进行深度检查。还可以探索其丰富的剖析公共映像库,充分了解其内容、构建过程和发现CVE威胁,以及已知修复相关的链接。
可以对自己的镜像进行深度分析,并订阅您经常使用的镜像,以便在升级到商业版本时接收安全警告。
2 AppArmor
授权:开源。
场景:运行时保护、强制访问控制(MAC)。
AppArmor让管理员为系统中的每个程序分配一个安全概要文件:文件系统访问、网络功能、链接和执行规则等等。
它是一个强制性的访问控制(或MAC)系统,防止任何被禁止的行为发生,同时还可报告违反概要文件的访问尝试等。
只需要了解概要文件的语法,并可以根据喜欢的编辑器去编写AppArmor规则。
Docker context:Docker可以自动生成和加载一个默认的文件,用于名为docker-default AppArmor的容器,可以为容器或其中的应用创建特定的安全配置文件。
3 AquaSec
授权:商用。
场景:预生产分析、运行时保护、法规遵循和审核等。
AquaSec为容器设计的商业安全套件,功能包括:安全审计、容器镜像验证、运行时保护、自动策略学习或入侵预防。
4 BlackDuck Docker Security
主页:https://www.blackducksoftware.com
授权:商用。
场景:预生产分析、漏洞报告、许可/法律风险。
Black Duck Hub专门负责容器库存和报告镜像库存,将已知的安全漏洞映射到镜像索引和跨项目风险报告。可以轻松地查明导致安全风险的特定库、软件包或二进制文件,自动提供已知修复的列表。
5 Cilium
授权:开源。
场景:http层网络安全性、网络层安全性。
Cilium在容器应用之间提供透明的网络安全性。基于一种称为eBPF的新Linux内核技术,允许根据容器/pod身份定义并执行网络层和http层安全策略。
Cilum利用BPF执行核心数据路径过滤、管理、监视和重定向。这些BPF功能可以在任何Linux4.8.0内核版本或更新版本中使用。
6 CoreOS Clair
主页:https://coreos.com/clair/docs/latest/
授权:开源。
场景:预生产分析、漏洞新闻提要。
Clair是一个开源项目,用于静态分析容器中的漏洞(目前支持AppC和Docker)。定期从一组配置的CVE源中刷新其漏洞数据库,对可用的容器映像进行仔细检查,并对安装的软件包进行索引。如果检测到任何不安全的应用,它可以警告或阻止部署到生产。
由于Clair的镜像分析是静态的,容器永远不需要实际执行,所以可以在系统中运行之前检测到安全威胁。Clair是CoreOS Quay容器注册中心的安全引擎。
7 Docker Capabilities & Resource Quotas
授权:开源。
场景:运行时保护、资源保护。
资源滥用和拒绝服务是一个经常被忽视的问题,但在拥有大量软件实体竞争主机资源的环境中,这是一个切实存在的安全问题,所以不应该忘记已经与操作系统和Docker引擎捆绑在一起的基本安全措施。
Control Groupscgroups)是Linux内核的一个特性,允许您限制访问进程和容器对CPU、RAM、IOPS和网络等系统资源的限制。
允许将完整的根权限分解为多个分割权限,因此可以从根帐户中删除特定的功能,或者在更细粒度的级别上增加用户帐户的功能。
8 Docker-bench security
主页:https://github.com/docker/docker-bench-security
授权:开源。
场景:合规审计。
Docker用于安全的工作台是一个元脚本,用于检查生产中部署Docker容器的数十种常见的最佳实践。
此脚本很方便地打包为Docker容器,只需在其主页上复制和粘贴一行代码,就可以立即看到Docker容器和运行Docker引擎的主机(Docker CE或Docker Swarm)的250个检查结果。Docker Bench测试的灵感来自于CIS Docker Community Edition v1.1.0。
9 Dockscan
主页:https://github.com/kost/dockscan
授权:开源。
场景:合规审计。
简单的Ruby脚本,用于分析Docker安装和运行容器,既针对本地主机,也针对远程主机。
安装和运行只需一个命令即可,并且会生成HTML报告文件。Dockscan reports配置了资源限制,若容器生成了太多的进程,或者有大量修改过的文件,或者Docker主机允许容器直接将流量转发到主机网关,即可命名几个检查。
10 Sysdig Falco
主页:https://www.sysdig.org/falco/
授权:开源。
场景:运行时报警、取证。
Sysdig Falco是一种开源的行为监测应用,旨在检测基于其技术的异常活动。Sysdig Falco在任何Linux主机上都是一种入侵检测系统。
Falco是一种与众不同的审计工具,它在用户空间中运行,使用内核模块来拦截系统调用,而其他类似的工具在内核级执行系统调用过滤/监视。用户空间实现的优点是能够与Docker、Docker Swarm、Kubernetes、Mesos等外部系统集成,并导入其资源知识和标签。
Docker上下文:Falco支持特定于容器的上下文。可以监视容器的行为,不必修改它们。定制规则的创建很容易掌握,默认的规则文件以正常的默认值填充。
11 HashiCorp Vault
主页:https://www.vaultproject.io/
授权:免费企业版。
场景:安全容器的凭证存储,信任管理。
Hashicorp的密码库是用于管理密码的高级套件:密码、Ssl/Tls证书、API密钥、访问令牌、SSH证书等等。支持基于时间的 Secrets租赁、细粒度的 Secrets访问、新Secrets的生成、关键的滚动(更新密钥,而不使用旧的密钥生成的秘密)等等。
Vaults Keeps保存了详细的审计日志,记录每个用户/实体执行的所有 Secrets和访问及操作,因此操作人员可以很容易地跟踪任何可疑的交互。
Docker上下文:在新的微服务和容器环境中,安全的分发和可跟踪性是一个核心问题,在此环境中,软件实体不断地被派生和删除。Vaults本身可以作为Docker容器进行部署。
12 NeuVector
授权:商用。
场景:运行时保护、遵从性和审计。
NeuVector专注于运行时的实时安全保护。自动发现应用程序、容器和服务的行为,以及与其他Linux Id类似方式检测安全升级和其他威胁。NeuVector“强制”容器部署在每个物理主机上,并完全访问本地的Docker守护进程,所使用的内部技术在公开可访问的文档中并没有详细地详细说明。
NeuVector的目标是非侵入式、插装式安全套件、自动发现运行的容器以及它们的默认行为,帮助和建议操作人员设计他们的基础设施安全配置文件。
13 Notary
主页:https://github.com/docker/notary
授权:开源。
用例:可信的映像库、信任管理和可验证性。
镜像伪造和篡改是基于文档的部署的一个主要安全问题,Notary是一种发布和管理受信任的内容集合的工具,可以通过与Linux系统中提供的软件存储库管理工具类似的方式批准可信发布和创建签名的集合。
一些Notary目标包括保证图像的新鲜度(大部分是最新的内容,避免已知的漏洞),用户之间的信任委托,或可信的分布在不可信的镜像或传输通道上。
14 OpenSCAP
授权:开源。
场景:法规遵循和审核,认证
OpenSCAP提供了一套自动化的审计工具,以检查应用中的配置和已知的漏洞,遵循了Nist认证的安全内容自动化协议(SCAP)。
可以创建自己的自定义规则,并定期检查部署在公司中的任何软件是否严格遵守规则。
这些工具集不仅关注于安全性本身,还提供了测试和报告。
Docker上下文:OpenSCAP套件提供了一个特定于docdocker的工具——Oscap-Docker,来审计镜像,同时评估运行的容器和云端镜像。
15 Remnux
许可:开源。
场景:取证。
基于Ubuntu的安全发行版。REMnux是一个免费的Linux工具包,帮助恶意应用分析人员使用逆向工程的应用,通常称为取证。系统绑定了大量预先安装的分析和安全工具:Wireshark, ClamAV, Tcpextract, Rhino Debugger, Sysdig, Vivisect。
16 SELinux
授权:开源。
场景:运行时保护、强制访问控制(MAC)。
SELinux是Linux内核安全模块。也是一个强制性的访问控制系统。从强制访问控制到强制性的完整性控制、基于角色的访问控制(RBAC)和类型强制架构。
Docker上下文:类似于AppArmor,SELinux提供了一层额外的访问策略,并在主机和容器应用之间进行隔离。
17 Seccomp
授权:开源。
场景:运行时保护、强制访问控制(MAC)。
Seccomp是Linux内核中的一个沙箱化工具,可以将其看做基于规则的防火墙,但对于系统调用,使用Berkeley包过滤(BPF)规则来过滤Syscall API,并控制它们的处理方式。
有了Seccomp,可以选择哪些系统是禁止的,哪些是允许的,如,您可以禁止在容器内进行文件权限操作。
18 Sysdig
许可证:开放源码,商业产品建立在免费技术之上。
场景:异常行为调试,取证。
Sysding是针对Linux系统的全系统的探索、故障排除和调试工具。它记录任何进程所做的所有系统调用,允许系统管理员在操作系统或运行在它上的任何进程中查找BUG。
19 Tenable Flawcheck
主页:https://www.tenable.com/flawcheck
授权:商用。
场景:预生产分析、漏洞新闻提要。
与此列表中的其他商业工具一样,缺陷检查可以存储容器映像,并在它们构建之前进行扫描,然后才能推到生产环境。缺陷检查利用了漏洞/Nessus的技术和数据库漏洞,恶意软件和入侵载体,并将其调整为容器化和敏捷/CD的环境。
20 Twistlock
授权:商用。
场景:预生产分析、运行时保护、法规遵循和审核等。
用于支持容器化环境的商业安全套件:漏洞管理、访问控制、分析和对安全标准遵从性的取证。
Twistlock与CI/CD集成,为像Jenkins或TeamCity和可调用的Webhooks这样的工具提供原生插件,这样即可为每一个构建和测试环境触发索引和扫描过程。
Docker是一个错综复杂的有着各种移动和静态部件的网络,显然插入这些安全工具中的任何一个都不会立即使整个堆栈安全,在所有层面上,都需要将这些工具结合起来确保Docker的安全。