<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          引爆全球的 Log4j2 核彈級(jí)漏洞,JNDI 到底是個(gè)什么鬼?

          共 2619字,需瀏覽 6分鐘

           ·

          2022-01-14 03:45

          點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)

          背景

          前段時(shí)間,Log4j2, Logback 日志框架頻頻爆雷:

          炸了!Log4j2 再爆漏洞,v2.17.1 橫空出世。。。

          Logback 也爆雷了,驚爆了。。。

          究其原因,很大一部分就是因?yàn)?JNDI 這個(gè)玩意。。。

          JNDI

          JNDI:Java Naming and Directory Interface,即:Java 命名和目錄接口,它專為 Java 應(yīng)用程序提供命名和目錄功能。

          JNDI 架構(gòu)圖:

          如圖,JNDI 包含以下兩部分:

          1)JNDI API:

          Java 應(yīng)用程序即是通過 JNDI API 來訪問各種命名和目錄服務(wù)的。

          2)JNDI SPI(服務(wù)提供接口)

          Java 應(yīng)用程序通過 JNDI SPI 插入各種命名和目錄服務(wù)的,然后通過 JNDI API 進(jìn)行訪問。

          比如,沒用 JNDI 之前,你可能要在 Java 代碼中寫死一些 JDBC 的數(shù)據(jù)庫配置,有了 JNDI,就可以把數(shù)據(jù)源定義一種資源,然后通過名稱進(jìn)行查找,示例代碼如下:

          Connection?conn?=?null;?
          try?{?
          ?Context?ctx?=?new?InitialContext();
          ?DataSource?ds?=?(Datasource)?ctx.lookup("java:MysqlDataSource");
          ?conn?=?ds.getConnection();
          ?...
          }?catch(Exception?e)?{
          ?...
          }?finally?{
          ?...
          }

          當(dāng)然,數(shù)據(jù)源及配置現(xiàn)在都是 Spring 進(jìn)行管理了,這里只是介紹 JNDI 的一種用法。

          說白了,JNDI 就是 Java 的一套規(guī)范,相當(dāng)于把某個(gè)資源進(jìn)行注冊,再根據(jù)資源名稱來查找定位資源。


          要使用 JNDI,必須要有一個(gè) JDNI 類,以及 1 個(gè)或者多個(gè)服務(wù)提供者(SPI),比如,在 JDK 中就包含以下幾個(gè)服務(wù)提供者:

          • 輕量級(jí)目錄訪問協(xié)議 (LDAP)
          • 通用對象請求代理體系結(jié)構(gòu) (CORBA)
          • 通用對象服務(wù)命名服務(wù) (COS)
          • Java 遠(yuǎn)程方法調(diào)用 (RMI)
          • 域名服務(wù) (DNS)

          這里的 LDAP 協(xié)議正是頻頻爆漏洞的根源,攻擊者屢試不爽。

          Log4j2 漏洞回顧

          網(wǎng)上很多復(fù)現(xiàn)的示例,為了不造成更大影響,這里就不實(shí)戰(zhàn)演示了,示例代碼如下:

          /**
          ?*?作者:棧長
          ?*?來源公眾號(hào):Java技術(shù)棧
          ?*/
          public?class?Test?{

          ????public?static?final?Logger?logger?=?LogManager.getLogger();
          ????
          ????public?static?void?main(String[]?args)?{
          ????????logger.info("${jndi:ldap://localhost:8080/dangerious}");
          ????}
          ????
          }

          這就是 Log4j2 核彈級(jí)漏洞的主因!

          LDAP 協(xié)議在上面有提到,它是一個(gè)開放的應(yīng)用協(xié)議,也是 JDK JNDI 下面的一個(gè)服務(wù)提供者,用于提供目錄信息訪問控制。

          漏洞正是利用了 JDNI 中的 ldap 協(xié)議,以上代碼中的 localhost 如果是攻擊者的地址,就會(huì)造成遠(yuǎn)程代碼執(zhí)行漏洞,后果就不堪設(shè)想。。

          這是因?yàn)?Log4j2 有一個(gè) Lookups 功能,它提供了一種向 Log4j 配置中添加值的方法,也就是通過一些方法、協(xié)議去讀取特定環(huán)境中的信息,Jndi Lookup 就是其中一種:

          經(jīng)過一系列的版本修復(fù)再調(diào)整,從 Log4j v2.17.0 開始,JNDI 操作需要通過以下參數(shù)主動(dòng)開啟:

          log4j2.enableJndiLookup=true

          現(xiàn)在這種 jndi:ldap 協(xié)議查找方式也被 Log4j2 Lookups 干掉了,僅支持 java 協(xié)議或者沒有協(xié)議這種查找方式了。

          Log4j2 漏洞的后續(xù)進(jìn)展,棧長也會(huì)持續(xù)跟進(jìn),關(guān)注公眾號(hào)Java技術(shù)棧,公眾號(hào)第一時(shí)間推送。

          結(jié)語

          Log4j2 Lookups 引發(fā)的漏洞真不少,這陣子一直在爆雷,這還真是個(gè)雞肋功能,有幾個(gè)人用到了?

          當(dāng)然,這陣子的漏洞不全是因?yàn)?JNDI 造成的,JNDI 它只是提供了一套規(guī)范,用得不好總不能怪它吧?所以,我們也不能把責(zé)任全推到 JNDI 身上,Log4j2 Lookups 功能脫不了干系,既然提供了 Jndi Lookup 功能,但對其影響面考慮的太少了。。

          一個(gè)日志框架,最主要的目的是記錄日志,雖然提供了許多其他豐富的功能,但如果沒有考慮到位,反而會(huì)引發(fā)嚴(yán)重后果,畢竟安全第一,但也沒辦法,用開源就得接受開源的利弊。

          還有人說,自己開發(fā),這可能是氣話了。主流開源的有很多公司在用,爆漏洞還有大廠反饋,能第一時(shí)間感知,自己開發(fā)的,啥時(shí)候爆雷了,爆在哪了,怎么死的都不知道,能不能做好一款產(chǎn)品和持續(xù)維護(hù)還是另外一回事。

          參考文檔:

          • https://docs.oracle.com/javase/jndi/tutorial/getStarted/overview/index.html
          • https://logging.apache.org/log4j/2.x/manual/lookups.html

          Log4j2 漏洞的后續(xù)進(jìn)展,棧長也會(huì)持續(xù)跟進(jìn),關(guān)注公眾號(hào)Java技術(shù)棧,公眾號(hào)第一時(shí)間推送。

          版權(quán)聲明!!!

          本文系公眾號(hào) "Java技術(shù)棧" 原創(chuàng),轉(zhuǎn)載、引用本文內(nèi)容請注明出處,抄襲、洗稿一律投訴侵權(quán),后果自負(fù),并保留追究其法律責(zé)任的權(quán)利。


          微信官宣:一大波新年紅包封面來了!
          2021 年發(fā)生的 10 件技術(shù)大事!!
          23 種設(shè)計(jì)模式實(shí)戰(zhàn)(很全)
          Logback 也爆雷了,驚爆了
          炸了!Log4j2 再爆漏洞。。
          勁爆!Java 協(xié)程要來了
          重磅官宣:Redis 對象映射框架來了!!
          推薦一款代碼神器,代碼量至少省一半!
          程序員精通各種技術(shù)體系,45歲求職難!
          重磅!Spring Boot 2.6 正式發(fā)布
          Spring Boot 學(xué)習(xí)筆記,這個(gè)太全了!



          關(guān)注Java技術(shù)棧看更多干貨



          獲取 Spring Boot 實(shí)戰(zhàn)筆記!
          瀏覽 32
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www做爱| 黄色级片视频视频 | 美女日比 | 久久久极品视频 | 午夜高清无码 |