天天看點

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

最近幾天,世超在各家網際網路大廠的程式員朋友們,都快被一個叫 Log4Shell 的史詩級漏洞給折磨瘋了!

這個漏洞源于一個叫 Log4J2 ( Log For Java 2 )的 Java 開源日志架構,它在用 Java 敲代碼的碼農群體裡可以說是無人不知,無人不曉。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

它就好像早年間打《 魔獸世界 》一定要裝的大腳插件一樣,屬于真正意義上的“ 咖啡伴侶 ”,很少有 Java 程式不用這個元件。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

就是這麼一個要命的底層日志架構,被發現透了一個洞。。。

最先發現漏洞的,是阿裡雲安全團隊中,一位叫 Chen Zhaojun 的大佬。

據他的說法,這個漏洞很早就被國外的安全代碼掃描平台掃出來了,圈内的程式員大佬們也都在等待官方的修複,沒有聲張。

“ 上百萬刀的安全架構,在 Log4J2 漏洞面前一文不值。。。 ” ▼

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

很快啊,包括了阿裡、騰訊、百度、網易、新浪等一衆國内的網際網路大廠紛紛中槍,都被圈在了受影響的範圍之内。

有部落客還收到了騰訊雲發來的防護短信。 ▼

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

不僅僅是大廠的服務系統,耳機、電腦、車機等硬體系統等也無一幸免。。。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

不誇張的說,這個漏洞要是不及時修補,下場就是被如饑似渴的黑客們捅爛,進一步威脅網絡安全。

他們會有效利用“ 零日漏洞 ”( 指的是發現後立即被惡意利用的安全漏洞 )發動零時差攻擊,搶在安全更新檔出來之前,對伺服器造成殺傷。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

就連我們日常使用的手機、電腦軟體( 大部分都是拿 Java 寫的 ),也都将暴露在黑客的的攻擊範圍内,想捅哪裡捅哪裡,把你的電腦挾持過來挖礦也不是沒可能。

就和打遊戲偷家似的, so easy 。。。

不過有意思的是,也有樂子人利用這個漏洞,發現了特斯拉把國内資料上傳到美利堅伺服器的尴尬事兒。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

不知道這個資料有沒有包含使用者資料,但我建議龍馬哥先别急着解釋這茬了,還是趕緊把這個漏洞修修吧,不然到時候可能真的不好收場。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

咳咳,扯遠了。。。

說回這次的漏洞,最可怕的地方在于實作起來沒什麼門檻,隻要用一串簡單的字元,就能輕易攻破伺服器,并在上面運作各種代碼。。。

這别說是竊取個人資訊了,黑客想要遠端挾持、癱瘓企業級的伺服器,那也是毫無阻礙。

那黑客到底是怎麼樣利用漏洞,用幾串字元就輕松攻破伺服器的呢?

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

要整明白這個問題,我們得先搞清楚啥是日志。

衆所周知啊,程式員在敲完一段代碼之後,肯定不可能馬上拿來用,而要通過反複的測試來驗證代碼的可行性。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

但代碼本身在跑的時候,處于一個黑箱狀态,如果放任它瞎跑的話,跑到一半卡住,根本不知道是錯在哪一步上。

這就好像是做數學題時候如果沒草稿紙,在心裡算總是沒個底。

這時候,日志的作用就展現出來了,它就好像是一大張草稿紙,能在上面做任何你自己看的懂得步驟和标記,友善随時随地驗算。

本質上日志是程式員們經常使用的一個工具,它把代碼在測試過程中的每一步都給記錄下來,跑完再回頭 Debug 的時候,就很有針對性,效率也高。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

而 Log4J2 ,就是這麼一個開源的日志架構,它裡面整合了不少在修改代碼時會用到的常用功能,比如日志管理、輸出變量等實用功能。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

這次的高危漏洞就是源于 Log4J2 中一個叫 Lookups 的功能。

從字面上了解,這個功能就是一個用來搜尋内容的接口,想要搜些啥,那就要靠代碼去實作了。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

Log4J2 也在 Lookups 的功能下,提供了不少實作的途徑,問題就出在這個叫 JNDI 的途徑上。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

JNDI 被 Java 允許通過遠端連接配接的方式來加載檔案,這個遠端位址可以是開發者自己的伺服器,也可以是外界的伺服器。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

壞就壞在這個遠端下載下傳上了。。。

黑客隻要通過 JNDI 的方法連接配接上自己的惡意伺服器,就可以堂而皇之從這個接口進來,繼而攻破整棟固若金湯的大廈。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

這裡世超用盡可能簡單的說法解釋了一下這個漏洞,如果差友們對具體的實作方式有興趣,可以看下知乎上軒轅之風大佬寫的這篇文章,介紹的很詳盡了。

https : //zhuanlan.zhihu.com/p/444103520

那麼問題來了,為什麼這個漏洞在被發現之後過了這麼久,才被重視起來?

外行看熱鬧,内行看門道,有些事兒還真得問問業内人士。

于是世超咨詢了國内知名的白帽網站——火線安全平台的小火子同學,聊了一通之後,大緻了解了專業人士對這件事兒的看法。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

實際上 Log4J2 漏洞産生的原因,是因為部分程式員想要開發者保留在 Lookups 中 JNDI 的實作方式的舊功能而引起的。

根據 Log4J2 的維護者 Volkan Yaz c 的說法,他們早就想把這個有風險的功能給去了,但為了保證向後的相容性,照顧到想要用這個功能的程式員,是以還是保留了下來。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

好嘛,小洞不補、大洞吃苦,這個高危漏洞被發現之後, Log4J2 實際的管理機構 Apache 軟體基金會并沒能引起足夠的重視,披露漏洞的流程也沒有按流程來走。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

他們直接把問題往開源平台 Github 的 issue 裡一貼,期待能有好心人給出解決問題得方案。

但這是個開放平台啊,有程式員同樣也有黑客。。。

這波操作等于告訴了全世界的黑客:“ 咱這軟體有高危漏洞哈,歡迎來捅! ”

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

甚至在漏洞全面爆發之前,就已經有白客們在 issue 中公開讨論過具體的修複細節。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

可惜的是,等到所有用到使用 Log4J2 的業務系統反應過來有這個漏洞,已經過去了很長一段時間了。

因為使用 Log4J2 元件的軟體實在太多,是以網際網路公司的安全部門要一個個軟體做修複和更新,這裡頭的工作量也可想而知。

目前最快的臨時處理方案,是在 Log4J2 做一個觸發式的攔截程式,類似于給系統先打上疫苗,把與漏洞相關内容,提前進行阻攔,和防火牆的原理差不多。

話說回來,世超覺得引發這次漏洞問題的鍋,也不應該全由 Log4J2 的維護者來背。

說出來你可能不信,像 Log4J2 這麼大一個開源項目,實際隻靠幾個程式員在業餘事件來管理和維護,他們本身也是用愛發電,沒有任何報酬的。

來自 Volkan Yaz c 推特下網友們的評論▼

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

與之相反的是,包括像蘋果、谷歌、亞馬遜、特斯拉在内的這些大公司,都一定程度上在開心的“ 白嫖 ”Log4J2 ,畢竟開源嘛,能省一點人力維護就省一點,反正總會有人維護的。。。

對于大廠開發者來說,這個來自十幾年前僅有數人在維護的工具,隻要能夠完成産品,那湊合用就湊合用了,絕不重複造輪子。

并且争取在出現問題之前,成功跳槽。。。

可想而知,人人對于這類程式安全漏洞始終都是“ 碰到了才明白出了問題 ”,誰知道整個行業都翻了車。

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

盡管事兒已經是告一段落了,但這樣大型的漏洞翻車事件,并不是第一次,也不會是最後一次發生,此類的“ 黑天鵝事件 ”,往往是不可預估且偶發性的。

而這一場場在網絡世界中燃起的大火,唯有依靠程式員們的挑燈夜戰,才得以熄滅。。。

特别鳴謝:火線安全

撰文:基昊 編輯:小鑫鑫、結界

圖檔、資料來源:

微網誌:@程式員的那些事

微網誌:@Flanker_017

微網誌:@主動幹飯貓

知乎:核彈級漏洞!我把log4j扒給你看!

新智元:中國程式員搶先預警「史詩」級漏洞,席卷蘋果特斯拉

開源中國:Log4j 維護者:為向後相容沒移除導緻漏洞的舊功能

Twitter:@yazicivo

Mitigating the log4j Vulnerability (CVE-2021-44228) with NGINX

讓全世界大廠都手忙腳亂的代碼漏洞,是怎麼一步步成為噩夢的?

繼續閱讀