面對(duì) Log4j 漏洞,開發(fā)者如何保護(hù)程序安全?
譯文【51CTO.com快譯】12月9日,Apache 基金會(huì)針對(duì)一個(gè)名為 Log4Shell 的關(guān)鍵零日漏洞發(fā)布了緊急更新,這個(gè)在Log4j(一個(gè)用于各種Java應(yīng)用的開源日志框架)中發(fā)現(xiàn)的漏洞被認(rèn)定為CVE-2021-44228,允許攻擊者在任何使用Log4j庫(kù)寫出日志信息的系統(tǒng)上執(zhí)行任意代碼。它立即被評(píng)為CVSS等級(jí)中的最高嚴(yán)重程度10級(jí)。
正如 Cloudflare 首席技術(shù)官John Graham-Cumming所說(shuō):"這可能是自 Heartbleed 和 ShellShock 以來(lái)互聯(lián)網(wǎng)上最嚴(yán)重的漏洞之一。"
加固第一道防線
在漏洞被公布之后,開發(fā)人員和維護(hù)人員立即著手給他們的 Java 應(yīng)用程序打上盡可能多的補(bǔ)丁。由16名無(wú)報(bào)酬志愿者組成的 Apache 軟件基金會(huì)日志服務(wù)團(tuán)隊(duì)也第一時(shí)間加固 Log4j 本身。
北京時(shí)間11月24日,Apache日志服務(wù)項(xiàng)目管理委員會(huì)(PMC)收到了一封爆炸性的郵件。阿里云安全團(tuán)隊(duì)報(bào)告了Log4j2 軟件中存在一個(gè)零日安全漏洞。
軟件工程師、PMC 成員 Gary Gregory 表示:“這將是一個(gè)重大的問題?!?/p>
該團(tuán)隊(duì)立刻開始修補(bǔ)這個(gè)問題,但這個(gè)漏洞在12月9日被公之于眾后,他們的時(shí)間安排迅速加快了。
Gary和其他維護(hù)者放下手上的工作,加班加點(diǎn)來(lái)修復(fù)這個(gè)漏洞問題。在發(fā)布 2.15 版更新之前,他們很快決定這個(gè)更新“不夠好”,隨后,他們?cè)诟窳帜嶂螛?biāo)準(zhǔn)時(shí)間12月13日晚上10點(diǎn)28分發(fā)布了2.16版本。
"我知道他們都有家庭和他們必須做的事情。但他們把一切都放在一邊,整個(gè)周末都在修復(fù)這個(gè)漏洞。"前 Log4j 開發(fā)者 Christian Grobmeier 告訴彭博社。
到周末的這個(gè)時(shí)候,PMC的活躍成員已經(jīng)轉(zhuǎn)向通過(guò)私人Slack頻道進(jìn)行溝通,在那里他們繼續(xù)解決這個(gè)問題,并共同努力為操作舊版本 Java 的用戶提供更新。他們很快就發(fā)布了 2.12.2 版本來(lái)解決 Java7 用戶的問題。Java6 的修復(fù)被證明更棘手,但這是他們的下一個(gè)待辦事項(xiàng)。
“總的來(lái)說(shuō),我認(rèn)為盡管這種漏洞會(huì)帶來(lái)可怕的后果,但事情進(jìn)展得如經(jīng)驗(yàn)豐富的開發(fā)人員所預(yù)料的那樣,” Gary 說(shuō)。“我們收到通知,迅速提供了補(bǔ)丁并在該版本上進(jìn)行迭代。
構(gòu)建熱補(bǔ)丁和緊急指導(dǎo)
另一個(gè)在周末迅速行動(dòng)的小組是亞馬遜 Corretto 團(tuán)隊(duì)。Corretto 是 Open Java Development Kit (OpenJDK) 的一個(gè)發(fā)行版,這使 Corretto 團(tuán)隊(duì)處于Log4Shell問題的第一線。
在首席軟件工程師Volker Simonis的帶領(lǐng)下,Corretto團(tuán)隊(duì)迅速建立并開源了一個(gè)熱補(bǔ)丁,供任何無(wú)法立即更新的組織使用。
正如GitHub頁(yè)面上所描述的那樣:
- 這是一個(gè)將 Java 代理注入運(yùn)行中的 JVM 進(jìn)程的工具。該代理將嘗試修補(bǔ)所有加載的 org.apache.logging.log4j.core.lookup.JndiLookup實(shí)例的lookup()方法,無(wú)條件地返回字符串 "Patched JndiLookup::lookup()"。
- 該熱補(bǔ)丁旨在解決Log4j中的 CVE-2021-44228 遠(yuǎn)程代碼執(zhí)行漏洞,無(wú)需重啟Java進(jìn)程。據(jù)了解,動(dòng)態(tài)和靜態(tài)代理在Linux的JDK 8和JDK 11上運(yùn)行,而在JDK 17上只有靜態(tài)代理在工作。
"非常感謝亞馬遜Corretto團(tuán)隊(duì)花了幾天、幾夜和周末的時(shí)間來(lái)編寫、加固和運(yùn)行這段代碼,"AWS CISO Steve Schmidt在一篇博文中寫道。AWS還發(fā)布了一份針對(duì)受影響產(chǎn)品的特定服務(wù)安全更新的詳盡清單。
在其他地方,由 Java 首席工程組經(jīng)理 Martijn Verburg 領(lǐng)導(dǎo)的 Microsoft Java 團(tuán)隊(duì)成員幫助評(píng)估了該補(bǔ)丁,并為客戶發(fā)布了更一般的保護(hù)自己的建議,包括幾個(gè)推薦的解決方法,直到可以應(yīng)用完整的安全更新.
谷歌云以更新其Cloud Armor安全產(chǎn)品作為回應(yīng),該產(chǎn)品于 12 月 11 日發(fā)布了一項(xiàng)緊急 Web 應(yīng)用程序防火墻 (WAF) 規(guī)則,以幫助檢測(cè)和阻止 CVE-2021-44228 的企圖利用。
“為了幫助我們的客戶解決 Log4j 漏洞,我們引入了一個(gè)名為“cve-canary”的新預(yù)配置 WAF 規(guī)則,它可以幫助檢測(cè)和阻止 CVE-2021-44228 的漏洞利用嘗試,”Cloud Armor的產(chǎn)品經(jīng)理Emil Kiner和谷歌的網(wǎng)絡(luò)專家經(jīng)理 Dave Reisfeld 在一篇博文中寫道。
你可以做什么?
當(dāng)這些內(nèi)部開發(fā)人員匆匆忙忙為客戶保護(hù)他們的軟件時(shí),許多最終用戶和企業(yè)開發(fā)人員正爭(zhēng)先恐后地評(píng)估他們的漏洞并保護(hù)他們自己的Java應(yīng)用程序。
首先要做的是檢測(cè)Log4j是否存在于你的應(yīng)用程序中。同樣重要的是要注意,不是所有的應(yīng)用程序都會(huì)受到這個(gè)漏洞的攻擊。任何使用高于6u212、7u202、8u192或11.0.2的Java版本的人都應(yīng)該是安全的,因?yàn)檫@些版本中增加了對(duì)JNDI(Java命名和目錄接口)遠(yuǎn)程類加載的保護(hù)。
同樣,高于2.10版本的 Log4j 用戶應(yīng)該通過(guò)設(shè)置系統(tǒng)屬性formatMsgNoLookups為true,設(shè)置JVM 參數(shù)-Dlog4j2.formatMsgNoLookups=true,或從classpath中刪除JndiLookup類來(lái)緩解這一問題。
由于Log4j漏洞不僅影響Java應(yīng)用程序,而且還影響使用該庫(kù)的任何服務(wù),因此Log4Shell的攻擊面可能非常大。
正如Lucian Constantin為CSO寫的那樣:"社區(qū)仍在努力評(píng)估攻擊面,但由于依賴關(guān)系的復(fù)雜生態(tài)系統(tǒng),它可能是巨大的。一些受影響的組件是非常流行的,被數(shù)以百萬(wàn)計(jì)的企業(yè)應(yīng)用和服務(wù)所使用"。
就其本身而言,Apache Logging Services團(tuán)隊(duì)將 "繼續(xù)評(píng)估可能存在潛在安全風(fēng)險(xiǎn)的Log4j功能,并將進(jìn)行必要的修改以刪除這些功能。Apache Logging Services團(tuán)隊(duì)的成員Ralph Goers告訴InfoWorld,"雖然我們將盡一切努力保持向后兼容,但這可能意味著我們必須禁用他們可能正在使用的功能。
即使無(wú)數(shù)的開發(fā)者在周末不知疲倦地修補(bǔ)Log4j的漏洞,也會(huì)有很多人反應(yīng)較慢。因此,Log4Shell的影響可能是長(zhǎng)期和廣泛的。
正如安全分析師Tony Robinson在推特上所說(shuō)。"雖然那些好的公司通過(guò)打補(bǔ)丁迅速解決了問題,但還是會(huì)有很多地方不會(huì)打補(bǔ)丁,或者在一段時(shí)間內(nèi)無(wú)法打補(bǔ)丁。"
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】