压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

安普諾張濤:再談webshell檢測

 

張濤

一、關于Webshell。

分為Web和shell,Web相當于對外開放的Web服務,Shell是用戶與操作系統(tǒng)之間的一個接口,操作過程中更多的是腳本語言,Webshell某種情況下是網(wǎng)站密碼。它更多的是對網(wǎng)站高危操作,具備高危操作權限。支持的腳本是ASP、PHP、ASP.NET、JSP等。什么情況下Webshell需要呢?一般是我們對網(wǎng)站進行滲透測試后期時,發(fā)現(xiàn)這個網(wǎng)站沒有更高權限了,但我們希望它提權,二是長期供應,這時候Webshell就會想到它。

Webshell主要功能。

除了一般的環(huán)境探針、資源管理器、文件編輯等,還有權限提升,上面一般會帶內置的POC,還有DDoS對待網(wǎng)絡掛馬。還有黑帽SEO,前段時間一個大型網(wǎng)絡廠商出現(xiàn)一個癥狀,輸入自己官方網(wǎng)站URL沒有問題,可以正常訪問,但當他通過百度或者搜狗、360搜索引擎搜索時,直接跳轉到菠菜網(wǎng)站,當我們后期介入它的應急保障之后,分析跟蹤發(fā)現(xiàn)它的服務器存在一些安全漏洞,被植入了14個各種類型的Webshell,相當于是個跑馬場。

Webshell的分類。

業(yè)界一般會分為三大類:大馬、好馬和一句話馬。大馬是什么事兒都能干,前面的基本功能、拓展功能都具備;小馬作為文件上傳,為上傳大馬做準備的一個跳轉平臺。一句話木馬相對比較精簡一些,后面是一句話木馬的類型,數(shù)據(jù)模型和數(shù)據(jù)傳遞。

Webshell的特點。

它會調用一些系統(tǒng)高危函數(shù),比如eval、system,會有一些操作系統(tǒng)文件函數(shù),比較多的是Webshell相對一般網(wǎng)站正常網(wǎng)頁訪問IP會比較少,訪問次數(shù)也比較少,相當于是個孤立頁面。但孤立頁面不一定就是Webshell,比如隱藏性的管理后臺也存在這種情況。Webshell在系統(tǒng)日志里是看不到的,主要是在網(wǎng)站W(wǎng)eb日志,訪問Webshell頁面時會產(chǎn)生訪問數(shù)據(jù)。

二、針對Webshell的檢測。

第一,靜態(tài)檢測(靜態(tài)特征檢測)。

抽取它的典型特征,比如一句話木馬有一些常見代碼塊,不同的攻擊者會對它進行改造,大致模型是不變的。高危函數(shù),修改時間是不是相對其他文件不一樣。井臺核心檢測依然匹配它的核心特征,比如正則、文件時間聚類、文件關聯(lián)度計算。典型Webshell的靜態(tài)性特征,檢測時目前市場上商用工具和看用工具基本都能支持。

它的特點是基于規(guī)則,會比較快,但漏報、誤報會比較明顯,一般的Webshell一句話木馬變形混淆會比較多。

第二,日志分析檢測。

個別訪問,Webshell頁面訪問次數(shù)比較少,訪問總數(shù)也比較少,上專Webshell到Web目錄時會自動化重命名,一般是隨機化的比較長的名稱。在GET請求里也有相對比較明顯的控制指令。

日志分析也有一些優(yōu)缺點,網(wǎng)站新增頁面,在一些大的網(wǎng)站會比較明顯,用日志分析方法,但在一些中小型網(wǎng)站時和傳統(tǒng)的Webshell檢測、正常網(wǎng)頁區(qū)別不是特別大。畢竟是日志分析,相當于是事后的,難以觸及運維Webshell自身本質,就是它的腳本語言。

第三,動態(tài)檢測。

類似于一個沙箱機制,不管云平臺還是服務器本地,Webshell分析檢測層我們會用hook調用它的可疑函數(shù),這是相對比較精確的,但也有一些問題,這是我們在實踐過程中遇到過,在本地會有一些開銷,而且開銷還是比較大的,在用戶的服務器上。如果我們把它放到一個云平臺上去做時,有很多Webshell是加密的,如何繞過它的加密機制或解決它的自動執(zhí)行問題,這是在云平臺上需要解決的問題。

第四,統(tǒng)計學檢測。

除了之前幾個方法以外,基于統(tǒng)計學的,主要是長字符串,一般Webshell用base646(115)密碼之后字符會比較長,還有信息熵、重合指數(shù)、壓縮碼的方式,來看卡Webshell的可能,激勵的可能性比較大。基于統(tǒng)計學的,也有一些漏報誤報的情況。

三、懸鏡自身工作理念。

深度學習。

我們采用深度神經(jīng)網(wǎng)絡算法。神經(jīng)深度網(wǎng)絡具有端到端的學習能力,可以將我們研究對象原始表示方法直接輸入到模型中,從而避免人工設計特征帶來的劣勢,只要是特征,就涉及到特征顆粒度問題;一定會對原有信息有一定損耗。腳本原碼輸入模型,我們做預處理,相對原先的腳本原代碼,我們做了去噪,比如空格、換行符等做了處理,對字符串的線性結構轉換成更清晰,更緊湊的樹型結構,比如抽象語法樹。還涉及數(shù)據(jù)壓縮和向量化技術。

我們提出一些流水線整個檢測流程,包括預處理、樣本生成和檢測模塊。(圖)我們實現(xiàn)的關鍵技術是基于詞法單元流的循環(huán)神經(jīng)網(wǎng),主要流程包括預處理模塊,樣本生成模塊、檢測模塊。預處理模塊,我們做的主要工作是分詞,分詞做完之后我們還可以對一些加密文件根據(jù)再處理,處理完再做基本的過濾和替換。接下來是樣本生成模塊,考慮到不同的腳本文件它生成的詞法單元流的差距較大,比如一個大馬形成的我們對應處理的文件有幾萬個節(jié)點,但一句話木馬有幾十個,差異巨大。

我們采用了兩種方法,一是完全隨機的采樣、抽樣,二是采取貪心算法的抽樣。最終形成利用Word 2 vactor(音),將它向量化提交給我們的機器學習模型。

預處理模塊主要做了一些詞法分析,按照字符讀取腳本原代碼,最后將屬于同一個詞法單元的字符組合在一起,也就是詞法單元對象,我們并為其添加一些屬性。

我們在實踐過程中也遇到了加密的情況,對字符串進行嘗試解碼,做完解碼之后再做嘗試詞法的分析,直到結束。接下來我們對字符串、整數(shù)、浮點數(shù)的常量按統(tǒng)一規(guī)則做整體的替代。比如馬化騰、馬云,我們認為在不同上下文中其實代表了是一類,李彥宏標記時我們也用一類,類似于用shot int種統(tǒng)一的字符串常量統(tǒng)一標記。

神經(jīng)網(wǎng)絡,這是我們在實踐過程中經(jīng)典的RNN神經(jīng)網(wǎng)絡模型。為什么用這種模型呢?主要原因是我們的詞法單元流向量長度不一,它具有上下文的關系。大家如果熟悉RNN算法的話應該知道,它對序列化處理能力,特別是添加了一些記憶單元處理得比較出色,向量1、向量2的我們提交的一些輸入,通過LSTM,長短期進行二層處理,處理完交給我們拼接層,再進一步將中間結果處理之后交給三層全鏈接層。層數(shù)的一層兩層三層,基本根據(jù)大家在訓練中的經(jīng)驗進行調倉,當然層數(shù)處理復雜問題越強,但帶來的訓練損耗也會越大。

除了TNS-RRN技術之外,我們自己嘗試創(chuàng)新發(fā)明了一個基于抽象語法樹的遞歸循環(huán)神經(jīng)網(wǎng)絡,它相對于前面的TNS-RRNN最主要的區(qū)別是,對抽象語法樹,語法分析做了更進一步的處理,在前期預處理主要做了抽象語法樹的構建。前面也重點強調了,一般腳本文件的大馬抽象語法樹有上萬個節(jié)點,一般木馬是幾十個節(jié)點,差距是巨大的,這樣的情況下,我們需要對抽象語法樹進行進一步壓縮。我們實心的路徑是,對一般的抽象語法樹會用一組規(guī)模較小的抽樣指數(shù)進行替換,最后交給檢測模塊LSTM進行處理。

抽象語法樹主要是語法分析器對詞法單元流進行語法分析,構造出一個抽象語法樹,比如圖中加法復制語句可以自然構造出一個抽象語法樹,但這個抽象語法樹里的噪音還是比較多的。接下來我們考慮對這個樹進行簡化,一是分葉節(jié)點,葉節(jié)點通常存放標量信息,例如自定義變量名、常量值等,我們需要把葉節(jié)點單獨提取出來進行亮相化表示,后期訓練直接提交給訓練模型。二是輔助節(jié)點基本提供的是輔助信息,對我們后續(xù)的構造沒有多大幫助,經(jīng)過反復實驗,我們是將一些輔助信息刪除,最后得到簡化后的抽象語法樹。

葉子節(jié)點向量化表示。

深度學習模型核心是數(shù)學計算模型,它的輸入是向量化表示,操作方法從兩個方面入手,一是危險函數(shù),構建危險函數(shù)列表,將葉子節(jié)點包含的危險函數(shù)用詞袋模型表示。二是統(tǒng)計特征,統(tǒng)計學上,主要是5個,NeoPi方法中字符串長度、重合指數(shù)、信息熵幾個重要指標考慮進去,嵌入到程序代碼和編碼中,其中重合指數(shù)代表的是字符串序列里任意的一段函數(shù)重合的概率,重合概率越大代表相當于它是個正常文件,一般Webshell經(jīng)過編碼或加密之后隨機性會比較大。

基于抽象語法樹的遞歸循環(huán)神經(jīng)網(wǎng)絡的檢測模塊。

我們依據(jù)語法樹的遞歸思想,一般一棵樹的向量化表示主要由它的根結點及子樹結合的根節(jié)點,通過非線性結合運算而成。前面的葉子節(jié)點向量化表示主要是通過特征工程,比如它的一些規(guī)則,統(tǒng)計學的方法把它形成我們向量化表示,而對于子樹集合的向量化表示,通過依次將它們輸入到LSTM長短期記憶層進行計算而成。最后提交給拼接層,由拼接層將中間處理結果提交給全鏈接層,最后做預期處理。

這是我們通過深度學習得出來的一個結果,無論是在準確率還是召回率上,前幾年有比較火的SVM知識向量機的方法大幅度提升。我們對前兩種方法做了綜合,將中間結果提交給選型訓練結果,準確率和召回率上有進一步提升。通過市面上一些規(guī)則檢測的產(chǎn)品還是有明顯優(yōu)勢。這里要提一下,這也有今后需要改進的地方,比如檢測時間,SVM是300毫秒左右,在檢測率比較高的計算模型能達到900毫秒,這對于實際的商用部署還是有一些影響,所以我們將它部署到我們GPU云平臺上。

我們全球安全實驗室在Webshell檢測方面所做的工作。

將研發(fā)基于詞法單元流、神經(jīng)網(wǎng)絡和抽象語法樹,遞歸循環(huán)神經(jīng)網(wǎng)絡Webshell檢測等技術,這個技術已經(jīng)申請了專利,將這些技術應用到我們產(chǎn)品神經(jīng)復習衛(wèi)士(音)當中,并已經(jīng)提供商用。在Web安全威脅深度檢測上,去年12月份全球安全實驗室發(fā)布了第一款國內第一看用深度學習SQL注入檢測并提供公測,也得很多團隊進行深度學習,正式發(fā)布出來的用于SQL注入檢測的我們當時是第一家做到的。

除了Webshell檢測以外,語言分析技術和深度學習技術結合,也將在惡意代碼分析、漏洞挖掘等諸多安全領域發(fā)揮重要作用。

上一篇:天空衛(wèi)士楊明非:核心數(shù)據(jù)資產(chǎn)的管理和保護

下一篇:農信互聯(lián)李元龍:登山之路——互聯(lián)網(wǎng)公司安全建設的心得體會