核彈級漏洞Apache Log4j2 的排查與修復
漏洞背景
近期,“核彈級漏洞” Apache Log4j2 遠程代碼執行漏洞細節被公開,攻擊者利用漏洞可以遠程執行代碼。
Apache Log4j2 是一款優秀的 Java 日志框架,該工具重寫了 Log4j 框架,并且引入了大量豐富的特性。該日志框架被大量用于業務系統開發,用來記錄日志信息。
漏洞原理簡述
Apache Log4j2在記錄日志時會對${}的內容當作變量解析并返回解析結果,在Log4j2中定義了多種解析器,Log4j2會根據冒號分割取出前綴,根據前綴的不同交給不同的解析器處理。當前綴為jndi時,會調用JndiLookup#lookup從指定的JNDI服務器中獲取資源并返回。
漏洞排查
本地排查
本次Log4j2漏洞僅影響2.x的版本,可以在本地檢測是否使用Log4j 2.x版本。JndiLookup僅在log4j-core 2.x版本中,log4j-api 2.x并不影響,因此主要排查是否使用log4j-core 2.x。log4j-core 2.x的jar包中存在Log4j-config.xsd特征文件,因此可以通過該文件定位受影響的log4j組件。

Jar檢測
Windows
切換到要掃描的目錄,執行如下命令:
findstr /s /m /C:"Log4j-config.xsd" *.jar

Linux
切換到要掃描的目錄,執行如下命令:
find "$(pwd)" -type f | egrep --color=auto -i "*.jar" | xargs -r -d '' egrep --color=auto -i -r -l "Log4j-config.xsd"

Maven檢測
如果要檢測Maven中是否依賴Log4j-core可以在pom.xml中搜索是否包含log4j-core或spring-boot-starter-log4j2。
Windows
切換到要掃描的目錄,執行如下命令:
findstr /s /m /C:"log4j-core" /C:"spring-boot-starter-log4j2" pom.xml
Linux
切換到要掃描的目錄,執行如下命令:
find "$(pwd)" -type f | egrep --color=auto -i "pom.xml" | xargs -r -d '' egrep --color=auto -i -r -l "log4j-core|spring-boot-starter-log4j2"
外網資產在線排查
該漏洞沒有明顯的特征,所有使用Log4j 2.x記錄日志的功能都有可能存在漏洞。比如請求的參數、請求頭,所以只能利用爬蟲爬取頁面并在所有的參數和請求頭中加入Payload 模糊測試該漏洞。比如請求頭比較容易出現問題的地方在X-Forwarded-For,因為開發經常有記錄請求IP到日志的需求,也會通過X-Forwarded-For獲取IP并寫入日志。
由于爬蟲本身無法檢測到所有的參數輸入點且有些系統參數本身加密的,所以這種方式無法覆蓋所有的測試點。
內網資產在線排查
在線排查的主要方式是通過判斷是否觸發DNS解析請求來判斷的,但是內網的主機大多無法訪問DNS服務器,會產生漏報。因此可以在內網機器可以訪問的主機搭建Ldap服務端,并在Payload處添加${env:COMPUTERNAME}獲取機器名發送給Ldap服務端以定位存在漏洞的資產。
漏洞修復
升級Apache Log4j2版本
目前Log4j官方發布的2.15正式版本已經不再進行${}中的變量解析并且不再支持JNDI獲取資源。
官方下載地址:
https://logging.apache.org/log4j/2.x/download.html
刪除JndiLookup類
之所以會產生該漏洞是因為JndiLookup#lookup會發起JNDI請求來獲取資源,一般來說作為日志記錄也不太需要這個功能,且在新版本官方也禁用了這個功能,因此我們可以直接刪除這個文件。
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
理論上通過這種方式刪除JndiLookup是不需要重啟的,因為如果之前沒有使用過log4j2的JNDI解析變量的功能JndiLookup.class是不會加載到JVM中的,但是為了穩妥最好還是重啟一下。
熱補丁
主要是通過java Agent或者反射讓JndiLookup#lookup無法正常使用來達到修復的目的,但是這種方式在服務重啟后會失效,因此不推薦這種修復方式。
java Agent核心代碼如下,檢測到JndiLookup#lookup調用則直接返回。

通過java自帶的jps命令找到服務的進程ID,一般Tomcat的進程名為Bootstrap。


修復后將無法利用該漏洞。

如需熱補丁,可公眾號回復關鍵詞“熱補丁”獲取。
產品防護
四葉草安全Web應用動態防護系統、四葉草安全入侵防御系統、御盾第二代防火墻、洞鏡異常行為實時監測平臺等產品已具備對該漏洞的檢測和攔截能力,部署了以上產品的客戶可以將產品特征庫升級至最新版本,利用產品的安全防護能力降低企業安全風險。
如您想要咨詢以上產品的特征庫升級事宜,可撥打電話咨詢。聯系電話:400-029-4789;029-88894789。
鏈接下載
- Log4j 2.16官方下載地址:
- https://www.apache.org/dyn/closer.lua/logging/log4j/2.16.0/apache-log4j-2.16.0-bin.zip