欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[K8s Security] 基于Kube-Bench(CIS Benchmark)的自动化安全基线扫描

程序员文章站 2024-03-16 10:48:58
...

简介

关于CIS

“CIS(Center for Internet Security) 是一个非盈利性实体,其任务是“确定、开发、验证、升级和维持针对网络防御的最佳做法解决方案”。 它借鉴了来自世界各地*、企业和学术界网络安全及 IT 专业人员的专业知识。 为了制定标准和最佳做法(包括 CIS 基准、控制措施和强化映像),他们遵循一致的决策制定模型。

CIS 基准是安全配置系统的配置基线和最佳做法。 每则指导建议都参考了一个或多个 CIS 控制措施,可帮助组织改进其网络防御能力。 CIS 控制措施与许多已建立的标准和规章框架对应,包括 NIST 网络安全框架 (CSF) 和 NIST SP 800-53、ISO 27000 系列标准、PCI DSS、HIPAA 等等。

每个基准都经历了两个阶段的共识评审。 第一个阶段属于初始开发过程,专家聚集在一起,讨论、创建和测试工作草案,直到就基准达成一致。 在第二阶段中,在发布基准后,共识团队将审核 Internet 社区中的反馈,以纳入基准中。”

对于安全从业人员来说,CIS提供了很好地最佳实践模型和基准,几乎涵盖了IT基础架构中的方方面面,包括常见的,Benchmark for Windows, Benchmark for Linux, Benchmark for Oracle, Benchmark for Cisco, Benchmark for Docker, Benchmark for Kubernetes, 等等(https://www.cisecurity.org/cis-benchmarks/)。

很多漏洞扫描工具也有集成基于CIS Benchmark 的扫描基线,以满足IT安全人员日常审计的需求。

关于Kube-Bench

[K8s Security] 基于Kube-Bench(CIS Benchmark)的自动化安全基线扫描

Kube-Bench是Aqua发布的一款开源的K8s安全审计工具,基于CIS Benchmark for Kubernetes用Go语言开发。该工具会检查你是否根据CIS定义的Kubernetes安全基线部署了Kubernetes集群。(https://github.com/aquasecurity/kube-bench)。Kube-Bench的更新版本并不与Kubernetes的版本号一一对应,所以在部署Kube-bench前你要了解你要审计的k8s环境的具体版本是什么。
[K8s Security] 基于Kube-Bench(CIS Benchmark)的自动化安全基线扫描

Kube-bench 安装

有四种方法安装Kube-Bench

1.在容器中运行kube-bench

2.在宿主机上运行一个单独的容器安装kube-bench

3.下载release文件

4.源码编译安装

本文中笔者选用第二种安装方法。

安装命令: docker run --rm -v pwd:/host aquasec/kube-bench:latest install

[aaa@qq.com ~]# mkdir /opt/kube-bench &&  cd /opt/kube-bench

[aaa@qq.com kube-bench]# docker run --rm -v `pwd`:/host aquasec/kube-bench:latest install

等待安装,镜像大小约19M

[aaa@qq.com kube-bench]# docker images

REPOSITORY                                                      TAG                            IMAGE ID            CREATED            SIZE

aquasec/kube-bench                                              latest                        65a956464fd7        5 days ago          19.3MB

安装完成后,会在安装路径下出现一个kube-bench可执行文件

[aaa@qq.com kube-bench]# ll

total 11126

drwxr-xr-x 8 root root    1024 Aug 18 15:36 cfg

-rwxr-xr-x 1 root root 11391798 Aug 18 15:36 kube-bench

常用命令:

[aaa@qq.com kube-bench]# ./kube-bench -help      ---->查看使用帮助

[aaa@qq.com kube-bench]# ./kube-bench master    ---->扫描master节点

[aaa@qq.com kube-bench]# ./kube-bench node       ---->扫描node节点

[aaa@qq.com kube-bench]# ./kube-bench node  --version 1.17    ---->扫描node节点,并指定k8s版本

配置自动化扫描
因为kube-bench工具进行k8s扫描操作比较简单,所以可以使用shell脚本来实现定期定时的自动化k8s集群安全基线扫描。并且将扫描报告以邮件方式发送出来。

前期准备:

1.K8s集群的各节点已经安装了kube-bench

2.各节点可以免密ssh登录(可以用ssh-******实现)

脚本如下:具体路径可以按需更改

aaa@qq.com kube-bench]#cat k8s_scan.sh

#! /bin/bash

## get date

strDate=$( date +%Y-%m-%d )

## get k8s cluster machines info

hostlist=($( kubectl get nodes --show-labels | awk 'NR == 1 {next} {print $1}') )

##create report path

mkdir -p /tmp/Kube-bench-scanreports/$strDate

path=/tmp/Kube-bench-scanreports/$strDate

##get currenthost 

curhost=$( hostname ) 

## run kube-bench scan for each node

i=0

for host in ${hostlist[@]}

do

hostname=${hostlist[i]}

role=$( kubectl get nodes $hostname --show-labels | awk '{getline}{print $3}' )

{  

  if [ $role == "worker" ]

  then

  r="node"

  ssh aaa@qq.com$hostname -tt << EOF 

  mkdir -p /tmp/Kube-bench-scanreports/$strDate/ 

  cd /opt/kube-bench  

   ./kube-bench $r > $path/K8s-scanreport-node-$hostname-$strDate.csv

   scp $path/K8s-scanreport-node-$hostname-$strDate.csv aaa@qq.com$curhost:$path/

   exit

EOF



  elif [ $role == "master" ]

  then

  ssh aaa@qq.com$hostname -tt << EOF

  mkdir -p /tmp/Kube-bench-scanreports/$strDate/

  cd /opt/kube-bench 

  ./kube-bench $role > $path/K8s-scanreport-master-$hostname-$strDate.csv  

  scp $path/K8s-scanreport-master-$hostname-$strDate.csv aaa@qq.com$curhost:$path/

  exit

EOF

  fi

i=$i+1

}

done

echo "Kubernetes Security Baseline Scan Report for below cluster:" > $path/K8sstatus

kubectl get nodes -o wide >> $path/K8sstatus

##send email with reports as attachment

cd $path 

cat $path/K8sstatus | mail -s "Kubernetes Security Baseline Scan Report @$strDate"   $( printf -- '-a %q ' *.csv )  -c aaa@qq.com.com aaa@qq.com.cn 

然后可以使用crontab 设置定时任务跑脚本,定期发送报告邮件出来

收到邮件的格式:
[K8s Security] 基于Kube-Bench(CIS Benchmark)的自动化安全基线扫描