標籤:目錄許可權 提取 開源 經典的 dir 配置 系統架構 執行函數 查詢
0x01:Webshell簡介
×××者在企業網站時,通常要通過各種方式擷取webshell從而獲得企業網站的控制權,然後方便進行之後的行為。常見×××方式有:直接上傳擷取webshell、SQL注入、遠程檔案包含(RFI)、FTP,甚至使用跨網站指令碼(XSS)作為×××的一部分,甚至一些比較老舊的方法利用後台Database Backup及恢複擷取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日誌中記錄一些資料提交的記錄。
0x02: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 />";?>
//進位運算 <[email protected]$_++; $__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/"); ?>//利用注釋符<[email protected]${$__}[!$_](${$__}[$_]);@$_="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 "@$"
對搜尋到的內容,手動查看是否是×××,可以在本地開啟指令檔,查看網頁產生時間或者上傳至一些檢測的網站進行檢測(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
image.png如DNS後門利用python進行dns查詢,dns作為通道進行隱蔽通訊的核心就是把要傳遞的資料作為DNS請求的HOSTNAME部分。通過抓包可以看到流量是經過加密的,通過流量檢測不一定能檢測出來,當然還可以通過rootkit等方法將進程進行隱藏,linux /proc會為每個進行建立一個目錄,按他的pid來命令,也可根據這個來分析。可通過以下命令查看隱藏進程:
ps -ef | awk ‘{print}‘ | sort -n | uniq >1ls /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主要功能:
l 檢測是否被植入後門、×××、rootkit
l 檢測系統命令是否正常(避免在***檢測分析時使用已被替換的命令)
l 檢測登入日誌
使用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 |morecat access.log | cut-f1 -d " " | sort | uniq -c | sort -k 1 -r | head -10 //查看頁面訪問排名前十的IPcat access.log | cut-f4 -d " " | sort | uniq -c | sort -k 1 -r | head -10 //查看頁面訪問排名前十的URL
在日誌提權的時候儘可能的去除掉一些靜態頁面和錯誤請求資訊,常見的可以通過grep -v去排除,排除項有:
一:去除靜態path(例如jpeg,jpg,gif,png,bmp,css,js,xls,xlsx,doc,xml,wav,tar.gz,zip,swf,mp3,ico,pidf,torrent) 二:去除白名單path (例如首頁index.php,index.asp,index.aspx,index.ashx,index.html)三:去除非webshell尾碼的path (例如asp,aspx,php,jsp,py,cgi,pl,java,sh,war,cfm,phtml)四:去除掃描器造成的path(按掃描器IP信譽庫(雲掃描器IP信譽庫與時效性掃描器IP信譽庫)與掃描器行為(可以簡單的按ip host聚類,將單位時間內請求數超過M,獨立路徑數超過N的請求視為掃描器)來去除)五:去除響應碼非200的path
5.webshell其他檢測方法
從這開始以下內容全為道聽途說,但很多企業是正在做的,本人技術有限,未能親自實踐,只是為了文章的完整性!
一:動態檢測(沙箱)
上面介紹了靜態檢測,通過對指定指令碼的關鍵詞、高危函數、問價修改時間、許可權等以及和其他檔案的關聯性等多個緯度的特徵進行檢測。速度快,且能快速定位;動態特徵檢測通過Webshell運行時使用的系統命令或者網路流量及狀態的異常來判斷動作的威脅程度,Webshell通常會被加密從而避免靜態 特徵的檢測,當Webshell運行時就必須向系統發送系統命令來達到控制系統或者操作資料庫的目的,通過檢測系統調用來監測甚至攔截系統命令被執行,從行為模式上深度檢測指令檔的安全性。這種我能想到的就是類似於python爬蟲的使用Selenium類比瀏覽器行為。
二:統計學
在日誌分析中,基於webshell特徵去發現webshell也範屬於統計學。NeoPiS 國外流行的一個基於統計學的webshell後門偵查工具,它使用五種計學方法在指令檔中搜尋潛在的被混淆或被編碼的惡意代碼。
NeoPi使用以下五種檢測方法:
1、資訊熵(Entropy):通過使用ASCII碼錶來衡量檔案的不確定性;
2、最長單詞(LongestWord):最長的字串也許潛在的被編碼或被混淆;
3、重合指數(Indexof Coincidence):低重合指數預示檔案代碼潛在的被加密或被混效過;
4、特徵(Signature):在檔案中搜尋已知的惡意代碼字串片段;
5、壓縮(Compression):對比檔案的壓縮比。
三:機器學習
引用下兜哥的分享基於機器學習的 Webshell 發現技術探索和github上的項目機器學習檢測Webshell
0x03:webshell防禦
從根本上解決動態網頁指令碼的安全問題,要做到防注入、防暴庫、防COOKIES欺騙、防跨站×××等等,務必配置好伺服器FSO許可權。
1、建議使用者通過ftp來上傳、維護網頁,盡量不安裝asp的上傳程式。
2、對asp上傳程式的調用一定要進行身份認證,並只允許信任的人使用上傳程式。
3、asp程式管理員的使用者名稱和密碼要有一定複雜性,不能過於簡單,還要注意定期更換。
4、到正規網站下載程式,下載後要對資料庫名稱和存放路徑進行修改,資料庫名稱要有一定複雜性。
5、要盡量保持程式是最新版本。
6、不要在網頁上加註後台管理程式登陸頁面的連結。
7、為防止程式有未知漏洞,可以在維護後刪除後台管理程式的登陸頁面,下次維護時再通過上傳即可。
8、要時常備份資料庫等重要檔案。
9、日常要多維護,並注意空間中是否有來曆不明的asp檔案。
10、盡量關閉網站搜尋功能,利用外部搜尋工具,以防爆出資料。
11、利用白名單上傳檔案,不在白名單內的一律禁止上傳,上傳目錄許可權遵循最小許可權原則。
後記:
本著共用的精神,水平有限,還望見諒!
一個人的信安之路好難~~~
參考文獻:
https://www.imperva.com/blog/2018/07/the-trickster-hackers-backdoor-obfuscation-and-evasion-techniques/
http://www.360doc.com/content/16/0612/17/30594932_567188526.shtml
https://github.com/tennc/webshell
《UNIX Linux部落格分析與流量監控》
webshell檢測(一)