Linux服務(wù)器被襲擊,最終我用這些操作救了命!
突然,頻繁收到一組服務(wù)器 ping 監(jiān)控不可達(dá)郵件,趕緊登陸 zabbix 監(jiān)控系統(tǒng)查看流量狀況。
可見(jiàn)流量已經(jīng)達(dá)到了 800M 左右,這肯定不正常了,馬上嘗試 SSH 登陸系統(tǒng),不幸的事,由于網(wǎng)絡(luò)堵塞,登錄不上或者卡死。
一、排查問(wèn)題
第一反應(yīng)是想馬上通知機(jī)房運(yùn)維人員切斷該服務(wù)器外部網(wǎng)絡(luò),通過(guò)內(nèi)網(wǎng)連接查看。可是這樣一來(lái)流量就會(huì)消失,就很難查找攻擊源了。
于是聯(lián)系機(jī)房協(xié)助解決,授權(quán)機(jī)房技術(shù)登錄到系統(tǒng),先通過(guò) w 命令查看是否有異常用戶在登錄,再看看登錄日志 /var/log/auth.log,預(yù)料之中,日志已經(jīng)清空;最后使用工具找出那個(gè)連接占用流量大,我使用了 iftop 工具。
機(jī)房技術(shù)發(fā)來(lái)拍照,看到本地一直通過(guò) http 方式向 104.31.225.6 這個(gè) ip 發(fā)送數(shù)據(jù)包,而且持續(xù)不斷。
那好,先把這個(gè) ip 給屏蔽了試試:
iptables –A OUTPUT –d 104.31.225.6 –j DROP
奇跡出現(xiàn),瞬間流量下去,現(xiàn)在也可以正常登錄系統(tǒng)。
過(guò)一會(huì)兒~ 不幸的事情發(fā)生了,流量又上來(lái)了,擦!什么情況!心情頓時(shí)緊張起來(lái)。
又趕緊聯(lián)系機(jī)房技術(shù),告知他執(zhí)行上次屏蔽 ip 操作。
機(jī)房技術(shù)發(fā)來(lái)拍照,這次傻眼了,目的 ip 變了,這可咋搞,不可能一個(gè)個(gè)封吧!
靜下心來(lái),仔細(xì)想了下,本地向外發(fā)包,那本地肯定會(huì)有程序來(lái)發(fā)!
二、查找攻擊源
先通過(guò)netstat工具過(guò)濾端口,查看運(yùn)行的進(jìn)程ID:
netstat –atup |grep 15773
結(jié)果什么都沒(méi)有,再換個(gè)端口試試,同樣的效果!
讓機(jī)房技術(shù)觀察了下連接狀態(tài),原來(lái)是短連接,端口很快會(huì)釋放,所以才看不到端口的連接狀態(tài)。
正常長(zhǎng)連接來(lái)說(shuō),可以使用 lsof –i :15773 這樣方式找到 PID,再 lsof –p PID 找到打開(kāi)的相關(guān)文件。
好吧!決定先切斷外部網(wǎng)絡(luò),內(nèi)網(wǎng) SSH 進(jìn)入系統(tǒng),先找到這個(gè)發(fā)包的程序!
先通過(guò) netstat –antup 查看有無(wú)開(kāi)放可疑的端口或者連接。
再通過(guò) ps –ef 查看有無(wú)可疑的進(jìn)程。
仔細(xì)盤(pán)查,無(wú)可疑情況。
難道是植入了 rootkit 木馬程序?說(shuō)不好,試試看吧!
想要判斷系統(tǒng)有沒(méi)有植入了 rootkit 可以使用 md5sum 校驗(yàn)執(zhí)行文件判斷,先找個(gè)同版本操作系統(tǒng),獲取到這個(gè)工具執(zhí)行文件的 md5 值,再獲取可疑的工具執(zhí)行文件 md5 值,比較兩個(gè)值是否相同,如果相同說(shuō)明這個(gè)工具是可信任的,如果不相同很有可能是被替換的。
另外,一般工具可執(zhí)行文件大小都在幾十K到幾百K。
其實(shí)我沒(méi)有用md5方式來(lái)判斷工具是否可信任,因?yàn)檫@臺(tái)操作系統(tǒng)比較老,完全相同版本操作系統(tǒng)不好找,稍微有點(diǎn)差別,工具就有可能已被更新,md5 值不同。
先執(zhí)行了 du –sh /bin/lsof 查看,發(fā)現(xiàn)大小 1.2M,明顯有問(wèn)題。
所以嘗試把正常系統(tǒng)里的 netstat、ps 等工具二進(jìn)制文件上傳到被黑的系統(tǒng)里,替換掉原有的,果然,奇跡出現(xiàn)了~
三、清理木馬程序
執(zhí)行 ps –ef 后,發(fā)下最下面有幾行可疑程序。在這里,本想截圖的,可惜 SSH 客戶端給關(guān)了,沒(méi)留下截圖。
記憶中,大概是這樣的:
pid /sbin/java.log
pid /usr/bin/dpkgd/ps –ef
pid /usr/bin/bsd-port/getty
pid /usr/bin/.sshd
接下來(lái),逐步看看這些進(jìn)程。
怎么會(huì)有個(gè) java.log 的執(zhí)行文件在運(yùn)行呢?找同事是不是他們跑的,說(shuō)是沒(méi)有。那好,先殺掉進(jìn)程并把文件移動(dòng)到別的目錄再看看。
/usr/bin/dpkgd/ps –ef 這個(gè)進(jìn)程怎么像是我執(zhí)行的命令呢?仔細(xì)一看,命令的路徑有問(wèn)題,不是 /bin/ps,進(jìn)入此目錄下查看。
擦,還有幾個(gè),基本可以確定這些工具是被替換了。。。
還有一個(gè) getty 執(zhí)行文件,正常系統(tǒng)下沒(méi)有運(yùn)行這個(gè),估計(jì)又是黑客留下的,殺掉進(jìn)程,刪除目錄。寧可錯(cuò)殺一百,也不放過(guò)一個(gè)!
.sshd 進(jìn)程?明顯很可疑,難道是 ssh 后門(mén),殺掉!
目前這些異常進(jìn)程都已經(jīng)被處理掉。
再執(zhí)行 ps –ef 命令看下,奇怪,java.log 進(jìn)程又起來(lái)了,難道有自啟動(dòng)設(shè)置?于是到了 /etc/init.d 下查看,有個(gè)異常可執(zhí)行文件,正常系統(tǒng)里沒(méi)有,打開(kāi)看了下,果然是自動(dòng)啟動(dòng)木馬程序的腳本。
把這兩個(gè)腳本刪除,再刪除java.log文件,文件不再生成,進(jìn)程也不再運(yùn)行了!
好了,可以開(kāi)啟外網(wǎng)了,觀察了一會(huì)網(wǎng)絡(luò)流量不再飆升了。
四、總結(jié)
ls /usr/bin/dpkgd/ #黑客替換的工具(netstat lsof ps ss),系統(tǒng)自帶的工具正常不會(huì)在這個(gè)目錄下,并且也不可用。
/sbin/java.log #判斷是發(fā)包程序,刪除后會(huì)自動(dòng)生成。
/usr/bin/bsd-port #判斷是自動(dòng)生成 java.log 或著后門(mén)程序。
/usr/sbin/.sshd #判斷是后門(mén)程序。
如果還有其他木馬程序怎么辦?
如果是 XSS 攻擊,應(yīng)用層漏洞入侵怎么辦?
針對(duì)這些問(wèn)題,最好方式就是備份數(shù)據(jù),重裝系統(tǒng),干凈利落。
但從我們公司角度來(lái)說(shuō),暫時(shí)不能重裝系統(tǒng),業(yè)務(wù)比較復(fù)雜,跑的業(yè)務(wù)比較多,還沒(méi)摸清楚,準(zhǔn)備慢慢遷移數(shù)據(jù),再觀察下吧!
黑客趁機(jī)入侵的原因:
- 運(yùn)維人員網(wǎng)絡(luò)安全意識(shí)低,安全策略落實(shí)少;
- 上線前沒(méi)有對(duì)暴露外部的應(yīng)用進(jìn)行安全掃描;
- 沒(méi)有安全測(cè)試人員,沒(méi)有關(guān)注漏洞最新動(dòng)態(tài),不能及時(shí)發(fā)現(xiàn)漏洞;
- 等…。
針對(duì)這次攻擊,總結(jié)下防護(hù)思路:
- Linux 系統(tǒng)安裝后,啟用防火墻,只允許信任源訪問(wèn)指定服務(wù),刪除不必要的用戶,關(guān)閉不必要的服務(wù)等;
- 收集日志,包括系統(tǒng)日志,登錄日志,程序日志等,對(duì)異常關(guān)鍵字告警,及時(shí)發(fā)現(xiàn)潛在風(fēng)險(xiǎn);
- 針對(duì)用戶登錄信息實(shí)時(shí)收集,包括登錄時(shí)間,密碼重試次數(shù)以及用戶執(zhí)行命令記錄等;
- 對(duì)敏感文件或目錄變化進(jìn)行事件監(jiān)控,如 /etc/passwd、/etc/shadow、/web、/tmp (一般上傳文件提權(quán)用)等;
- 進(jìn)程狀態(tài)監(jiān)控,對(duì)新增的進(jìn)程(非業(yè)務(wù)和系統(tǒng)進(jìn)程)監(jiān)控并通知;
- 對(duì)上線的服務(wù)器系統(tǒng)、Web 程序進(jìn)程安全漏洞掃描。