Webshell入侵檢測初探(一)
0×01:Webshell簡介
攻擊者在入侵企業網站時,通常要通過各種方式獲取webshell從而獲得企業網站的控制權,然後方便進行之後的入侵行為。常見攻擊方式有:直接上傳獲取webshell、SQL%E6%B3%A8%E5%85%A5/">SQL注入、遠端檔案包含(RFI)、FTP,甚至使用跨站點指令碼(XSS)作為攻擊的一部分,甚至一些比較老舊的方法利用後臺資料庫備份及恢復獲取webshell、資料庫壓縮等。通用功能包括但不限於shell命令執行、程式碼執行、資料庫列舉和檔案管理。
1.Webshell分類
webshell從協議上來看,最開始基於 TCP、UDP 的 Shell,到後來基於ICMP 的 Shell和基於DNS 的shell 。從依託工具上看,有 nc 反彈、telnet 反彈、SSH 埠轉發等手段,極度猥瑣的甚至還有利用 awk 的反彈 Shell。從語言上看,各種流行的語言都能用來寫後門,從bash 到 3P(Perl Python PHP)再到 Ruby 和 Java。
2.Webshell功能
(1)站長工具
Webshell被站長常常用於網站管理、伺服器管理等,根據FSO許可權的不同,作用有線上編輯網頁尾本、上傳下載檔案、檢視資料庫、執行任意程式命令等。
(2)持續遠端訪問
入侵者可以利用從而達到長期控制網站伺服器的目的,若攻擊者自行修復了漏洞,以確保沒有其他人會利用該漏洞,攻擊者可以低調的隨時控制伺服器。一些流行的webshell使用密碼驗證和其他技術來確保只有上傳webshell的攻擊者才能訪問它。(webshell密碼爆破工具表示不服)
(3)許可權提升
在伺服器沒有配置錯誤的情況下,webshell將在web伺服器的使用者許可權下執行,該使用者許可權是有限的。通過使用webshell,攻擊者可以嘗試通過利用系統上的本地漏洞來執行許可權提升,常見的有查詢敏感配置檔案、通過核心漏洞提權、利用低許可權使用者目錄下可被Root許可權使用者呼叫的指令碼提權、任務計劃等(從入門到放棄)
(4)極強的隱蔽性
有些惡意網頁尾本可以巢狀在正常網頁中執行,且不容易被查殺。webshell還可以穿越伺服器防火牆,由於與被控制的伺服器或遠端主機互動的資料都是通過80埠傳遞,因此不會被防火牆攔截,在沒有記錄流量的情況下,webshell使用post包傳送,也不會被記錄在系統日誌中,只會在web日誌中記錄一些資料提交的記錄。
0×02:WebShell檢測
1.基於webshell特徵檢測
常見webshell函式
(1)存在系統呼叫的命令執行函式,如eval、system、cmd_shell、assert等;
(2)存在系統呼叫的檔案操作函式,如fopen、fwrite、readdir等;
(3)存在資料庫操作函式,呼叫系統自身的儲存過程來連線資料庫操作;
(4)具備很深的自身隱藏性、可偽裝性,可長期潛伏到web原始碼中;
(5)衍生變種多,可通過自定義加解密函式、利用xor、字串反轉、壓縮、截斷重組等方法來繞過檢測;
//利用base64編碼 <?php $b = base64_encode(‘whoami‘); echo $b.‘<br />‘; echo base64_decode($b).'<br />';?>//利用gzcompress壓縮 <?php $c = gzcompress('whoami'); echo $c.'<br>'; echo gzuncompress($c)."<br />";?>
//進位制運算 <?php@$_++; $__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/"); ?> //利用註釋符 <?php@${$__}[!$_](${$__}[$_]);@$_="s"."s"./*-/*-*/"e"./*-/*-*/"r";@$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t";@$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"}[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]);?>
以上對於webshell本身的行為分析 ,它帶有對於系統呼叫、系統配置、資料庫、檔案的操作動作,可以通過關鍵詞匹配指令碼檔案找出webshell,再如一些壓縮後的資料, 有可能一些WAF並不會檢測到內容存在危險。變性後的資料,WAF也檢測不出存在的危險,首先指令碼檔案帶有這些特殊的函式,本身就是可疑檔案,當然也還有其他方式可以去進行檢測。
這類檢測可以通過grep去查詢webshell,D盾之類的webshell查殺工具也是利用這種原理,對原始碼進行查殺。但經常會存在黑客在上傳完webshell後門,獲取到自己想要的資訊後,就會刪除掉webshell,又或者遇到了一些變形過的webshell後門,我們的關鍵字沒有搜尋到,這時候通過檔案去找到webshell的方法就不適用了。
find/site/* -type f -name "*.php"|xargs grep "eval"
如果木馬做了免殺處理,可以檢視是否使用加密函式:
find /site/* -type f -name “*.php” |xargs grep "base64_decode"
檢視是否做了拼接處理:
find /site/* -type f -name “*.php” |xargs grep "@$"
對搜尋到的內容,手動檢視是否是木馬,可以在本地開啟指令碼檔案,檢視網頁生成時間或者上傳至一些檢測的網站進行檢測( ofollow,noindex" target="_blank">http://www.virscan.org/ ; https://x.threatbook.cn/ ),當然去分析程式碼也是完全沒問題的。
2.基於流量特徵的webshell檢測
(1)基於流量行為特徵的webshell檢測
基於流量的檢測,是無法通過檢測構成webshell危險函式的關鍵詞來做檢測的,但webshell帶有常見寫的系統呼叫、系統配置、資料庫、檔案的操作動作等,它的行為方式決定了它的資料流量中多帶引數具有一些明顯的特徵,通過匹配行為的流量特徵做檢測,這也是基於webshell入侵後行為特徵進行檢測,當然也可以從系統層面webshell入侵行為進行檢測。
ipconfig/ifconfigsystemwhoaminetstatevaldatabasesysteminfo......
常見的可以從data資料中去檢索攻擊者常用的命令和payload等,當然大部分的webshell不會這麼直接,可能會經過編碼,如最經典的webshell中國菜刀採用的是先url編碼再base64編碼,對應的採取解碼的方式去發現敏感的行為特徵。這也是抓取流量的好處,因為在web訪問日誌中,是無法抓取POST方式的包,也就沒法分析webshell入侵後的行為,而流量很好的做到了這一點。
(2)基於webshell工具特徵的檢測
中國菜刀webshell流量特徵檢測:
使用最常見的一句話木馬搭建的環境,直接抓包檢視,可以看到菜刀傳送的資料包。
經過解碼後可以看到當前執行的命令是netstat -an,那麼以上那些關閉錯誤回顯、“z1”等字串操作就是中國菜刀這款webshell的特徵。

webacoo webshell流量特徵檢測:
使用webacoo工具生成webshell並進行連線抓包測試 。

通過wireshark等抓包工具進行分析,可以發現編碼通訊內容通過cookie頭傳輸,其中有三個cm、cn和cp變數,這是webacoo webshell管理工具的特徵。

3.基於webshell系統行為特徵的檢測
這個思路和基於webshell的流量行為特徵進行檢測的想法大概一直,攻擊者上傳webshell總會做些什麼,那麼可以去監測系統的變化以及敏感的操作,儘可能的去收集伺服器的資訊,通過和之前的配置以及檔案的變化對比監測系統達到儘可能發現webshell的成果。
(1)檔案分析
檢視/tmp、/init.d、/usr/bin、/usr/sbin等敏感目錄有無可疑的檔案,針對可以的檔案可使用stat進行建立修改時間、訪問時間的詳細檢視,若修改時間距離事件日期接近,有線性關聯,說明可能被篡改或者其他。
對於檔案還可使用查詢新增檔案的方式來查詢接近安全事件時間的檔案。
例如:
要查詢24小時內被修改的PHP檔案:
find ./ -mtime 0 -name "*.php"
不只是php檔案,很多後門都會創建出很多檔案。
根據確定時間去反推變更的檔案:
ls -al /tmp | grep "Feb 27"
查詢777的許可權以及隱藏的檔案 (以“.”開頭的檔案具有隱藏屬性):
find / *.jsp -perm 4777
(2)程序分析
使用netstat 網路連線命令,分析可疑埠、可疑IP、可疑PID及程式程序(top可以實時動態的檢視系統的整體執行情況,主要分析cpu和記憶體多的程序,是一個不錯的綜合了多方面資訊監測系統性能和執行資訊的實用工具),最好可以去區分對外的監聽埠和對內的監聽埠,一般可以有效的查找出後門。
netstat –antlp | more
如上圖DNS後門利用python進行dns查詢,dns作為通道進行隱蔽通訊的核心就是把要傳遞的資料作為DNS請求的HOSTNAME部分。通過抓包可以看到流量是經過加密的,通過流量檢測不一定能檢測出來,當然還可以通過rootkit等方法將程序進行隱藏,linux /proc會為每個進行建立一個目錄,按他的pid來命令,也可根據這個來分析。可通過以下命令檢視隱藏程序:
ps -ef | awk '{print}' | sort -n | uniq >1 ls /proc | sort -n |uniq >2 diff 1 2
(3)系統資訊分析
history (cat /root/.bash_history) //檢視分析history (cat /root/.bash_history),曾經的命令操作痕跡,以便進一步排查溯源 /etc/passwd //檢視有無新增的惡意使用者或者除root之外uid為0的使用者 crontab/etc/cron* //檢視當前的任務計劃有哪些,是否有後門木馬程式啟動相關資訊 $PATH //分析有無敏感可疑資訊 ......
以上也是應急經常去分析的系統資訊,但是放在webshell檢測上也同樣適合,也適用於webshell入侵檢測,如發現可疑項,可通過逆向思維去分析。這塊我也和很多大佬溝通過,包括在入侵檢測中,簡單的都可以很好去發現,比如通過最原始的爆破進行分析溯源,IDS很好的解決了很多人為的重複性工作,對於變形或者繞過的攻擊,可能需要儘可能的提取多的資訊,串線綜合去分析,APT等高階攻擊,檢測會相當的麻煩,願聽大佬講解。
(4)配置檔案
如最普通的將pam.d下的ssh的驗證模組改成su的驗證模組,那麼再次登入,驗證uid為0,那麼root就免密登入,而一般情況下,不仔細也是無法觀察出的,還有更多的後門,再入php.ini後門,所以需要去監控一些培訓檔案,與之前的配置檔案比較,以便於發現問題所在。
(5)chkrootkit/rkhunter
chkrootkit是用來監測 rootkit 是否被安裝到當前系統中的工具。rootkit ,是一類入侵者經常使用的工具。這類工具通常非常的隱祕、令使用者不易察覺,通過這類工具,入侵者建立了一條能夠常時入侵系統,或者說對系統進行實時控制的途徑。所以,我們要用 chkrootkit 來定時監測系統,以保證系統的安全。
chkrootkit主要功能:
檢測是否被植入後門、木馬、rootkit
檢測系統命令是否正常(避免在入侵檢測分析時使用已被替換的命令)
檢測登入日誌
使用chkrootkit –n;如果發現有異常,會報出“INFECTED”字樣。
rkhunter是Linux系統平臺下的一款開源入侵檢測工具,具有非常全面的掃描範圍,除了能夠檢測各種已知的rootkit特徵碼以外,還支援埠掃描、常用程式檔案的變動情況檢查。
rkhunter主要功能:
系統命令(Binary)檢測,包括Md5 校驗
Rootkit檢測
本機敏感目錄、系統配置、服務及套間異常檢測
三方應用版本檢測
假如系統的命令(例如netstat ls 等)被替換,為了進一步排查,需要下載一新的或者從其他未感染的主機拷貝新的命令。當然類似像Login後門這種的檢測,同樣可以使用命令md5sum對現有/bin/login檔案作校驗,與以前的值作比較。
4.基於web日誌webshell行為特徵的檢測
在準備分析webshell和攻擊事件之前,先了解系統架構,如伺服器型別、業務架構、網路拓撲等。
Ø 伺服器型別:windows、linux etc..
Ø cms:dedecms、phpcms、trs cms etc..
Ø 中介軟體、容器、框架、資料庫:tomcat、iis、apache、weblogic、struts、mysqletc..
Ø 指令碼語言:asp、php、jsp etc..
Ø 業務架構:如前端網頁內容是否是後端通過ftp上傳的(新聞網偏多) etc..
……
接著來看下常見黑客的攻擊步驟:
正常情況下攻擊者會先去尋找web漏洞,就像我下圖一樣,通過一些高危的漏洞,比如Struts2、反序列、SQL注入等等,然後直接獲取webshell。
最常見的就是通過尋找一個sql注入點,獲取網站後臺的管理員賬號密碼,然後在後臺上傳一個webshell。上傳了webshell,留下了一個指令碼檔案在伺服器上,那麼通過查詢webshell也是在應急的時候的一個切入口,通過webshell來確定時間和攻擊者,進而從時間維度和攻擊維度進一步分析。
如上文利用grep命令搜尋常見webshell木馬裡面可能會用的危險函式,找到webshell,然後再從日誌裡翻出關於這個webshell的記錄,找到訪問wenshell的攻擊者ip,從而繼續搜尋攻擊者的訪問記錄,就可以還原整個攻擊者做過的動作了。
webshell的訪問特徵(如果你非要告訴我攻擊者把webshell插入了其他的動態頁面中2333):
1)少量的IP對其發起訪問
2)總的訪問次數少
3)該頁面屬於孤立頁面
那麼接下來就可以使用awk、uniq、sort或者指令碼對url每天的總訪問數量、url獨立訪問的頁面等進行統計分析。
awk -F " " '{print $1}' log |sort| uniq -c |sort -nr |more cat access.log | cut-f1 -d " " | sort | uniq -c | sort -k 1 -r | head -10//檢視頁面訪問排名前十的IP cat access.log | cut-f4 -d " " | sort | uniq -c | sort -k 1 -r | head -10//檢視頁面訪問排名前十的URL
在日誌提權的時候儘可能的去除掉一些靜態的頁面和錯誤請求資訊,常見的可以通過grep -v去排除,排除項有:
1)去除靜態path(例如jpeg,jpg,gif,png,bmp,css,js,xls,xlsx,doc,xml,wav,tar.gz,zip,swf,mp3,ico,pidf,torrent) ;
2)去除白名單path (例如主頁index.php,index.asp,index.aspx,index.ashx,index.html);
3)去除非webshell字尾的path (例如asp,aspx,php,jsp,py,cgi,pl,java,sh,war,cfm,phtml);
4)去除掃描器造成的path(按掃描器IP信譽庫(雲掃描器IP信譽庫與時效性掃描器IP信譽庫)與掃描器行為(可以簡單的按ip host聚類,將單位時間內請求數超過M,獨立路徑數超過N的請求視為掃描器)來去除);
5)去除響應碼非200的path。
5.webshell其他檢測方法
從這開始以下內容全為道聽途說,但很多企業是正在做的,本人技術有限,未能親自實踐,只是為了文章的完整性!
(1)動態檢測(沙箱)
上面介紹了靜態檢測,通過對指定指令碼的關鍵詞、高危函式、問價修改時間、許可權等以及和其他檔案的關聯性等多個緯度的特徵進行檢測。速度快,且能快速定位;動態特徵檢測通過Webshell執行時使用的系統命令或者網路流量及狀態的異常來判斷動作的威脅程度,Webshell通常會被加密從而避免靜態 特徵的檢測,當Webshell執行時就必須向系統傳送系統命令來達到控制系統或者操作資料庫的目的,通過檢測系統呼叫來監測甚至攔截系統命令被執行,從行為模式上深度檢測指令碼檔案的安全性。這種我能想到的就是類似於python爬蟲的使用Selenium模擬瀏覽器行為。
(2)統計學
在日誌分析中,基於webshell特徵去發現webshell也範屬於統計學。NeoPiS 國外流行的一個基於統計學的webshell後門檢測工具,它使用五種計學方法在指令碼檔案中搜索潛在的被混淆或被編碼的惡意程式碼。
NeoPi使用以下五種檢測方法:
1)資訊熵(Entropy):通過使用ASCII碼錶來衡量檔案的不確定性;
2)最長單詞(LongestWord):最長的字串也許潛在的被編碼或被混淆;
3)重合指數(Indexof Coincidence):低重合指數預示檔案程式碼潛在的被加密或被混效過;
4)特徵(Signature):在檔案中搜索已知的惡意程式碼字串片段;
5)壓縮(Compression):對比檔案的壓縮比。
機器學習:
引用下兜哥的分享 360&chksm=8cd9c5e6bbae4cf0e3eed6192133c6c87de47cfcc911fca90d86f1383d5ec2f6f1cf661aaeb6" rel="nofollow,noindex" target="_blank">基於機器學習的 Webshell 發現技術探索 和github上的專案 機器學習檢測Webshell
0×03:webshell防禦
從根本上解決動態網頁尾本的安全問題,要做到防注入、防暴庫、防COOKIES欺騙、防跨站攻擊等等,務必配置好伺服器FSO許可權。
1.建議使用者通過ftp來上傳、維護網頁,儘量不安裝asp的上傳程式。
2.對asp上傳程式的呼叫一定要進行身份認證,並只允許信任的人使用上傳程式。
3.asp程式管理員的使用者名稱和密碼要有一定複雜性,不能過於簡單,還要注意定期更換。
4.到正規網站下載程式,下載後要對資料庫名稱和存放路徑進行修改,資料庫名稱要有一定複雜性。
5.要儘量保持程式是最新版本。
6.不要在網頁上加註後臺管理程式登陸頁面的連結。
7.為防止程式有未知漏洞,可以在維護後刪除後臺管理程式的登陸頁面,下次維護時再通過上傳即可。
8.要時常備份資料庫等重要檔案。
9.日常要多維護,並注意空間中是否有來歷不明的asp檔案。
10.儘量關閉網站搜尋功能,利用外部搜尋工具,以防爆出資料。
11.利用白名單上傳檔案,不在白名單內的一律禁止上傳,上傳目錄許可權遵循最小許可權原則。
後記:
本著共享的精神,水平有限,還望見諒!
一個人的信安之路好難~~~
參考文獻:
http://www.360doc.com/content/16/0612/17/30594932_567188526.shtml
https://github.com/tennc/webshell
《UNIX Linux網路日誌分析與流量監控》
*本文作者罹♛殤,轉載請註明來自FreeBuf.COM