<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Webshell檢測方法

    VSole2022-01-04 10:33:05

    一、Webshell概述

    Webshell是基于Web的一種應用程序,可以將其視為可在服務器上執行的一種遠程訪問工具或后門木馬文件。Webshell作為一種web后門,通常由攻擊者通過常見的Web網站漏洞,如sql注入、文件包含和上傳等,上傳到服務器,從而為攻擊者提供與服務器端進行交互的能力。

    根據Webshell的代碼長度不同,通常可以將其分為大馬、小馬和一句話木馬。小馬通常只有幾行甚至一行代碼,實現的功能較為單一,如文件傳輸和權限提升等,攻擊者通常將其用作跳板,繞過上傳文件大小限制來上傳功能更多的大馬,大馬是具有完整入侵功能的Webshell,它們的體積要大得多,具有用于文件操作,命令執行和數據庫連接的友好圖形用戶界面,它們通常會調用系統功能,以便利用混淆技術來隱藏功能用于逃避檢測。一句話木馬一種特殊的小馬,通常只有一行代碼,但其使用場景豐富,可插入其他文件中,隱匿性強,可變形免殺。

    Webshell的特點主要有:

    • 存在系統調用的命令執行函數,如eval,system,cmd_shell,assert等;
    • 存在系統調用的文件操作函數,如fopen、fwrite、readdir等;
    • 存在數據庫操作函數,調用系統自身的存儲過程來連接數據庫操作;
    • 具備很深的自身隱藏性、可偽裝性,可長期潛伏到web源碼中;
    • 衍生變種多,可通過自定義加解密函數、利用xor、字符串反轉、壓縮、拼接等方法來繞過檢測;
    • 訪問ip少、訪問次數少、頁面孤立、傳統防火墻無法進行攔截,無系統操作日志記錄;
    • 連接webshell的payload流量會記錄在web日志中。

    二、Webshell檢測方法

    1、靜態特征匹配

    靜態特征匹配的檢測方法通過提取大量已知的Webshell的文件特征,如關鍵字、高危函數的調用等,通過構建規則庫,利用規則匹配或相似性計算方法等實現Webshell的檢測,常見的web查殺安全工具D盾使用的就是這種檢測方法。此外,還會將已知的Webshell的MD5值保存在特征庫中,在檢測時對待檢測文件進行MD5值的計算,并與特征庫進行比較查看是否匹配。

    但這種方法常常無法檢測到經過加密、編碼、拼接等混淆手段的Webshell變形。如下圖的代碼是經過base64編碼混淆后的 Webshell變形,使用靜態的檢測方法難以對其進行檢測。

    2、基于統計特征的檢測

    由于Webshell往往經過了編碼和加密,與常規的文件相比,會有一些特別的統計特征,可以根據這些特征統計進行檢測。這類檢測方法的典型代表: NeoPI ( https://github.com/Neohapsis/NeoPI )

    NeoPi使用以下五種特征進行檢測:

    • 信息熵(Entropy):通過使用ASCII碼表來衡量文件的不確定性,通常經過混淆的Webshell文件信息熵更大;
    • 最長單詞(LongestWord):最長的字符串也許潛在的被編碼或被混淆;
    • 重合指數(Indexof Coincidence):低重合指數預示文件代碼潛在的被加密或被混淆過;
    • 特征(Signature):在文件中搜索已知的惡意代碼字符串片段;
    • 壓縮(Compression):對比文件的壓縮比,Webshell文件壓縮比通常比正常文件低;

    NeoPi的檢測重心在于識別混淆代碼,適用于檢測經過混淆的Webshell。

    3、基于日志的檢測

    基于日志的檢測方法是在攻擊發生之后,通過分析大量日志信息,對攻擊進行溯源,是在web服務器被入侵之后進行排查的手段。由于攻擊者成功上傳Webshell后,會通過80端口訪問Webshell文件來完成各類惡意操作,因此攻擊者對Webshell的訪問會被記錄在web日志中,通過整合在系統各處的日志,可以對其進行分析,區分正常web網頁和Webshell在日志文件中的不同特征,檢測是否存在Webshell。

    由于Webshell有以下訪問特性:1)少量ip對其發起訪問;2)總的訪問次數少;3)通常Webshell屬于孤立頁面,可將其用于日志分析中。但由于日志的多樣性和復雜性,該方法有可能會產生大量的誤報,并且由于日志數量的龐大,大量讀寫日志很可能會對服務器的性能造成影響。

    4、基于流量的檢測

    基于流量特征的檢測是動態檢測的一種方法,該方法主要是對網絡流量進行抓包與分析,通過區分惡意流量和正常流量,從而檢測是否存在Webshell。目前國內外的很多入侵檢測和入侵防御系統都采用了這種方法。

    基于流量的特征檢測雖然能夠較好地識別惡意流量,但由于流量信息的龐大,實時監測的難度較大,對系統的吞吐量要求高,很容易產生流量數據包丟失等問題而對檢測結果產生一定的影響。

    5、基于行為特征的檢測

    基于行為的分析檢測也是目前常用一種的動態檢測Webshell的手段,在入侵檢測中應用廣泛,該方法通過對惡意代碼的行為進行捕捉與分析,檢測異常行為,從而進行惡意代碼的識別。

    RASP產品就使用了這一檢測方法,通過插樁等技術在應用程序運行過程中對執行危險操作的函數進行hook,檢查其執行的參數,從而檢測并阻止惡意代碼運行。

    php類型的Webshell檢測一般通過php擴展對opcode進行hook,jsp類型的Webshell檢測一般通過java agent的方式實現字節碼的動態修改,從而對惡意行為進行檢測。

    三、內存馬查殺

    1、內存馬的分類

    2、php內存馬

    將該段代碼上傳至php服務器并訪問,會在同一目錄下循環生成shell.php的一句話木馬文件。其查殺方式有:

     1)在條件允許情況下,重啟服務器;

     2)kill掉www-data用戶所有子進程:ps aux | grep www-data | awk '{print $2}' | xargs kill -9

    3、python flask內存馬

    Python內存馬可利用flask框架中ssti注入來實現,flask框架中在web應用模板渲染的過程中用到render_template_string()進行渲染但未對用戶傳入的參數進行過濾,就可以通過注入惡意代碼來實現python內存馬的注入。以下payload利用ssti注入注冊了一個/shell的路由,路由對應的邏輯為執行cmd參數值命令。

    查殺方式:找到惡意路由并刪除或重啟服務器。

    4、java內存馬

    在java web中,客戶端發起的web請求會依次經過Listener、Filter、Servlet三個組件,只要在這個請求的過程中做手腳,在內存中修改已有的組件或者動態注冊一個新的組件,插入惡意的shellcode,就可以注入內存馬。

    根據內存馬注入的方式,大致可以將內存馬劃分為以下兩類:

    1)servlet-api型:通過命令執行等方式動態注冊一個新的listener、filter或者servlet,從而實現命令執行等功能。特定框架、容器的內存馬原理與此類似,如spring的controller內存馬,tomcat的valve內存馬

    2)agent型:通過java的instrumentation動態修改已有代碼,進而實現命令執行等功能。

    本文主要以Servlet內存馬為例來介紹其原理和查殺方式。

    • Servlet內存馬

    Servlet 是運行在 Web 服務器或應用服務器上的程序,它是作為來自 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。它負責處理用戶的請求,并根據請求生成相應的返回信息提供給用戶。 

    在注入內存馬的過程當中,可能需要用到反射機制,例如注入一個servlet型的內存馬,需要使用反射機制來獲取當前的context,然后將惡意的servlet添加到當前的context的children中。

    servlet內存馬注入過程如下:首先創建一個惡意的servlet,然后獲取當前的StandardContext;再將惡意servlet封裝成wrapper添加到StandardContext的children當中,最后添加ServletMapping將訪問的URL和wrapper進行綁定。

    執行上述操作后,訪問指定的URL路徑就可以進行命令執行了。

    以哥斯拉的servlet內存馬為例,在getshell后生成servlet內存馬并綁定指定的url進行注入,接著就可以直接使用綁定的url進行內存馬的連接。

    • Java內存馬檢測工具

    (1)java-memshell-scanner

    通過jsp掃描應用中所有的filter和servlet,然后通過名稱、對應的class是否存在來判斷是否是內存馬

    通常內存馬的惡意servlet和filter等式動態注冊的,在ClassLoader目錄下沒有對應的class文件

    (2)cop.jar工具

    可以識別異常的類,在結果中會顯示所有運行的類以及危險等級,比較高的可以進入目錄查看代碼進行分析,在java目錄下或class文件夾下會保存木馬以及運行的類,可以用D盾等webshell查殺工具進行掃描。

    (3)arthas-boot.jar工具

    是阿里開源的Java診斷工具,可以實時監控jvm狀態。mbean命令可查看可疑的servlet和filter節點,sc命令可以查看JVM已加載的類信息,若有可疑的類,可通過jad命令反編譯得到源碼進行排查。

    四、總結

    總的來說,無論是常見的Webshell,還是經過加密、編碼、拼接等混淆的Webshell變形、內存馬等,都需要利用Web應用的各種漏洞進行上傳,如命令執行、反序列化RCE、文件上傳等等,Webshell一旦被上傳,無論通過流量、文件特征進行檢測并查殺,都只是應急手段,無法從根源上防止攻擊。

    因此,最好的防護方法就是加強邊界防護,減少暴露在外的應用漏洞。但是目前0day漏洞頻出,邊界突破手段防不勝防,因此,許多安全廠商和互聯網大廠都在研究RASP技術,該技術通過注入應用程序內部實現安全防護,對比其他檢測方法來說,它可以在程序通過Webshell執行惡意命令前對其進行檢測和阻斷,但該技術的應用目前仍在起步階段,未來隨著RASP技術的發展,針對Webshell的檢測與防護可能會有新的突破。


    webshellservlet
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    部分getshell漏洞匯總
    2022-07-20 10:12:45
    即可未授權訪問console后臺,但是權限比較低備注:此處會出現個問題,在復現的環境中直接拼接
    filter是javaweb中的過濾器,會對客戶端發送的請求進行過濾并做一些操作,我們可以在filter中寫入命令執行的惡意文件,讓客戶端發來的請求通過它來做命令執行。 而filter內存馬是通過動態注冊一個惡意filter,由于是動態注冊的,所以這個filter沒有文件實體,存在于內存中,隨著tomcat重啟而消失。 一般我們把這個filter放在所有filter最前面優先執行,這樣我們的請
    0x01 背景 在內存馬橫行的當下,藍隊or應急的師傅如何能快速判斷哪些Filter/Servlet是內存馬,分析內存馬的行為功能是什么?考慮到Agent技術針對紅隊來說比較重,我們這次使用jsp技術來解決以上問題。
    Webshell檢測方法
    2022-01-04 10:33:05
    Webshell作為一種web后門,通常由攻擊者通過常見的Web網站漏洞,如sql注入、文件包含和上傳等,上傳到服務器,從而為攻擊者提供與服務器端進行交互的能力。
    查看tomcat中間件的\work\Catalina\localhost_\org\apache\jsp 目錄,仍然是可以發現這個shell的編譯過程中產生的幾個文件的,這3個文件攻擊者一般不會刪除,也不會更改文件的時間屬性。
    我們知道,當我們訪問jsp文件時,Java環境會先將jsp文件轉換成.class字節碼文件,再由Java虛擬機進行加載,這導致了Java服務器上會生成對應名稱的.class字節碼文件。對于webshell,這會留下痕跡。 為了實現自刪除.class字節碼文件,我們可以通過反射獲得.class字節碼文件的路徑,再進行刪除。本文將以Zimbra環境為例,結合AntSword-JSP-Template
    JSP Webshell的檢測工具
    2021-12-13 12:04:53
    在11月初,我做了一些JSP Webshell的免殺研究,主要參考了三夢師傅開源的代碼。然后加入了一些代碼混淆手段,編寫了一個免殺馬生成器JSPHorse,沒想到在Github上已收獲500+的Star
    JSP內存馬研究
    2021-10-16 07:49:21
    最近在研究webshell免殺的問題,到了內存馬免殺部分發現傳統的Filter或者Servlet查殺手段比較多,不太容易實現免殺,比如有些工具會將所有注冊的Servlet和Filter拿出來,排查人員仔細一點還是會被查出來的,所以 我們要找一些其他方式實現的內存馬。比如我今天提到的JSP的內存馬(雖然本質上也是一種Servlet類型的馬) 。
    Eclipse Jetty是一個Java Web 服務器和Java Servlet容器。雖然 Web 服務器通常與向人們提供文檔相關聯,但 Jetty 現在通常用于機器對機器的通信,通常在更大的軟件框架內。Jetty 是作為Eclipse Foundation的一部分開發的免費和開源項目。Web 服務器用于Apache ActiveMQ、Alfresco、Scalatra、Apache Geron
    一文看懂內存馬
    2022-01-02 22:31:21
    它負責處理用戶的請求,并根據請求生成相應的返回信息提供給用戶。業務邏輯處理完成之后,返回給Servlet容器,然后容器將結果返回給客戶端。Filter對象創建后會駐留在內存,當web應用移除或服務器停止時才銷毀。該方法在Filter的生命周期中僅執行一次。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类