k8s

记一次k8s集群中了挖矿病毒

现象

我登录到集群上,发现在kube-system上有3个名字为api-proxy的pod,describe看是一个daemonset。

file

file

应该是运气好,镜像拉取失败了,没跑起来。。。

file

排查

百度一下,这个是一个门罗币的挖矿病毒。

查看ds内容

kubectl get ds api-proxy -n kube-system -o yaml

file

查看定时任务和登录记录

搜了一下这个ip是匈牙利的,我的服务器上是有防止ssh爆破脚本的,定时任务也没有异常,查看服务器登录记录,也没有异常ip。

last
crontab -l

file

查看CPU和内存使用情况也都是正常的,因为pod没跑起来,要是跑起来了,我还能更快收到邮件告警。。。

file

查找进程和相关文件

ps aux|grep xmrig # 我这里是没有的
find / -name xmrig

file

查看ssh密钥文件,也没有异常

cd /root/.ssh
ls -al

查看主机上的用户,也没有异常

cat /etc/passwd

查看secure日志

vim /var/log/secure

file

黑客通过API访问到了我的集群,并安装了这个daemonset。那么他是怎么访问到我的集群呢?

查看ecs安全组

我开启了2379-2380,6443,10250端口。
file

查看集群的匿名用户

kubectl get clusterrolebindings -o yaml | grep system:anonymous
k get clusterrolebinding test:anonymous -o yaml

file

我想起来之前做测试用的这个test:anonymous集群用户,授予了cluster-admin的权限,黑客就扫描暴露在公网的6443端口,通过"system:anonymous"匿名账号登录到集群。

解决

因为我这里下载镜像失败了,就不用删除镜像了,直接删除ds。

ccrictl rmi $(crictl images | grep xmrig | awk '{print $3}')
kubectl delete ds api-proxy -n kube-system

删除test:anonymous集群用户,或者修改权限

k delete clusterrolebinding test:anonymous
kubectl get clusterrolebindings -o yaml | grep system:anonymous

加固

  1. 谨慎使用匿名权限,否则API serevr 6443端口鉴权会出现问题。
  2. 关闭无关的公网端口,比如redis端口,mysql端口等。
  3. 正确使用RBAC策略绑定,不要改变或新增集群原生用户或组(system:开头)的权限绑定,也不要改变系统原生的集群角色(clusterrole)或角色(role)。
  4. 开启集群审计日志
  5. 使用PSP安全策略,集群开启PSP后,即使黑客获取了集群的访问权限,也无法做进一步的操作。
分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x