應用防護功能基于RASP(Runtime Application Self-Protection)技術,通過在應用運行時檢測攻擊并進行應用保護,為應用提供安全防御。您無需修改代碼,只需在主機或容器環境的應用中部署RASP探針,即可為應用提供強大的安全防護能力,并抵御絕大部分未知漏洞所使用的攻擊手法。
功能原理
應用防護使用RASP技術,在應用程序內部通過鉤子(Hook)關鍵函數,實時監測應用在運行時與其他系統的交互過程。當應用出現可疑行為時,應用防護會根據當前上下文環境識別并阻斷攻擊,有效地為您主機上的Web業務進程提供應用漏洞、0day漏洞和內存馬攻擊等防護能力。
應用場景和優勢
保障應用內部安全:不關注流量來源,只關注應用行為,可防御南北向+東西向的威脅;伴隨應用啟動而運行,作為應用資產最后一道防線實現應用默認安全。
輕松應對花式編碼和多種加密流量:RASP能夠看到應用的上下文,不管請求怎么變形,最終應用執行的動作保持不變,只要身份和行為不匹配,就可以檢測到異常;相對于網絡邊界設備無法審計加密流量的問題,RASP可以從應用程序內部獲取完整解密后的請求數據。
低誤報漏報可防御0day漏洞:RASP是從應用內部對關鍵函數操作的數據進行分析,可忽略無法真實執行的攻擊,減少大量的誤報和漏報;針對0day漏洞,無論攻擊入口如何變化、攻擊手段如何隱蔽,都無法繞開最終關鍵函數的執行過程,因此RASP可以有效攔截。
攻擊溯源漏洞定位修復:RASP還能為安全人員和開發人員提供詳盡的攻擊鏈路,包括攻擊原始Payload、代碼調用堆棧等信息,方便他們進行漏洞定位、復現以及修復。
運維成本低:部署簡單,只需在控制臺接入,無需維護和更新具體規則。
使用限制
僅支持防護Java和PHP應用。支持在安裝了云安全中心客戶端的阿里云服務器、第三方廠商云服務器和線下IDC服務器中使用。支持的操作系統如下:
作系統類型 | 支持的操作系統 |
Windows(64位) |
|
Linux(64位) |
|
支持的能力
攻擊檢測(Java應用)
下表介紹應用防護可檢測并攔截的攻擊類型及相關防護建議。
攻擊類型 | 說明 | 防護建議 |
JNI注入 | JNI注入是一種通用的RASP(Runtime Application Self-Protection)繞過手段。當攻擊者拿到代碼執行權限后,可以通過Java Native函數去調用外部的惡意動態鏈接庫,從而繞過Java層的安全防護,并隱匿具體的惡意行為。 | 您的服務器可能存在代碼執行漏洞,請檢查漏洞的位置并限制執行代碼的功能。 |
SQL注入 | SQL注入手段通過把SQL命令插入到頁面請求或Web表單的查詢字符串中,以達到欺騙服務器執行指定SQL語句的目的。它可以通過在Web表單中輸入SQL語句,得到存在安全漏洞的網站上的數據。 | SQL注入是由拼接SQL語句引起的。請盡可能使用預編譯來處理傳入的參數,或通過白名單和黑名單來限制參數的拼接。 |
XXE | 指XML外部實體注入漏洞(XML External Entity Injection)。當XML文件在引用外部實體時,通過構造惡意內容,可以導致任意文件讀取,命令執行和內網攻擊等不良后果。 | 請檢查應用程序在解析XML時是否需要加載外部實體。如果不需要,請在XML解析配置中禁用外部實體。 |
惡意DNS查詢 | 惡意DNS查詢存在多種利用方式。攻擊者極有可能通過DNS協議來突破內網的網絡限制,從而將敏感信息帶出內網,也可能通過DNS協議去探測內網系統是否存在SSRF、JNDI注入等漏洞。 | 惡意DNS查詢是由服務器向用戶控制的參數發送請求所引起的。請檢查參數并通過白名單進行限制。 |
惡意反射調用 | RASP自保護模塊,禁止攻擊者通過反射的方式去修改運行時RASP的相關數據。 | 您的服務器可能存在代碼執行漏洞。請檢查漏洞的位置并限制執行代碼的功能。 |
惡意外連 | SSRF(Server-side request forgery)服務器端請求偽造漏洞指的是攻擊者通過構造由服務端發起的請求,對網站內部系統進行攻擊。 | 修復SSRF漏洞需要限制服務器請求的目標地址范圍,通過白名單機制只允許訪問安全的內部資源,并禁用不必要的外部網絡訪問。 |
惡意文件讀寫 | Java提供RandomAccessFile,用于文件讀寫操作。當使用該Class進行文件讀寫的時候,如果未對文件路徑、文件內容進行限制,攻擊者可能讀取到系統敏感文件,也可能上傳木馬文件。 | 請檢查文件讀取和上傳是否正常。如果出現異常,請檢查函數代碼,并通過黑名單進行限制。 |
惡意文件上傳 | 對于網站提供的文件上傳功能,如果未對上傳文件的類型進行限制,攻擊者可能通過上傳木馬文件來獲取服務器的更大權限,從而造成嚴重危害。 | 請限制上傳文件的類型,禁止上傳具有執行權限的文件,如JSP。 |
命令執行 | 命令執行漏洞是指服務器沒有對執行的命令進行過濾,用戶可以隨意執行系統命令。 | 通常遠程命令執行是由Web Shell或服務器的危險代碼引起的。請檢查命令執行的位置。如果是Web Shell,請及時刪除。如果是服務器的正常功能,則可以通過白名單限制執行的命令。 |
目錄遍歷 | 網站自身的配置缺陷可能會使得網站目錄被任意瀏覽,導致隱私信息泄露。攻擊者可以利用該信息對網站進行攻擊。 | 請檢查目錄遍歷操作是否正常。如果異常,請檢查函數的代碼,并通過黑名單對相關命令(如“./”和“../”)進行限制。 |
內存馬注入 | 內存馬是一種新興的木馬技術,攻擊者通過一些特殊的技術手段將木馬注入到內存中,可以有效繞過WAF和主機防御的檢測。 | 您的服務器可能存在代碼執行漏洞。請檢查漏洞的位置并限制執行代碼的功能。 |
任意文件讀取 | 對于網站提供的文件下載和讀取功能,如果是直接通過絕對路徑或目錄穿越符對文件進行讀取和下載,沒有相關文件路徑的限制,那么攻擊者就可以利用這種方式獲取敏感信息,并對服務器進行攻擊。 | 請檢查文件讀取操作是否正常。如果異常,請檢查函數的代碼,并使用黑名單對傳入參數(如“./”和“../”)進行限制。 |
線程注入 | 線程注入是一種通用的RASP繞過手段。當攻擊者獲得代碼執行權限后,可以通過新建線程的方式使RASP丟失運行環境的上下文,從而影響RASP的防御能力。 | 您的服務器可能存在代碼執行漏洞。請檢查漏洞的位置并限制執行代碼的功能。 |
惡意Attach | Attach API是Java提供的動態修改字節碼技術,該功能可以實現動態修改運行時應用的字節碼。很多攻擊者通過該手法進行Agent型內存馬的注入,具有較高的欺騙性。 | 您的服務器可能存在代碼執行漏洞。請檢查漏洞的位置并限制執行代碼的功能。 |
JNDI注入 | 當應用進行JNDI查詢的時候,若查詢的URL可以由攻擊者控制,則攻擊者可以使用服務器去查詢惡意的鏈接,使得服務器加載一些惡意Class類,實現任意代碼執行。 |
|
危險協議使用 | 若服務端進行訪問的URL用戶端可控,而應用本身又未對該URL的協議進行限制,那么攻擊者可能通過file、netdoc等危險協議對服務器上的敏感文件進行讀取。 | 請對URL可以訪問的協議進行限制。 |
反序列化攻擊 | Java反序列是指把字符序列恢復為Java對象的過程,在對象生成過程中,若該對象包含一些危險度較高的代碼,則攻擊者可能通過控制生成對象的成員變量在對象進行反序列化的時候實現一些惡意攻擊。 |
|
任意文件刪除 | 對于網站提供的文件刪除功能,文件刪除的接口如果沒有對文件路徑進行限制,攻擊者就可以通過絕對路徑或目錄穿越符對任意文件進行刪除操作,從而對服務器進行攻擊。 | 請檢查文件刪除操作是否正常。如果異常,請檢查函數的代碼,并使用黑名單對傳入參數(如“./”和“../”)進行限制。 |
表達式注入 | 表達式組件提供了十分豐富的功能,支持在運行時查詢和處理數據等,但很多表達式組件也提供了函數調用等權限較高的功能,如果未對這些功能做限制,而攻擊者又能夠控制表達式執行的內容,那么攻擊者將很有可能通過表達式執行任意代碼。 | 請對進入表達式的內容進行嚴格限制,禁止大部分Java函數的調用。若是第三方組件漏洞導致,請及時升級組件版本。 |
引擎注入 | Java提供了較多的第三方引擎組件(如Rhino、Nashorn等JS引擎,Velocity、FreeMarker等模板引擎),這些引擎通常提供了函數調用等權限較高的功能,如果對這些功能未作限制,而攻擊者又能夠控制引擎執行的內容,那么攻擊者將很有可能通過引擎執行任意代碼。 | 請對進入引擎文件的內容進行嚴格限制,禁止大部分Java函數的調用。若是第三方組件漏洞導致,請及時升級組件版本。 |
惡意Beans綁定 | Java存在一些框架支持對應用運行時Beans的參數綁定,如果未對綁定Beans的類型進行限制,攻擊者就可以通過對一些敏感Beans值的修改,破壞應用的運行,甚至造成執行任意代碼。 | 請對可以綁定的Beans的類型進行限制,禁止對類似于Class、Classloader類型的Beans值進行修改。若是第三方組件漏洞導致,請及時升級組件版本。 |
惡意類加載 | 現階段,很多0day、WebShell的利用均依賴于惡意類的加載,一旦惡意類加載成功,攻擊者便可以通過惡意類的初始化來取得代碼執行權限,從而進行一系列的惡意操作。 |
|
JSTL任意文件包含 | JSP標準標簽庫(JSTL)是一個JSP標簽集合,它封裝了JSP應用的通用核心功能。當用戶可控參數被直接拼接到JSTL標簽中而未對該參數進行任何限制的情況下,攻擊者可以構造特殊的攻擊腳本造成任意文件讀取、SSRF攻擊。 | 盡可能不要將用戶可控參數直接拼接到JSTL標簽上,如果必須這樣做,請對該參數的內容進行嚴格的白名單控制。 |
攻擊檢測(PHP應用)
攻擊類型 | 說明 | 防護建議 |
惡意文件包含 | PHP中的文件包含漏洞是一種常見的安全漏洞,它允許攻擊者通過操縱輸入來包含和執行任意文件。這種漏洞通常發生在使用 | 建議驗證和限制用戶輸入的文件路徑,僅允許包含應用程序目錄中的預定義文件,以防止攻擊者插入惡意路徑。 |
惡意外連 | SSRF(Server-side request forgery)服務器端請求偽造漏洞指的是攻擊者通過構造由服務端發起的請求,對網站內部系統進行攻擊。 | 修復SSRF漏洞需要限制服務器請求的目標地址范圍,通過白名單機制只允許訪問安全的內部資源,并禁用不必要的外部網絡訪問。 |
反序列化 | PHP中的反序列化漏洞是一種嚴重的安全問題,它允許攻擊者通過操縱序列化數據來執行任意函數,這種漏洞通常發生在使用 | 避免直接反序列化不可信數據,使用 |
回調函數執行 | 回調函數是指PHP中的 | 為防止PHP中的回調函數被濫用,確保傳遞給 |
惡意文件讀寫 | 當調用文件讀寫函數的時候,如果未對文件路徑、文件內容進行限制,攻擊者可能讀取到系統敏感文件,也可能上傳木馬文件。 | 為防止文件讀寫相關的安全漏洞,嚴格驗證和限制文件路徑,只允許訪問預定義的目錄,并對文件內容進行安全性檢查以防止惡意代碼上傳。 |
任意代碼執行 | 任意代碼執行漏洞是一種嚴重的安全漏洞,攻擊者可以通過這一漏洞在服務器上執行任意的代碼片段,從而獲取服務器的控制權限或讀取、修改敏感數據。這種漏洞通常源于程序未對用戶輸入進行充分驗證,導致攻擊者能夠注入惡意代碼。如果攻擊者成功利用此漏洞,可能導致數據泄露、網站被篡改或植入惡意軟件等。 | 建議使用嚴格的輸入驗證和輸出編碼,避免使用 |
任意文件讀取 | 如果沒有對文件讀取接口進行過濾和限制,攻擊者就可以利用絕對路徑或目錄穿越符對文件進行讀取和下載,從而獲取敏感信息,對服務器進行攻擊。 | 對文件讀取接口實施嚴格的輸入驗證和路徑限制,確保僅允許訪問經過白名單驗證的文件,并使用黑名單對傳入參數(如“./”和“../”)進行限制。 |
任意文件刪除 | 文件刪除的接口如果沒有相關文件路徑的限制,攻擊者就可以通過絕對路徑或目錄穿越符對文件進行任意刪除,對服務器進行攻擊。 | 對文件刪除接口實施嚴格的輸入驗證和路徑限制,確保僅允許刪除經過驗證的文件,并使用黑名單對傳入參數(如“./”和“../”)進行限制。 |
命令執行 | 命令執行漏洞可以讓攻擊者直接向后臺服務器遠程注入操作系統命令或者代碼,從而控制后臺系統。 | 對所有用戶輸入進行嚴格的驗證和過濾,避免直接使用未經處理的輸入構建操作系統命令,并盡可能使用安全的API替代系統命令執行。 |
目錄遍歷 | 網站自身的配置缺陷可能會使得網站目錄被任意瀏覽,導致隱私信息泄露。攻擊者可以利用該信息對網站進行攻擊。 | 通過配置適當的服務器權限設置和使用 |
惡意文件上傳 | 文件上傳功能如果未對上傳文件的類型進行限制,攻擊者可能通過上傳木馬文件來獲取服務器的更大權限,從而造成嚴重危害。 | 對上傳文件的類型進行嚴格限制和驗證,只允許安全的文件類型,禁止上傳具有執行權限的文件后綴,如php等,并在服務器端重新檢查文件內容以確保其安全。 |
應用漏洞防御
應用防護功能可以有效防御應用漏洞、0day漏洞和內存馬等攻擊行為。在應用漏洞應急響應過程中,借助RASP的攻擊防護能力,可以快速阻斷攻擊,為修復應用漏洞爭取更多時間。應用防護功能還可以協助您快速定位風險來源與影響范圍。關于應用漏洞的更多信息,請參見查看和處理漏洞。
如果您暫時無法修復應用漏洞,可先將應用進程接入RASP進行防護。您可以參考下述操作步驟為檢測出應用漏洞的應用添加RASP防護。
登錄云安全中心控制臺。在控制臺左上角,選擇需防護資產所在的區域:中國或全球(不含中國)。
在左側導航欄,選擇 。
在應用漏洞頁簽,存在RASP支持實時防護標簽的漏洞為應用防護支持防護的漏洞,單擊對應漏洞操作列的立即防護。
在應用防護接入面板,應用分組名稱的下拉列表中選擇需資產需接入的應用分組,并選擇對應資產,然后單擊確定。
如果不存在所需的應用分組,您可以在下拉列表中單擊新建應用分組,輸入應用分組名稱,并單擊確定,實現快速創建應用分組。此處創建的應用分組的防護模式為防護,防護策略組為日常運行組。
檢測出漏洞的應用接入應用防護后,只有在應用漏洞完成了一次漏洞掃描時,在漏洞詳情頁的待處理漏洞列表中該服務器的操作列才會顯示為已防護。
應用行為分析
應用分析功能通過對接入的應用程序進行實時監測、收集和分析應用程序的行為數據,并生成報告和可視化展示,可以幫助您了解應用的攻防詳情,進行系統安全加固。更多信息,請參見應用行為分析。
內存馬防御
應用防護的RASP技術通過分析內存數據可以實時檢測內存馬,并支持對內存馬注入和內存馬執行過程進行攔截。更多信息,請參見內存馬防御。
弱點檢測
下表介紹應用防護可檢測的應用弱點類型及相關修復建議。
弱點類型 | 風險等級 | 說明 | 修復建議 |
不安全的Fastjson配置 | 高危 | 應用的Fastjson開啟了反序列化功能,該功能可能被攻擊者利用,造成遠程命令執行。如非必要,請關閉該功能。 | 請將Fastjson的safemode設置為true,或將autotype設置為false。 |
不安全的log4j配置 | 高危 | 您的log4j組件開啟了lookup功能,攻擊者可能通過該功能進行JNDI注入,從而造成遠程代碼執行漏洞。 | 請升級log4j到最新版本,或刪除Jar包中的org/apache/logging/log4j/core/lookup/JndiLookup.class文件。更多信息,請參見Apache Log4j2 遠程代碼執行漏洞(CVE-2021-44228)。 |
不安全的啟動參數 | 高危 | 當攻擊者可以訪問到JDWP調試端口的時候,可以通過該功能執行任意代碼,造成遠程代碼執行。 | 如無特殊場景,請及時關閉JDWP端口或者避免將JDWP端口暴露在公網,謹防長期運行的應用開啟了JDWP端口。 |
Shiro弱密鑰 | 高危 | Shiro應用使用了較弱的加密密鑰,攻擊者可能通過破解密鑰,進一步進行反序列化攻擊,從而造成遠程代碼執行。 | 請及時修改應用中的Shiro加密密鑰。 |
不安全的JMX配置 | 中危 | 開啟了JMX的遠程鏈接,且在認證方面存在風險,攻擊者可能會遠程連接應用的JMX服務并造成命令執行風險。 | 請關閉JMX服務的遠程連接,或者請使用較為安全的認證口令。 |
不安全的Rhino配置 | 中危 | Rhino框架中包含了危險的properties,攻擊者可能通過這些properties進行遠程代碼執行攻擊。 | 先升級rhnio到最新版本,然后使用SafeStandardObjects定義rhino的上下文,防止JavaScript引擎調用Java代碼。 下面是使用SafeStandardObjects定義Rhino上下文的示例:
|
不安全的Spring配置 | 中危 | Spring Actuator模塊開啟了部分端點:heapDump、env、restart、refresh、trace、jolokia、h2-console等,可能造成敏感信息泄露或者遠程代碼執行漏洞。 | 如無特殊場景,請關閉對應功能。 |
脆弱的登錄憑證 | 中危 | 應用在登錄口令安全性較弱,攻擊者可能通過爆破弱口令登錄您的系統,從而獲取敏感信息甚至服務器權限。 | 請及時修改該應用的密碼為復雜密碼。 |
不安全的JNDI配置 | 低危 | 您的應用存在不安全的useCodebaseOnly/rmi-trustURLCodebase/ldap-trustURLCodebase參數設置,可能存在JNDI注入風險。 | 請將JDK升級到最新版本,如果無法升級,在應用啟動時候添加啟動參數:
|
不安全的XML實體配置 | 低危 | XML解析外部實體功能已開啟,這可能導致您的應用遭受XXE攻擊。 | 如果無特殊場景,請勿使用外部實體。 |
數據庫弱口令 | 低危 | 應用連接數據庫時使用弱口令,攻擊者可能通過該弱口令連接您的數據庫造成敏感信息泄露或遠程命令執行。 | 請及時更改應用連接數據庫的密碼為復雜密碼。 |