2021年最后一個月爆出了Log4j的安全漏洞。
CVE 編號為 CVE-2021-44228 , 攻擊原理為利用 log4j的 lookups 功能,結合 java 的 RMI (java遠程調用)可以使被攻擊對象執行攻擊者的RMI服務器上的一段Java代碼。
因為Log4j被廣泛應用於各種應用,甚至包括一些第三方平台和軟件,所以,這個影響范圍是非常大的。
1.如何排查自己的工程是否引用了存在問題的log4j
根據Log4j自己的安全漏洞對策,版本2.15.0 以下的log4j2都存在這個漏洞。
所以在自己的工程里引用了如下Jar包的話,都可能存在被攻擊的風險。
apache-log4j-2.0-beta1-bin/log4j-core-2.0-beta1.jar apache-log4j-2.0-beta2-bin/log4j-core-2.0-beta2.jar apache-log4j-2.0-beta3-bin/log4j-core-2.0-beta3.jar apache-log4j-2.0-beta4-bin/log4j-core-2.0-beta4.jar apache-log4j-2.0-beta5-bin/log4j-core-2.0-beta5.jar apache-log4j-2.0-beta6-bin/log4j-core-2.0-beta6.jar apache-log4j-2.0-beta7-bin/log4j-core-2.0-beta7.jar apache-log4j-2.0-beta8-bin/log4j-core-2.0-beta8.jar apache-log4j-2.0-beta9-bin/log4j-core-2.0-beta9.jar apache-log4j-2.0-bin/log4j-core-2.0.jar apache-log4j-2.0-rc1-bin/log4j-core-2.0-rc1.jar apache-log4j-2.0-rc2-bin/log4j-core-2.0-rc2.jar apache-log4j-2.0.1-bin/log4j-core-2.0.1.jar apache-log4j-2.0.2-bin/log4j-core-2.0.2.jar apache-log4j-2.1-bin/log4j-core-2.1.jar apache-log4j-2.2-bin/log4j-core-2.2.jar apache-log4j-2.3-bin/log4j-core-2.3.jar apache-log4j-2.4-bin/log4j-core-2.4.jar apache-log4j-2.4.1-bin/log4j-core-2.4.1.jar apache-log4j-2.5-bin/log4j-core-2.5.jar apache-log4j-2.6-bin/log4j-core-2.6.jar apache-log4j-2.6.1-bin/log4j-core-2.6.1.jar apache-log4j-2.6.2-bin/log4j-core-2.6.2.jar apache-log4j-2.7-bin/log4j-core-2.7.jar apache-log4j-2.8-bin/log4j-core-2.8.jar apache-log4j-2.8.1-bin/log4j-core-2.8.1.jar apache-log4j-2.8.2-bin/log4j-core-2.8.2.jar apache-log4j-2.9.0-bin/log4j-core-2.9.0.jar apache-log4j-2.9.1-bin/log4j-core-2.9.1.jar apache-log4j-2.10.0-bin/log4j-core-2.10.0.jar apache-log4j-2.11.0-bin/log4j-core-2.11.0.jar apache-log4j-2.11.1-bin/log4j-core-2.11.1.jar apache-log4j-2.11.2-bin/log4j-core-2.11.2.jar apache-log4j-2.12.0-bin/log4j-core-2.12.0.jar apache-log4j-2.12.1-bin/log4j-core-2.12.1.jar apache-log4j-2.13.0-bin/log4j-core-2.13.0.jar apache-log4j-2.13.1-bin/log4j-core-2.13.1.jar apache-log4j-2.13.2-bin/log4j-core-2.13.2.jar apache-log4j-2.13.3-bin/log4j-core-2.13.3.jar apache-log4j-2.14.0-bin/log4j-core-2.14.0.jar apache-log4j-2.14.1-bin/log4j-core-2.14.1.jar log4j-2.0-alpha1/log4j-core-2.0-alpha1.jar
在Maven工程中使用 dependency tree, 獲取依賴包,查看有沒有上述嫌疑包被使用。
mvn dependency:tree
2.如何避免這個問題?
- 排查
如果你的工程確實引用了上述Jar包,首先應該抱着謹慎的態度排查是否你的服務已經受到攻擊,排查辦法是查看日志內容,看看有沒有看起來不自然的日志被寫進來。這些不自然的日志如前文所述,都是利用log4j的 lookups 寫入的,並且攻擊手段很可能是從客戶端的輸入進入,假設所有合法用戶都不會發起攻擊的話,重點排查功能應該是Login的日志寫入(因為黑客不是合法用戶,只能訪問到Login畫面),例如,login功能的日志有沒有寫入用戶名的操作等。
如果排查到確實有被攻擊的痕跡,就需要根據懷疑被攻擊的內容,對服務器的安全設施做一些調整。
- 升級Log4j
Log4j的2.15.0已經修復了這個問題,因此升級可以確保今后不再發生同樣的問題。
- 其他手段
如果升級比較困難,那么設置Java啟動參數log4j2.formatMsgNoLookups 為 true 也可以避免這個問題
例如(Web容器的設置方法請參考各個容器的說明):
java -Dlog4j2.formatMsgNoLookups=true -jar myapp.jar
- 關於Logback
根據SLF4j 的描述,Logback不存在這個漏洞。
