1. 程式人生 > 其它 >Apache Log4j2 遠端程式碼執行漏洞

Apache Log4j2 遠端程式碼執行漏洞

前言 漏洞描述

Apache Log4j2是一款優秀的Java日誌框架。2021年11月24日,阿里雲安全團隊向Apache官方報告了Apache Log4j2遠端程式碼執行漏洞。由於Apache Log4j2某些功能存在遞迴解析功能,攻擊者可直接構造惡意請求,觸發遠端程式碼執行漏洞。漏洞利用無需特殊配置,經阿里雲安全團隊驗證,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影響。阿里雲應急響應中心提醒 Apache Log4j2 使用者儘快採取安全措施阻止漏洞攻擊。

12 月 10 日凌晨,Apache 開源專案 Log4j 的遠端程式碼執行漏洞細節被公開,由於 Log4j 的廣泛使用,該漏洞一旦被攻擊者利用會造成嚴重危害。據悉,Apache Log4j 2.x <= 2.14.1 版本均回會受到影響。可能的受影響應用包括但不限於:Spring-Boot-strater-log4j2、Apache Struts2、Apache Solr、Apache Flink、Apache Druid、Elasticsearch、Flume、Dubbo、Redis、Logstash、Kafka 等。很多網際網路企業都連夜做了應急措施。截至本文發出,鬥魚、京東、網易、深信服和汽車產業安全應急響應中心皆發文表示,鑑於該漏洞影響範圍比較大,業務自查及升級修復需要一定時間,暫不接收 Log4j2 相關的遠端程式碼執行漏洞。

一、lookup 功能造成的漏洞

Log4j 是一款開源 Java 日誌記錄工具。日誌記錄主要用來監視程式碼中變數的變化情況,週期性的記錄到檔案中供其他應用進行統計分析工作;跟蹤程式碼執行時軌跡,作為日後審計的依據;擔當整合開發環境中的偵錯程式的作用,向檔案或控制檯列印程式碼的除錯資訊。因此,對於程式設計師來說,日誌記錄非常重要。在強調可重用元件開發的今天,Apache 提供的強有力的日誌操作包 Log4j。Log4j 可以輕鬆控制 log 資訊是否顯示、log 資訊的輸出端型別、輸出方式、輸出格式,更加細緻地控制日誌的生成過程,而其通過配置檔案可以靈活地進行配置而不需要大量的更改程式碼。因此,很多網際網路企業都選擇使用 Log4j 。

2014 年,Log4j 2 釋出。Log4j 2 是對 Log4j 的重大升級,完全重寫了 log4j 的日誌實現。Log4j 2 提供了 Logback 中可用的許多改進,同時修復了 Logback 架構中的一些固有問題,目前已經更新到 2.15.0 版本。Log4j2 也支援 SLF4J,可以自動重新載入日誌配置,並支援高階過濾選項。此外它還允許基於 lambda 表示式對日誌語句進行延遲評估,為低延遲系統提供非同步記錄器,並提供無垃圾模式以避免由垃圾收集器操作引起的任何延遲。通過其他語言介面,企業也可以在 C、C++、.Net、PL/SQL 程式中使用 Log4j。

此次漏洞的出現,正是由用於 Log4j 2 提供的 lookup 功能造成的,該功能允許開發者通過一些協議去讀取相應環境中的配置。但在實現的過程中,並未對輸入進行嚴格的判斷,從而造成漏洞的發生。簡單來說,就是在列印日誌時,如果發現日誌內容中包含關鍵詞 ${,那麼這個裡面包含的內容會當做變數來進行替換,導致攻擊者可以任意執行命令。詳細漏洞披露可檢視:https://issues.apache.org/jira/projects/LOG4J2/issues/LOG4J2-3201?filter=allissues 。

由於線上 web 業務的任何資料都可能寫入 Log4j,甚至一些 pre-auth 的地方,比如註冊、登入,實際攻擊入口取決於業務具體情況。目前百度搜索、蘋果 iCloud 搜尋、360 搜尋等都出現了該問題。

12 月 10 日上午,阿里雲安全團隊再次發出預警,發現 Apache Log4j 2.15.0-rc1 版本存在漏洞繞過,建議及時更新至 Apache Log4j 2.15.0-rc2 版本。對於這次漏洞,有網友評價說道,“可以說是災難性的漏洞,比之前的 fastjson 和 shiro 還要嚴重,這個漏洞估計在之後三四年內還會繼續存在….”

二、快速檢測及修復方案

針對此次漏洞的一些應急方案。

1. 緊急緩解措施

(1)修改 jvm 引數 -Dlog4j2.formatMsgNoLookups=true
(2)修改配置 log4j2.formatMsgNoLookups=True
(3)將系統環境變數 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 設定為 true

2. 檢測方案

(1)由於攻擊者在攻擊過程中可能使用 DNSLog 進行漏洞探測,建議企業可以通過流量監測裝置監控是否有相關 DNSLog 域名的請求,微步線上的 OneDNS 也已經識別主流 DNSLog 域名並支援攔截。
(2)根據目前微步線上對於此類漏洞的研究積累,我們建議企業可以通過監測相關流量或者日誌中是否存在“jndi:ldap://”、“jndi:rmi”等字元來發現可能的攻擊行為。

3.修復方案

檢查所有使用了 Log4j 元件的系統,官方修復連結如下:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc1

三、安全應該是一個持續的過程

雖然大家知道安全的重要性,但安全問題還是頻繁發生。

去年 5 月,360 網路安全響應中心釋出“ Fastjson 遠端程式碼執行漏洞通告”。通告稱,Java 庫 fastjson <= 1.2.68 版本存在遠端程式碼執行漏洞,漏洞被利用可直接獲取伺服器許可權。該漏洞評定為“高危漏洞”,影響面“廣泛”。 前年,阿里雲應急響應中心監測到,Apach Shiro 官方披露了其 cookie 持久化引數 rememberMe 加密演算法存在漏洞,攻擊者利用 Padding Oracle 攻擊手段可構造惡意的 rememberMe 值,繞過加密演算法驗證,執行 java 反序列化操作,最終可導致遠端命令執行獲取伺服器許可權,風險極大。

安全本身並不是一個能夠創造價值的功能,反而更像是需要消耗價值以確保功能穩定的功能。中小企業常常沒有足夠的資金投入安全建設,而有資金的企業也會把這部分預算將到最低。

網路攻擊成功的可能性以及潛在損失的程度是難以實現估計的,決策者通常是依靠經驗判斷來做決定投入金額。根據 Alex Blau 在哈佛商業評論中的文章中提到的,決策者在作出決定時,會有一下三個誤區:

  1. 將網路安全視為一種防禦。在這個過程中,強大的防火牆和有能力的工程師可以讓他們遠離威脅。
  2. 認為遵守 NIST 或 FISMA 等安全框架就足夠安全。
  3. 以為如果近期沒有發生安全漏洞,那麼看起來沒有問題的部分就不需要修復。

這些想法的問題在於,網路安全不是要解決有限的問題,而應該是一個持續進行的過程。麻省理工學院數字經濟倡議主任 Erik Brynjolfsson 表示,對抗網路威脅應該被歸到“更高級別的優先考慮項”。他認為,一些修復並不複雜。雖然增加一些額外的小操作會讓整個流程變長,並增加一點成本,但會讓企業和個人更加安全。

Brynjolfsson 提出,在網路安全方面,使用公開可用的密碼學通常比為特定公司構建的專有系統更加安全。