一、說明
如果出現文件上傳漏洞和命令執行類漏洞(包括命令注入、緩沖區溢出、反序列化等)都會讓人擔心,系統是否系統已被上傳webshell甚至植入木馬程序。如果依靠人工排查,一是工作量大二是需要一定程度的技術知識和業務知識才能判斷什么是正常什么是異常。工作量大決定排查工作不可能由個別具有技術知識和業務知識的人來完成工作而需要其他人員參與,而如果這些沒有“一定程度的技術知識和業務知識”的人員參與基本必然后導致大量的誤報和漏報(主要是漏報)。總而言之,在大量設備場景中人工排查后門是很難切實有效推行的排查手段。
所謂服務器后門,其本質其與桌面系統的病毒、木馬並沒有很大區別。在桌面系統中我們可以輕松使用360點擊查殺完成病毒木馬的查殺,在服務器我們也可以使用類似工具完成后門的查殺。至於漏報誤報必然還是有的但會比人工排查少,至於效率則會高得多。
二、使用WebShellKiller查殺webshell
2.1 WebShellKiller簡介
WebShellKiller是深信服發布的一款webshell查殺工具,支持jsp、asp、aspx、php等腳本的檢查。
下載及更詳細說明見鏈接:http://edr.sangfor.com.cn/backdoor_detection.html
由於不是商用產品也不是開源產品,所以不能保證其后續是否持續維護更新,但基於以下兩點就算不再更新該產品還是比較可靠的。
首先,從當前效果看使用https://github.com/tennc/webshell.git webshell進行測試絕大部分都是能正確判斷。
其次,身為webshell注定其最終必定要生成代碼調用那些固定的危險函數,所以webshell的變形是有限制的,也就是所謂的“免殺”其實有比較高的門檻。
WebShellKiller支持windows和linux,我們這里只講linux,windows直接解壓雙擊運行沒有什么操作性就不多講了。
另外windows平台的webshell查殺還可以使用d盾WebShellKill:http://www.d99net.net/down/WebShellKill_V2.0.9.zip
在線查殺可使用百度webdir+:https://scanner.baidu.com/#/pages/intro
2.2 WebShellKiller安裝使用
我在本機操作過程如下,本機不能連接什么的只要做等效操作去替代即可
# 下載WebShellKiller wget http://edr.sangfor.com.cn/tool/WebShellKillerForLinux.tar.gz # 解壓到當前目錄 tar -zxf WebShellKillerForLinux.tar.gz # 查看解壓結果,可以看到多出centos_32、centos_64、linux_64三個文件夾 # 如果是centos 32/redhat 32那就使用centos_32,如果是centos 64/redhat 64那就使用centos_64,如果是其他linux 64那就使用linux_64 ls # 查看當前操作系統 cat /etc/system-release # 查看當前操作系統是32位還是64位;x86是32位,x86_64或x64是64位;一般都是64位 uname -m # 我這里是centos 64所以進入centos_64 cd centos_64/wscan_app/ # 查看當前目錄文件,wscan是主程序 ls # wscan默認沒有可執行權限,需要加上 chmod u+x wscan # wscan從LD_LIBRARY_PATH加載so文件,需要將當前路徑加到LD_LIBRARY_PATH以使wscan能找到當前目錄下的so export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH # 執行掃描,../../webshell/jsp是我這里要掃描的路徑,改成自己要掃描的即可 # 被列出的文件即是被認為可疑的文件,人工識別是否為web應用自己所用文件即可 ./wscan -hrf ../../webshell/jsp
操作截圖如下:
三、使用clamav查殺木馬文件
clamav是開源木馬病毒查殺軟件,clamav依靠其數據庫clamav-db進行查殺,clamav-db是持續更新的。其他安裝可參考官方文檔:http://www.clamav.net/documents/installing-clamav
3.1 安裝與卸載
3.1.1 可聯網centos/redhat系統yum安裝與卸載
# 配置軟件倉庫,centos倉庫沒有clamav yum install -y epel-release # 安裝clamav依賴,其實如果是yum會自動安裝依賴,寫出來只是強調一下 yum install gcc openssl zlib -y # 安裝clamav yum install -y clamav # 卸載clamav yum remove clamav*
3.1.2 不可聯網centos/redhat系統rpm安裝
不可聯網系統可在可聯網的同版本操作系統上下載好rpm包后再上傳上去安裝,如果gcc、openssl、zlib沒安裝用類似的方法安裝上即可(如果有深層次依賴這操作可能有點痛苦)。
可聯網機下載clamav(32位和64位都會下載根據自己操作系統選擇使用即可;.i686是32位,.x86_64是64位):
# 這兩個命令有時不好使,不行就換着用 # 使用yumdownloader下載clamav及其數據庫clamav-db # yumdownloader可以是非root用戶執行 yumdownloader clamav clamav-db # 使用yum下載clamav及其數據庫clamav-db # yum 必須是root用戶才能執行 yum install --downloadonly --downloaddir=. clamav clamav-db -y
不可聯網機安裝和卸載clamav:
# 上傳后進入上傳到的目錄下,使用root執行安裝 rpm -Uvh clamav-db*.rpm rpm -Uvh clamav*.rpm # 卸載 clamav rpm -e clamav clamav-db
3.1.3 源碼編譯安裝
前兩種安裝方式雖然比較方便但安裝需要root且文件會散部到各系統文件夾中去,如果同期系統服務出現問題業務說是你裝這個東西動了某些文件造成的,雖然這根本是無稽之談但如果對系統不夠了解你難免沒有底氣。手動編譯一可以不使用root二可以安裝到指定目錄,所以可能比較麻煩(編譯時沒有報錯也就兩條命令但這基本是理想狀態,首先gcc/openssl/zlib三個依賴不太可能都已裝好其次還可能有其他問題)但反而是一種比較穩妥的方式。
不過由於下載病毒庫需要聯網所以這種方式並不能用於不能連接外網的環境中。
源碼下載地址:http://www.clamav.net/downloads
# 編譯,--prefix=指定安裝位置必須是絕對路徑形式,我這里是/usr/myapp/clamav,改成自己的 # --disable-clamav檢測是否創建了clamav,直接禁用掉 ./configure --prefix=/usr/myapp/clamav --disable-clamav # 當沒有error時使用make進行編譯,需要幾分鍾 # 如果是要重新編譯,make前先用make clean清空之前編譯出來的文件 make # 完成后使用make install進行安裝 make install # 卸載,文件夾不會刪除但其下文件已全刪除 make uninstall
3.2 配置
這里以手動安裝時為例,如果是yum或rpm形式安裝那么默認配置和數據庫都裝好了,clamscan也已在環境變量中不需要此步。
# 創建存放日志和病毒庫的文件夾 mkdir /usr/myapp/clamav/logs mkdir /usr/myapp/clamav/db # clamav日志文件不存在時不會自動創建只會報錯退出所以先把稍后要用的日志文件創建出來 touch /usr/myapp/clamav/logs/clamd.log touch /usr/myapp/clamav/logs/freshclam.log # 如是root用戶運行那么clamav會強制切換到clamav用戶運行 # 也就是說如果是root用戶那么clamav用戶必須存在 # 如果本來就是以普通用戶運行,因為編譯時使用了--disable-clamav所以可以不用創建 # shell設置為/bin/false用戶不能用於登錄所以不會降低系統安全性 # groupadd clamav # useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav # 如果以root運行,由於系統切換到clamav用戶,所以需要將日志賦給clamav用戶其才能寫日志 # chown clamav:clamav /usr/myapp/clamav/logs/clamd.log # chown clamav:clamav /usr/myapp/clamav/logs/freshclam.log # 啟用配置文件 cd etc cp clamd.conf.sample clamd.conf cp freshclam.conf.sample freshclam.conf
編緝clamd.conf,修改以下四項(# Example表示將Example那項給注釋掉,其余各項具體值根據自己路徑修改):
# Example LogFile /usr/myapp/clamav/logs/clamd.log PidFile /usr/myapp/clamav/logs/clamd.pid DatabaseDirectory /usr/myapp/clamav/db
編緝freshclam.conf,修改以下四項(# Example表示將Example那項給注釋掉,其余各項具體值根據自己路徑修改):
# Example DatabaseDirectory /usr/myapp/clamav/db UpdateLogFile /usr/myapp/clamav/logs/freshclam.log PidFile /usr/myapp/clamav/logs/freshclam.pid
完成后最后進入bin目錄使用freshclam下載/更新病毒庫(如果不掛vpn,會比較慢甚至直接失敗原因你懂得):
cd ../bin
./freshclam
3.3 查殺
# 進行查殺,-r表示遍歷子文件夾,-l表示將發現的可疑文件記錄到文件中 ./clamscan -r -l scan.log ../../webshell/jsp # 查看掃描結果 cat scan.log
記錄其中的文件都是可疑文件,clamav主要是針對系統木馬病毒的,我電腦沒現成病毒以webshell代替,clamav只將少數webshell認為有問題。
四、使用Rootkit Hunter查殺rootkit
一般殺毒軟件運行於ring3級別只能查殺ring3級別的木馬,rookit是運行於ring0級別的木馬,所以查殺rootkit也需要ring0級殺毒程序。Rootkit Hunter正是一款專門查殺rootkit的軟件。
項目官網:http://rkhunter.sourceforge.net/
4.1 安裝與卸載
離線rpm包安裝類似clamav的3.1.2那樣操作即可,這里只介紹yum和手動編譯。
4.1.1 聯網yum安裝與卸載
# 配置epel倉庫 yum install epel-release # 安裝 yum install rkhunter -y # 卸載 yum erase rkhunter -y
4.1.2 手動編譯安裝與卸載
# 創建安裝目錄 mkdir rkhunter # 下載,替換成此時最新文件鏈接 wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz # 解壓到當前文件夾 tar -zxf rkhunter-1.4.6.tar.gz # 建入解壓出的文件夾 cd rkhunter-1.4.6 # 使用installer.sh文件進行安裝,--layout custom用於自定義安裝路徑 ./installer.sh --layout custom /usr/myapp/rkhunter --install # 卸載 ./installer.sh --layout custom /usr/myapp/rkhunter --remove
4.2 查殺
前邊安裝可以使用普通用戶,但查殺一定要root才能執行(要想在ring0運行這是必須的)。
# 進入可執行文件所在目錄 cd ../rkhunter/bin/ # 執行查殺,前面的命行都可用非root用戶執行但查殺必須使用root才行 # 查殺會分幾部分進行,以下命令完成一部分后需要回車才進行下一部分 ./rkhunter -c # 可以使用--skip-keypress參數跳過回車 ./rkhunter -c --skip-keypress
查殺輸出六部分分別如下:
第一部分,Checking system commands,進行系統命令的檢查,主要是檢測系統的二進制文件,因為這些文件最容易被rootkit。顯示OK字樣表示正常,顯示Warning表示有異常,需要引起注意,而顯示“Not found”字樣,一般無需理會。
第二部分,Checking for rootkits,主要檢測常見的rootkit程序,顯示綠色的“Not found”表示系統未感染此rootkit。
第三部分,Performing additional rootkit checks,主要是一些特殊或附加的檢測,例如對rootkit文件或目錄檢測、對惡意軟件檢測以及對指定的內核模塊檢測。
第四部分,Checking the network/Checking the local host,主要對網絡、系統端口、系統啟動文件、系統用戶和組配置、SSH配置、文件系統等進行檢測。
第五部分,主要是對應用程序版本進行檢測。(我用時好像沒有這部分?)
第六部分,System checks summary,其實是上面輸出的一個總結,通過這個總結,可以大概了解服務器目錄的安全狀態。
實際操作看第一部分誤報概率比較大,主要關注第六部分輸出中Rootkit checks結果即可。
參考:
http://edr.sangfor.com.cn/backdoor_detection.html