让我们在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集群的安全漏洞。
对于容易忽略的漏洞,大家可以考虑在年末进行彻底清理,不妨尝试一下。