觀點

企業該如何處理 Log4j 漏洞問題?

2021 / 12 / 24
編輯部
企業該如何處理 Log4j 漏洞問題?
Apache Log4j  這個為 Java 程式提供記錄檔功能的熱門程式套件,於2021.12.09被公佈了一個嚴重的資安漏洞。該漏洞影響了Apache Log4j 日誌的多個版本,駭客可藉由發送一種特別的記錄檔訊息來觸發這個漏洞,啟動遠端程式碼執行 (RCE)。該漏洞已被識別為CVE-2021-44228、CVE-2021-45046和CVE-2021-45105,並命名為 Log4Shell。截至目前爲止,已有多項嚴重災情發生。本文帶您了解企業目前所採取的防範措施,以及等到危機稍微緩解之後,企業該做些什麼?

Log4j 漏洞問題該怎麼處理 ?

Log4j 是一個非常好用的工具,因此許許多多的 Java 程式都會用到它。很多時候程式設計師會希望能將一些資料寫入記錄檔中,或是寫入一些其他的儲存庫以供後續使用。這就是 Log4j 的用途,它可以從某個地方接受一個字串 (例如登入畫面上輸入的使用者 ID),然後將字串寫到另一個地方 (例如認證流程的資料輸入欄位)。不過 Log4j 能做到的絕不只有複製/貼上而已,Log4j 還可以查看並解讀字串的內容。

而解讀就是一個危險的動作,因為除非程式先將字串處理乾淨,否則在解讀時很容易發生問題。

Log4j 並不會先將字串處理乾淨再解讀。

防範措施

所以您的第一個挑戰就是要找出所有可能含有此漏洞的程式碼和應用程式。目前已有一些工具可以幫您搜尋「log4j」這串字,例如 Snyk 或其他工具,這類工具可以搜尋您原始程式碼資料庫當中任何呼叫 log4j 的地方。接下來,您要確認這些含有 log4j 呼叫的程式碼是否實際部署到營運環境。有時候,程式設計師會在程式開發階段利用記錄檔功能來記錄一些變數或關鍵點的數值,以確定程式確實依照其設計的方式運作。但是當程式碼準備部署時,這些記錄功能就會關閉,所以不會在真實環境中執行。

若您的營運環境確實部署了一些正在使用 Log4j 的程式碼,那麼您應該考慮採取以下幾個動作:
  1. 使用最新版的 Log4j 來重新建立程式套件 (目前的版本為 2.17.xx),此外也請查看一下 Apache Foundation 網站上的最新修正資訊。
  2. 停用應用程式,或是停止執行應用程式的伺服器或虛擬機器,直到應用程式修正為止。
  3. 安裝 IPS 規則來攔截 log4j 的輸入字串,但請注意,駭客目前正在研發一些方法來隱藏字串,例如使用 base64 加密來躲避文字掃描偵測。
  4. 停用記錄檔功能,直到您修正程式碼為止。您可能必須將所有呼叫到 Log4j 的地方都標成註解,所以應用程式可能會失去某些功能,例如:無法再將某使用者的訊息傳送給另一名使用者。順便一提,這就是當初這個漏洞被發現的原因:有 Minecraft 玩家發現,如果他們在聊天方塊中貼入 Log4j 的指令,這些訊息會被直接當成指令來執行,而非當成訊息傳送。   
還有一些其他工具可用來測試應用程式的輸入欄位看看應用程式是否正確運作,這類工具可以在輸入欄位中刻意填入一些安全、但卻可以觸發漏洞的字串,這樣就能在不造成損害的情況下找出漏洞。程式如果沒有漏洞,這類測試填入的字串應該會因為無效而被拒絕,但如果程式含有漏洞,就會顯示「Hello, world」這串文字。

一旦您找到營運環境中的應用程式漏洞,接下來可以採取幾種作法:將應用程式關閉、安裝一條 IPS 規則來攔截 (絕大多數) 的攻擊、停用記錄檔功能,或是直接關閉執行應用程式伺服器。 

危機過後

有同事問我是否不該使用記錄檔,我可以很肯定地說,不,使用記錄檔絕對沒問題,事實上這是許多應用程式都必備的一項功能。應用程式會使用 log4j (Java 程式) 或其他程式語言的類似機制來處理使用者 ID、密碼、訊息、記錄檔等資訊。但關鍵就在於判斷您在處理的是何種訊息,以及您是否要使用記錄檔工具來解讀訊息。當您意識到您的軟體並非獨自存在,而是由許許多多其他來源的軟體所共同組成時,問題就會開始變得複雜。

我們的建議是:建立一套軟體成分清單 (Software Bill of Materials,SBOM),列出應用程式當中包含的所有建構元件,就好像列出食品的成分一樣。就像我們會查看食品成分來避開一些可能讓我們過敏的食物,並維持飲食健康的道理一樣,SBOM 也可以協助我們找出有問題的軟體,這是今日軟體資產管理資料庫 (Software Asset Management Database,簡稱 SAMDB) 所做不到的。話說回來,許多企業也沒有一套完整的 SAMDB。有鑑於當前的問題,這方面應該優先處理。

下一步該怎麼做?

針對所有目前正在使用的現成商用軟體 (COTS),先列出其成分,然後再了解一下哪些成分是好的。如此一來,萬一未來還有像 log4j 這樣的事件發生,就不會太難診斷及修正問題,而且會大大提升效率。

本文轉載自趨勢科技部落格。