<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            WebShell檢測思路淺談

            Author: lake2 [80SEC][TSRC]
            EMail:  lake2[at]foxmail.com
            Site:   http://www.0x54.org
            Date:   2010-12-19
            
            
            [目錄]
            
            0x00  前言
            0x01  Webshell檢測模型
            0x02  靜態特征檢測
            0x03  動態特征檢測
            0x04  結語
            
            
            0x00  前言
            
                什么是webshell?我相信如果看官能有興趣看這篇文章,一定對webshell有個了解。不
            過不了解也沒關系,那就請先搜索下相關資料[1]。當然,本著“know it then hack it”
            的原則,建議你還是搭個環境,熟悉下先,畢竟紙上談兵是要不得的。
            
                隨著網絡的發展,Web站點的增加,webshell這種腳本后門技術也發展起來了,多少黑
            客故事都是從一個小小的webshell開始的。所以對于網站,特別是站點和應用眾多的互聯網
            企業,能夠在出現webshell的階段及時發現和響應就顯得尤為重要。
            
                本文以筆者多年從事相關工作的經驗來探討下webshell的檢測手段。
            
            
            0x01  Webshell檢測模型
            
                記得當年第一個ASP木馬出來的時候號稱“永不被殺的ASP木馬”(請大家虔誠地起立,
            我們一起來膜拜一下海洋頂端ASP木馬之父LCX大叔),因為它使用正常端口,且腳本容易變
            形,使得查殺它變得困難。但是,Webshell這種特殊的Web應用程序也有兩個命門:文件和
            HTTP請求。
            
                我們先來看下Webshell的運行流程:hacker -> HTTP Protocol -> Web Server -> CGI。
            簡單來看就是這樣一個順序:黑客通過瀏覽器以HTTP協議訪問Web Server上的一個CGI文件。
            棘手的是,webshell就是一個合法的TCP連接,在TCP/IP的應用層之下沒有任何特征(當然
            不是絕對的),只有在應用層進行檢測。
            
                黑客入侵服務器,使用webshell,不管是傳文件還是改文件,必然有一個文件會包含
            webshell代碼,很容易想到從文件代碼入手,這是靜態特征檢測;webshell運行后,B/S數
            據通過HTTP交互,HTTP請求/響應中可以找到蛛絲馬跡,這是動態特征檢測。
            
            
            0x02  靜態特征檢測
            
                靜態特征檢測是指不執行而通過圍觀的方式來發現webshell,即先建立一個惡意字符串
            特征庫,然后通過在各類腳本文件中檢查是否匹配。這是一種最簡單也是最常見的技術,高
            級一些的,可能還涉及到語義分析。筆者06年開發的“雷客圖ASP站長安全助手”[2]即是通
            過此類辦法查找ASP類型的webshell的。
            
                靜態特征檢測面臨的一個問題是誤報。因為一些特征字符串正常程序本身也需要用到。
            比如PHP里面的eval、system等,ASP里面的FileSystemObject、include等。所以雷客圖在
            設計之初就是一個輔助工具,最終還需要有相關安全經驗的人來判定。
            
                對于少量站點可以用這樣人肉去檢查,如果是一個成千上萬站點的大型企業呢,這個時
            候再人肉那工作量可就大了。所以用這樣一種思路:強弱特征。即把特征碼分為強弱兩種特
            征,強特征命中則必是webshell;弱特征由人工去判斷。加入一種強特征,即把流行webshell
            用到的特征作為強特征重點監控,一旦出現這樣的特征即可確認為webshell立即進行響應。
            比如PHPSpy里面會出現phpspy、wofeiwo、eval($_POST[xxx])等,ASP里面出現Shell.Application
            等。當然,黑客完全可以變形躲過,沒關系,還有人工檢查的弱特征。
            
                另一個問題是漏報。程序的關鍵是特征字符串,它直接關系著結果,如果你的特征庫里
            面沒有記錄的甚至是一種新的webshell代碼,就可能束手無策了。雷客圖第一版出來后,我
            自以為所有的ASP webshell都可以查了,但是我錯了,因為不斷會有新的方式出來繞過,最
            終結果就是特征被動的跟著webshell升級而升級,同時還面臨未知的webshell——這個情況
            和特征碼殺毒軟件何其相似。
            
                要解決誤報和漏報,就不能拘泥于代碼級別了。可以換個角度考慮問題:文件系統。我
            們可以結合文件的屬性來判斷,比如apache是noboy啟動的,webshell的屬主必然也是nobody,
            如果我的Web目錄無緣無故多了個nobody的文件,這里就有問題了。最理想的辦法是需要制度
            和流程來建設一個Web目錄唯一發布入口,控制住這個入口,非法進來的Web文件自然可以發
            現。
            
            
            0x03  動態特征檢測
            
                webshell傳到服務器了,黑客總要去執行它吧,webshell執行時刻表現出來的特征,我
            們稱為動態特征。
            
                先前我們說到過webshell通信是HTTP協議。只要我們把webshell特有的HTTP請求/響應
            做成特征庫,加到IDS里面去檢測所有的HTTP請求就好了。
            
                這個方案有個問題就是漏報。首先你得把網上有的webshell都搜集起來抓特征,這是個
            體力活,新的webshell出來還要去更新這個庫,總是很被動,被動就算了,但是一些不曾公
            開的webshell通信就會漏掉。那么這個方案有沒有效果,只能說效果有限吧,對付拿來主義
            的菜鳥可以,遇到高級一些的黑客就無效了。殺毒軟件都搞主動防御了,webshell也不能老
            搞特征碼是吧。
            
                webshell起來如果執行系統命令的話,會有進程。Linux下就是nobody用戶起了bash,
            Win下就是IIS User啟動cmd,這些都是動態特征,不過需要看黑客是否執行命令(多半會這
            樣),還有就是你的服務器上要有一個功能強大的Agent。要是黑客高興,再反連回去,這
            下就更好了,一個TCP連接(也可能是UDP),Agent和IDS都可以抓現行。這里還涉及到主機
            后門的一些檢測策略,以后有機會再另文敘述。
            
                回到網絡層來,之前我們探討過,Webshell總有一個HTTP請求,如果我在網絡層監控HTTP
            請求(我沒有監控Apache/IIS日志),有一天突然出現一個新的PHP文件請求或者一個平時
            是GET請求的文件突然有了POST請求,還返回的200,這里就有問題了。這種基于區別于正常
            請求的異常模型,姑且稱之為HTTP異常請求模型檢測。一旦有了這樣的模型,除了Webshell,
            還可以發現很多問題的。
            
                還有一個思路來自《淺談javascript函數劫持》[3]和某款代碼審計軟件。回憶一下,
            我們調試網馬的時候,怎么還原它各種稀奇古怪的加密算法呢,簡單,把eval改成alert就
            好了!類似的,所以我們可以在CGI全局重載一些函數(比如ASP.Net的global.asax文件),
            當有webshell調用的時候就可以發現異常。例如以下ASP代碼就實現了對ASP的execute函數
            的重載:
            
            --code-------------------------------------------------------------------------
            <%
            Function execute(stra)
                Response.Write("get the arg : "+stra)
            End Function
            a="response.write(""hello,world"")"
            execute(a)
            %>
            -------------------------------------------------------------------------------
            
                這個方法在應用層還是有些問題,所以如果在CGI引擎內核里面改可能會好些。根據小
            道消息,這期ph4nt0m的webzine會有一篇文章涉及PHP內核中防webshell的,有興趣的同學
            可以關注。
            
            
            0x04  結語
            
                本文只探討了檢測Webshell的一些思路,希望對你有些幫助,如果你有更好的方案,也
            可以和我探討。至于一些工具和特征,由于這樣那樣的原因就不公開了,我始終認為,相比
            于工具,思路永遠是最重要的。
            
            
            0x05  廣告
            
                到此結束,也順便做個廣告。
            
                80SEC是一個致力于Web安全研究的團體,歡迎關注我們的最新動態,網址http://www.80sec.com
            
                TSRC是騰訊安全應急響應中心(Tencent Security Response Center)的縮寫,這是騰
            訊公司負責突發安全事件處理的團隊,如果您對騰訊產品和業務有任何安全上的意見可以與
            我們聯系,也歡迎有意在互聯網安全行業發展的同學加入我們。
            
                郵箱:security#tencent.com
                主頁:http://security.qzone.qq.com
            
            
            References
            
            [1] soso百科webshell,http://baike.soso.com/v35165.htm
            [2] 雷客圖ASP站長安全助手,http://www.onegreen.net/code/HTML/24443.html
            [3] 淺談javascript函數劫持,http://www.xfocus.net/articles/200712/963.html
            
            -EOF-
            
            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线