眾所周知,被定義和跟蹤為CVE-2021-44228,也被稱為Log4Shell的Log4j漏洞,允許攻擊者在目標系統中執行任意代碼。因此,如果您的應用正在使用Log4j的2.0-alpha1到2.14.1版的話,那么就應當盡快更新到其最新的版本(目前為2.16.0)。
對此,瑞士政府發布了一張能夠很好地解釋該漏洞的被攻擊流程圖,請參見下圖:
下面,讓我們根據上圖,深入研究與其有關的緩解策略。
使用Maven的依賴項插件
在Maven項目中,您可以通過如下簡單命令,在依賴項樹(dependencies tree)中搜索log4j-core的相關依賴項,并檢查該項目是否使用到了受影響的依賴項。
- 純文本
- mvn dependency:tree -Dincludes=org.apache.logging.log4j:log4j-core
該命令使用Maven Dependency Plugin來顯示項目的依賴樹(包括各種有傳遞關系的依賴項)。通過后面的參數,該命令過濾并輸出了log4-core的依賴項。因此,如果您的項目正在依賴某個易受攻擊的Log4j版本的話,那么您將會看到如下內容:
在這個例子中,由輸出可知,該項目直接使用Log4j的2.14.1版。顯然,它是易受攻擊的。因此,本項目需要將如下依賴項:
- XML
-
-
org.apache.logging.log4j -
log4j-core -
2.14.1 -- update this! -->
替換為:
- XML
-
-
org.apache.logging.log4j -
log4j-core -
2.16.0 -- or newer version -->
同理,我在MariaDB數據庫的JDBC連接器項目中,進行了如下測試,并得出了對應的結果:
慶幸的是,該項目并未使用Log4j,因此它不易受到Log4Shell的攻擊。更多有關 MariaDB特定案例的信息,請參閱--https://dzone.com/articles/is-the-mariadb-jdbc-driver-affected-by-the-log4j-v。
使用Maven的幫助插件
如果您想做進一步的調查,則需要檢查有效的POM(Project Object Model,項目對象模型),并搜索項目中使用的日志記錄框架。讓我們將目光轉回剛才的MariaDB JDBC連接器項目,我使用Maven的幫助插件,生成了有效的POM。由于我使用的是類Unix的操作系統(您可以通過截圖看到,其實是macOS),因此我使用如下grep命令(在Windows中,您可以使用findstr)來過濾輸出:
- 純文本
- mvn help:effective-pom | grep log
并且得到了來自mvn的如下輸出:
由輸出可知,MariaDB JDBC驅動程序使用Logback作為日志記錄框架。雖然Logback不會受到Log4Shell的影響,但是它帶有1.2.8和1.3.0-alpha11版本中的相關漏洞。當然,其嚴重程度要輕得多,我們不必過于恐慌。我查看了其連接器(connector)所使用的版本,該版本號為1.3.0-alpha10。盡管Logback作為測試依賴項,被包含在MariaDB驅動程序中,但我在GitHub上發送了一個拉取請求,以便對其予以更新。在此,我鼓勵您也對自己手頭的各種開源項目執行類似的操作,以盡早發現那些易受攻擊的依賴項。
使用Syft和Grype
在包含了大量JAR文件的更復雜的項目中,您可以使用Syft和Grype之類的工具。其中Syft是一個CLI(命令行接口)工具和Go語言庫,可被用于從容器鏡像和文件系統中生成軟件物料清單(Software Bill of Materials,SBOM)。Grype則能夠通過多級嵌套,去掃描各個容器鏡像和文件系統中的漏洞。兩者可以協同使用。
使用LunaSec的工具
由開源的數據安全平臺開發的LunaSec工具,可以通過掃描目錄,以及匹配文件散列的方式,來發現是否存在Log4j依賴項的相關漏洞。該工具適用于Windows、Linux 和macOS系統。您只需在相關傳遞目錄,通過如下命令觸發該工具的掃描進程即可:
- 純文本
- log4shell scan your-project-dir
如果目標是一個易受攻擊的項目,那么你將會得到如下輸出內容:
- 純文本
- 10:04AM INF identified vulnerable path fileName=org/apache/logging/log4j/core/net/JndiManager$1.class path=test/struts-2.5.28-all/struts-2.5.28/apps/struts2-rest-showcase.war::WEB-INF/lib/log4j-core-2.12.1.jar versionInfo="log4j 2.8.2-2.12.0"
使用log4j-scan
此外,FullHunt團隊也提供了一個名為log4j-scan的開源工具。作為一個自動且全面的掃描器,它可以被用于查找易受攻擊的Log4j主機。也就是說,它能夠方便團隊掃描自己的基礎架構,并測試各種可能導致代碼執行的WAF(Web應用防火墻)繞過攻擊。該工具雖然能夠提供多個選項,但是其最基本的服務是,用戶可以將待掃描的URL傳遞給該工具,以便直接獲得有關被檢測到的漏洞報告。例如,您可以使用如下命令:
- 純文本
- python3 log4j-scan.py -u https://log4j.lab.secbot.local
其掃描結果的輸出為:
使用Huntress Log4Shell漏洞測試器
作為一個在線式開源工具,Huntress Log4Shell漏洞測試器可以協助您檢查,某個應用程序是否使用著Log4j的易受攻擊版本。您可以將該工具生成的字符串,作為待檢查應用的輸入。例如,您可以在某個頁面的文本輸入框中使用它。該字符串可以包括針對LDAP服務器的JNDI(Java Naming and Directory Interface,Java命名和目錄接口)查詢。服務器會記錄來自應用程序的各個請求,并顯示發出此類請求的IP地址。具體操作細節,請參見演示視頻。
小結
目前,有更多針對Log4j的工具正在涌現。作為安全從業人員,我建議您通過鏈接--https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228,關注各類安全專家發布的相關內容。
正如我在上文中對MariaDB的JDBC連接器所進行的操作,我同樣建議您將相關補丁,發送到任何正在使用Log4j的開源項目中,以及時發現并升級易受攻擊的版本。
原文標題:How to Check if a Java Project Depends on A Vulnerable Version of Log4j,作者:Alejandro Duarte
原文鏈接:https://developer.51cto.com/art/202112/696422.htm