一、關(guān)于linux下的rootkit
rootkit是Linux平臺(tái)下最常見的一種木 馬后門工具,它主要通過替換系統(tǒng)文件來達(dá)到攻 擊和和隱蔽的目的,這種木 馬比普通木 馬后門更加危險(xiǎn)和隱蔽,普通的檢測(cè)工具和檢查手段很難發(fā)現(xiàn)這種木 馬。rootkit攻 擊能力極強(qiáng),對(duì)系統(tǒng)的危害很大,它通過一套工具來建立后門和隱藏行跡,從而讓攻 擊者保住權(quán)限,以使它在任何時(shí)候都可以使用root權(quán)限登錄到系統(tǒng)。
rootkit主要有兩種類型:文件級(jí)別和內(nèi)核級(jí)別,下面分別進(jìn)行簡(jiǎn)單介紹。
1.1、文件級(jí)別rootkit木 馬
文件級(jí)別的rootkit一般是通過程序漏洞或者系統(tǒng)漏洞進(jìn)入系統(tǒng)后,通過修改系統(tǒng)的重要文件來達(dá)到隱藏自己的目的。在系統(tǒng)遭受rootkit木 馬后,合法的文件被木 馬程序替代,變成了外殼程序,而其內(nèi)部是隱藏著的后門程序。通常容易被rootkit替換的系統(tǒng)程序有l(wèi)ogin、ls、ps、ifconfig、du、find、netstat等,其中l(wèi)ogin程序是最經(jīng)常被替換的,因?yàn)楫?dāng)訪問Linux時(shí),無論是通過本地登錄還是遠(yuǎn)程登錄,/bin/login程序都會(huì)運(yùn)行,系統(tǒng)將通過/bin/login來收集并核對(duì)用戶的賬號(hào)和密碼,而rootkit就是利用這個(gè)程序的特點(diǎn),使用一個(gè)帶有根權(quán)限后門密碼的/bin/login來替換系統(tǒng)的/bin/login,這樣攻 擊者通過輸入設(shè)定好的密碼就能輕松進(jìn)入系統(tǒng)。此時(shí),即使系統(tǒng)管理員修改root密碼或者清除root密碼,攻 擊者還是一樣能通過root用戶登錄系統(tǒng)。入 侵者通常在進(jìn)入Linux系統(tǒng)后,會(huì)進(jìn)行一系列的攻 擊動(dòng)作,最常見的是安裝嗅探器收集本機(jī)或者網(wǎng)絡(luò)中其他服務(wù)器的重要數(shù)據(jù)。在默認(rèn)情況下,Linux中也有一些系統(tǒng)文件會(huì)監(jiān)控這些工具動(dòng)作,例如ifconfig命令,所以,攻 擊者為了避免被發(fā)現(xiàn),會(huì)想方設(shè)法替換其他系統(tǒng)文件,常見的就是ls、ps、ifconfig、du、find、netstat等。如果這些文件都被替換,那么在系統(tǒng)層面就很難發(fā)現(xiàn)rootkit已經(jīng)在系統(tǒng)中運(yùn)行了。
這就是文件級(jí)別的rootkit,對(duì)系統(tǒng)維護(hù)很大,目前最有效的防御方法是定期對(duì)系統(tǒng)重要文件的完整性進(jìn)行檢查,如果發(fā)現(xiàn)文件被修改或者被替換,那么很可能系統(tǒng)已經(jīng)遭受了rootkit攻 擊。檢查件完整性的工具很多,常見的有Tripwire、 aide等,可以通過這些工具定期檢查文件系統(tǒng)的完整性,以檢測(cè)系統(tǒng)是否被rootkit入 侵。
1.2、內(nèi)核級(jí)別的rootkit木 馬
內(nèi)核級(jí)rootkit是比文件級(jí)rootkit更高級(jí)的一種攻 擊方式,它可以使攻 擊者獲得對(duì)系統(tǒng)底層的完全控制權(quán),此時(shí)攻 擊者可以修改系統(tǒng)內(nèi)核,進(jìn)而截獲運(yùn)行程序向內(nèi)核提交的命令,并將其重定向到攻 擊者所選擇的程序并運(yùn)行此程序,也就是說,當(dāng)用戶要運(yùn)行程序A時(shí),被攻 擊者修改過的內(nèi)核會(huì)假裝執(zhí)行A程序,而實(shí)際上卻執(zhí)行了程序B。
內(nèi)核級(jí)rootkit主要依附在內(nèi)核上,它并不對(duì)系統(tǒng)文件做任何修改,因此一般的檢測(cè)工具很難檢測(cè)到它的存在,這樣一旦系統(tǒng)內(nèi)核被植入rootkit,攻 擊者就可以對(duì)系統(tǒng)為所欲為而不被發(fā)現(xiàn)。目前對(duì)于內(nèi)核級(jí)的rootkit還沒有很好的防御工具,因此,做好系統(tǒng)安全防范就非常重要,將系統(tǒng)維持在最小權(quán)限內(nèi)工作,只要攻 擊者不能獲取root權(quán)限,就無法在內(nèi)核中植入rootkit。
二、一次Linux.BackDoor.Gates.5(文件級(jí)別rootkit)網(wǎng)絡(luò)帶寬攻 擊案例
2.1、問題現(xiàn)象
事情起因是突然發(fā)現(xiàn)一臺(tái)oracle服務(wù)器外網(wǎng)流量跑的很高,明顯和平常不一樣,最高達(dá)到了200M左右,這明顯是不可能的,因?yàn)閛racle根本不與外界交互,第一感覺是服務(wù)器被入 侵了。被人當(dāng)做肉雞了,在大量發(fā)包。
這是臺(tái)centos6.5 64位的系統(tǒng),已經(jīng)在線上運(yùn)行了70多天了。
2.2、排查問題
排查問題的第一步是查看此服務(wù)器的網(wǎng)絡(luò)帶寬情況,通過監(jiān)控系統(tǒng)顯示,此臺(tái)服務(wù)器占滿了200M的帶寬,已經(jīng)持續(xù)了半個(gè)多小時(shí),接著第二步登錄服務(wù)器查看情況,通過ssh登錄服務(wù)器非常慢,這應(yīng)該就是帶寬被占滿的緣故,不過最后還是登錄上了服務(wù)器,下面是一個(gè)top的結(jié)果;
可以看到,有一個(gè)異常的進(jìn)程占用資源比較高,名字不仔細(xì)看還真以為是一個(gè)Web服務(wù)進(jìn)程。但是這個(gè)Nginx1確實(shí)不是正常的進(jìn)程。
接著,通過pe -ef命令又發(fā)現(xiàn)了一些異常:
發(fā)現(xiàn)有個(gè)/etc/nginx1進(jìn)程,然后查看了這個(gè)文件,是個(gè)二進(jìn)制程序,基本斷定這就是木 馬文件。
同時(shí)又發(fā)現(xiàn),/usr/bin/dpkgd/ps -ef這個(gè)進(jìn)程非常異常,因?yàn)檎G闆r下ps命令應(yīng)該在/bin目錄下才對(duì)。于是進(jìn)入/usr/bin/dpkgd目錄查看了一下情況,又發(fā)現(xiàn)了一些命令,如下圖所示:
由于無法判斷,用了最笨的辦法,找了一臺(tái)正常的機(jī)器,查看了一下ps命令這個(gè)文件的大小,發(fā)現(xiàn)只有80K左右,又檢查了/usr/bin/dpkgd/ps,發(fā)現(xiàn)文件大小不對(duì),接著又檢查了兩個(gè)文件的md5,發(fā)現(xiàn)也不一樣。
初步判斷,這些文件都偽裝的外殼命令,其實(shí)都是有后門的木 馬.
繼續(xù)查看系統(tǒng)可疑目錄,首先查看定時(shí)任務(wù)文件crontab,并沒有發(fā)現(xiàn)異常,然后查看系統(tǒng)啟動(dòng)文件rc.local,也沒有什么異常,接著進(jìn)入/etc/init.d目錄查看,又發(fā)現(xiàn)了比較奇怪的腳本文件DbSecuritySpt、selinux,如下圖所示:
這兩個(gè)文件在正常的系統(tǒng)下是沒有的,所以也初步斷定是異常文件。
接著繼續(xù)查看系統(tǒng)進(jìn)程,通過ps -ef命令,又發(fā)現(xiàn)了幾個(gè)異常進(jìn)程,一個(gè)是/usr/bin/bsd-port,另一個(gè)是/usr/sbin/.sshd,這兩個(gè)進(jìn)程時(shí)隱時(shí)現(xiàn),在出現(xiàn)的瞬間被我抓到了。
查看發(fā)現(xiàn)/usr/bin/bsd-port是個(gè)目錄,進(jìn)入目錄,發(fā)行了幾個(gè)文件,如下圖:
有g(shù)etty字眼,這不是終端管理程序嗎,它用來開啟終端,進(jìn)行終端的初始化,設(shè)置終端,這里出現(xiàn)了終端,馬上聯(lián)想到是否跟登錄相關(guān),于是緊接著,又發(fā)現(xiàn)了/usr/sbin/.sshd,很明顯,這個(gè)隱藏的二進(jìn)制文件.sshd就是個(gè)后 門文件,表面像sshd進(jìn)程,其實(shí)完全不是。
最后,又查看了木 馬最喜歡出現(xiàn)的目錄/tmp,也發(fā)現(xiàn)了異常文件,從名字上感覺好像是監(jiān)控木 馬程序的,如下圖所示:
檢查到這里,基本查明了系統(tǒng)中可能出現(xiàn)的異常文件,當(dāng)然,不排除還有更多的,下面的排查就是查找更多可疑文件,然后刪除即可。
3、查殺病毒文件
要清楚系統(tǒng)中的牧馬病毒,第一步要做的是先清除這些可疑的文件,這里總結(jié)了下此類植入牧馬各種可疑的文件,供大家參考:
檢查是否有下面路徑文件
cat /etc/rc.d/init.d/selinux cat /etc/rc.d/init.d/DbSecuritySpt ls /usr/bin/bsd-port ls /usr/bin/dpkgd
檢查下面文件大小是否正常,可以和正常機(jī)器中的文件做比對(duì):
ls -lh /bin/netstat ls -lh /bin/ps ls -lh /usr/sbin/lsof ls -lh /usr/sbin/ss
如果發(fā)現(xiàn)有上面可疑文件,需要全部刪除,可刪除的文件或目錄如下:
rm -rf /usr/bin/dpkgd (ps netstat lsof ss) #這是加殼命令目錄 rm -rf /usr/bin/bsd-port #這是木 馬程序 rm -f /usr/bin/.sshd #這是木 馬后門 rm -f /tmp/gates.lod rm -f /tmp/moni.lod rm -f /etc/rc.d/init.d/DbSecuritySpt #這是啟動(dòng)上述描述的那些木 馬后的變種程序 rm -f /etc/rc.d/rc1.d/S97DbSecuritySpt #刪除自啟動(dòng) rm -f /etc/rc.d/rc2.d/S97DbSecuritySpt rm -f /etc/rc.d/rc3.d/S97DbSecuritySpt rm -f /etc/rc.d/rc4.d/S97DbSecuritySpt rm -f /etc/rc.d/rc5.d/S97DbSecuritySpt rm -f /etc/rc.d/init.d/selinux #這個(gè)selinux是個(gè)假象,其實(shí)啟動(dòng)的是/usr/bin/bsd-port/getty程序 rm -f /etc/rc.d/rc1.d/S99selinux #刪除自啟動(dòng) rm -f /etc/rc.d/rc2.d/S99selinux rm -f /etc/rc.d/rc3.d/S99selinux rm -f /etc/rc.d/rc4.d/S99selinux rm -f /etc/rc.d/rc5.d/S99selinux
上面的一些命令(ps netstat lsof ss)刪除后,系統(tǒng)中這些命令就不能使用了,怎么恢復(fù)這些命令呢,有兩種方式:一個(gè)是從別的同版本機(jī)器上拷貝一個(gè)正常的文件過來,另一個(gè)是通過rpm文件重新安裝這些命令。
例如,刪除了ps命令后,可以通過yum安裝ps命令:
[root@server ~]#yum -y reinstall procps
其中,procps包中包含了ps命令。
[root@server ~]#yum -y reinstall net-tools [root@server ~]#yum -y reinstall lsof [root@server ~]#yum -y reinstall iproute
上面三個(gè)命令是依次重新安裝netstat、lsof、ss命令。
4、找出異常程序并殺死
所有可疑文件都刪除后,通過top、ps等命令查看可疑進(jìn)程,全部kill掉即可,這樣進(jìn)程kill之后,因?yàn)閱?dòng)文件已經(jīng)清除,所以也就不會(huì)再次啟動(dòng)或者生成牧馬文件了。
這個(gè)案例是個(gè)典型的文件級(jí)別rootkit植入系統(tǒng)導(dǎo)致的,最后檢查植入的原因是由于這臺(tái)oracle服務(wù)器有外網(wǎng)IP,并且沒設(shè)置任何防火墻策略,同時(shí),服務(wù)器上有個(gè)oracle用戶,密碼和用戶名一樣,這樣一來,黑 客通過服務(wù)器暴露在外網(wǎng)的22端口,然后通過暴力破解,通過這個(gè)oracle用戶登錄到了系統(tǒng)上,進(jìn)而植入了這個(gè)rootkit病毒。
三、Linux安全防護(hù)工具ClamAV的使用
ClamAV是一個(gè)在命令行下查毒軟件,是免費(fèi)開源產(chǎn)品,支持多種平臺(tái),如:Linux/Unix、mac OS X、windows、OpenVMS。ClamAV是基于病毒掃描的命令行工具,但同時(shí)也有支持圖形界面的ClamTK工具。為什么說是查毒軟件呢,因?yàn)樗粚⒍咀鳛橹饕δ埽J(rèn)只能查出您服務(wù)器內(nèi)的病毒,但是無法清除,至多刪除文件。不過這樣,已經(jīng)對(duì)我們有很大幫助了。
3.1、快速安裝clamav
clamav的官方網(wǎng)站是http://www.clamav.net, 可以從http://www.clamav.net/downloads 下載最新版本,也可以通過yum在線安裝clamav,因?yàn)閏lamav包含在epel源中,所以方便起見,通過yum安裝最簡(jiǎn)單。
[root@server ~]# yum install epel-release [root@server ~]# yum -y install clamav clamav-milter
很簡(jiǎn)單吧,就這樣clamav已經(jīng)安裝好了。
3.2、更新病毒庫
clamav安裝好后,不能馬上使用,需要先更新一下病毒特征庫,不然會(huì)有告警信息。更新病毒庫方法如下:
[root@server ~]# freshclam ClamAV update process started at Wed Oct 24 12:03:03 2018 Downloading main.cvd [100%] main.cvd updated (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr) Downloading daily.cvd [100%] daily.cvd updated (version: 25064, sigs: 2131605, f-level: 63, builder: neo) Downloading bytecode.cvd [100%] bytecode.cvd updated (version: 327, sigs: 91, f-level: 63, builder: neo) Database updated (6697945 signatures) from database.clamav.net (IP: 104.16.186.138)
保證你的服務(wù)器能夠上網(wǎng),這樣才能下載到病毒庫,更新時(shí)間可能會(huì)長(zhǎng)一些。
3.3、clamav的命令行使用
clamav有兩個(gè)命令,分別是clamdscan和clamscan,其中,clamdscan命令一般用yum安裝才有,需要啟動(dòng)clamd服務(wù)才能使用,執(zhí)行速度較快;而clamscan命令通用,不依賴服務(wù),命令參數(shù)較多,執(zhí)行速度稍慢。推薦使用clamscan。
執(zhí)行“clamscan -h”可獲得使用幫助信息,clamscan常用的幾個(gè)參數(shù)含義如下:
-r/--recursive[=yes/no] 表示遞歸掃描子目錄 -l FILE/--log=FILE 增加掃描報(bào)告 --move [路徑] 表示移動(dòng)病毒文件到指定的路徑 --remove [路徑] 表示掃描到病毒文件后自動(dòng)刪除病毒文件 --quiet 表示只輸出錯(cuò)誤消息 -i/--infected 表示只輸出感染文件 -o/--suppress-ok-results 表示跳過掃描OK的文件 --bell 表示掃描到病毒文件發(fā)出警報(bào)聲音 --unzip(unrar) 表示解壓壓縮文件進(jìn)行掃描
下面看幾個(gè)例子:
(1)、查殺當(dāng)前目錄并刪除感染的文件
[root@server ~]# clamscan -r --remove
(2)、掃描所有文件并且顯示有問題的文件的掃描結(jié)果
[root@server ~]# clamscan -r --bell -i /
(3)、掃描所有用戶的主目錄文件
[root@server ~]# clamscan -r /home
(4)、掃描系統(tǒng)中所有文件,發(fā)現(xiàn)病毒就刪除病毒文件,同時(shí)保存殺毒日志
[root@server ~]# clamscan --infected -r / --remove -l /var/log/clamscan.log
3.4、查殺系統(tǒng)病毒
下面命令是掃描/etc目錄下所有文件,僅輸出有問題的文件,同時(shí)保存查殺日志。
[root@server ~]# clamscan -r /etc --max-recursion=5 -i -l /mnt/a.log ----------- SCAN SUMMARY ----------- Known viruses: 6691124 Engine version: 0.100.2 Scanned directories: 760 Scanned files: 2630 Infected files: 0 Data scanned: 186.64 MB Data read: 30.45 MB (ratio 6.13:1) Time: 72.531 sec (1 m 12 s)
可以看到,掃描完成后有結(jié)果統(tǒng)計(jì)。
下面我們從eicar.org下載一個(gè)用于模擬病毒的文件,看一下clamav是否能夠掃描出來,
[root@server mnt]# wget http://www.eicar.org/download/eicar.com [root@liumiaocn mnt]# ls eicar.com
然后,重新掃描看是否能夠檢測(cè)出新下載的病毒測(cè)試文件。執(zhí)行如下命令:
[root@server ~]# clamscan -r / --max-recursion=5 -i -l /mnt/c.log /mnt/eicar.com: Eicar-Test-Signature FOUND ----------- SCAN SUMMARY ----------- Known viruses: 6691124 Engine version: 0.100.2 Scanned directories: 10 Scanned files: 187 Infected files: 1 Data scanned: 214.09 MB Data read: 498.85 MB (ratio 0.43:1) Time: 80.826 sec (1 m 20 s)
可以看到,病毒文件被檢測(cè)出來了。eicar.com是一個(gè)Eicar-Test-Signature類型病毒文件。缺省的方式下,clamscan只會(huì)檢測(cè)不會(huì)自動(dòng)刪除文件,要?jiǎng)h除檢測(cè)出來的病毒文件,使用“--remove”選項(xiàng)即可。
3.5、設(shè)置自動(dòng)更新病毒庫和查殺病毒
病毒庫的更新至關(guān)重要,要實(shí)現(xiàn)自動(dòng)更新,可在計(jì)劃任務(wù)中添加定時(shí)更新病毒庫命令,也就是在crontab添加如下內(nèi)容:
* 1 * * * /usr/bin/freshclam --quiet
表示每天1點(diǎn)更新病毒庫。
實(shí)際生產(chǎn)環(huán)境應(yīng)用,一般使用計(jì)劃任務(wù),讓服務(wù)器每天晚上定時(shí)殺毒。保存殺毒日志,也就是在crontab添加如下內(nèi)容:
* 22 * * * clamscan -r / -l /var/log/clamscan.log --remove
此計(jì)劃任務(wù)表示每天22點(diǎn)開始查殺病毒,并將查殺日志寫入/var/log/clamscan.log文件中。
病毒是猖獗的,但是只要有防范意識(shí),加上各種查殺工具,完全可以避免牧馬或病毒的入 侵。