Kubei 工具简介

地球胖头鱼 2020-10-10
Web安全 发布于 2020-10-10 10:33:43 阅读 47 评论 0

Kubei:一款针对Kubernetes集群的实时安全扫描工具

简介

Kubei是一款针对Kubernetes集群的实时安全扫描工具,该工具将允许广大研究人员对正在运行的Kubernetes集群进行实时扫描,并获取准确及时的安全评估结果。Kubei能够扫描一个Kubernetes集群中使用的全部镜像,包括应用程序Pod和系统Pod镜像。需要注意的是,Kubei不会扫描整个镜像注册表,也不需要跟CI/CD管道进行初步集成。

Kubei是一个易于扩展且支持自定义配置的工具,这将允许研究人员自行定义扫描的范围、目标命名空间、扫描速度和感兴趣的漏洞风险等级。

除此之外,Kubei还提供了非常友好的图形化用户接口,以帮助研究人员快速查看、识别和发现Kubernetes集群中潜在的安全问题。

工具使用前提

  • 已正常运行的Kubernetes集群;
  • 目标Kubernetes集群以存在正确配置的kubeconfig(~/.kube/config)文件;

权限要求

  • 可在集群范围内读取敏感数据,能够扫描隐私镜像库;
  • 可在集群范围内枚举Pod,能够计算待扫描的目标Pod数量;
  • 可在集群范围内创建Job,能够创建在目标命名空间内对目标Pod进行扫描的Job作业;

工具配置

在使用Kubei时,需要利用deploy/kubei.yaml来在目标集群中部署和配置Kubei:

首先,我们需要给Kubei设置扫描范围,这里可以通过设置IGNORE_NAMESPACES环境变量来忽略不需要扫描的命名空间。设置TARGET_NAMESPACE环境变量可以指定一个待扫描的命名空间,留空表示扫描所有的命名空间

接下来,我们需要设置Kubei的扫描速度。这里可以使用并行运行扫描器的方式来加快扫描速度,或者通过MAX_PARALLELISM环境变量来设置并行扫描器的最大数量。

第三步,我们需要设置Kubei扫描的安全严重等级阈值,此时严重性等级高于或等于这个阈值的所有漏洞和安全问题都将被报告给用户。Kubei支持的严重性等级分为别未知、可忽略的、低、中、高和Defcon1,默认为“中”。

最后,我们需要设置Job作业的删除策略。这里可以通过设置DELETE_JOB_POLICY环境变量来定义是否需要删除已完成的扫描器作业,支持的值如下:

  • All:所有已完成的作业都将被删除;
  • Successful:只有执行成功的作业才会被删除(默认);
  • Never:任务不会被删除;

工具的使用

我们需要运行下列命令将Kubei部署到目标Kubernetes集群之中:

kubectl apply -f https://raw.githubusercontent.com/Portshift/kubei/master/deploy/kubei.yaml

接下来,执行下列命令来判断Kubei是否已正常运行:

kubectl -n kubei get pod -lapp=kubei

确保Kubei已正常运行之后,通过执行下列命令将端口数据转发至Kubei Webapp中:

kubectl -n kubei port-forward $(kubectl -n kubei get pods -lapp=kubei -o jsonpath='{.items[0].metadata.name}') 端口号

然后打开Web浏览器,访问http://localhost:端口号/view/,然后点击“Go”来运行扫描任务。

如需检查Kubei的运行状态以及正在进行的扫描进程,可以运行下列命令:

kubectl -n kubei logs $(kubectl -n kubei get pods -lapp=kubei -o jsonpath='{.items[0].metadata.name}')

刷新页面http://localhost:端口号/view/即可更新扫描结果。

使用外部HTTP/HTTPS代理运行Kubei

打开deploy/kubei.yaml,去掉针对Clari和Kubei部署中代理环境变量的相关注释,并填写配置信息即可

亚马逊ECR支持

使用AmazonEC2ContainerRegistryFullAccess权限创建一个AWS IAM用户,并使用用户凭证AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY和AWS_DEFAULT_REGION来创建下列密钥:

cat <<EOF | kubectl apply -f -

apiVersion: v1

kind: Secret

metadata:

  name: ecr-sa

  namespace: kubei

type: Opaque

data:

  AWS_ACCESS_KEY_ID: $(echo -n 'XXXX'| base64 -w0)

  AWS_SECRET_ACCESS_KEY: $(echo -n 'XXXX'| base64 -w0)

  AWS_DEFAULT_REGION: $(echo -n 'XXXX'| base64 -w0)

EOF

注意事项:

首秀按,密钥名称必须为ecr-sa。其次,密钥中的data键值必须设置为AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_DEFAULT_REGION

Google GCR支持

使用Artifact Registry Reader权限创建一个Google服务账号
使用服务账号的JSON文件来创建下列密钥:

kubectl -n kubei create secret generic --from-file=sa.json gcr-sa

注意事项:

首先,密钥名必须为gcr-sa。其次,sa.json名必须是服务账号JSON文件的名称。第三,Kubei使用的是应用程序默认凭证.

工具限制

  • 支持Kubernetes Image Manifest V2, Schema 2,不支持扫描更早的版本;
  • CVE漏洞数据库每日一更

GitHub下载地址

GitHub地址 https://github.com/Portshift/Kubei

git clone https://github.com/Portshift/kubei.git
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
地球胖头鱼
未填写
  • 作者发布文章79
  • 作者收获粉丝1
  • 作者收到点赞0
  • 所有文章被收藏了0
  • 博客总访问量排行第5
  • 博客总访问量5036(每日更新)
查看所有博文