十个优秀开源Docker&Kubernetes安全扫描工具,提升容器安全性!

Kubernetes(k8s)是个优一种目前流行的开源容器编排系统 ,可以自动部署、秀开扩展和管理容器化工作负载。全扫器安全性Kubernetes提供了容器自修复、描工自动扩展和服务发现的具提功能,但是升容,也存在一些固有的个优安全风险  。Docker 是秀开一个容器平台 ,用于构建、全扫器安全性部署和管理应用程序。描工Docker容器的高防服务器具提轻量、可移植和可扩展特性为应用程序的升容开发和交付带来了巨大的便利 ,特别是个优在微服务架构应用上 ,是秀开许多开发者和组织的首选 。然而  ,全扫器安全性随着容器化的广泛应用 ,Docker也面临着日益复杂和严峻的容器安全挑战。

本文主要介绍k8s和Docker所面对的安全性问题,建站模板并推荐几款开源免费容器安全工具。

Kubernetes的安全性问题

(1)集群安全

集群安全包括通过启用认证、授权和加密来保护控制组件,如API服务器 、etcd和Kubernetes控制器管理程序(Kubernetes controller manager)等 。

(2)节点安全

节点安全主要是指正确配置网络和保护Kubernetes运行时环境,包括删除不必要的用户帐户 、确保应用访问的合规性。

(3)应用程序安全

应用程序安全意味着要对pod进行保护,在Kubernetes中 ,pod是用于运行应用程序的模板下载容器 。保护这些应用程序的前提是保护pod。Kubernetes提供了多个安全特性来帮助保护应用程序  。这些特性可用于限制资源访问 、实施网络策略 ,并支持容器之间的安全通信。

Docker容器的安全问题

(1)镜像污染

目前Docker Hub上面有着数量众多的第三方上传镜像,这些镜像质量参差不齐 。在这其中  ,不排除有黑客故意上传包含了恶意程序的镜像 ,免费模板并伪装成业务镜像供用户下载使用 。当用户误用此类镜像启动容器时,无疑会导致容器被入侵 。因此 ,用户必须对这些镜像进行扫描甄别 ,以保证容器所使用的镜像是可受信任的 ,尽可能不使用非信任的第三方镜像。

(2)网络攻击

Docker默认使用bridge网络,该网络会创建一个虚拟网桥 ,连接在同一个网桥之间的容器可以互相访问。当某个容器被入侵时 ,源码下载黑客有可能顺着网络访问到宿主机中的其他容器 。同时 ,攻击者也可以通过DDos等方式,攻击容器的服务来耗尽主机的资源  ,从而引起整个宿主机的崩溃。

(3)内核攻击

当黑客获取到容器权限时,由于共享内核的缘故 ,理论上可通过对内核的攻击来达到控制或影响主机的地步  。

(4)操作不当

有些操作不当容易使容器出现漏洞 ,香港云服务器例如:

在启动容器时将主机的根目录映射到容器中;在启用容器时使用特权模式——privileged ,此时Docker容器允许可以访问主机上的所有设备 ,并可以获取大量设备文件的访问权限。

(5)针对Docker Daemon的攻击

Docker使用的是C/S架构  ,作为服务端的Docker Daemon会接收客户端通过CLI或者REST API发送的命令,并执行对容器的相应操作  。但请求不一定都是由可信任的用户发起的 ,攻击者可能通过伪造请求的方式 ,来达到欺骗Daemon端执行危险的操作。

(6)Docker漏洞攻击

Docker本身属于应用程序 ,不可避免地会有出现代码的漏洞,这可能导致程序受到攻击。

综上所述  ,要确保容器安全,涉及设备 、系统 、网络、镜像、应用、操作等各个层次。其中 ,容器本身的安全往往容易容易被忽略  ,下面内容主要推荐一些对保护Kubernetes集群和Docker容器有用的开源工具 ,有助于Docker 镜像的静态扫描 、安全审计 、加固 Kubernetes 集群和实现运行时安全性 。

1.Trivy

https://github.com/aquasecurity/trivy

Trivy是一个全面且多功能的安全扫软件 。Trivy包含拥有查找安全问题的扫描器,并将目标定位在可以找到这些问题的地方  。可用于查找容器 、Kubernetes、代码存储库、云等当中存在的漏洞 、错误配置 、密码泄露  、SBOM等问题 。Trivy支持大多数流行的编程语言,支持跨平台操作系统。

Trivy支持扫描的对象包括 :

容器镜像文件系统Git仓库(远程)虚拟机镜像KubernetesAWS

Trivy能够发现的问题包括:

使用中的操作系统包和软件依赖关系(SBOM)已知漏洞(CVEs)IaC问题和错误配置敏感信息和秘密软件许可信息

在执行Trivy扫描之后,将得到一个漏洞列表 ,包括漏洞的严重性和CVE编号 。

实际的安装和使用如下:

(1)安装

使用Homebrew for MacOS and Linux 安装 :

复制brew install trivy docker run aquasec/trivy1.2.

或者使用脚本安装:

复制curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.47.01.

也可以基于源码安装:

复制git clone --depth 1 --branch v0.47.0 https://github.com/aquasecurity/trivy cd trivy go install ./cmd/trivy1.2.3.

(2)扫描容器镜像

复制docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy:0.47.0 image python:3.4-alpine1.

扫描结果如下 :

2.Docker Bench for Security

https://github.com/docker/docker-bench-security

Docker Bench for Security是一个Docker安全相关的命令集 ,用于自动检查在生产环境中部署Docker容器的数十种常见最佳实践 。

使用以下脚本可以从本机运行:

复制git clone https://github.com/docker/docker-bench-security.git cd docker-bench-security sudo sh docker-bench-security.sh1.2.3.

或者基于Docker执行:

复制docker run --rm --net host --pid host --userns host --cap-add audit_control \ -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \ -v /etc:/etc:ro \ -v /lib/systemd/system:/lib/systemd/system:ro \ -v /usr/bin/containerd:/usr/bin/containerd:ro \ -v /usr/bin/runc:/usr/bin/runc:ro \ -v /usr/lib/systemd:/usr/lib/systemd:ro \ -v /var/lib:/var/lib:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --label docker_bench_security \ docker-bench-security1.2.3.4.5.6.7.8.9.10.11. 3.Clair

https://github.com/quay/clair

Clair是一个用于静态分析Docker和appc容器中的漏洞的开源项目  。该工具有多种部署模式 ,最适合高可伸缩性和可用性。Clair 支持REST api,并提供HTML扫描报告。他还可以与Docker Registry集成以自动提供漏洞报告  。

Clair 目前的版本v4使用ClairCore库作为其检查内容和报告漏洞的引擎 。在较高的层次上 ,可以将Clair视为ClairCore库中提供的功能的服务包装器  。Clair V4的架构如下图所示 :

详细使用方式可以参考官方文档:https://quay.github.io/clair/howto/getting_started.html

4.Kube-bench

https://github.com/aquasecurity/kube-bench

CIS Benchmarking 是保护IT系统和数据的全球公认标准 ,它提供了一系列的指导手册来保护容易受到网络攻击的操作系统、软件和网络 。

Kube-bench是一个开源工具 ,用于检查Kubernetes是否按照CIS Kubernetes基准(包含一组Kubernetes安全最佳实践)来优化部署 。因此 ,当仅为CIS基准测试目的需要扫描时 ,kube-bench是最好的。

运行kube-bench有多种方法 。可以在pod中运行kube-bench ,但它需要访问主机的PID命名空间以检查正在运行的进程,以及访问主机上存储配置文件和其他文件的某些目录。GitHub存储库包含特定于云的 job-*.yaml 文件 ,kube-bench将根据机器上运行的Kubernetes版本自动决定运行哪个测试集。

例如  :

复制$ kubectl apply -f job.yaml job.batch/kube-bench created $ kubectl get pods NAME READY STATUS RESTARTS AGE kube-bench-j76s9 0/1 ContainerCreating 0 3s # Wait for a few seconds for the job to complete $ kubectl get pods NAME READY STATUS RESTARTS AGE kube-bench-j76s9 0/1 Completed 0 11s # The results are held in the pods logs kubectl logs kube-bench-j76s9 [INFO] 1 Master Node Security Configuration [INFO] 1.1 API Server ...1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.

具体可以参考相关文档 :https://github.com/aquasecurity/kube-bench/blob/main/docs/running.md

5.kubeaudit

https://github.com/Shopify/kubeaudit

kubeaudit是一个可以针对常见的安全控制对Kubernetes的部署进行审计的开源工具,比如:

以非root用户运行使用只读的根文件系统放弃易受攻击的能力,不要添加新的不要特权运行

kubeaudit的Brewhome安装如下 :

复制kubeaudit all -f "/path/to/manifest.yml"1.

Kubeaudit 可以在三种不同的模式下运行:manifest、cluster和local  。它还可以自动修复清单,这使它有别于其他竞争对手。

manifest模式运行—在该模式下  ,需要提供相关Kubernetes资源的manifest文件 。

例如:

复制kubeaudit all -f "/path/to/manifest.yml"1.

输出结果:

复制$ kubeaudit all -f "internal/test/fixtures/all_resources/deployment-apps-v1.yml" ---------------- Results for --------------- apiVersion: apps/v1 kind: Deployment metadata: name: deployment namespace: deployment-apps-v1 -------------------------------------------- -- [error] AppArmorAnnotationMissing Message: AppArmor annotation missing. The annotation container.apparmor.security.beta.kubernetes.io/container should be added. Metadata: Container: container MissingAnnotation: container.apparmor.security.beta.kubernetes.io/container -- [error] AutomountServiceAccountTokenTrueAndDefaultSA Message: Default service account with token mounted. automountServiceAccountToken should be set to false or a non-default service account should be used. -- [error] CapabilityShouldDropAll Message: Capability not set to ALL. Ideally, you should drop ALL capabilities and add the specific ones you need to the add list. Metadata: Container: container Capability: AUDIT_WRITE ...1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.

另外,还有集群模式 :

复制kubeaudit all1.

本地模式:

复制kubeaudit all -f "/path/to/config" br1.2.

此外 ,kubeaudit有多个审计配置文件 ,包括外观  ,能力  ,限制 ,特权 ,rootfs, seccomp, netpols和asat 。

6.Kubescape

https://github.com/kubescape/kubescape

Kubescape是一个开源的Kubernetes安全平台 ,适用于IDE、CI/CD管道和集群  。它的功能包括风险分析 、安全性、合规性和错误配置扫描 ,为Kubernetes用户和管理员节省了宝贵的时间、精力和资源 。

安装 :

复制curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash1.

执行扫描:

复制kubescape scan --verbose1.

结果如下

7.Kube-hunter

https://github.com/aquasecurity/kube-hunter

kube-hunter是一个用Python开发的开源渗透测试工具,用于在Kubernetes集群中寻找安全漏洞 。它支持编写可以在本地机器 、集群内部以及主动和被动模式下远程执行的自定义模块 。

在活动模式下 ,kube-hunter可以发现任何漏洞  ,还可以将kube-hunter作为模拟攻击工具在staging 环境中运行 。

安装和使用方式如下:

复制pip install kube-hunter # Installing Kube-hunter. kube-hunter --remote some.node.com # Running remotely. kube-hunter --cidr 192.168.0.0/24. # Network Scanning. kube-hunter --remote some.domain.com --active # Active Mode. kube-hunter --list --active # List of test cases. kube-hunter --remote some.node.com --json # Json output kube-hunter --k8s-auto-discover-nodes --kubeconfig "/path/config"1.2.3.4.5.6.7. 8.Cilium

https://github.com/cilium/cilium

Cilium是一个网络安全检测项目 ,提供基于eBPF的网络可观察性和安全性解决方案 。它与Docker和Kubernetes兼容,允许在不更改应用程序代码或容器配置的情况下应用安全策略。

9.Syft and Grype

https://github.com/anchore/syft

https://github.com/anchore/grype

Syft是一个基于Go开发的CLI工具库 ,用于从容器映像和文件系统生成软件物料清单(SBOM) 。Grype是一个针对容器映像和文件系统的漏洞扫描工具 。当Syft与Grype等扫描工具一起搭配使用时 ,可以用于检测系统漏洞或异常 。

Syft安装 :

复制curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin1.

Grype安装:

复制curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin1.

具体使用  ,可参考官方文档 。

10.Dockle

https://github.com/goodwithtech/dockle

Dockle是一个基于遵循CIS(互联网安全中心)Docker基准 ,并按照最佳实践构建安全的Docker容器镜像的工具 。

扫描Docker Image的操作命令如下:

(1)扫描Docker镜像:

复制$ dockle goodwithtech/test-image:v1 br1.2.

(2)扫描Docker镜像文件:

复制$ docker save alpine:latest -o alpine.tar $ dockle --input alpine.tar1.2.

(3)获取扫描JSON结果:

复制$ dockle -f json goodwithtech/test-image:v1 $ dockle -f json -o results.json goodwithtech/test-image:v11.2.

更多操作可参考官方手册 。

滇ICP备2023006006号-45