1. Log4j,炸了?。?!

        共 1430字,需瀏覽 3分鐘

         ·

        2021-12-12 21:53

        大家好,我是魚皮,開門見山,知名的開源項(xiàng)目 Apache Log4j 出事了!

        2021 年 12 月 9 日,該項(xiàng)目被曝存在 嚴(yán)重安全漏洞 ,攻擊者只需要向目標(biāo)機(jī)傳入一段特殊代碼,就能觸發(fā)漏洞,自由地在遠(yuǎn)程執(zhí)行任意代碼來控制目標(biāo)機(jī)器!

        老實(shí)說,光聽到這個(gè)消息,我就覺得很可怕了。因?yàn)?Log4j 作為 Java 的知名日志記錄框架,憑借其靈活高效的日志生成能力,不僅被眾多自研項(xiàng)目所使用,還被很多明星項(xiàng)目作為了基礎(chǔ)框架使用,像 Redis、Kafka、Elasticsearch、Apache Flink、Apache Druid 等等。可以想象這個(gè)漏洞的影響范圍有多大,甚至被很多媒體稱之為 “核彈級(jí)” 漏洞!

        在漏洞被曝光之后,第一時(shí)間做出行動(dòng)的不是無辜躺槍的程序員們,而是那些壞的一批的小子們。據(jù)說,在漏洞被公開的第一天,就發(fā)生了近萬次利用該漏洞的攻擊行為!

        漏洞細(xì)節(jié)

        根據(jù) CVE 漏洞公開網(wǎng)站的記錄,該漏洞存在于 Apache log4j <= 2.14.1 的版本(但事實(shí)上,影響的版本范圍比這更大)。攻擊者可以通過 log4j 的 lookup 替換功能向其配置文件的任意位置注入代碼(類似 SQL 注入,把 {實(shí)際代碼}),再加上這些版本中用到的 JNDI 特性并沒有為 LDAP 提供足夠的保護(hù),使得注入的任意代碼都能被肆無忌憚地執(zhí)行。

        JNDI:Java 命名與目錄接口,提供了用名稱來訪問資源的能力

        LDAP:輕型目錄訪問協(xié)議,定義了如何訪問目錄服務(wù)中的內(nèi)容

        兩者配合,可以完成對(duì)服務(wù)器目錄的操作,比如增刪改查。

        CVE 漏洞記錄

        有一些用 Minecraft Java 版本開服的小伙伴就被坑了,因?yàn)樵擁?xiàng)目用到了 log4j 來記錄用戶聊天日志,因此玩家只需要在聊天窗口輸入一些這個(gè)那個(gè)的命令代碼,就被注入執(zhí)行了,從而輕松作弊。

        解決方案

        我整理了三種解決方案,可以根據(jù)實(shí)際情況選用。

        1. 升級(jí)版本

        目前 Apache 官方已經(jīng)針對(duì)該漏洞發(fā)布了補(bǔ)丁版本 2.15.0-rc2,默認(rèn)禁用了 lookup 行為,在確保升級(jí)該版本不會(huì)對(duì)項(xiàng)目的其他依賴產(chǎn)生沖突的情況下,建議升級(jí)。

        該方案雖然比較簡(jiǎn)單粗暴,但這個(gè)版本是否穩(wěn)定?是否沒有漏洞呢?這很難說。

        2. 修改參數(shù)

        如果你不想升級(jí) log4j 的版本,擔(dān)心會(huì)和項(xiàng)目其他依賴產(chǎn)生沖突的話,可以采用 Apache 官方推薦的臨時(shí)解決方案 —— 修改參數(shù)。

        如果你的 log4j 版本 >= 2.10,可以通過設(shè)置系統(tǒng)屬性 log4j2.formatMsgNoLookups 或者環(huán)境變量 LOG4J_FORMAT_MSG_NO_LOOKUPStrue 來禁用 lookup 行為;如果版本在 2.0-beta9 到 2.10.0 之間, 可以直接移除從 classpath 中移除 ?JndiLookup 類,用以下命令即可:

        zip?-q?-d?log4j-core-*.jar?org/apache/logging/log4j/core/lookup/JndiLookup.class

        這個(gè)方案相對(duì)不容易引發(fā)項(xiàng)目的沖突,如果項(xiàng)目很緊急且重要,先用它處理吧。

        3. 換框架

        最暴力、也是解決最徹底的方案就是干脆不用 log4j 了,用別的!

        比如我自己很早之前就棄用 log4j,改用 logback 了,不說別的,logback 的測(cè)試更加充分,質(zhì)量相對(duì)有保障一些。畢竟日志框架作為一個(gè)項(xiàng)目必備的核心依賴,穩(wěn)定性是至關(guān)重要的。

        當(dāng)然,這種方式對(duì)項(xiàng)目的影響可能會(huì)很大,如果一定要整體替換框架,建議進(jìn)行充分的測(cè)試(覆蓋率越高越好),可不是改幾行代碼那么簡(jiǎn)單。



        最后魚皮再多說幾句吧,這次的事件又印證了軟件開發(fā)中的 不信任原則 ,沒有絕對(duì)可信、完全不出問題的服務(wù),所以我們開發(fā)者要做的就是時(shí)刻多留一個(gè)心眼兒,盡量針對(duì)一些服務(wù)的不穩(wěn)定去設(shè)計(jì)一些保護(hù)或降級(jí)措施。比如假設(shè)分布式緩存會(huì)掛掉,可以再設(shè)計(jì)本地緩存繼續(xù)提供臨時(shí)服務(wù),保障系統(tǒng)的可用性。

        不過還好這次漏洞對(duì)我沒什么影響,一是項(xiàng)目本身沒用 log4j 而是 logback;二是在公司做的業(yè)務(wù)是內(nèi)部系統(tǒng),大多數(shù)基礎(chǔ)設(shè)施和中間件都是內(nèi)網(wǎng)的,有網(wǎng)絡(luò)層面的隔離保護(hù);三是我自己的項(xiàng)目用到的服務(wù)也都是云服務(wù)商提供的,哪怕出了問題,基本也不用自己解決(不過還是存在一定的安全風(fēng)險(xiǎn)就是了)。

        唉,不知道有多少小伙伴周末要加班了,你躺槍了么?

        我是魚皮,原創(chuàng)不易,如果覺得文章還不錯(cuò),希望 點(diǎn)贊 + 在看 支持下,給俺點(diǎn)創(chuàng)作動(dòng)力。

        往期推薦

        這款內(nèi)網(wǎng)穿透神器,免費(fèi)!

        做免費(fèi)網(wǎng)站1年,要花多少錢?

        我把學(xué)習(xí)路線都開源了!

        這一周過的,唉

        來打一架吧!

        瀏覽 72
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 成人黄色视频网站 | 久久99免费视频 | 男女18禁网站 | 夫妻精品| 欧美人人爱 |