系列文章目錄
Web網(wǎng)絡(luò)安全-----紅藍(lán)攻防之信息收集
什么是Log4j?
Log4j 即 log for java(java的日志) ,是Apache的一個(gè)開源項(xiàng)目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件,甚至是套接口服務(wù)器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級(jí)別,我們能夠更加細(xì)致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個(gè)配置文件來靈活地進(jìn)行配置,而不需要修改應(yīng)用的代碼。
一、Log4j漏洞
2021年12月8號(hào)爆出的log4j2的遠(yuǎn)程代碼執(zhí)行漏洞【cve-2021-44228】被稱作“史詩級(jí)核彈漏洞”,其具有以下特點(diǎn):
觸發(fā)方式 | 遠(yuǎn)程 |
用戶認(rèn)證 | 不需要用戶認(rèn)證 |
配置方式 | 默認(rèn) |
影響版本 | Apache Log4j 2.0-alpha1 到 2.14.1(包括這些版本) Apache Log4j 1.2.19 到 1.2.20(包括這些版本) |
利用難度 | 極低,無需授權(quán)即可遠(yuǎn)程代碼執(zhí)行 |
威脅等級(jí) | 嚴(yán)重,能造成RCE |
(該漏洞的范圍可能會(huì)隨著時(shí)間的推移而有所變化)
在了解了Log4j的基本特點(diǎn)后,就知道最高級(jí)的漏洞,往往采取最樸素的“烹飪方式”,簡單、危害大、利于操作。
二、漏洞產(chǎn)生原因
在Log4j2中提供了Lookups機(jī)制,Lookups提供了一種在Log4j配置文件任意位置添加值的方法;而Lookups機(jī)制中,存在JNDI,在Log4j日志輸出時(shí),未對字符合法性進(jìn)行嚴(yán)格的限制,造成JNDI協(xié)議加載的遠(yuǎn)程惡意腳本被執(zhí)行,從而造成RCE。
下面將詳細(xì)介紹什么是Lookups和JNDI
1.什么是Lookups機(jī)制
“ Lookups provide a way to add values to the Log4j configuration at arbitrary places. They are a particular type of Plugin that implements the StrLookup interface. ”
以上內(nèi)容復(fù)制于log4j2的官方文檔lookup - Office Site。其清晰地說明了lookups的主要功能就是提供另外一種方式以添加某些特殊的值到日志中,以最大化松散耦合地提供可配置屬性供使用者以約定的格式進(jìn)行調(diào)用。(lookups是實(shí)現(xiàn)StrLookup接口的特定類型的插件)lookups給開發(fā)者提供了更加方便的后端開發(fā)過程中的調(diào)試效率
lookups可以通過 {$xx} 的方式來執(zhí)行一些命令和操作,log4j支持在日志中使用該表達(dá)式執(zhí)行命令。下面是log4j使用lookup的簡單示例,可以打印系統(tǒng)os信息。
public void test() {
log.info("{$java:os}");
}
這樣就能理解,為什么常見的Log4j漏洞的playload是以下格式的:
${jndi:ldap}
${jndi:ldaps}
${jndi:rmi}
${jndi:iiop}
${jndi:iiopname}
${jndi:corbaname}
${jndi:dns}
${jndi:nis}
觀察上面的palyload就能發(fā)現(xiàn),每個(gè)playload里面都有jndi,下面將介紹JNDI的作用
2.怎么利用JNDI進(jìn)行注入
JNDI簡介
JNDI(Java Naming and Directory Interface–Java)命名和目錄接口 是Java中為命名和目錄服務(wù)提供接口的API,通過名字可知道,JNDI主要由兩部分組成:Naming(命名)和Directory(目錄),其中Naming是指將對象通過唯一標(biāo)識(shí)符綁定到一個(gè)上下文Context,同時(shí)可通過唯一標(biāo)識(shí)符查找獲得對象,而Directory主要指將某一對象的屬性綁定到Directory的上下文DirContext中,同時(shí)可通過名字獲取對象的屬性同時(shí)操作屬性。JNDI主要由JNDI API和JNDI SPI兩部分組成,Java應(yīng)用程序通過JNDI API訪問目錄服務(wù),而JNDI API會(huì)調(diào)用Naming Manager實(shí)例化JNDI SPI,然后通過JNDI SPI去操作命名或目錄服務(wù)其如LDAP, DNS,RMI等,JNDI內(nèi)部已實(shí)現(xiàn)了對LDAP,DNS, RMI等目錄服務(wù)器的操作API。
通過上面可以知道,JNDI可以實(shí)現(xiàn)對LADP、RMI等服務(wù)的操作,所以攻擊者只需要構(gòu)建一個(gè)LADP或RMI遠(yuǎn)程服務(wù)即可,讓遠(yuǎn)程服務(wù)器返回惡意class
LADP
什么是LDAP(Lightweight Directory Access Protocol):顧名思義,一個(gè)輕量級(jí)的目錄訪問協(xié)議,用來訪問目錄服務(wù)(Directory Service)。
那么LDAP協(xié)議作為一個(gè)訪問協(xié)議,它在技術(shù)架構(gòu)的表現(xiàn)上是一個(gè)CS架構(gòu)模式:以IDaaS為例,IDaaS產(chǎn)品要解決的三個(gè)問題,都是會(huì)作為LDAP Client去訪問LDAP Server(這里L(fēng)DAP Server和Directory Service等同了),來實(shí)現(xiàn)功能
RMI
RMI(即Remote Method Invocation)是Java平臺(tái)一個(gè)分布式應(yīng)用程序的應(yīng)用編程接口(API),它是Java Remote Method Protocol(JRMP)的實(shí)現(xiàn),這個(gè)協(xié)議代表了Java語言特有的遠(yuǎn)程過程調(diào)用(RPC)系統(tǒng)。
RMI允許一個(gè)對象通過一個(gè)網(wǎng)絡(luò)在另外一個(gè)虛擬機(jī)上被調(diào)用,這些對象稱之為遠(yuǎn)程對象
在了解了上面這些東西后,畫了一個(gè)圖幫助理解
攻擊者定義一個(gè)接口,在接口中定義數(shù)據(jù)庫操作等。
攻擊者攜帶lookup支持表達(dá)式進(jìn)行請求服務(wù)器。
服務(wù)器通過log4j打印出請求信息。
log4j打印完成后會(huì)執(zhí)行JNDI操作。
這樣就解釋了漏洞的產(chǎn)生,極其高危!
三、Log4j漏洞修復(fù)
1.升級(jí)到受影響版本的修復(fù)版:
(1)對于Apache Log4j 2.x 用戶,建議升級(jí)到2.17.0版本以上。這些版本修復(fù)了漏洞,并包含其他安全增強(qiáng)措施。
(2)對于Apache Log4j 1.x 用戶,目前官方并未針對1.x版本提供官方修復(fù)版。建議升級(jí)到Log4j 2.x版本,或者考慮使用其他日志記錄庫。
2.阻止使用JNDI來加載遠(yuǎn)程資源:
如果您無法立即升級(jí)到修復(fù)版本,可以通過在Log4j配置中禁用使用JNDI來加載遠(yuǎn)程資源來減少風(fēng)險(xiǎn)??梢酝ㄟ^在log4j2.xml文件中將JndiLookup類從配置中移除或設(shè)置為安全的FallbackJndiLookup或DummyLookup來實(shí)現(xiàn)。
3.啟用安全策略:
為了進(jìn)一步減少潛在的風(fēng)險(xiǎn),應(yīng)該考慮啟用安全策略來限制代碼執(zhí)行??梢酝ㄟ^在log4j2.xml文件中添加安全策略配置來實(shí)現(xiàn)。
4.清除受影響系統(tǒng)的緩存:
Log4j有一個(gè)緩存機(jī)制,可以存儲(chǔ)已解析的XML配置。為了確保新的配置生效,您可能需要清除緩存??梢酝ㄟ^清除 Log4j 的上下文選擇器緩存來實(shí)現(xiàn)。
除了以上方法外,了解并關(guān)注官方發(fā)布的漏洞修復(fù)和更新是非常重要的,因?yàn)樵撀┒吹募?xì)節(jié)和修復(fù)程度可能會(huì)發(fā)生變化。推薦遵循安全最佳實(shí)踐,并隨時(shí)關(guān)注官方漏洞通告和安全更新。
總結(jié)
Log4j漏洞能造成RCE等危害,所謂是為所欲為,雖然現(xiàn)在大部分系統(tǒng)早已經(jīng)安裝補(bǔ)丁進(jìn)行修復(fù)升級(jí),但仍有部分老系統(tǒng)未進(jìn)行修復(fù),這是在安全測試中我們不可忽視的一個(gè)重大漏洞,任然需要對Log4j版本等進(jìn)行排查修復(fù)。文章來源:http://www.zghlxwxcb.cn/news/detail-693976.html
未經(jīng)授權(quán)請勿盜用,轉(zhuǎn)發(fā)請指明文章來源地址http://www.zghlxwxcb.cn/news/detail-693976.html
到了這里,關(guān)于Web網(wǎng)絡(luò)安全-----Log4j高危漏洞原理及修復(fù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!