摘要
莫名其妙的服務(wù)器就被攻擊了,又被薅了羊毛,當(dāng)做免費的挖礦勞動力了。
一、起因
上班(摸魚)好好的,突然收到一條阿里云的推送短信,不看不知道,兩臺服務(wù)器被拉去作為苦力,挖礦去了。這不是耽誤我摸魚嗎,再說你挖到的礦幣又不帶我分,豈能忍。本著對公司負(fù)責(zé)任的態(tài)度(實在沒辦法),這不收拾一下過分的挖礦腳本,對不起這么多年積攢的專業(yè)知識。
登錄服務(wù)器,top
一下,ps
一下,crontab -l
一下,好家伙,只看到 CPU 異常占用了,卻沒發(fā)現(xiàn)到底是哪個玩意貪了我這么多資源。與以往的不太一樣?。闾孛丛诙何??)。
按照以往的經(jīng)驗,ps -aux --sort=-pcpu|head -10
一下,貪瀆者肯定原形畢露。難不成穿了個馬甲。仔細(xì)分析,可能不僅僅是馬甲這么簡單,更有可能是隱身衣。使出萬能的百度大法,果然有幾篇秘籍指出問題,一一對照下,只能發(fā)現(xiàn)大概,定位不到最終的“寶藏”地點??磥戆俣炔恍?,得 google 一下了。這次秘籍多了起來,給出了一項專門破解隱藏進程的功法。
二、尋“寶”
BusyBox 是一個集成了 300 多個最常用 Linux 命令和工具的軟件。甚至還集成了一個 http 服務(wù)器和 telnet 服務(wù)器,集成的包大小只有 1M 左右。有人將 BusyBox 稱為 Linux 工具里的瑞士軍刀。簡單點說 BusyBox 就是一個集成了許多 Linux 工具和命令的大的工具箱。在嵌入式軟件中,BusyBox 有著廣泛的運用。
所以,下載 BusyBox,安裝:
$ wget https://busybox.net/downloads/binaries/1.30.0-i686/busybox
$ mv busybox /usr/bin/busybox
$ chmod +x /usr/bin/busybox
查看 BusyBox 基本功能
$ busybox --help
使用瑞士軍刀查看一下進程信息
$ busybox top
作祟者原型畢露,有個 /bin/daemon
進程,占用過高的 CPU 使用
同時使用 netstat
查看一下程序端口占用
$ netstat -anp | grep ESTAB
結(jié)果如下:
可以看到有一個程序占用端口 14444
,連接的ip為 217.182.169.148
,卻并沒有打印出程序的進程號,在shadan搜索一下,ip 為法國的,基本確定入侵使用的端口為 14444
,先把端口禁用掉。
三、“六娃”的能力
既然確定是 /bin/daemon
,那就需要找出這個玩意是怎么具有“六娃”的能力,又是如何進行挖礦的。
首先可以確定的是 /bin/daemon
是一個二進制執(zhí)行程序,那就可以看看它的動態(tài)庫依賴關(guān)系
$ ldd /bin/daemon
此時還未發(fā)現(xiàn)有任何異常的結(jié)果(請原諒眼神不好使,四個眼睛都沒發(fā)現(xiàn)問題)
既然 ldd
無法找出異常,祭出大招,看看 /bin/daemon
所執(zhí)行的系統(tǒng)調(diào)用
$ strace /bin/deamon
好家伙,不看不知道,居然有一個 ld.so.preload
,來了個預(yù)加載。
一般來說,預(yù)加載 so
有兩種方式:
- 修改/etc/ld.so.preload配置文件,這種方法對配置修改后運行的進程有效,而無法影響已經(jīng)在運行的進程
- 啟動進程前設(shè)置LD_PRELOAD環(huán)境變量,此方法只對當(dāng)前進程生效
LD_PRELOAD
可以影響程序的運行時鏈接,它允許定義在程序運行前優(yōu)先加載的動態(tài)鏈接庫,通過這個環(huán)境變量,可以在主程序和其動態(tài)鏈接庫的中間加載別的動態(tài)鏈接庫,甚至覆蓋正常的函數(shù)。
進程在啟動后,會按照一定的順序加載動態(tài)庫:
- 加載環(huán)境變量
LD_PRELOAD
指定的動態(tài)庫 - 加載文件
/etc/ld.so.preload
指定的動態(tài)庫 - 搜索環(huán)境變量
LD_LIBRARY_PATH
指定的動態(tài)庫搜索路徑 - 搜索路徑
/lib64
下的動態(tài)庫文件
從上面的結(jié)果來看,加載了一個 /usr/local/lib/libprocesshider.so
動態(tài)庫,從上面的 ldd
返回結(jié)果也看到了這個動態(tài)庫,再仔細(xì)一看,這名字,不就是 process+hider
。
libprocesshider.so,Hide a process under Linux using the ld preloader. 官方的解釋,本來可能只是作者覺得一個好玩的玩意,卻被別有用心的人拿來做壞事。
找到這家伙,那好辦了,先把它直接干掉。
$ rm -rf /usr/local/lib/libprocesshider.so
啥?萬能的 rm -rf
大法居然失效了,這家伙身上居然給自己加了個盾,大招居然沒有收到人頭。
冷靜一下,仔細(xì)分析。既然不能刪除,那就是有著隱藏屬性,等待技能冷卻,我還有招。
$ lsattr /usr/local/lib/libprocesshider.so
果然,文件被追加了隱藏屬性??梢钥吹接?i
和 a
屬性。
文件隱藏屬性解釋:
屬性選項 | 功能 |
---|---|
i | 如果對文件設(shè)置 i 屬性,不允許對文件進行刪除、改名,也不能添加和修改數(shù)據(jù);如果對目錄設(shè)置 i 屬性,只能修改目錄下文件中的數(shù)據(jù),但不允許建立和刪除文件 |
a | 如果對文件設(shè)置 a 屬性,只能在文件中增加數(shù)據(jù),不能刪除和修改數(shù)據(jù);如果對目錄設(shè)置 a 屬性,只允許在目錄中建立和修改文件,不允許刪除文件 |
u | 設(shè)置此屬性的文件或目錄,在刪除時,其內(nèi)容會被保存,以保證后期能夠恢復(fù),常用來防止意外刪除文件或目錄 |
s | 和 u 相反,刪除文件或目錄時,會被徹底刪除(直接從硬盤上刪除,然后用 0 填充所占用的區(qū)域),不可恢復(fù) |
既然加了盾,那把盾給破了就是:
$ chattr -ia /usr/local/lib/libprocesshider.so
什么,chattr
沒權(quán)限,這是反彈傷害嗎?這,玩不下去了啊。
試試分身術(shù)吧。
$ cp /usr/bin/chattr /usr/bin/chattr2
$ chattr2 -ia /usr/bin/chattr
沒報錯,嗯,再試試
$ chattr -ia /usr/local/lib/libprocesshider.so
咋,還提示沒權(quán)限。
再看一下 chattr
$ file /usr/bin/chattr
這這這,跟我這虛晃一槍呢。你把我原來的文件刪了,給我放個空文件,你是想騙誰呢。
看來要重裝 chattr
了,但是機器上跑了不少服務(wù),擔(dān)心有影響。集中精力,冥想三分鐘,條條大路通羅馬,此路不通,換路走。誰讓咱兄弟姐妹多呢。
服務(wù)器都是選擇的一樣的鏡像,版本一致,從其它未被攻擊的系統(tǒng)中拷貝一份 chattr
,(劃重點)拷貝到服務(wù)器上時,請換一個文件名稱,通過新的文件修改原來的文件。如 chattr2
。
$ chattr2 -ia /usr/bin/chattr
$ rm -rf /usr/bin/chattr
$ mv /usr/bin/chattr2 /usr/bin/chattr
正主歸位,一切妖魔邪道即將化為無形。
$ chattr -ia /usr/local/lib/libprocesshider.so
$ chattr -ia /etc/ld.so.preload
$ rm -rf /usr/local/lib/libprocesshider.so
$ rm -rf /etc/ld.so.preload
此時,通過 top
即可看到 /bin/daemon
進程。沒有了隱身衣,無所遁形了吧。
那么,接下來,就應(yīng)該干掉“罪魁禍?zhǔn)住绷?。大蛇精和蝎子精已死,救爺爺終于有希望了。
/bin/daemon
是通過軟鏈指向 /usr/bin/daemon
,不墨跡,直接干掉本尊。
$ chattr -ia /usr/bin/daemon
$ rm -rf /usr/bin/daemon
當(dāng)然,記得殺掉運行中的 /bin/daemon
進程
$ kill -9 2415
四、守護者
一般的挖礦腳本程序肯定都有一個守護進程,保證挖礦的進程被殺之后,可以重新啟動,絕大多數(shù)是用的定時任務(wù)的方式。既然通過 crontab -l
沒看到定時任務(wù),那就看看 /etc/cron.d
目錄下有沒有:
果然,在 /etc/cron.d
目錄下,存在著定時任務(wù)腳本,查看腳本內(nèi)容:
$ cat /etc/cron.d/systemd
果然運行了一條定時任務(wù),查看指向的腳本內(nèi)容:
$ cat /lib/systemd/systemd-login
腳本文件沒有內(nèi)容,file /lib/systemd/systemd-login
very short file(no magic)
什么?? ,先不管了,干掉再說。
$ rm -rf /lib/systemd/systemd-login
$ rm -rf /etc/cron.d/systemd
$ rm -rf /etc/cron.d/systemd~
$ rm -rf /etc/cron.d/systemz~
打完野怪打小龍,打完小龍打大龍,等一段時間看看,還好,己方水晶沒爆。
運行一段時間,一切穩(wěn)定,算是暫告一段落。
五、總結(jié)
本篇文章還有很多的不足之處,并沒有找到病毒攻擊的入口,又是如何入侵到系統(tǒng)的,挖礦的腳本究竟運行在哪?按照正常的被攻擊排錯方式,一開始并不順利??偨Y(jié)一下系統(tǒng)被入侵的排查思路,只是給后來者提供一下解決思路(希望大家的系統(tǒng)都很健壯,不被攻擊)。
- 查看系統(tǒng)的
CPU
和內(nèi)存占用
- 查詢占用系統(tǒng)資源過高的進程
- 排查定時任務(wù),
crontab -l
或者/etc/cron.d
目錄 - 檢查異常端口,如發(fā)現(xiàn),禁用端口,堵漏
- 使用
last
命令查看系統(tǒng)異常登錄情況(一般攻擊者會抹去入侵記錄) - 使用
history
命令查看系統(tǒng)歷史執(zhí)行命令(一般攻擊者會抹去歷史命令) - 查看開機啟動腳本
/etc/rc.local
,是否插入了開機啟動進程 - 通過
find /etc/cron.daily/* -mtime -1
查找前一天到現(xiàn)在被修改的文件 - 找一臺正常的機器,比較一下被修改文件的
md5
值
后續(xù)救援不如從源頭堵住疏漏,平時使用系統(tǒng)時,可以從以下方面盡量保證系統(tǒng)安全:文章來源:http://www.zghlxwxcb.cn/news/detail-536551.html
- 檢查弱口令,使用強口令,能用證書的,盡量不使用密碼
- 不需要在外網(wǎng)訪問的端口,盡量不開啟,只開放在內(nèi)網(wǎng)
- 盡量使用普通用戶啟動服務(wù),不要使用
root
用戶啟動服務(wù) - 系統(tǒng)被入侵,一般都是通過部署的服務(wù)暴露出來的漏洞,及時更新軟件版本,加固系統(tǒng)
- 修改常用軟件服務(wù)的端口,盡量不要使用原有端口
- 定時備份重要的文件數(shù)據(jù),以防止服務(wù)器被入侵時,丟失重要數(shù)據(jù)
未完待續(xù)…文章來源地址http://www.zghlxwxcb.cn/news/detail-536551.html
到了這里,關(guān)于記一次阿里云被挖礦處理記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!