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

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

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仓库(远程)
  • 虚拟机镜像
  • Kubernetes
  • AWS

Trivy能够发现的问题包括:

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

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

实际的安装和使用如下:

(1)安装

使用Homebrew for MacOS and Linux 安装:

brew install trivy
docker run aquasec/trivy

或者使用脚本安装:

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

也可以基于源码安装:

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

(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-alpine

扫描结果如下:

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.sh

或者基于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-security

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 pod's logs
kubectl logs kube-bench-j76s9
[INFO] 1 Master Node Security Configuration
[INFO] 1.1 API Server
...

具体可以参考相关文档: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"

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

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

例如:

kubeaudit all -f "/path/to/manifest.yml"

输出结果:

$ 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
...

另外,还有集群模式:

kubeaudit all

本地模式:

kubeaudit all -f "/path/to/config"
br

此外,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/bash

执行扫描:

kubescape scan --verbose

结果如下

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"

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/bin

Grype安装:

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

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

10.Dockle

https://github.com/goodwithtech/dockle

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

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

(1)扫描Docker镜像:

$ dockle goodwithtech/test-image:v1
br

(2)扫描Docker镜像文件:

$ docker save alpine:latest -o alpine.tar
$ dockle --input alpine.tar

(3)获取扫描JSON结果:

$ dockle -f json goodwithtech/test-image:v1
$ dockle -f json -o results.json goodwithtech/test-image:v1

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

责任编辑:赵宁宁 来源: andflow
相关推荐

2011-08-01 09:20:16

2021-10-25 14:40:43

Web工具Linux

2021-02-21 09:33:19

Docker容器安全 应用程序

2022-07-18 11:13:07

容器安全Docker

2024-04-24 12:34:44

2020-06-16 11:22:19

SaaS云服务云安全

2020-10-08 10:15:15

LynisLinux系统安全

2022-11-03 15:26:52

2023-11-17 12:09:54

2018-11-27 09:00:53

DockerKubernetes容器

2023-02-24 14:28:56

2021-12-26 08:03:31

容器安全扫描工具漏洞

2017-06-12 08:47:14

ESXi安全vSphere

2016-11-15 11:20:39

2020-06-09 21:07:56

OT安全网络安全攻击

2012-04-05 09:52:21

开源软件Linux

2010-09-06 10:47:56

2015-10-28 15:41:06

容器开放容器计划安全性

2015-10-29 10:09:56

开放容器计划容器安全

2011-08-05 10:55:53

点赞
收藏

51CTO技术栈公众号