全部產品
Search
文件中心

Application Real-Time Monitoring Service:檢測攻擊類型說明和防護建議

更新時間:Jul 06, 2024

本文介紹攻擊統計中涉及的攻擊類型以及相關防護建議。

攻擊類型

說明

防護建議

JNDI注入

當應用進行JNDI查詢的時候,若查詢的URL可以由攻擊者控制,則攻擊者可以使伺服器去查詢惡意的連結使得伺服器載入一些惡意Class,實現任意代碼執行。

  • 若該漏洞源於第三方組件,請及時進行組件版本升級。

  • 若為自寫JNDI查詢代碼,請對查詢的URL進行限制,禁止一些危險協議的查詢。

JNI注入

JNI注入是一種通用的RASP(Runtime Application Self-Protection)繞過手段。當攻擊者拿到代碼執行許可權後,可以通過Java Native函數去調用外部的惡意動態連結程式庫,從而繞過Java層的安全防護,並隱匿具體的惡意行為。

您的伺服器可能存在代碼執行漏洞,請檢查漏洞的位置並限制執行代碼的功能。

JSTL任意檔案包含

JSP標準標籤庫(JSTL)是一個JSP標籤集合,它封裝了JSP應用的通用核心功能。當使用者可控參數被直接拼接到JSTL標籤中而未對該參數進行任何限制的情況下,攻擊者可以構造特殊的攻擊指令碼造成任意檔案讀取、SSRF的攻擊。

儘可能不要將使用者可控參數直接拼接到JSTL標籤上,如果必須這樣做,請對該參數的內容進行嚴格的白名單控制。

SQL注入

SQL注入手段通過把SQL命令插入到頁面請求或Web表單的查詢字串中,以達到欺騙伺服器執行指定SQL語句的目的。它可以通過在Web表單中輸入SQL語句,得到存在安全性漏洞的網站上的資料。

SQL注入是由拼接SQL語句引起的。請儘可能使用先行編譯來處理傳入的參數,或通過白名單和黑名單來限制拼接參數。

XXE

指XML外部實體注入漏洞(XML External Entity Injection)。當XML檔案在引用外部實體時,通過構造惡意內容,可以導致任意檔案讀取,命令執行和內網攻擊等不良後果。

請檢查應用程式在解析XML時是否需要載入外部實體。如果不需要,請在XML解析配置中禁用外部實體。

XSS

跨站指令碼攻擊是指惡意攻擊者往Web頁面裡插入惡意Script代碼,當使用者瀏覽該頁之時,嵌入其中Web裡面的Script代碼會被執行,從而達到惡意攻擊使用者的目的。

XSS漏洞本質上是一種HTML注入,也就是將HTML代碼注入到網頁中。那麼其防禦的根本就是在將使用者提交的代碼顯示到頁面上時做好一系列的過濾與轉義。

  1. 過濾輸入的資料,對例如:“ ‘ ”,“ “ ”,“ < ”,“ > ”,“ on* ”,script、iframe等危險字元進行嚴格的檢查。這裡的輸入不僅是使用者可以直接互動的輸入介面,也包括HTTP請求中的Cookie中的變數,HTTP要求標頭部中的變數等。

  2. 不僅驗證資料的類型,還要驗證其格式、長度、範圍和內容。

  3. 不僅在用戶端做資料的驗證與過濾,關鍵的過濾步驟在服務端進行。

  4. 對輸出到頁面的資料進行相應的編碼轉換,如HTML實體編碼、JS編碼等。對輸出的資料也要檢查,資料庫裡的值有可能會在一個大網站的多處都有輸出,即使在輸入做了編碼等操作,在各處的輸出點時也要進行檢查。

運算式注入

運算式組件提供了十分豐富的功能,支援在運行時查詢和處理資料等,但很多運算式組件也提供了函數調用等許可權較高的功能,一旦未對這些功能做限制,而攻擊者又能夠控製表達式執行的內容,那麼攻擊者將很有可能通過運算式執行任意代碼。

請對進入運算式的內容進行嚴格限制,禁止大部分Java函數的調用。若是第三方組件漏洞導致,請及時升級組件版本。

惡意Attach

Attach API是Java提供的動態修改位元組碼技術,該功能可以實現動態修改運行時應用的位元組碼。很多攻擊者通過該手法進行Agent型記憶體馬的注入,具有較高的欺騙性。

您的伺服器可能存在代碼執行漏洞。請檢查漏洞的位置並限制執行代碼的功能。

惡意Beans綁定

Java存在一些架構支援對應用運行時Beans的參數綁定,一旦未對綁定Beans的類型進行限制,攻擊者就可以通過對一些敏感Beans值的修改,破壞應用的運行,甚至造成執行任意代碼。

請對可以綁定的Beans的類型進行限制,禁止對類似於Class、Classloader類型的Beans值進行修改。若是第三方組件漏洞導致,請及時升級組件版本。

惡意DNS查詢

惡意DNS查詢存在多種利用方式。攻擊者極有可能通過DNS協議來突破內網網路限制,從而將敏感資訊帶出內網,也可能通過DNS協議去探測內網系統是否存在SSRF、JNDI注入等漏洞。

惡意DNS查詢是由伺服器向使用者控制的參數發送請求所引起的。請檢查參數並通過白名單進行限制。

惡意反射調用

RASP自保護模組,禁止攻擊者通過反射的方式去修改運行時RASP的相關資料。

您的伺服器可能存在代碼執行漏洞。請檢查漏洞的位置並限制執行代碼的功能。

惡意類載入

現階段,很多0day、WebShell的利用均依賴於惡意類的載入,一旦惡意類載入成功,攻擊者便可以通過惡意類的初始化來取得代碼執行許可權,從而進行一系列的惡意操作。

  • 若惡意類的載入是通過WebShell控制,請及時刪除WebShell。

  • 若惡意類的載入是架構導致,請及時升級架構版本。

惡意外連

SSRF(Server-side request forgery)伺服器端請求偽造漏洞指的是攻擊者通過構造由服務端發起的請求,對網站內部系統進行攻擊。

SSRF是由伺服器向使用者傳入的參數發送請求所引起的。請檢查參數並通過白名單進行限制。

惡意檔案讀寫

Java提供RandomAccessFile,用於檔案讀寫操作。當使用該Class進行檔案讀寫的時候,如果未對檔案路徑、檔案內容進行限制,攻擊者可能讀取到系統敏感檔案,也可能上傳木馬檔案。

請檢查檔案讀取和上傳是否正常。如果出現異常,請檢查函數代碼,並通過黑名單進行限制。

惡意檔案上傳

對於網站提供的檔案上傳功能,如果未對上傳檔案的類型進行限制,攻擊者可能通過上傳木馬檔案來擷取伺服器的更大許可權,從而造成嚴重危害。

請限制上傳檔案的類型,禁止上傳具有執行許可權的檔案,如JSP。

還原序列化攻擊

Java反序列是指把字元序列恢複為Java對象的過程,在對象產生過程中,若該對象包含一些危險度較高的代碼,則攻擊者可能通過控制產生對象的成員變數在對象進行還原序列化的時候實現一些惡意攻擊。

  1. 及時升級存在漏洞的組件版本。

  2. 若官方還未提供漏洞修複的組件版本,請暫時關閉該功能。

命令執行

命令執行漏洞是指伺服器沒有對執行的命令進行過濾,使用者可以隨意執行系統命令。

通常遠程命令執行是由Web Shell或伺服器的危險代碼引起的。請檢查命令執行的位置。如果是Web Shell,請及時刪除。如果是伺服器的正常功能,則可以通過白名單限制執行的命令。

目錄遍曆

網站自身的配置缺陷可能會使得網站目錄被任意瀏覽,導致隱私資訊泄露。攻擊者可以利用該資訊對網站進行攻擊。

請檢查目錄遍曆操作是否正常。如果異常,請檢查函數的代碼,並通過黑名單對相關命令(如“./”和“../”)進行限制。

記憶體馬注入

記憶體馬是一種新興的木馬技術,攻擊者通過一些特殊的技術手段將木馬注入到記憶體中,可以有效繞過WAF和主機防禦的檢測。

您的伺服器可能存在代碼執行漏洞。請檢查漏洞的位置並限制執行代碼的功能。

任意檔案刪除

對於網站提供的檔案刪除功能,如果是直接通過絕對路徑或目錄穿越符對檔案進行讀取和下載,沒有相關檔案路徑的限制,那麼,攻擊者就可以利用這種方式擷取敏感資訊,對伺服器進行攻擊。

請檢查檔案刪除操作是否正常。如果異常,請檢查函數的代碼,並使用黑名單對傳入參數(如“./”和“../”)進行限制。

任意檔案讀取

對於網站提供的檔案下載和讀取功能,如果是直接通過絕對路徑或目錄穿越符對檔案進行讀取和下載,沒有相關檔案路徑的限制,那麼,攻擊者就可以利用這種方式擷取敏感資訊,對伺服器進行攻擊。

請檢查檔案讀取操作是否正常。如果異常,請檢查函數的代碼,並使用黑名單對傳入參數(如“./”和“../”)進行限制。

資料庫弱口令

當資料庫使用強度較低的密碼時,攻擊者可能通過暴力破解擷取正確的資料庫密碼,從而達到竊取資料庫資料、擷取系統許可權等目的。

請使用更複雜的密碼。

線程注入

線程注入是一種通用的RASP繞過手段。當攻擊者拿到代碼執行許可權後,可以通過建立線程的方式使RASP丟失掉運行環境的上下文,從而影響RASP的防禦能力。

您的伺服器可能存在代碼執行漏洞。請檢查漏洞的位置並限制執行代碼的功能。

危險協議使用

若服務端進行訪問的URL使用者端可控,而應用本身又未對該URL的協議進行限制,那麼攻擊者可能通過File、NetDoc等危險協議對伺服器上的敏感檔案進行讀取。

請對URL可以訪問的協議進行限制。

引擎注入

Java提供較多的第三方引擎組件(如rhino、Nashorn等JS引擎,velocity、freemarker等模板引擎),這些引擎通常提供了函數調用等許可權較高的功能,一旦對這些功能未做限制,而攻擊者又能夠控制引擎執行的內容,那麼攻擊者將很有可能通過引擎執行任意代碼。

請對進入引擎檔案的內容進行嚴格限制,禁止大部分Java函數的調用。若是第三方組件漏洞導致,請及時升級組件版本。