如何使用ssdeep檢測webshell
***版本的ModSecurity增加了ssdeep檢測webshell的接口,于是猛地回憶起搞客戶端安全(游戲安全)的時(shí)候買過一本書《惡意軟件分析訣竅與工具箱-對(duì)抗“流氓”軟件的技術(shù)與利器》,這本書就提到了使用ssdeep來查找惡意軟件(webshell是惡意軟件的一種,安全領(lǐng)域是互通的嘛),本文介紹如何使用它來檢測webshell。
一 、安裝ssdeep
下載ssdeep并安裝 http://ssdeep.sourceforge.net/
tar zxvf ssdeep-2.12.tar.gzcd ssdeep-2.12./configuremakemake install
二、識(shí)別webshell實(shí)例
接下來我們下載一個(gè)webshell,試一試如何使用ssdeep來識(shí)別webshell
以b374k.php為例
首先獲得webshell b374k.php的ssdeep hash(fuzzy hashing)值,并存儲(chǔ)到b37_hashs.txt文件中
ssdeep -b webshell/b374k.php >b37_hashs.txt
cat b37_hashs.txt
ssdeep,1.1--blocksize:hash:hash,filename384:UsaSwsF3RtJhwhxY5janx0Rig5xJx52FRsBU0ipgFHF3xR:44snx0Rig5x752EBUxpc5,"b374k.php"
然后使用這個(gè)值來獲得相似度,相似度為100(當(dāng)然啦,因?yàn)闆]有做任何修改)
ssdeep -bm b37_hashs.txt webshell/b374k.php
b374k.php matches b37_hashs.txt:b374k.php (100)
為了方便理解,我們拿ssdeep與md5做類比
md5 webshell/b374k.php
MD5 (webshell/b374k.php) = b8d3f0f9ad8b1083f24072f8cfe13e04
我們知道對(duì)文件取md5值是用于驗(yàn)證文件的完整性的,因?yàn)樗鼘?duì)任意的修改都能感受到(hash碰撞小概率事件除外)
而ssdeep則用于計(jì)算文件相似度,它是通過計(jì)算上下文相關(guān)的分段hash值(fuzzy hashing)來判斷文件相似度的。
在識(shí)別webshell的場景中,我們可以先獲取樣本的ssdeep hash值,然后設(shè)置相似度范圍,來識(shí)別同一系列的變形shell
想想一個(gè)小白黑客獲得一個(gè)好用的webshell后,***件事會(huì)干嘛?肯定是改變登錄賬號(hào)密碼
cp webshell/b374k.php webshell/b374k.php.bak
vim webshell/b374k.php.bak

想雁過留痕的,估計(jì)還會(huì)改webshell的title等文本來標(biāo)記到此一游


心思稍微重點(diǎn)的想繞過WAF的童鞋,說不定還會(huì)修改cookie中的關(guān)鍵字
例如批量替換cookie txtauth關(guān)鍵字

修改完畢后,分別用md5與ssdeep來看發(fā)生了什么
md5 webshell/b374k.php.bak
MD5 (webshell/b374k.php.bak) = b8d3f0f9ad8b1083f24072f8cfe13e04
md5值發(fā)生了變化,說明webshell文本內(nèi)容發(fā)生了變化
接著使用ssdeep來查看修改后的webshell的相似度
ssdeep -bm b37_hashs.txt webshell/*
b374k.php matches b37_hashs.txt:b374k.php (100) #原始webshellb374k.php.bak matches b37_hashs.txt:b374k.php (97)#修改了登錄賬號(hào)與作者標(biāo)記b374k.php.bak2 matches b37_hashs.txt:b374k.php (88)#修改了登錄賬號(hào)、作者標(biāo)記、cookie特征
***,我們選擇一個(gè)合適的相似度來判斷是否為webshell(真實(shí)場景中,調(diào)參找到合適的閾值才是考驗(yàn)人的活...)
例如,只篩選相似度90以上的
ssdeep -t 90 -bm b37_hashs.txt webshell/*
b374k.php matches b37_hashs.txt:b374k.php (100)b374k.php.bak matches b37_hashs.txt:b374k.php (97)
三、擴(kuò)展
除了使用ssdeep來查找相似的惡意軟件(靜態(tài)文本),我們還可以逆向思維,根據(jù)相似度來判斷混在正常進(jìn)程中的惡意進(jìn)程,依據(jù)是進(jìn)程在運(yùn)行時(shí)由于變量變化而發(fā)生的變動(dòng)是輕微的,而代碼被加殼后的的變化是相當(dāng)顯著的,例如UPX加殼會(huì)使相似度瞬降到0%
參考:
http://blog.spiderlabs.com/2014/11/modsecurity-advanced-topic-of-the-week-detecting-malware-with-fuzzy-hashing.html
《惡意軟件分析訣竅與工具箱-對(duì)抗“流氓”軟件的技術(shù)與利器》
原文地址:http://danqingdani.blog.163.com/blog/static/1860941952014111291954550/