一、關(guān)于Webshell。
分為Web和shell,Web相當(dāng)于對(duì)外開放的Web服務(wù),Shell是用戶與操作系統(tǒng)之間的一個(gè)接口,操作過程中更多的是腳本語言,Webshell某種情況下是網(wǎng)站密碼。它更多的是對(duì)網(wǎng)站高危操作,具備高危操作權(quán)限。支持的腳本是ASP、PHP、ASP.NET、JSP等。什么情況下Webshell需要呢?一般是我們對(duì)網(wǎng)站進(jìn)行滲透測(cè)試后期時(shí),發(fā)現(xiàn)這個(gè)網(wǎng)站沒有更高權(quán)限了,但我們希望它提權(quán),二是長(zhǎng)期供應(yīng),這時(shí)候Webshell就會(huì)想到它。
Webshell主要功能。
除了一般的環(huán)境探針、資源管理器、文件編輯等,還有權(quán)限提升,上面一般會(huì)帶內(nèi)置的POC,還有DDoS對(duì)待網(wǎng)絡(luò)掛馬。還有黑帽SEO,前段時(shí)間一個(gè)大型網(wǎng)絡(luò)廠商出現(xiàn)一個(gè)癥狀,輸入自己官方網(wǎng)站URL沒有問題,可以正常訪問,但當(dāng)他通過百度或者搜狗、360搜索引擎搜索時(shí),直接跳轉(zhuǎn)到菠菜網(wǎng)站,當(dāng)我們后期介入它的應(yīng)急保障之后,分析跟蹤發(fā)現(xiàn)它的服務(wù)器存在一些安全漏洞,被植入了14個(gè)各種類型的Webshell,相當(dāng)于是個(gè)跑馬場(chǎng)。
Webshell的分類。
業(yè)界一般會(huì)分為三大類:大馬、好馬和一句話馬。大馬是什么事兒都能干,前面的基本功能、拓展功能都具備;小馬作為文件上傳,為上傳大馬做準(zhǔn)備的一個(gè)跳轉(zhuǎn)平臺(tái)。一句話木馬相對(duì)比較精簡(jiǎn)一些,后面是一句話木馬的類型,數(shù)據(jù)模型和數(shù)據(jù)傳遞。
Webshell的特點(diǎn)。
它會(huì)調(diào)用一些系統(tǒng)高危函數(shù),比如eval、system,會(huì)有一些操作系統(tǒng)文件函數(shù),比較多的是Webshell相對(duì)一般網(wǎng)站正常網(wǎng)頁訪問IP會(huì)比較少,訪問次數(shù)也比較少,相當(dāng)于是個(gè)孤立頁面。但孤立頁面不一定就是Webshell,比如隱藏性的管理后臺(tái)也存在這種情況。Webshell在系統(tǒng)日志里是看不到的,主要是在網(wǎng)站W(wǎng)eb日志,訪問Webshell頁面時(shí)會(huì)產(chǎn)生訪問數(shù)據(jù)。
二、針對(duì)Webshell的檢測(cè)。
第一,靜態(tài)檢測(cè)(靜態(tài)特征檢測(cè))。
抽取它的典型特征,比如一句話木馬有一些常見代碼塊,不同的攻擊者會(huì)對(duì)它進(jìn)行改造,大致模型是不變的。高危函數(shù),修改時(shí)間是不是相對(duì)其他文件不一樣。井臺(tái)核心檢測(cè)依然匹配它的核心特征,比如正則、文件時(shí)間聚類、文件關(guān)聯(lián)度計(jì)算。典型Webshell的靜態(tài)性特征,檢測(cè)時(shí)目前市場(chǎng)上商用工具和看用工具基本都能支持。
它的特點(diǎn)是基于規(guī)則,會(huì)比較快,但漏報(bào)、誤報(bào)會(huì)比較明顯,一般的Webshell一句話木馬變形混淆會(huì)比較多。
第二,日志分析檢測(cè)。
個(gè)別訪問,Webshell頁面訪問次數(shù)比較少,訪問總數(shù)也比較少,上專Webshell到Web目錄時(shí)會(huì)自動(dòng)化重命名,一般是隨機(jī)化的比較長(zhǎng)的名稱。在GET請(qǐng)求里也有相對(duì)比較明顯的控制指令。
日志分析也有一些優(yōu)缺點(diǎn),網(wǎng)站新增頁面,在一些大的網(wǎng)站會(huì)比較明顯,用日志分析方法,但在一些中小型網(wǎng)站時(shí)和傳統(tǒng)的Webshell檢測(cè)、正常網(wǎng)頁區(qū)別不是特別大。畢竟是日志分析,相當(dāng)于是事后的,難以觸及運(yùn)維Webshell自身本質(zhì),就是它的腳本語言。
第三,動(dòng)態(tài)檢測(cè)。
類似于一個(gè)沙箱機(jī)制,不管云平臺(tái)還是服務(wù)器本地,Webshell分析檢測(cè)層我們會(huì)用hook調(diào)用它的可疑函數(shù),這是相對(duì)比較精確的,但也有一些問題,這是我們?cè)趯?shí)踐過程中遇到過,在本地會(huì)有一些開銷,而且開銷還是比較大的,在用戶的服務(wù)器上。如果我們把它放到一個(gè)云平臺(tái)上去做時(shí),有很多Webshell是加密的,如何繞過它的加密機(jī)制或解決它的自動(dòng)執(zhí)行問題,這是在云平臺(tái)上需要解決的問題。
第四,統(tǒng)計(jì)學(xué)檢測(cè)。
除了之前幾個(gè)方法以外,基于統(tǒng)計(jì)學(xué)的,主要是長(zhǎng)字符串,一般Webshell用base646(115)密碼之后字符會(huì)比較長(zhǎng),還有信息熵、重合指數(shù)、壓縮碼的方式,來看卡Webshell的可能,激勵(lì)的可能性比較大。基于統(tǒng)計(jì)學(xué)的,也有一些漏報(bào)誤報(bào)的情況。
三、懸鏡自身工作理念。
深度學(xué)習(xí)。
我們采用深度神經(jīng)網(wǎng)絡(luò)算法。神經(jīng)深度網(wǎng)絡(luò)具有端到端的學(xué)習(xí)能力,可以將我們研究對(duì)象原始表示方法直接輸入到模型中,從而避免人工設(shè)計(jì)特征帶來的劣勢(shì),只要是特征,就涉及到特征顆粒度問題;一定會(huì)對(duì)原有信息有一定損耗。腳本原碼輸入模型,我們做預(yù)處理,相對(duì)原先的腳本原代碼,我們做了去噪,比如空格、換行符等做了處理,對(duì)字符串的線性結(jié)構(gòu)轉(zhuǎn)換成更清晰,更緊湊的樹型結(jié)構(gòu),比如抽象語法樹。還涉及數(shù)據(jù)壓縮和向量化技術(shù)。
我們提出一些流水線整個(gè)檢測(cè)流程,包括預(yù)處理、樣本生成和檢測(cè)模塊。(圖)我們實(shí)現(xiàn)的關(guān)鍵技術(shù)是基于詞法單元流的循環(huán)神經(jīng)網(wǎng),主要流程包括預(yù)處理模塊,樣本生成模塊、檢測(cè)模塊。預(yù)處理模塊,我們做的主要工作是分詞,分詞做完之后我們還可以對(duì)一些加密文件根據(jù)再處理,處理完再做基本的過濾和替換。接下來是樣本生成模塊,考慮到不同的腳本文件它生成的詞法單元流的差距較大,比如一個(gè)大馬形成的我們對(duì)應(yīng)處理的文件有幾萬個(gè)節(jié)點(diǎn),但一句話木馬有幾十個(gè),差異巨大。
我們采用了兩種方法,一是完全隨機(jī)的采樣、抽樣,二是采取貪心算法的抽樣。最終形成利用Word 2 vactor(音),將它向量化提交給我們的機(jī)器學(xué)習(xí)模型。
預(yù)處理模塊主要做了一些詞法分析,按照字符讀取腳本原代碼,最后將屬于同一個(gè)詞法單元的字符組合在一起,也就是詞法單元對(duì)象,我們并為其添加一些屬性。
我們?cè)趯?shí)踐過程中也遇到了加密的情況,對(duì)字符串進(jìn)行嘗試解碼,做完解碼之后再做嘗試詞法的分析,直到結(jié)束。接下來我們對(duì)字符串、整數(shù)、浮點(diǎn)數(shù)的常量按統(tǒng)一規(guī)則做整體的替代。比如馬化騰、馬云,我們認(rèn)為在不同上下文中其實(shí)代表了是一類,李彥宏標(biāo)記時(shí)我們也用一類,類似于用shot int種統(tǒng)一的字符串常量統(tǒng)一標(biāo)記。
神經(jīng)網(wǎng)絡(luò),這是我們?cè)趯?shí)踐過程中經(jīng)典的RNN神經(jīng)網(wǎng)絡(luò)模型。為什么用這種模型呢?主要原因是我們的詞法單元流向量長(zhǎng)度不一,它具有上下文的關(guān)系。大家如果熟悉RNN算法的話應(yīng)該知道,它對(duì)序列化處理能力,特別是添加了一些記憶單元處理得比較出色,向量1、向量2的我們提交的一些輸入,通過LSTM,長(zhǎng)短期進(jìn)行二層處理,處理完交給我們拼接層,再進(jìn)一步將中間結(jié)果處理之后交給三層全鏈接層。層數(shù)的一層兩層三層,基本根據(jù)大家在訓(xùn)練中的經(jīng)驗(yàn)進(jìn)行調(diào)倉,當(dāng)然層數(shù)處理復(fù)雜問題越強(qiáng),但帶來的訓(xùn)練損耗也會(huì)越大。
除了TNS-RRN技術(shù)之外,我們自己嘗試創(chuàng)新發(fā)明了一個(gè)基于抽象語法樹的遞歸循環(huán)神經(jīng)網(wǎng)絡(luò),它相對(duì)于前面的TNS-RRNN最主要的區(qū)別是,對(duì)抽象語法樹,語法分析做了更進(jìn)一步的處理,在前期預(yù)處理主要做了抽象語法樹的構(gòu)建。前面也重點(diǎn)強(qiáng)調(diào)了,一般腳本文件的大馬抽象語法樹有上萬個(gè)節(jié)點(diǎn),一般木馬是幾十個(gè)節(jié)點(diǎn),差距是巨大的,這樣的情況下,我們需要對(duì)抽象語法樹進(jìn)行進(jìn)一步壓縮。我們實(shí)心的路徑是,對(duì)一般的抽象語法樹會(huì)用一組規(guī)模較小的抽樣指數(shù)進(jìn)行替換,最后交給檢測(cè)模塊LSTM進(jìn)行處理。
抽象語法樹主要是語法分析器對(duì)詞法單元流進(jìn)行語法分析,構(gòu)造出一個(gè)抽象語法樹,比如圖中加法復(fù)制語句可以自然構(gòu)造出一個(gè)抽象語法樹,但這個(gè)抽象語法樹里的噪音還是比較多的。接下來我們考慮對(duì)這個(gè)樹進(jìn)行簡(jiǎn)化,一是分葉節(jié)點(diǎn),葉節(jié)點(diǎn)通常存放標(biāo)量信息,例如自定義變量名、常量值等,我們需要把葉節(jié)點(diǎn)單獨(dú)提取出來進(jìn)行亮相化表示,后期訓(xùn)練直接提交給訓(xùn)練模型。二是輔助節(jié)點(diǎn)基本提供的是輔助信息,對(duì)我們后續(xù)的構(gòu)造沒有多大幫助,經(jīng)過反復(fù)實(shí)驗(yàn),我們是將一些輔助信息刪除,最后得到簡(jiǎn)化后的抽象語法樹。
葉子節(jié)點(diǎn)向量化表示。
深度學(xué)習(xí)模型核心是數(shù)學(xué)計(jì)算模型,它的輸入是向量化表示,操作方法從兩個(gè)方面入手,一是危險(xiǎn)函數(shù),構(gòu)建危險(xiǎn)函數(shù)列表,將葉子節(jié)點(diǎn)包含的危險(xiǎn)函數(shù)用詞袋模型表示。二是統(tǒng)計(jì)特征,統(tǒng)計(jì)學(xué)上,主要是5個(gè),NeoPi方法中字符串長(zhǎng)度、重合指數(shù)、信息熵幾個(gè)重要指標(biāo)考慮進(jìn)去,嵌入到程序代碼和編碼中,其中重合指數(shù)代表的是字符串序列里任意的一段函數(shù)重合的概率,重合概率越大代表相當(dāng)于它是個(gè)正常文件,一般Webshell經(jīng)過編碼或加密之后隨機(jī)性會(huì)比較大。
基于抽象語法樹的遞歸循環(huán)神經(jīng)網(wǎng)絡(luò)的檢測(cè)模塊。
我們依據(jù)語法樹的遞歸思想,一般一棵樹的向量化表示主要由它的根結(jié)點(diǎn)及子樹結(jié)合的根節(jié)點(diǎn),通過非線性結(jié)合運(yùn)算而成。前面的葉子節(jié)點(diǎn)向量化表示主要是通過特征工程,比如它的一些規(guī)則,統(tǒng)計(jì)學(xué)的方法把它形成我們向量化表示,而對(duì)于子樹集合的向量化表示,通過依次將它們輸入到LSTM長(zhǎng)短期記憶層進(jìn)行計(jì)算而成。最后提交給拼接層,由拼接層將中間處理結(jié)果提交給全鏈接層,最后做預(yù)期處理。
這是我們通過深度學(xué)習(xí)得出來的一個(gè)結(jié)果,無論是在準(zhǔn)確率還是召回率上,前幾年有比較火的SVM知識(shí)向量機(jī)的方法大幅度提升。我們對(duì)前兩種方法做了綜合,將中間結(jié)果提交給選型訓(xùn)練結(jié)果,準(zhǔn)確率和召回率上有進(jìn)一步提升。通過市面上一些規(guī)則檢測(cè)的產(chǎn)品還是有明顯優(yōu)勢(shì)。這里要提一下,這也有今后需要改進(jìn)的地方,比如檢測(cè)時(shí)間,SVM是300毫秒左右,在檢測(cè)率比較高的計(jì)算模型能達(dá)到900毫秒,這對(duì)于實(shí)際的商用部署還是有一些影響,所以我們將它部署到我們GPU云平臺(tái)上。
我們?nèi)虬踩珜?shí)驗(yàn)室在Webshell檢測(cè)方面所做的工作。
將研發(fā)基于詞法單元流、神經(jīng)網(wǎng)絡(luò)和抽象語法樹,遞歸循環(huán)神經(jīng)網(wǎng)絡(luò)Webshell檢測(cè)等技術(shù),這個(gè)技術(shù)已經(jīng)申請(qǐng)了專利,將這些技術(shù)應(yīng)用到我們產(chǎn)品神經(jīng)復(fù)習(xí)衛(wèi)士(音)當(dāng)中,并已經(jīng)提供商用。在Web安全威脅深度檢測(cè)上,去年12月份全球安全實(shí)驗(yàn)室發(fā)布了第一款國內(nèi)第一看用深度學(xué)習(xí)SQL注入檢測(cè)并提供公測(cè),也得很多團(tuán)隊(duì)進(jìn)行深度學(xué)習(xí),正式發(fā)布出來的用于SQL注入檢測(cè)的我們當(dāng)時(shí)是第一家做到的。
除了Webshell檢測(cè)以外,語言分析技術(shù)和深度學(xué)習(xí)技術(shù)結(jié)合,也將在惡意代碼分析、漏洞挖掘等諸多安全領(lǐng)域發(fā)揮重要作用。