让我们在Kubescape上尝试对Kubernetes集群进行弱点扫描

这篇文章是ZOZO #1 Advent Calendar 2021的第17天的文章。
昨天是@satto_sann的Alexa技能开发中尝试了与Google日历API的连接。

首先

我想你可能也有很多人在接近年底时忙于处理安全漏洞的问题。希望大家都过得好。
现在,本文将介绍一种名为Kubescape的工具,用于检测Kubernetes集群的脆弱性。

Kubescape是什么?

Kubescape是由Armosec公司开发的开源项目。
关于其概念,请参阅以下博客详细说明。
https://www.armosec.io/blog/kubescape-the-first-tool-for-running-nsa-and-cisa-kubernetes-hardening-tests/

具有以下特点。

    • Kubernetesのセキュリティリスクをスコア計算できる。

 

    • 以下のような複数のセキュリティおよびコンプライアンスフレームワークを選択できる。

NSA-CISA Kubernetes Hardening Guidance
MITRE ATT&CK®
Armobest Kubernetes Framework

使いやすいCLIインターフェイスと柔軟な出力形式を持つ。
Kubernetesクラスタへのインストール不要で、読み取り専用の権限があれば実行可能。

SaaSのダッシュボードサービスが提供されている。

安装方式

关于Kubescape命令的安装方法,请参考以下链接:
https://github.com/armosec/kubescape#install

请根据您使用的环境适时进行安装。

试一试

作为试用,我会立即尝试使用命令行界面。首先,我将根据MITRE ATT&CK®来检查正在使用的Kubernetes集群。下面是针对通过Docker Desktop启用并创建的默认docker-desktop集群执行的操作。

$ kubescape scan framework mitre

MITRE FRAMEWORK
+-----------------------------------------------------------------------+------------------+--------------------+---------------+-----------+
|                             CONTROL NAME                              | FAILED RESOURCES | EXCLUDED RESOURCES | ALL RESOURCES | % SUCCESS |
+-----------------------------------------------------------------------+------------------+--------------------+---------------+-----------+
| Access Kubernetes dashboard                                           |        0         |         0          |      147      |   100%    |
| Access container service account                                      |        12        |         0          |      187      |    93%    |
| Access tiller endpoint                                                |        0         |         0          |       1       |   100%    |
| Applications credentials in configuration files                       |        0         |         0          |      18       |   100%    |
| CVE-2021-25741 - Using symlink for arbitrary host file system access. |        0         |         0          |       9       |   100%    |
| CVE-2021-25742-nginx-ingress-snippet-annotation-vulnerability         |        0         |         0          |      11       |   100%    |
| Cluster internal networking                                           |        4         |         0          |       4       |    0%     |
| Cluster-admin binding                                                 |        3         |         0          |      139      |    97%    |
| CoreDNS poisoning                                                     |        7         |         0          |      149      |    95%    |
| Data Destruction                                                      |        35        |         0          |      139      |    74%    |
| Delete Kubernetes events                                              |        7         |         0          |      139      |    94%    |
| Exec into container                                                   |        3         |         0          |      139      |    97%    |
| Exposed dashboard                                                     |        0         |         0          |       3       |   100%    |
| Exposed sensitive interfaces                                          |        0         |         0          |      10       |   100%    |
| Kubernetes CronJob                                                    |        0         |         0          |       0       |    NaN    |
| List Kubernetes secrets                                               |        20        |         0          |      139      |    85%    |
| Malicious admission controller (mutating)                             |        0         |         0          |       0       |    NaN    |
| Malicious admission controller (validating)                           |        0         |         0          |       0       |    NaN    |
| Mount service principal                                               |        5         |         0          |       8       |    37%    |
| Privileged container                                                  |        1         |         0          |       8       |    87%    |
| SSH server running inside container                                   |        0         |         0          |      10       |   100%    |
| Writable hostPath mount                                               |        5         |         0          |       8       |    37%    |
| hostPath mount                                                        |        5         |         0          |       8       |    37%    |
+-----------------------------------------------------------------------+------------------+--------------------+---------------+-----------+
|                           RESOURCE SUMMARY                            |        64        |         0          |      204      |    68%    |
+-----------------------------------------------------------------------+------------------+--------------------+---------------+-----------+

似乎有多个资源指出了弱点漏洞。这些指出事项在Kubescape中称为“控制”,您可以通过以下文档查看指出内容和解决方法。
https://hub.armo.cloud/docs/controls

我们来研究一下删除Kubernetes事件中已计算出的7个FAILED RESOURCES。
然后,我们会找到以下文档:
https://hub.armo.cloud/docs/c-0031

总结起来,攻击者有时会删除所有Kubernetes事件并隐藏痕迹,以避免在集群内被检测到活动。因此,根据最小权限原则,请尽可能减少删除事件的主体数量。

通过根据Control的建议内容逐个进行处理和评估,可以使Kubernetes集群更加安全。

提示

大致上述的kubescape指令选项和使用示例均在以下文档中记录:
https://hub.armo.cloud/docs/examples
https://github.com/armosec/kubescape#usage–examples

在这里,我会介绍一些常用的使用例子。

NSA-CISA Kubernetes Hardening Guidanceに基づき、スキャンする

kubescape scan framework nsa
    指定したnamespaceを対象にスキャンする
kubescape scan framework nsa --include-namespaces testns
    指定したnamespaceを除いてスキャンする
kubescape scan framework nsa --exclude-namespaces kube-system
    特定のマニフェストファイルをオフラインでスキャンする
kubescape scan framework nsa *.yaml
    kustomize buildで生成したマニフェストをスキャンする
kustomize build . | kubescape scan framework nsa -
    指定した閾値よりスコアが下回るかどうかチェックする
kubescape scan framework nsa --fail-threshold 80

如果閾值低於指定值,則會輸出以下類似的錯誤訊息。

Error: Scan score is below threshold

另外,尽管文档中写明了–fail-threshold选项在低于阈值时会退出代码为1,但在我们本次使用的kubescape v1.0.135中,退出代码为0,未能实现预期的功能(如果验证不足,请谅解)。

如果这边以正确的 exit code 1 结束,可以利用此命令选项,在 CI 中应用清单文件时,如果出现 exit code 1,将不会进行部署的控制,也就是说,可能可以实现对低于一定阈值的清单文件进行应用时的限制。

最后

本文介绍了Kubescape,它可以检查Kubernetes集群的安全漏洞。
对于容易忽略的漏洞,大家可以考虑在年末进行彻底清理,不妨尝试一下。

广告
将在 10 秒后关闭
bannerAds