使用 kube-bench 和 kube-hunter 对 Kubernetes 集群风险评估

点击上方蓝字关注 👆👆

↓推荐关注↓

随着 Kubernetes 越来越受欢迎,门槛也越来越低。但是安全问题仍然存在,下面介绍两个审计集群安全的开源工具。

kube-bench

kube-bench[1] 是一个 Go 应用程序,拥有 4.5k star。用于检查 Kubernetes 集群是否符合CIS Kubernetes Benchmark[2]指南。

CIS:互联网安全中心。这是一个非营利组织,利用来自社区的反馈来解决网络安全问题。建立一个免受网络攻击的环境的建议列表。这些建议包括寻找过于宽松的配置文件权限、集群组件的潜在风险设置、识别未受保护的帐户以及检查常规网络策略。

通过配置 YAML 文件进行测试,这样做的好处是该工具很容易随着测试的规范化而更新。

运行

运行 kube-bench 有多种方法[3]

  • docker 容器运行

  • 在 Kubernetes 集群中运行

  • 在 AKS 集群中运行

  • 在 EKS 集群中运行

  • 在 OpenShift 上运行

  • 在 GKE 集群中运行

  • 在 ACK 集群中运行

下面演示在 Docker 容器中运行 Kube-bench。它需要访问主机的 PID 名称空间,以便检查正在运行的进程,以及访问主机上配置文件等。

docker run --rm --pid=host -v /etc:/etc:ro -v /var/lib/etcd:/var/lib/etcd:ro -v /var/lib/kubelet/config.yaml:/var/lib/kubelet/config.yaml:ro  -v $(which kubectl):/usr/local/mount-from-host/bin/kubectl -v $HOME/.kube:/.kube -e KUBECONFIG=/.kube/config -it aquasec/kube-bench:latest run

运行后会输出检查报告,该报告分为五个主题块,从标题中即可看出:

  • 主节点安全配置;

  • Etcd 节点配置;

  • 控制平面配置;

  • 工作节点安全配置;

  • Kubernetes Policy

针对 Master Node 的配置文件检查结果如下:

[INFO] 1 Master Node Security Configuration
[INFO] 1.1 Master Node Configuration Files
[PASS] 1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive (Automated)
# 省略
[FAIL] 1.1.7 Ensure that the etcd pod specification file permissions are set to 644 or more restrictive (Automated)
[FAIL] 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated)== Remediations master ==
1.1.7 Run the below command (based on the file location on your system) on the master node.
For example,
chmod 644 /etc/kubernetes/manifests/etcd.yaml1.1.8 Run the below command (based on the file location on your system) on the master node.
For example,
chown root:root /etc/kubernetes/manifests/etcd.yaml

针对 Etcd 的检查:

[INFO] 2 Etcd Node Configuration
[INFO] 2 Etcd Node Configuration Files
[FAIL] 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated)
[FAIL] 2.2 Ensure that the --client-cert-auth argument is set to true (Automated)== Remediations etcd ==
2.1 Follow the etcd service documentation and configure TLS encryption.
Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml
on the master node and set the below parameters.
--cert-file=</path/to/ca-file>
--key-file=</path/to/key-file>2.2 Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master
node and set the below parameter.
--client-cert-auth="true"

检查结果为FAIL、WARN的,会对应序号给出修改方案。但是修改方案是否试用于你的集群,需要自行综合去判断,应该全面了解修改会对集群产生什么影响。

kube-hunter[4]

是一个 Python 工具,旨在发现 Kubernetes 集群中的漏洞。它从攻击者的角度评估集群安全。拥有 3.5K star。

运行

  • 二进制

  • 容器

  • Pod

下面演示使用 docker 容器运行。

docker run -it --rm --network host aquasec/kube-hunter

运行之后需要选择扫描方式:

Choose one of the options below:
1. Remote scanning      (scans one or more specific IPs or DNS names)
2. Interface scanning   (scans subnets on all local network interfaces)
3. IP range scanning    (scans a given IP range)
  1. 远程扫描

要指定远程机器进行扫描,选项 1 或使用--remote选项,容器方式运行:

docker run --rm aquasec/kube-hunter --remote 192.168.28.72
  1. 接口扫描

要指定接口扫描,可以使用--interface选项(这将扫描机器的所有网络接口),容器方式运行:

docker run --rm aquasec/kube-hunter --interface
  1. 网段扫描

要指定要扫描的特定 CIDR,使用--cidr选项,容器方式运行:

docker run --rm aquasec/kube-hunter --cidr 192.168.0.0/24

以下是运行检查之后输出的报告:

+--------+---------------------+----------------------+----------------------+----------------------+----------------------+
| KHV002 | 192.168.28.154:6443 | Initial Access //    | K8s Version          | The kubernetes       | v1.19.8              |
|        |                     | Exposed sensitive    | Disclosure           | version could be     |                      |
|        |                     | interfaces           |                      | obtained from the    |                      |
|        |                     |                      |                      | /version endpoint    |                      |
+--------+---------------------+----------------------+----------------------+----------------------+----------------------+
| KHV052 | 192.168.28.194:10255| Discovery // Access  | Exposed Pods         | An attacker could    | count: 9             |
|        |                     | Kubelet API          |                      | view sensitive       |                      |
|        |                     |                      |                      | information about    |                      |
|        |                     |                      |                      | pods that are        |                      |
|        |                     |                      |                      |     bound to a Node  |                      |
|        |                     |                      |                      | using the /pods      |                      |
|        |                     |                      |                      | endpoint             |                      |
+--------+---------------------+----------------------+----------------------+----------------------+----------------------+

列出两个漏洞:

  • 攻击者可以通过/version获取到 k8s 的版本;

  • 攻击者可以通过/pods接口获取到集群节点上运行的 Pod 数量。

Kubernetes 节点自动发现

设置--k8s-auto-discover-nodes标志查询 Kubernetes 集群中的所有节点,然后尝试扫描所有节点。默认情况下,它将使用集群内配置[5]连接到 Kubernetes API。如果您想使用显式 kubeconfig 文件,请设置--kubeconfig /root/.kube/kubeconfig.

查看命令帮助,可以运行:

# docker run -it --rm --network host aquasec/kube-hunter --help

kube-hunter 是用于 Kubernetes 集群渗透测试的可选择工具。它易于安装和运行,并展示集群在攻击者视角的样子。但输出的报告,没有修复方案提示,需要运维人员自行评估方案。

结论

这两个实用程序都非常成熟且易于上手,并提供了集群安全性的良好描述。尽管存在一些缺陷,但对关注集群安全的人来说,它们是一个不错的选择。

安全性不仅限于集群配置,让容器中运行的应用程序保持最新状态、防止未经授权访问镜像注册表、使用安全网络协议、监控应用程序活动等也同样值得注意。

其他可选工具

除了这两个分析工具。 kubescape [6]也是值得推荐的选择。Kubescape 提供了风险分析、安全合规、RBAC 可视化工具和镜像漏洞扫描等功能,截至目前已有超过 5.1K star。

参考资料

[1]

kube-bench: https://github.com/aquasecurity/kube-bench

[2]

CIS Kubernetes Benchmark: https://www.cisecurity.org/benchmark/kubernetes/

[3]

多种方法: https://github.com/aquasecurity/kube-bench/blob/main/docs/running.md

[4]

kube-hunter: https://github.com/aquasecurity/kube-hunter

[5]

集群内配置: https://kubernetes.io/docs/reference/access-authn-authz/rbac/

[6]

kubescape : https://github.com/armosec/kubescape

[7]

Kubernetes cluster security assessment with kube-bench and kube-hunter: https://blog.flant.com/kubernetes-security-with-kube-bench-and-kube-hunter/



我发起一个抽奖,欢迎您的参与👇

3a3efdf3cc6293bf9ea6cbaf7dec5ec5.png


后台回复“加群”,带你进入高手如云交流群

欢迎小伙伴们投稿原创文章~

投稿格式:markdown格式的md文件

投稿邮箱: pub@kubeinfo.cn

推荐阅读

一款强大的Kubernetes API流量查看神器

Argo CD 发现高危漏洞,对 K8s 有何影响?

Golang 从零搭建 LevelDB

为什么云中的容器可以成为攻击者的天堂

52 张图,万字讲解 Linux,建议收藏!

Win11将迎来首次重大更新,终于要支持安卓应用了

快叫女朋友来一起看烟花了!超漂亮!!

22 款必备的命令行生产力工具,提高效率全靠它了

有了这篇 Shell 脚本实践指南,同事对我“刮目相看”!

090d44edf94934b72ac769aa43074638.png

全网粉丝20W的头部大号,专注云原生、Golang、Linux实用脚本,效率工具,免费CSDN下载,回复【golang】获取近 6 万 Star的资源回复【1024】获取全种类IT资料,回复【红包封面】获取超好看封面,回复【加群】进入高手如云技术交流群

fdffb982225fc6a6a4053518f51db0c2.png

分享、点赞和在看

支持我们分享更多好文章,谢谢!

e6c63991c1bede9e995495de2e359b14.gif点击“阅读原文”查看更多                  

 点个在看集群永保稳定👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验 4 操作、输出值和数据表实验报告--软件功能测试与性能测试实验

下载链接&#xff1a; https://download.csdn.net/download/qq_44872173/20031742

linux网络编程之setsockopt()函数来设置socket状态以及getsockopt函数只用总结

1、setsockopt函数 头文件:#include <sys/types.h> #include <sys/socket.h>定义函数:int setsockopt(int s, int level, int optname, const void * optval, ,socklen_toptlen); 函数说明:setsockopt()用来设置参数s 所指定的socket 状态. 参数level 代表欲设…

easyui 排序实现

1.对easyui datagrid 返回的数据&#xff0c;进行排序处理&#xff0c;便于搜索到我们的有用的信息。 例如&#xff1a; 2.datagrid 需要设置 sortable : true {field : crtTime,title : 创建时间,width : 100,sortable :true,align : center,formatter : crtTimeFtt}, 3.F12…

hm编码工具使用_H.265视频编码与技术全析(下)

H.265视频编码与技术全析&#xff08;下&#xff09;四&#xff0e;帧内预测模式共35个&#xff08;h264有9个&#xff09;&#xff0c;包括Planar&#xff0c;DC&#xff0c;33个方向模式&#xff1a;除了Intra_Angular预测外&#xff0c;HEVC还和H.264/MPEG-4 AVC一样&#x…

redmine安装指引

为什么80%的码农都做不了架构师&#xff1f;>>> 1 前言 本文记录了在window7下面安装redmine的操作过程&#xff0c;同时也为其他有兴趣安装redmine的同学提供帮助。 2 环境说明 操作系统&#xff1a;window7 64位 数据库&#xff1a;mysql-5.5.36-winx64 Red…

.NET 诞生已20周年,您的 .NET 技能是否还停留在2010 年?

20年来&#xff0c;我们见证了超过上千万.NET 开发员&#xff0c;当前有600万.NET 开发者正在使用.NET技术构建各类解决方案。今天&#xff0c;IT市场对.NET 开发人员的需求达到了前所未有的程度,特别是在中国&#xff0c;各大公司对.NET 程序员的需求用火爆来形容都不为过&…

实验 5 性能测试脚本录制和开发实验报告--软件功能测试与性能测试实验

实验内容&#xff1a; 下载链接&#xff1a; https://download.csdn.net/download/qq_44872173/20031769

MySQL-5.5.33主从复制

搭建主从同步需要在两个电脑上分别安装 MySQL &#xff0c;我这里安装的是 CentOS6.7 64位&#xff0c;MySQL-5.5.33。MySQL 是二进制包安装的&#xff1a;http://aby028.blog.51cto.com/5371905/1892818两台的操作是一样的&#xff0c;要求能够登陆 mysql 数据库即可。主从地址…

python单例模式继承_Python四种实现单例模式的方法

在这之前&#xff0c;先了解super()和__new__()方法super()方法&#xff1a;返回一个父类或兄弟类类型的代理对象&#xff0c;让你能够调用一些从继承过来的方法。它有两个典型作用&#xff1a;a. 在单继承的类层次结构中&#xff0c;super()可用于引用父类而不显式父类名称&am…

linux之netstat使用--10个常用的命令

地址:http://www.thegeekstuff.com/2010/03/netstat-command-examples/ 1.列出所有的端口 netstat -a 列出TCP协议的端口 netstat -at UDP协议的端口 netstat -au 2.列出处于监听状态的socket netstat -l 列出监听的TCP端口 netstat -lt 列出监听的UDP端口 …

在Extjs中动态增加控件

Ext.onReady(function () {Ext.QuickTips.init();Ext.form.Field.prototype.msgTarget side;var autoloadcontrol new Ext.form.FieldSet({layout: "column",title: "属性表单",})var addForm new Ext.FormPanel({title: "<div aligncenter>…

C#中的数据字典Dictionary

前言今天上午和往常一样在网上冲浪,看到码甲哥微信群里面在聊一个面试题&#xff0c;比较有意思&#xff0c;这里简单分享下结论中的Dictionary字典。有50w个int类型的数字&#xff0c;现在需要判断一下里面是否存在重复的数字&#xff0c;请简要说明下。假如这个题目让我做&am…

实验 6 场景创建与执行 实验报告--软件功能测试与性能测试实验

下载链接&#xff1a; 下载链接&#xff1a; https://download.csdn.net/download/qq_44872173/20031798 内容&#xff1a;

2016年工作总结和计划

梧桐系统1、增加IT对接人、财务对接人功能开发 仲裁系统1、热敏面单未规范投诉开发2、图片统一存储和读取服务接口开发&#xff0c;提供内部调用的sdk 微信1、我要查件、自动订阅2、一键下单3、网点查询4、绑定手机号5、绑定专属业务员6、网点和业务员留言7、地址簿 待完成业务…

allegro下快捷键设置[转贴]

zz : http://yuandi6.blog.163.com/blog/static/207265185201210245435397/ 修改变量文件&#xff0c;设置自定义快捷键。 Allegro可以通过修改env文件来设置快捷键&#xff0c;这对于从其它软件如protle或PADS迁移过来的用户来说&#xff0c;可以沿用以前的操作习惯&#xff0…

改成中文版的_lol手游怎么改成中文版?英雄联盟手游中文版更改教程

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注&#xff01; 【免责声明】本文部分文字与图片资源来自于网络&#xff0c…

linux网络编程之慢系统调用被信号中断产生EINTR错误怎么解决总结

1、介绍慢系统调用 该术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用永远无法返回&#xff0c;多数网络支持函数都属于这一类。如&#xff1a;若没有客户连接到服务器上&#xff0c;那么服务器的accept调用就会一直阻塞。 慢系统调用可以被永久阻塞&#…

dotnet 替换 ASP.NET Core 的底层通讯为命名管道的 IPC 库

这是一个用于本机多进程进行 IPC 通讯的库&#xff0c;此库的顶层 API 是采用 ASP.NET Core 的 MVC 框架&#xff0c;其底层通讯不是传统的走网络的方式&#xff0c;而是通过 dotnetCampus.Ipc 开源项目提供的基于 NamedPipeStream 命名管道的方式进行通讯。相当于替换掉 ASP.N…

好想写点儿什么,但是不知道怎么写

自己已经上班了&#xff0c;但是有好多的时候还是做起事情没有一点毅力&#xff0c;不论是学习&#xff0c;还是追女生&#xff0c;还是想学习音乐。就像没有毕业的时候看C语言的书籍&#xff0c;看了一个星期&#xff0c;不想看了然后就不看了。书上面自己做的笔记过不了几天也…