一,關於Linux下的rootkit
- rootkit是Linux平台下最常見的一種木 馬后門工具,它主要通過替換系統文件來達到攻擊和和隱蔽的目的,這種木馬比普通木 馬后門更加危險和隱蔽,普通的檢測工具和檢查手段很難發現這種木馬。rootkit攻 擊能力極強,對系統的危害很大,它通過一套工具來建立后門和隱藏行跡,從而讓攻 擊者保住權限,以使它在任何時候都可以使用root權限登錄到系統。
- rootkit主要有兩種類型
- 文件級別
- 內核級別
1.1 文件級別rootkit木馬
- 文件級別的rootkit一般是通過程序漏洞或者系統漏洞進入系統后,通過修改系統的重要文件來達到隱藏自己的目的。在系統遭受rootkit木馬后,合法的文件被木馬程序替代,變成了外殼程序,而其內部是隱藏着的后門程序。通常容易被rootkit替換的系統程序有login、ls、ps、ifconfig、du、find、netstat等,其中login程序是最經常被替換的,因為當訪問Linux時,無論是通過本地登錄還是遠程登錄,/bin/login程序都會運行,系統將通過/bin/login來收集並核對用戶的賬號和密碼,而rootkit就是利用這個程序的特點,使用一個帶有根權限后門密碼的/bin/login來替換系統的/bin/login,這樣攻 擊者通過輸入設定好的密碼就能輕松進入系統。此時,即使系統管理員修改root密碼或者清除root密碼,攻擊者還是一樣能通過root用戶登錄系統。入侵者通常在進入Linux系統后,會進行一系列的攻擊動作,最常見的是安裝嗅探器收集本機或者網絡中其他服務器的重要數據。在默認情況下,Linux中也有一些系統文件會監控這些工具動作,例如ifconfig命令,所以,攻擊者為了避免被發現,會想方設法替換其他系統文件,常見的就是ls、ps、ifconfig、du、find、netstat等。如果這些文件都被替換,那么在系統層面就很難發現rootkit已經在系統中運行了。
- 這就是文件級別的rootkit,對系統維護很大,目前最有效的防御方法是定期對系統重要文件的完整性進行檢查,如果發現文件被修改或者被替換,那么很可能系統已經遭受了rootkit攻擊。檢查完整性的工具很多,常見的有Tripwire、 aide等,可以通過這些工具定期檢查文件系統的完整性,以檢測系統是否被rootkit入侵。
1.2 內核級別的rootkit木馬
- 內核級rootkit是比文件級rootkit更高級的一種攻擊方式,它可以使攻擊者獲得對系統底層的完全控制權,此時攻擊者可以修改系統內核,進而截獲運行程序向內核提交的命令,並將其重定向到攻擊者所選擇的程序並運行此程序,也就是說,當用戶要運行程序A時,被攻擊者修改過的內核會假裝執行A程序,而實際上卻執行了程序B。
- 內核級rootkit主要依附在內核上,它並不對系統文件做任何修改,因此一般的檢測工具很難檢測到它的存在,這樣一旦系統內核被植入rootkit,攻擊者就可以對系統為所欲為而不被發現。目前對於內核級的rootkit還沒有很好的防御工具,因此,做好系統安全防范就非常重要,將系統維持在最小權限內工作,只要攻擊者不能獲取root權限,就無法在內核中植入rootkit。
二,一次Linux.BackDoor.Gates.5(文件級別rootkit)網絡帶寬攻擊案例
2.1 問題現象
事情起因是突然發現一台oracle服務器外網流量跑的很高,明顯和平常不一樣,最高達到了200M左右,這明顯是不可能的,因為oracle根本不與外界交互,第一感覺是服務器被入 侵了。被人當做肉雞了,在大量發包。
這是台centos6.5 64位的系統,已經在線上運行了70多天了。
2.2 排查問題
排查問題的第一步是查看此服務器的網絡帶寬情況,通過監控系統顯示,此台服務器占滿了200M的帶寬,已經持續了半個多小時,接着第二步登錄服務器查看情況,通過ssh登錄服務器非常慢,這應該就是帶寬被占滿的緣故,不過最后還是登錄上了服務器,下面是一個top的結果;

- 可以看到,有一個異常的進程占用資源比較高,名字不仔細看還真以為是一個Web服務進程。但是這個nginx1確實不是正常的進程。
- 接着,通過ps -ef命令又發現了一些異常:

- 發現有個/etc/nginx1進程,然后查看了這個文件,是個二進制程序,基本斷定這就是木 馬文件。
- 同時又發現,/usr/bin/dpkgd/ps -ef這個進程非常異常,因為正常情況下ps命令應該在/bin目錄下才對。於是進入/usr/bin/dpkgd目錄查看了一下情況,又發現了一些命令,如下圖所示:

由於無法判斷,用了最笨的辦法,找了一台正常的機器,查看了一下ps命令這個文件的大小,發現只有80K左右,又檢查了/usr/bin/dpkgd/ps,發現文件大小不對,接着又檢查了兩個文件的md5,發現也不一樣。
初步判斷,這些文件都偽裝的外殼命令,其實都是有后門的木馬
繼續查看系統可疑目錄,首先查看定時任務文件crontab,並沒有發現異常,然后查看系統啟動文件rc.local,也沒有什么異常,接着進入/etc/init.d目錄查看,又發現了比較奇怪的腳本文件DbSecuritySpt、selinux,如下圖所示:

- 這兩個文件在正常的系統下是沒有的,所以也初步斷定是異常文件。
- 接着繼續查看系統進程,通過ps -ef命令,又發現了幾個異常進程,一個是/usr/bin/bsd-port,另一個是/usr/sbin/.sshd,這兩個進程時隱時現,在出現的瞬間被我抓到了。
- 查看發現/usr/bin/bsd-port是個目錄,進入目錄,發行了幾個文件,如下圖:

有getty字眼,這不是終端管理程序嗎,它用來開啟終端,進行終端的初始化,設置終端,這里出現了終端,馬上聯想到是否跟登錄相關,於是緊接着,又發現了/usr/sbin/.sshd,很明顯,這個隱藏的二進制文件.sshd就是個后 門文件,表面像sshd進程,其實完全不是。
最后,又查看了木馬最喜歡出現的目錄/tmp,也發現了異常文件,從名字上感覺好像是監控木馬程序的,如下圖所示:

檢查到這里,基本查明了系統中可能出現的異常文件,當然,不排除還有更多的,下面的排查就是查找更多可疑文件,然后刪除即可。
2.3 查殺病毒文件
要清楚系統中的木馬病毒,第一步要做的是先清除這些可疑的文件,這里總結了下此類植入牧馬各種可疑的文件,供大家參考:
#檢查是否有下面路徑文件cat /etc/rc.d/init.d/selinuxcat /etc/rc.d/init.d/DbSecuritySptls /usr/bin/bsd-portls /usr/bin/dpkgd#檢查下面文件大小是否正常,可以和正常機器中的文件做比對:ls -lh /bin/netstatls -lh /bin/psls -lh /usr/sbin/lsofls -lh /usr/sbin/ss#如果發現有上面可疑文件,需要全部刪除,可刪除的文件或目錄如下:>rm -rf /usr/bin/dpkgd (ps netstat lsof ss) #這是加殼命令目錄rm -rf /usr/bin/bsd-port #這是木 馬程序rm -f /usr/bin/.sshd #這是木馬后門rm -f /tmp/gates.lodrm -f /tmp/moni.lodrm -f /etc/rc.d/init.d/DbSecuritySpt #這是啟動上述描述的那些木馬后的變種程序rm -f /etc/rc.d/rc1.d/S97DbSecuritySpt #刪除自啟動rm -f /etc/rc.d/rc2.d/S97DbSecuritySptrm -f /etc/rc.d/rc3.d/S97DbSecuritySptrm -f /etc/rc.d/rc4.d/S97DbSecuritySptrm -f /etc/rc.d/rc5.d/S97DbSecuritySptrm -f /etc/rc.d/init.d/selinux #這個selinux是個假象,其實啟動的是/usr/bin/bsd-port/getty程序rm -f /etc/rc.d/rc1.d/S99selinux #刪除自啟動rm -f /etc/rc.d/rc2.d/S99selinuxrm -f /etc/rc.d/rc3.d/S99selinuxrm -f /etc/rc.d/rc4.d/S99selinuxrm -f /etc/rc.d/rc5.d/S99selinux
上面的一些命令(ps netstat lsof ss)刪除后,系統中這些命令就不能使用了,怎么恢復這些命令呢,有兩種方式:一個是從別的同版本機器上拷貝一個正常的文件過來,另一個是通過rpm文件重新安裝這些命令。
#例如,刪除了ps命令后,可以通過yum安裝ps命令:[root@server ~]# yum -y reinstall procps
其中,procps包中包含了ps命令。
#下面的依次是netstat,lsof,ss命令[root@server ~]# yum -y reinstall net-tools[root@server ~]# yum -y reinstall lsof[root@server ~]# yum -y reinstall iproute
2.4 找出異常程序並殺死
- 所有可疑文件都刪除后,通過top、ps等命令查看可疑進程,全部kill掉即可,這樣進程kill之后,因為啟動文件已經清除,所以也就不會再次啟動或者生成木馬文件了。
- 這個案例是個典型的文件級別rootkit植入系統導致的,最后檢查植入的原因是由於這台oracle服務器有外網IP,並且沒設置任何防火牆策略,同時,服務器上有個oracle用戶,密碼和用戶名一樣,這樣一來,黑 客通過服務器暴露在外網的22端口,然后通過暴力破解,通過這個oracle用戶登錄到了系統上,進而植入了這個rootkit病毒。
三,rootkit后門檢測工具chkrootkit
- chkrootkit是一款小巧易用的Unix平台上的可以檢測多種rootkit木 馬的工具。它的功能包括:
- 檢測文件修改
- utmp/wtmp/last日志修改、
- 界面欺騙(promiscuous interfaces)、
- 惡意核心模塊(maliciouskernel modules)。
- 它的官方址:http://www.chkrootkit.org/
目前最新版本為chkrootkit 0.52,chkrootkit沒有包含在官方的CentOS源中,因此要采取手動編譯的方法來安裝,不過這種安裝方法也更加安全。
3.1 准備編譯環境
[root@localhost ~]# cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core)[root@localhost ~]# systemctl stop firewalld[root@localhost ~]# systemctl disable firewalld[root@localhost ~]# systemctl stop NetworkManager[root@localhost ~]# systemctl disable NetworkManager[root@localhost ~]# yum -y install gcc gcc-c++ make glibc*
3.2 下載和安裝chkrootkit
[root@localhost ~]# wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz[root@localhost ~]# lsanaconda-ks.cfg chkrootkit.tar.gz[root@localhost ~]# tar xf chkrootkit.tar.gz -C /usr/local/[root@localhost ~]# cd /usr/local/[root@localhost local]# mv chkrootkit-0.52 chkrootkit[root@localhost local]# cd chkrootkit/[root@localhost chkrootkit]# make sense[root@localhost ~]# ln -s /usr/local/chkrootkit/chkrootkit /usr/local/bin/[root@localhost ~]# which chkrootkit/usr/local/bin/chkrootkit
3.3 使用chkrootkit
#查看命令幫助[root@localhost ~]# chkrootkit -hUsage: /usr/local/bin/chkrootkit [options] [test ...]Options:-h 顯示幫助信息-V 顯示版本信息-l 顯示測試內容-d debug模式,顯示檢測過程相關指令程序-q 安靜模式,只顯示有問題的內容-x 高級模式,顯示所有檢測結果-r dir 設置指定的目錄為根目錄-p dir1:dir2:dirN 指定chkrootkit檢測時使用系統命令的目錄-n 跳過NFS連接的目錄#chkrootkit使用比較簡單,直接執行chkrootkit命令即可自動開始檢測系統。下面是某個系統的檢測結果:[root@localhost ~]# chkrootkitROOTDIR is `/'Checking `amd'... not foundChecking `basename'... not infectedChecking `biff'... not foundChecking `chfn'... not infectedChecking `chsh'... not infectedChecking `cron'... not infectedChecking `crontab'... not infectedChecking `date'... not infectedChecking `du'... not infected`說明:從輸出可以看出,not infected表示未被感染;如果出現infected表示已經感染;針對被感染rootkit的系統,最安全而有效的方法就是備份數據重新安裝系統
3.4 chkrootkit的缺點
chkrootkit在檢查rootkit的過程中使用了部分系統命令,因此,如果服務器被植入,那么依賴的系統命令可能也已經被攻擊者替換,此時chkrootkit的檢測結果將變得完全不可信。為了避免chkrootkit的這個問題,可以在服務器對外開放前,事先將chkrootkit使用的系統命令進行備份,在需要的時候使用備份的原始系統命令讓chkrootkit對rootkit進行檢測。這個過程可以通過下面的操作實現:
[root@server ~]# mkdir /usr/share/.commands[root@server ~]# cp `which --skip-alias awk cut echo find egrep id head ls netstat ps strings sed uname` /usr/share/.commands[root@server ~]# /usr/local/chkrootkit/chkrootkit -p /usr/share/.commands/[root@server share]# cd /usr/share/[root@server share]# tar zcvf commands.tar.gz .commands[root@server share]# rm -rf commands.tar.gz
上面這段操作是在/usr/share/下建立了一個.commands隱藏文件,然后將chkrootkit使用的系統命令進行備份到這個目錄下。為了安全起見,可以將.commands目錄壓縮打包,然后下載到一個安全的地方進行備份,以后如果服務器遭受攻擊,就可以將這個備份上傳到服務器任意路徑下,然后通過chkrootkit命令的“-p”參數指定這個路徑進行檢測即可。
四,rootkit后門檢測工具RKHunter
- Rkhunter的中文名叫“Rootkit獵手”, 目前可以發現大多數已知的rootkits和一些嗅探器以及后門程序。它通過執行一系列的測試腳本來確認服務器是否已經感染rootkits,比如檢查rootkits使用的基本文件,可執行二進制文件的錯誤文件權限,檢測內核模塊等等。在官方的資料中,RKHunter可以作的事情有:
- MD5校驗測試,檢測文件是否有改動
- 檢測rootkit使用的二進制和系統工具文件
- 檢測特洛伊木 馬程序的特征碼
- 檢測常用程序的文件屬性是否異常
- 檢測系統相關的測試
- 檢測隱藏文件
- 檢測可疑的核心模塊LKM
- 檢測系統已啟動的監聽端口
4.1 安裝RKHunter
- KHunter的官方網頁地址為:http://rootkit.nl/projects/rootkit_hunter.html
- 目前的最新版本是rkhunter-1.4.6.tar.gz。 可以從https://sourceforge.net/projects/rkhunter/files/下載, RKHunter的安裝非常簡單,可以通過源碼安裝,也可以在線yum安裝,這里以centos7.5為例,過程如下:
#在線安裝RKHunter[root@localhost ~]# yum -y install epel-release[root@localhost ~]# yum -y install rkhunter
4.2 使用rkhunter指令
rkhunter命令的參數較多,但是使用非常簡單,直接運行rkhunter即可顯示此命令的用法。下面簡單介紹下rkhunter常用的幾個參數選項。
[root@localhost ~]# which rkhunter/usr/bin/rkhunter[root@localhost ~]# rkhunter --help常用的幾個參數有:-c, --check #必選參數,表示檢測當前系統--configfile <file> #使用特定的配置文件--cronjob #作為cron任務定期運行--sk, --skip-keypress #自動完成所有檢測,跳過鍵盤輸入--summary #顯示檢測結果的統計信息--update #檢測更新內容
4.3 使用rkhunter開始檢測系統
#執行這個即可開始檢測[root@localhost ~]# rkhunter -c

從圖中可以看出,檢查主要分成6個部分:
第一部分是進行系統命令的檢查,主要是檢測系統的二進制文件,因為這些文件最容易被rootkit。顯示OK字樣表示正常,顯示Warning表示有異常,需要引起注意,而顯示“Not found”字樣,一般無需理會。第二部分,主要檢測常見的rootkit程序,顯示綠色的“Not found”表示系統未感染此rootkit。第三部分,主要是一些特殊或附加的檢測,例如對rootkit文件或目錄檢測、對惡意軟件檢測以及對指定的內核模塊檢測。第四部分,主要對網絡、系統端口、系統啟動文件、系統用戶和組配置、SSH配置、文件系統等進行檢測。第五部分,主要是對應用程序版本進行檢測。第六部分,其實是上面輸出的一個總結,通過這個總結,可以大概了解服務器目錄的安全狀態。
在Linux終端使用rkhunter來檢測,最大的好處在於每項的檢測結果都有不同的顏色顯示,如果是綠色的表示沒有問題,如果是紅色的,那就要引起關注了。另外,在上面執行檢測的過程中,在每個部分檢測完成后,需要以Enter鍵來繼續。如果要讓程序自動運行,可以執行如下命令:
[root@localhost ~]# /usr/local/bin/rkhunter --check --skip-keypress
同時,如果想讓檢測程序每天定時運行,那么可以在/etc/crontab中加入如下內容:
10 3 * * * root /usr/local/bin/rkhunter --check --cronjob
這樣,rkhunter檢測程序就會在每天的3:10分運行一次。
- Rkhunter擁有並維護着一個包含rootkit特征的數據庫,然后它根據此數據庫來檢測系統中的rootkits,所以可以對此數據庫進行升級,如下所示:
[root@localhost ~]# rkhunter --update
那么簡單來講,RKhunter就像我們的殺毒軟件,有着自己的病毒數據庫,對每一個重點命令進行比對,當發現了可疑代碼則會提示用戶。
五,Linux安全防護工具ClamAV的使用
ClamAV是一個在命令行下查毒軟件,是免費開源產品,支持多種平台,如:Linux/Unix、MAC OS X、Windows、OpenVMS。ClamAV是基於病毒掃描的命令行工具,但同時也有支持圖形界面的ClamTK工具。為什么說是查毒軟件呢,因為它不將殺毒作為主要功能,默認只能查出您服務器內的病毒,但是無法清除,至多刪除文件。不過這樣,已經對我們有很大幫助了。
5.1 快速安裝ClamAV
[root@localhost ~]# yum -y install epel-release[root@localhost ~]# yum -y install clamav clamav-milter
5.2 更新病毒庫
Clamav安裝好以后,不能馬上使用,需要先更新一下病毒特征庫,不然會有告警信息。
更新病毒庫方法如下:
[root@localhost ~]# freshclamClamAV update process started at Thu Nov 22 23:07:48 2018Downloading main.cvd [100%]main.cvd updated (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)Downloading daily.cvd [100%]daily.cvd updated (version: 25143, sigs: 2158200, f-level: 63, builder: neo)Downloading bytecode.cvd [100%]bytecode.cvd updated (version: 327, sigs: 91, f-level: 63, builder: neo)Database updated (6724540 signatures) from database.clamav.net (IP: 104.16.189.138)
5.3 clamav的命令行使用
clamav有兩個命令,分別是clamdscan和clamscan,其中,clamdscan命令一般用yum安裝才有,需要啟動clamd服務才能使用,執行速度較快;而clamscan命令通用,不依賴服務,命令參數較多,執行速度稍慢。推薦使用clamscan。
執行“clamscan -h”可獲得使用幫助信息,clamscan常用的幾個參數含義如下:
[root@localhost ~]# clamscan -h-r/--recursive[=yes/no] #表示遞歸掃描子目錄-l FILE/--log=FILE #增加掃描報告--move [路徑] #表示移動病毒文件到指定的路徑--remove [路徑] #表示掃描到病毒文件后自動刪除病毒文件--quiet #表示只輸出錯誤消息-i/--infected #表示只輸出感染文件-o/--suppress-ok-results #表示跳過掃描OK的文件--bell #表示掃描到病毒文件發出警報聲音--unzip(unrar) #表示解壓壓縮文件進行掃描
下面看幾個例子:
#查殺當前目錄並刪除感染的文件[root@localhost ~]# clamscan -r --remove/root/.bash_logout: OK/root/.bash_profile: OK/root/.bashrc: OK/root/.cshrc: OK/root/.tcshrc: OK/root/anaconda-ks.cfg: OK/root/.viminfo: OK/root/.bash_history: OK/root/chkrootkit.tar.gz: OK----------- SCAN SUMMARY -----------Known viruses: 6717473Engine version: 0.100.2Scanned directories: 3Scanned files: 9Infected files: 0Data scanned: 0.42 MBData read: 0.04 MB (ratio 12.00:1)Time: 9.872 sec (0 m 9 s)#掃描所有文件並且顯示有問題的文件的掃描結果[root@localhost ~]# clamscan -r --bell -i /#掃描所有用戶的主目錄文件[root@localhost ~]# clamscan -r /home#掃描系統中所有文件,發現病毒就刪除病毒文件,同時保存殺毒日志[root@localhost ~]# clamscan --infected -r / --remove -l /var/log/clamscan.log
5.4 查殺系統病毒
下面命令是掃描/etc目錄下所有文件,僅輸出有問題的文件,同時保存查殺日志。
[root@localhost ~]# clamscan -r /etc --max-recursion=5 -i -l /mnt/a.log----------- SCAN SUMMARY -----------Known viruses: 6717473Engine version: 0.100.2Scanned directories: 605Scanned files: 1677Infected files: 0Data scanned: 181.76 MBData read: 23.99 MB (ratio 7.58:1)Time: 22.540 sec (0 m 22 s)
可以看到,掃描完成后有結果統計。
下面我們從eicar.org下載一個用於模擬病毒的文件,看一下clamav是否能夠掃描出來.
#如果被阻止,需要關閉宿主機的殺毒軟件[root@localhost mnt]# wget http://www.eicar.org/download/eicar.com--2018-11-22 23:22:38-- http://www.eicar.org/download/eicar.com正在解析主機 www.eicar.org (www.eicar.org)... 213.211.198.62正在連接 www.eicar.org (www.eicar.org)|213.211.198.62|:80... 已連接。已發出 HTTP 請求,正在等待回應... 200 OK長度:68 [application/octet-stream]正在保存至: “eicar.com”100%[====================================================================================>] 68 --.-K/s 用時 0s2018-11-22 23:22:39 (10.6 MB/s) - 已保存 “eicar.com” [68/68])[root@localhost mnt]# lsa.log eicar.com#現在我們進行掃描[root@localhost ~]# clamscan -r /mnt --max-recursion=5 -i -l /mnt/c.log/mnt/eicar.com: Eicar-Test-Signature FOUND #發現病毒----------- SCAN SUMMARY -----------Known viruses: 6717473Engine version: 0.100.2Scanned directories: 1Scanned files: 3Infected files: 1Data scanned: 0.54 MBData read: 0.27 MB (ratio 2.00:1)Time: 9.491 sec (0 m 9 s)
可以看到,病毒文件被檢測出來了。eicar.com是一個Eicar-Test-Signature類型病毒文件。缺省的方式下,clamscan只會檢測不會自動刪除文件,要刪除檢測出來的病毒文件,使用“--remove”選項即可。
5.5 設置自動更新病毒庫和查殺病毒
病毒庫的更新至關重要,要實現自動更新,可在計划任務中添加定時更新病毒庫命令,也就是在crontab添加如下內容:
#每天1點更新病毒庫* 1 * * * /usr/bin/freshclam --quiet#每天22點開始查殺病毒,並將查殺日志寫入/var/log/clamscan.log文件中* 22 * * * clamscan -r / -l /var/log/clamscan.log --remove
