■河南 許紅軍
WebShell木馬其實(shí)就是以ASP、PHP、JSP或CGI等網(wǎng)頁文件形式存在的惡意文件,其本質(zhì)上是一種非法的命令執(zhí)行環(huán)境,或者可稱為網(wǎng)頁后門。當(dāng)黑客在入侵了一個網(wǎng)站后,通常會將ASP或PHP等后門文件與網(wǎng)站正常的網(wǎng)頁文件混在一起,然后就可以使用瀏覽器來訪問ASP或者PHP等后門,得到一個命令執(zhí)行環(huán)境,以達(dá)到控制網(wǎng)站服務(wù)器的目的。
某單位網(wǎng)站無法訪問,對其進(jìn)行檢測后,發(fā)現(xiàn)其采用的是Nginx+Tomcat+MySQL的架構(gòu),前端的Nginx服務(wù)器將請求發(fā)送給后端的多臺Tomcat服務(wù)器,實(shí)現(xiàn)負(fù)載均衡功能。
這些服務(wù)器上安裝的都是CentOS6.X系統(tǒng),硬件配置較高,按照常理是不會出現(xiàn)反應(yīng)遲緩之類的問題的。在Nginx服務(wù)器上執(zhí)行“top”命令,在“l(fā)oad average”欄中顯示系統(tǒng)的負(fù)載并不高,Nginx進(jìn)程的CPU占用率并不高,內(nèi)存是比較充裕的??偤蛠砜?,Nginx服務(wù)器的運(yùn)行狀態(tài)是正常的。
但是,在Tomcat服務(wù)器上執(zhí)行“top”命令后,發(fā)現(xiàn)系統(tǒng)的符合處于很高的狀態(tài),內(nèi)存使用率居高不下,可用內(nèi)存只有兩三百兆。多個Java進(jìn)程的CPU占用率都長時間處于100%狀態(tài),啟用Java進(jìn)程的是普通賬戶。對多臺Tomcat服務(wù)器進(jìn)行檢測,發(fā)現(xiàn)情況都大體相似。
要想發(fā)現(xiàn)問題所在,最好的辦法是查看相關(guān)的日志。在某臺Tomcat服務(wù)器上執(zhí)行“tail -f access_log.2019-07-21 .txt”命令,發(fā)現(xiàn)存在一些異常的訪問信息,例如“Get/www/779.html HTTP/1.1”等內(nèi)容。
執(zhí)行“tail-f access_log.2019-07-21 .txt|grep 779.html”命令,顯示和該奇怪的“779.html”的所有信息。執(zhí)行“cat access_log.2019-07-21 |grep 779.html wc-l”命令,顯示訪問該網(wǎng)頁文件的次數(shù)。發(fā)現(xiàn)針對該頁面的訪問數(shù)量巨大,遠(yuǎn)遠(yuǎn)超出了日常實(shí)際的訪問量。進(jìn)入網(wǎng)站目錄,執(zhí)行“l(fā)s”命令,發(fā)現(xiàn)存在很多名稱異常的HTML文件,這顯然不是系統(tǒng)生成的。打開問這些來歷不明的HTML文件,發(fā)現(xiàn)都是一些涉嫌欺詐的廣告信息。毫無疑問,網(wǎng)站一定被黑客滲透,并植入了WebShell木馬。
在網(wǎng)站目錄中仔細(xì)搜索,發(fā)現(xiàn)一個名為“welcome.jsp”的文件極為可疑,因為根據(jù)日期判斷,該JSP文件創(chuàng)建的時間較新,和網(wǎng)站正常的JSP文件明顯不同。打開該JSP文件,發(fā)現(xiàn)設(shè)置一個JSP木馬程序,因為在程序內(nèi)部發(fā)現(xiàn)了諸如“process=Runtime.getRuntime().exe(cmd)”之類的語句,毫無疑問,這是在執(zhí)行提交的命令。很顯然,黑客只需在訪問該JSP 的地址后面添加注入“?cmd=ls”之類的內(nèi)容,就可以很輕松地執(zhí)行提交的命令,進(jìn)入對服務(wù)器進(jìn)行各種非法操作。
例如,黑客可以利用“touch”命令,在網(wǎng)站指定路徑寫入文件等。不過,因為啟用Tomcat 進(jìn)程的是普通用戶,所以黑客在執(zhí)行各種非法操作時,會因為權(quán)限問題無法對系統(tǒng)造成更大的破壞。如果是以Root 賬戶啟動Tomacat 進(jìn)程的話,那么危害就太大了。黑客肯定不會滿足于此,一定會采用其他的方法方法來執(zhí)行提權(quán)操作,來獲取更大的權(quán)限。執(zhí)行“netstat -n|awk '/^tcp/{++S[$NF]}END {for (a in S) print a,S[a]}'”命令,分析服務(wù)器的網(wǎng)絡(luò)連接信息。
發(fā)現(xiàn)在“Time_Wait”和“ESTABLISHED”欄中顯示大量的連接數(shù),前者表示連接被主動關(guān)閉,正在等待遠(yuǎn)程Socket 關(guān)閉連接,后者表示正在使用的連接。這兩類連接比較高,說明外界正在大量的和該服務(wù)器建立間接,服務(wù)器疲于應(yīng)對,消耗了大量資源,無法對這些連接做出正常響應(yīng)才造成無法正常訪問的故障。
通過對網(wǎng)站進(jìn)行分析,發(fā)現(xiàn)被惡意注入了大量的垃圾廣告頁面和SEO 搜索信息,造成大量的無關(guān)訪問。執(zhí)行“tail -f access_log.2019-07-21 .txt |grep xxxspider|wc”命令,果然在Tomcat日志中發(fā)現(xiàn)和某些搜索引擎相關(guān)的連接信息,其中的“xxx”為具體的搜索引擎名稱。
針對以上分析,黑客之所以可以在網(wǎng)站網(wǎng)站中傳入WebShell 木馬,肯定是利用了對網(wǎng)站的某些漏洞。經(jīng)過對網(wǎng)站程序的分析,發(fā)現(xiàn)一段驗證代碼存在安全問題,造成黑客破解了后臺管理頁面的登錄信息,進(jìn)而上傳了WebShell 木馬。
因此,首先對網(wǎng)站程序進(jìn)行修補(bǔ),加強(qiáng)了安全性。為了防止惡意網(wǎng)絡(luò)爬蟲對網(wǎng)站進(jìn)行襲擾,可以打開Nginx的配置文件“nginx.conf”,在其中對應(yīng)的“{server}”段中添加“if ($http_user_agent~* "qihoobot|xxxS pider|yyyspider")”,“{”,“return 403;”,“}”等行,禁止指定的網(wǎng)絡(luò)爬蟲搜索本站。
其中的“xxx”“yyy”表示具體的爬蟲名稱,可以根據(jù)需要進(jìn)行修改和添加,爬蟲名稱之間以“|”連接。這樣,當(dāng)這些爬蟲搜索本站時,就會得到403 的錯誤信息讓其無功而返。對網(wǎng)站文件進(jìn)行全面的掃描,發(fā)現(xiàn)并刪除大量的包含垃圾廣告內(nèi)容的頁面,清除發(fā)現(xiàn)的JSP 木馬程序。因為黑客植入的都是靜態(tài)頁面,后端的Tomcat 擅長處理動態(tài)頁面,對于靜態(tài)頁面處理的能力有限。
因此,為了提高網(wǎng)站性能,最后利用動靜分離技術(shù)將靜態(tài)頁面交由Nginx 處理,讓Tomcat 只處理動態(tài)頁面,這樣可以優(yōu)化網(wǎng)站結(jié)構(gòu),具體的實(shí)現(xiàn)方法這里就不再贅述了。
經(jīng)過仔細(xì)的清除刪除操作,網(wǎng)站終于恢復(fù)到了正常的狀態(tài)。
針對以上和WebShell木馬的較量,可以看到WebShell 木馬具有很強(qiáng)的隱蔽性和破壞力。WebShell木馬一般會隱藏在正常文件中,并修改自身文件時間來逃避搜索,甚至有些WebShell 木馬還會利用服務(wù)器的某些漏洞進(jìn)行深度隱藏。比較狡猾的WebShell木馬還會藏身到正常的網(wǎng)頁文件中,利用特定的參數(shù)來運(yùn)行,這大大提高了其排查的難度。
WebShell 木馬可以很輕松突破服務(wù)器防火墻,因為其是利用TCP 80 端口和黑客通訊,因此不會遭到防火墻的攔截。WebShell 的活動狀態(tài)一般不會被系統(tǒng)日志記錄下來,只會在在網(wǎng)站的Web日志中留下一些蹤跡,缺乏經(jīng)驗的管理員一般是難以發(fā)現(xiàn)其行蹤的。對于黑客來說,一般會使用掃描器對網(wǎng)站進(jìn)行掃描,探測存在的漏洞,進(jìn)而獲取管理員的后臺密碼登錄到后臺管理環(huán)境。
之后利用后臺的管理工具,向網(wǎng)站特定位置寫入WebShell 木馬,黑客還可能自定義上傳文件類型,來非法上傳PHP、JSP 等木馬文件。對于操作系統(tǒng)來說,也可能存在漏洞,黑客可以通過掃描這些漏洞,在系統(tǒng)中植入WebShell 木馬。有些網(wǎng)站在前臺程序中提供有上傳功能,這也給黑客的入侵帶來了便利,如果網(wǎng)站存取權(quán)限或者上傳目錄權(quán)限控制有漏洞的話,就很容易招致黑客的攻擊。
對于動態(tài)網(wǎng)頁來說,要從根本上提高腳本的安全問題,必須做到防注入、防爆庫、防COOKIES 欺騙、防跨站攻擊(xss)等。
例如對于可寫目錄來說,不要設(shè)置執(zhí)行權(quán)限,有執(zhí)行權(quán)限的目錄不要設(shè)置寫權(quán)限等。在維護(hù)網(wǎng)站時,最好使用FTP 來上傳文件,盡量不要使用ASP、PHP 等上傳程序。ASP/JSP 等上傳程序的調(diào)用必須進(jìn)行身份認(rèn)證,只允許信任用戶使用上傳程序。
網(wǎng)站后臺的管理員賬戶名和密碼要有一定復(fù)雜性,不能過于簡單,還要注意定期更換。對于網(wǎng)站數(shù)據(jù)庫名稱和存放路徑來說,不要使用默認(rèn)路徑,要進(jìn)行適當(dāng)?shù)男薷模瑪?shù)據(jù)庫名稱要有一定復(fù)雜性。要盡量保持程序是最新版本,防范存在的漏洞。不要在網(wǎng)頁上添加后臺管理程序登錄頁面鏈接。為防止程序有未知漏洞,可以在維護(hù)后刪除后臺管理程序的登錄頁面,下次維護(hù)時再通過上傳即可。要時常備份數(shù)據(jù)庫等重要文件,在平常的維護(hù)時,要細(xì)心查看是否存在來歷不明的腳本文件。
利用合適的規(guī)則上傳文件,禁止上傳存在安全風(fēng)險的文件類型,上傳目錄權(quán)限遵循最小權(quán)限原則??偟膩碚f,需要對網(wǎng)站進(jìn)行定期的掃描和安全監(jiān)測,及時修復(fù)存在的漏洞,對于程序的上傳功能來說,要進(jìn)行必要的限制和優(yōu)化,強(qiáng)化對于權(quán)限的管理,重要的目錄必須限制腳本的運(yùn)行權(quán)限,甚至禁止腳本的運(yùn)行。后臺網(wǎng)站密碼要僅可能的復(fù)雜,后臺路徑不要使用“Login”“Admin”等易于被猜測到的路徑名等。
操作系統(tǒng)要做好基礎(chǔ)的安全維護(hù)工作,例如封鎖危險的端口,配置嚴(yán)格的安全策略,及時打上最新的補(bǔ)丁等,讓黑客無機(jī)可乘,使其無法利用WebShell 木馬來攻擊網(wǎng)站。