Apache Log4j2,RASP 防御優(yōu)勢及原理
Apache Log4j2 遠程代碼執(zhí)行漏洞已爆發(fā)一周,安全廠商提供各類防御方案和檢測工具,甲方團隊連夜應急。
影響持續(xù)至今,網(wǎng)上流傳的各種利用和繞過姿勢還在層出不窮,影響面持續(xù)擴大。所有安全人都開始反思一個問題:當前的防御是否有效?針對這樣的 0day 再次發(fā)生,什么是有效的手段?
阿里云安全團隊此次參與了諸多客戶應急,并從云平臺自身防御總結經(jīng)驗,嘗試拋出一些觀點以供討論。
首先,我們先來從技術層面分析一下為什么這次 Log4j2 這么難搞。
Apache Log4j2 漏洞們的特質
Cloud Native
此次 Log4j2 漏洞有兩個很棘手的特質:
1
可以實現(xiàn)任意遠程代碼執(zhí)行
“懂規(guī)矩”的漏洞,危險大的利用門檻高,利用門檻低的危害小,還算符合自然規(guī)律。這個漏洞并不按常規(guī)出牌,不但影響面廣,利用門檻低,危害還極大。三個因素重疊,到處被冠上“史詩級”的頭銜。
Java 的應用極其廣泛且生態(tài)龐大,而 Log4j 作為日志處理的基礎組件被幾乎所有應用程序所使用。
通過 JNDI 注入的手段,可以實現(xiàn)任意遠程代碼執(zhí)行,意味著攻擊者可以在存在漏洞的服務器上為所欲為。
即使在內網(wǎng)環(huán)境中 JNDI 外聯(lián)無法成功,攻擊者也可以結合 lookup 特性去讀取很多敏感信息(如數(shù)據(jù)庫密碼、JAVA 環(huán)境變量等),再通過 DNS 協(xié)議把敏感信息帶出內網(wǎng)。
流量特征隱蔽
某些場景下幾乎沒有可以跟正常請求區(qū)分開來的強特征。
本次漏洞 PoC 構造非常簡單,漏洞觸發(fā)的點廣泛而靈活,配合各種變量和協(xié)議的嵌套繞過方式,導致流量特征非常復雜和隱蔽。Log4j2 的 lookup 功能支持一些特殊的寫法來對字符做二次處理,如 ${lower:j}Ndi、${upper:JN}di、${aaa:vv:cc:-j}ndi 等寫法,都能打破字符串的連續(xù)性,造成利用時候的流量特征極為不明顯。
這是對所有基于流量特征安全防護產(chǎn)品的巨大挑戰(zhàn)。
當流量特征不夠明顯時,基于流量特征的規(guī)則陷入尷尬:要么覆蓋不到,要么產(chǎn)生嚴重誤報。只能持續(xù)不斷補充規(guī)則,在繞過和被繞過中循環(huán)往復。這種防御手段,能在 0day 爆發(fā)初期非常有效的為漏洞修復爭取時間。但隨著各種利用手段的變化越來越多,則很難保證沒有被繞過或誤報。
與 Log4j2 漏洞的某些“弱特征”甚至“0 特征”利用方式類似的場景,還有加密流量、內存馬等,這些手段都曾在大型攻防演練中大放異彩,難以檢測的原理是類似的。
所以,有沒有一種技術,可以無視漏洞利用手法在流量特征上的各種變化或隱藏,防御的更天然,甚至不依賴規(guī)則更新就可以防御這類 0day?
RASP 在此次事件中重回視野
Cloud Native
RASP(Runtime Application Self-Protection),運行時應用自我防護,安全行業(yè)其實對其并不陌生,卻因為傳統(tǒng)印象而采納不多。
這類技術的優(yōu)勢在于,以疫情類比,傳統(tǒng)的邊界防御類產(chǎn)品,類似口罩/防護服,而 RASP 則類似疫苗,會將自己注入到應用當中,伴隨應用一起運行,通過 hook 關鍵函數(shù)實時檢測應用執(zhí)行的高危行為。
RASP 是哪一類 0day 的天敵
Cloud Native
不同于基于流量特征的檢測,RASP 核心關注應用行為,而非流量本身。
當 RASP 發(fā)現(xiàn)一個應用,做了它正常不應該做的事情時,大概率意味著當前應用已經(jīng)被攻擊者利用漏洞攻陷并做了一些高危操作(比如命令執(zhí)行、文件讀取、文件上傳、SSRF 等)。
其第一個優(yōu)勢是:凡是被 RASP 防御的行為,都已經(jīng)是真正可以被成功利用的攻擊行為。
而應用的行為類型,相比于變幻無窮近乎無限的流量特征來說,往往是可以窮舉的。從應用行為異常的角度去檢測,范圍可以大幅收斂到有限的類型,這是RASP可以無視流量特征并且不依賴規(guī)則更新就可以防御幾乎全部0day(包括加密流量和內存馬)的根本原因。
0day 和一些弱特征漏洞利用方式之所以難以防御的原因,上文已經(jīng)提及。但不管流量特征如何變化,漏洞利用的本質:還是要回歸到讓應用來做一些不安全的動作上——也就是應用行為或者企圖。
以此次漏洞來看,RASP 并不關注請求中的流量是否包含了惡意的 payload,而是去關注 Log4j2 究竟使用 JNDI 功能去做了什么。如果進行正常的 JNDI 查詢,就沒有問題;但如果企圖使用 JNDI 功能進行命令執(zhí)行,就是一個顯而易見的危險行為。
RASP 正是在這個階段發(fā)揮了極其重要的作用:在應用犯錯之前將其“懸崖勒馬”。
從這個角度上還可以引申出 RASP 的第二個優(yōu)勢:誤報極低。
比如:如果應用壓根沒有使用 Log4j2,基于 payload 中的惡意特征上報攻擊就意味著誤報,一定程度上消耗安全人員的精力。
而由于 RASP 運行在應用內部,可以明確知道來自流量層的 payload 是否成功進入了 Log4j2 的危險函數(shù),所以不會存在“無效告警”。
近些年來,從 weblogic 到 shiro、dubbo 再到今天的 Log4j2,由第三方組件導致的 0day 不斷的大規(guī)模爆發(fā)。
因為這類組件的代碼并不由使用它的應用的開發(fā)們維護,一旦漏洞爆發(fā),安全人員第一時間首先需要投入大量的精力去排查哪些應用在使用存在漏洞的組件,這并不是一個容易的事情。特別是對應用眾多、迭代快速的企業(yè)來說,自己也說不清楚哪些應用、在使用哪些組件的、哪些版本是非常正常的事情。
這里引出了 RASP 的第三個優(yōu)勢:第三方組件自查。
當一個 0day 出現(xiàn)時,可以第一時間排查到受影響組件的路徑,如下圖所示:
(通過阿里云RASP定位的Log4j組件路徑)
對于歷史上已經(jīng)爆出過 CVE 漏洞的組件,RASP 可以自動檢測并關聯(lián)其對應的 CVE 漏洞編號、漏洞等級等信息,方便安全和開發(fā)人員及時修復。
云原生 RASP,架構優(yōu)勢加速落地
Cloud Native
2014 年,Gartner 就將 RASP 列為應用安全的關鍵趨勢,但實際上 RASP 在生產(chǎn)環(huán)境中大規(guī)模落地一直比較緩慢,目前也只有少數(shù)頭部的互聯(lián)網(wǎng)公司做到了。究其原因,最大的阻礙在于 RASP 技術對應用自身的入侵性,開發(fā)人員會非常擔憂產(chǎn)生性能、穩(wěn)定性、兼容性下降等問題。
阿里巴巴集團從 2015 年開始部署自研的 RASP 產(chǎn)品,多年實踐已完成在生產(chǎn)網(wǎng)的大規(guī)模部署,并且經(jīng)歷了生產(chǎn)網(wǎng)超大流量業(yè)務的實戰(zhàn)檢驗,在性能、穩(wěn)定性和安全性(自我保護)控制方面實現(xiàn)最佳表現(xiàn)。不得不說,這其中的確需要大量時間來沉淀經(jīng)驗和教訓,不斷調優(yōu),這也是甲方安全團隊自建 RASP 最大的難點。
阿里云安全團隊將 RASP 最佳實踐嘗試輸出,去年推出更通用、更適合用戶場景的 RASP 版本,并在多個金融、教育用戶的生產(chǎn)網(wǎng)中部署和應用。今年,打通云架構優(yōu)勢,實現(xiàn)云原生 ARMS 產(chǎn)品應用一鍵接入 RASP 的絲滑體驗(開啟路徑:阿里云 ARMS-應用安全菜單),極大降低云上用戶使用 RASP 防御能力的門檻。
近期事件接入 RASP 的用戶中,阿里云安全團隊觀測到非常兇猛的 Log4j2 漏洞利用和危險行為。以某金融用戶為例,接入 2 天,RASP 檢測并攔截了涉及 8 個 Java 應用的 184 次真實攻擊,其中包含 43 次命令執(zhí)行和 141 次 DNS 漏洞探測。如果缺少 RASP 的防御一環(huán)阻攔,這些是極大可能真實執(zhí)行成功的攻擊。
當前版本免費公測,應急的安全同志們可以接入 RASP 再從容升級。如果需保護應用暫時沒有上云,也可以聯(lián)系我們部署線下版 RASP。
PS:因漏洞管理規(guī)定,文中圖片漏洞細節(jié)通過馬賽克做了模糊處理,敬請諒解