nessus扫描合规性

1 安全扫描

(1)创建一个高级扫描

1627455726030

(2) 打开 Plugins选项.

Disable 所有插件除了下面几个:

  • General

  • Settings

  • Policy Compliance

  • Service Detection

    (3) 在Compliance部分 选择 需要扫描的合规系统:centos或者其他.

1627456193812

保存扫描即可。

2 扫描实例:k8s的CIS检测

2.1 配置

(1) 在nessus 中导入下列的策略,该策略中包含基础的k8s master的节点cis扫描配置

(2) 创建Credentials,选择SSH进行配置

如果supper-user包含了sudo的权限,并可以执行任意的指令,可以直接设置SSH Privilege Escalation 为sudo

配置的用户需要能登录k8s集群节点的权限

1640242433408

如果supper-user未包含sudo的权限,则可以新建一个用户(需要配置该用户的password)使其可以通过sudo执行任意指令,此时需要设置SSH Privilege Escalation 为su+sudo

1640242485565

关于SSH Privilege Escalation 的解释如下:https://community.tenable.com/s/article/SSH-Privilege-Escalation#su-sudo

(3) 在Compliance 中配置CIS 扫描项,需要修改其中的文件路径使其符合集群的情况

1640242576609

(4) 检查Plugins中是否打开了如下的插件

如果存在问题可以参考:https://community.tenable.com/s/article/Troubleshoot-failed-audit-compliance-scans

1640242596891

2.2 运行

在My Scans→New Scans→ User Defined→ Test_k8s_cis,设置Targets为需要扫描的节点,然后选择Lanch

1640242669447

2.3 查看结果

运行时间可能较长,运行结束后可以看到compliance中扫描出来的违规配置

1640242723451

2.4 扫描结果分析

1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive
描述: etcd 存储目录权限过大

修复方案:chmod 700 /var/lib/etcd

影响:验证重启后无影响

1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600
描述: k8s pki 下的文件权限过大

修复方案:chmod -R 600 /etc/kubernetes/pki/*.key

影响:验证重启后无影响

1.2.1 Ensure that the –anonymous-auth argument is set to false
描述: 不允许匿名用户访问

修复方案:/etc/kubernetes/manifests/kube-apiserver.yaml 中配置–anonymous-auth=false,或者通过配置system:anonymous和system:unauthenticated的权限进行控制

影响:不允许匿名访问,所有直接的访问都会被拒绝

1.2.10 Ensure that the admission control plugin EventRateLimit is set
描述: 限制 API 服务器接受请求的速率,避免速度APIserver被打挂

修复方案: 在apiserver中添加如下配置

   --enable-admission-plugins=...,EventRateLimit,...
   --admission-control-config-file=<path/to/configuration/file> 

   示例配置文件如下:

/etc/kubernetes/pki/admission-control-config.yaml

apiVersion: apiserver.k8s.io/v1alpha1
kind: AdmissionConfiguration
plugins:
- name: EventRateLimit
  path: eventconfig.yaml

/etc/kubernetes/pki/eventconfig.yaml

apiVersion: eventratelimit.admission.k8s.io/v1alpha1
kind: Configuration
limits:
- type: Namespace
  qps: 10
  burst: 100
  cacheSize: 50
- type: User
  qps: 10
  burst: 50
  cacheSize: 50
- type: Server
  qps: 100
  burst: 1000

影响:会限制集群和namespace 输出event的速率,当达到配置的极限时,超出的event会被拒绝并返回429 Too Many Requests,需要更具集群的大小及apiserver的处理能力来进行配置,参考社区说明: admission_control_event_rate_limit.md

1.2.12 Ensure that the admission control plugin AlwaysPullImages is set
描述: 设置pod的拉取策略为Always,在多租户时需要和鉴权配合使用以确保镜像不会被其他的用户使用

修复方案:在apiserver中添加如下配置–enable-admission-plugins=…,AlwaysPullImages,…

影响:每次拉取私有镜像都需要凭据。此外,在受信任的环境中,这可能会增加网络、注册表的负载并降低速度。此设置可能会影响离线或隔离的集群,这些集群已预加载镜像并且无权访问注册表以提取使用中的镜像。此设置不适用于使用此配置的集群。

1.2.14 Ensure that the admission control plugin ServiceAccount is set
描述:创建 Pod 时,如果未指定服务帐户,则会自动为其分配同一命名空间中的默认服务帐户

修复方案:似乎已经配置过,但是仍然扫出来

影响:无

1.2.16 Ensure that the admission control plugin PodSecurityPolicy is set
描述:必须要设置PodSecurityPolicy

修复方案:APIserver配置参数– enable -admission-plugins =…,PodSecurityPolicy,…

影响:在允许创建 pod 之前,必须创建并授予策略对象。至少在集群中需要一个安全策略,可能需要配置多个安全策略(注:psp在1.21中已经计划废弃podsecuritypolicy-deprecation-past-present-and-future)

备注:添加后apiserver无法拉起,还在验证中…

1.2.17 Ensure that the admission control plugin NodeRestriction is set
描述:限制 kubelet 仅可以修改自己的 Node 和 Pod 对象

修复方案:APIserver 配置参数–enable-admission-plugins=…,NodeRestriction,…

影响:无

1.2.21 Ensure that the –profiling argument is set to false
描述:关闭性能分析功能

修复方案:设置apiserver 的参数–profiling=false

影响:分析信息将不可用,基本影响很小

1.2.23 Ensure that the –audit-log-maxage argument is set to 30 or as appropriate
描述:将审计日志保留至少30天或视情况而定

修复方案:设置apiserver 的参数–audit-log- maxage=30

影响:基本无,可以根据具体情况设置

1.2.25 Ensure that the –audit-log-maxsize argument is set to 100 or as appropriate
描述:在审计日志达到 100 MB 或适当时轮换日志文件。

修复方案:设置apiserver 的参数–audit-log-maxsize=100

影响:基本无,可以根据具体情况设置

1.2.27 Ensure that the –service-account-lookup argument is set to true
描述:在验证令牌之前验证服务帐户,防止被删除后还能继续访问

修复方案:设置apiserver 的参数–service-account-lookup=true

影响:基本无

1.2.29 Ensure that the –etcd-certfile and –etcd-keyfile arguments are set as appropriate - certfile
描述:etcd 应配置为对客户端连接使用 TLS 加密

修复方案:按照 Kubernetes 文档设置 apiserver 和 etcd 之间的 TLS 连接。然后,在主节点上编辑API server pod规范文件/etc/kubernetes/manifests/kube-apiserver.yaml,设置etcd证书和密钥文件参数。–etcd-certfile=<path/to/client-certificate-file>和–etcd-keyfile=<path/to/client-key-file>

注:标准部署都配置过了,还会扫出的原因是期望为–etcd-certfile=/etc/kubernetes/pki/etcd/peer.crt([\s]|$),需要使用固定目录下的文件

影响:基本无

1.2.33 Ensure that the –encryption-provider-config argument is set as appropriate
描述:加密 etcd 键值存储。

修复方案:按照 Kubernetes 文档并配置 EncryptionConfig 文件。然后,在主节点上编辑 API 服务器 pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml 并将 –encryption-provider-config 参数设置为该文件的路径:–encryption-provider-config =</path/to/EncryptionConfig/File>

影响:待验证,看起来更变密钥似乎会对apiserver读取数据有影响 https://kubernetes.io/zh/docs/tasks/administer-cluster/encrypt-data/

1.2.34 Ensure that encryption providers are appropriately configured
描述:在使用 etcd 加密的地方,应该配置适当的提供者。

修复方案:按照 Kubernetes 文档并配置 EncryptionConfig 文件。在此文件中,选择 aescbc、kms 或 secretbox 作为加密提供程序。

影响:与1.2.33 为一个问题,可以同步修复

1.2.6 Ensure that the –kubelet-certificate-authority argument is set as appropriate
描述:在建立连接之前验证 kubelet 的证书,kubelet和apiserver使用https进行通信

修复方案:设置 apiserver 和 kubelets 之间的 TLS 连接,并设置apiserver 的参数 –kubelet-certificate-authority=/etc/kubernetes/pki/apiserver-kubelet-client.crt

影响:apiserver 和 kubelets 上配置 TLS

1.3.1 Ensure that the –terminated-pod-gc-threshold argument is set as appropriate
描述:设置终止pod收集数量,当前默认是12500才会进行回收

修复方案:设置/etc/kubernetes/manifests/kube-controller-manager.yaml 的参数 –terminated-pod-gc-threshold为合适的值

影响:基本无

1.3.2 Ensure that the –profiling argument is set to false
描述:是否打开controller-manager的性能分析功能

修复方案:/etc/kubernetes/manifests/kube-controller-manager.yaml 设置–profiling=false

影响:基本无,分析信息将不可用

1.3.7 Ensure that the –bind-address argument is set to 127.0.0.1
描述:不要将kube-controller-manager绑定到127.0.0.1之外的IP

修复方案:/etc/kubernetes/manifests/kube-controller-manager.yaml 并设置–bind-address=127.0.0.1

影响:基本无

1.4.1 Ensure that the –profiling argument is set to false
描述:是否打开kube-schedule的性能分析功能

修复方案: /etc/kubernetes/manifests/kube-scheduler.yaml 设置–profiling=false

影响:基本无,分析信息将不可用

2.1 Ensure that the –cert-file and –key-file arguments are set as appropriate - cert
描述:etcd服务配置tls

修复方案: /etc/kubernetes/manifests/etcd.yaml 配置–cert-file和–key-file

注:其实已经配置,不过文件路径不符合期望–cert-file=/etc/kubernetes/pki/apiserver-etcd-client.crt

影响:无

3.1.1 Client certificate authentication should not be used for users
描述:client的认证不应该使用证书,例如 OIDC 的使用,应该替代客户端证书。

修复方案: 去除apiserer中的参数client-ca-file

影响:客户端无法使用证书进行访问,需要进一步评估

5.2.4 Minimize the admission of containers wishing to share the host network namespace
描述:通常不允许容器使用hostnetwork

修复方案: 创建禁止使用node节点网络的PSP

影响:集群内使用hostnetwork的系统组件都要使用nodeport或者其他形式进行暴露

5.2.7 Minimize the admission of containers with the NET_RAW capability
描述:通常不允许使用具有潜在危险的 NET_RAW 功能的容器

修复方案: 创建 PSP,确保将 .spec.requiredDropCapabilities 设置为包含 NET_RAW 或 ALL。

影响:带有以 NET_RAW 功能运行的容器的 Pod 将不被允许

5.2.8 Minimize the admission of containers with added capabilities
描述:通常不允许具有超出默认设置的分配能力的容器

修复方案:确保 allowedCapabilities 不存在于集群的 PSP 中,除非它被设置为空数组。

影响:带有需要超出默认设置的能力的容器的 Pod 将不被允许。

参考

  1. Troubleshoot-failed-audit-compliance-scans
  2. 如何使用nessus启动合规性扫描 官网
  3. 具体如何配置Nessus的合规扫描文件 具体操作
  4. 下载nessus策略的原始文件 包含cis等多个标准
文章目录
  1. 1 安全扫描
  2. 2 扫描实例:k8s的CIS检测
    1. 2.1 配置
    2. 2.2 运行
    3. 2.3 查看结果
    4. 2.4 扫描结果分析
  3. 参考