核彈級(jí)漏洞炸翻安全圈,想安心過年就靠它了
“最近Log4J中爆出的一個(gè)風(fēng)險(xiǎn)較大的安全漏洞,很多客戶給予了前所未有的重視。車庫創(chuàng)新(Client Engineering) GCG團(tuán)隊(duì),急客戶之所急,從產(chǎn)品的全生命周期出發(fā),提出的一套防漏補(bǔ)缺的組合拳,可消除風(fēng)險(xiǎn)于無形。車庫創(chuàng)新團(tuán)隊(duì)立足于市場最前沿,和客戶肩并肩,梳理痛點(diǎn),共創(chuàng)方案,迅速驗(yàn)證,并以此為契機(jī),全面賦能客戶創(chuàng)新實(shí)踐與數(shù)字化轉(zhuǎn)型?!?/p>
— 魚棟
即使你并非身處安全圈,最近也可能頻繁看到Log4Shell這個(gè)詞。很多媒體將其描述為“讓互聯(lián)網(wǎng)著火”“危機(jī)數(shù)百萬Java應(yīng)用”“過去十年最嚴(yán)重的漏洞”。
什么是Log4Shell
2021 注定是不平凡的一年,有機(jī)遇也有挑戰(zhàn),我們?cè)谔魬?zhàn)中蛻變,在蛻變中前行。時(shí)至歲末,IT界爆出了一個(gè)“核彈級(jí)”的漏洞: Log4Shell,至今已有一個(gè)多月,其影響依然在持續(xù)發(fā)酵,相關(guān)聯(lián)的新漏洞也接連出現(xiàn),很多企業(yè)給予前所未有的重視,給 IT 界帶來了巨大的沖擊。
何為Log4Shell? 簡而言之,Log4Shell是Java日志框架log4j支持的Lookup JNDI(JAVA命名和目錄接口)造成的漏洞。此JNDI支持LDAP數(shù)據(jù)源,可以通過LDAP, 根據(jù)用戶指定的Key來獲取相應(yīng)的內(nèi)容(數(shù)據(jù)或者對(duì)象),如果獲取的內(nèi)容是從第三方的服務(wù)器下載的Java對(duì)象(此對(duì)象可能具有破壞性),那么在加載這個(gè)Java對(duì)象并執(zhí)行代碼時(shí),可能對(duì)應(yīng)用程序造成不可估量的破壞。因?yàn)閘og4j應(yīng)用廣泛,涉及面廣,一時(shí)之間,激起了千層浪。
Log4Shell全周期防補(bǔ)一體化
IBM作為安全領(lǐng)域的領(lǐng)軍者,一直以來,視用戶應(yīng)用和數(shù)據(jù)安全為生命。作為一線團(tuán)隊(duì)IBM Client Engineering,從產(chǎn)品的全生命周期出發(fā),提出了防漏補(bǔ)缺的一套組合拳,可使此漏洞風(fēng)險(xiǎn)消除于無形。
如下圖所示,下文分別從產(chǎn)品研發(fā)到上線應(yīng)用全生命周期:開發(fā)、部署、使用和維護(hù)三個(gè)階段進(jìn)行了探討,從漏洞的預(yù)防、探測、管理和響應(yīng)四個(gè)方面著手,對(duì)用戶的應(yīng)用程序全方位保駕護(hù)航。
組合拳之一:Instana和QRadar雙劍合璧
Instana是現(xiàn)代化的應(yīng)用性能管理工具,在亞秒級(jí)的鏈路追蹤和非采樣不丟失任何鏈路請(qǐng)求方面有著絕對(duì)的領(lǐng)導(dǎo)地位,而Log4Shell正是由發(fā)起API請(qǐng)求配合log4j的JNDI:LDAP 漏洞達(dá)到攻擊的目的,這也是Instana可以發(fā)現(xiàn)該漏洞攻擊的天然優(yōu)勢(shì)。
同時(shí),QRadar能夠提供快速而精準(zhǔn)的態(tài)勢(shì)感知,檢測企業(yè)內(nèi)部和云環(huán)境中的威脅并評(píng)估其安全風(fēng)險(xiǎn),并提供快速展開調(diào)查所需的實(shí)時(shí)分析與管理。所以Instana和QRadar的結(jié)合可以對(duì)用戶安全起到更加全面的評(píng)估和響應(yīng)。
Log4Shell漏洞攻擊剖析
為了清晰化Instana發(fā)現(xiàn)Log4Shell漏洞攻擊的原理及方法,我們進(jìn)行了Log4Shell漏洞模擬攻擊實(shí)驗(yàn),得出了如下兩條結(jié)論:
- Instana可以實(shí)時(shí)發(fā)現(xiàn)服務(wù)被Log4Shell漏洞發(fā)起的任何攻擊。
- Instana可以發(fā)現(xiàn)含有Log4Shell漏洞的應(yīng)用/服務(wù)。
這個(gè)結(jié)論是如何得出來的呢?首先,讓我們通過下圖來回顧如何通過Log4Shell的漏洞發(fā)起攻擊的。
從上面的流程,我們可以看出,應(yīng)用需要同時(shí)滿足以下幾個(gè)條件,才可能被攻擊,否則該漏洞將對(duì)系統(tǒng)不構(gòu)成威脅:
- Java 應(yīng)用
- 使用了log4j (版本<2.15),且lookup 功能為打開狀態(tài)
- Logger打印變量包含外部請(qǐng)求變量
- Instana和QRadar對(duì)漏洞攻擊的監(jiān)控和響應(yīng)
如下圖,如果該漏洞被利用而受到攻擊,我們可以輕易從Instana界面或者Trace Data 獲取到相關(guān)攻擊數(shù)據(jù)和信息。
另外,我們開發(fā)出了一個(gè)腳本,它可以通過Instana API 拿到Trace Data, 實(shí)時(shí)分析并且告警當(dāng)前系統(tǒng)有無受到攻擊,也可以告知用戶當(dāng)前系統(tǒng)是否有Log4Shell 漏洞, 運(yùn)行結(jié)果展示如下:
QRadar 可以監(jiān)控接入服務(wù)的網(wǎng)絡(luò)流量和日志。也可以通過接入第三方的漏洞掃描結(jié)果從而更具體的發(fā)現(xiàn)相關(guān)漏洞。所以QRadar也同樣可以通過Instana API拿到相應(yīng)的Trace Data, 指定相應(yīng)的規(guī)則實(shí)時(shí)監(jiān)控是否有人正在利用漏洞對(duì)我們的系統(tǒng)進(jìn)行攻擊,指定相關(guān)腳本,對(duì)漏洞或者攻擊做出相應(yīng)舉措。同時(shí)可以Qradar SOAR安全編排自動(dòng)化響應(yīng),來對(duì)漏洞做出自動(dòng)而及時(shí)的補(bǔ)救措施。
組合拳之二:PAAS保駕護(hù)航之RHACS
RHACS(Red Hat Advanced Cluster Security)是企業(yè)級(jí)的 Kubernetes 原生容器安全防護(hù)解決方案,可幫助用戶更安全地構(gòu)建、部署和運(yùn)行云原生應(yīng)用,能讓用戶及時(shí)洞察基于OpenShift 環(huán)境的關(guān)鍵漏洞和威脅。RHACS 默認(rèn)配備了多種部署時(shí)和運(yùn)行時(shí)策略,能有效防止有風(fēng)險(xiǎn)的工作負(fù)載部署或運(yùn)行。同時(shí),RHACS 可以監(jiān)控、收集和評(píng)估系統(tǒng)級(jí)事件,如作業(yè)執(zhí)行、網(wǎng)絡(luò)連接和網(wǎng)絡(luò)流,以及 Kubernetes 環(huán)境中每個(gè)容器內(nèi)的權(quán)限提升等,并及時(shí)洞察問題,并根據(jù)既定規(guī)則判斷出危險(xiǎn)的級(jí)別。
RHACS漏洞管理功能非常全面,可以在整個(gè)軟件開發(fā)生命周期中,識(shí)別并修復(fù)容器鏡像和 Kubernetes 的漏洞。如下圖中,RHACS在應(yīng)用鏡像中識(shí)別出了Log4Shell漏洞,并標(biāo)記為Critical級(jí)別。
同時(shí),RHACS具有強(qiáng)悍的檢測和響應(yīng)能力,可以使用規(guī)則、允許列表和基線來識(shí)別可疑活動(dòng),并采取行動(dòng)阻止攻擊,強(qiáng)化用戶的 Kubernetes 環(huán)境和工作負(fù)載,確保應(yīng)用更安全和更穩(wěn)定。如下圖,我們定義了一個(gè)系統(tǒng)規(guī)則來識(shí)別Log4Shell漏洞。
當(dāng)此規(guī)則被激活之后,用戶創(chuàng)建的應(yīng)用容器如果有Log4Shell的漏洞,就會(huì)被攔截。從如下錯(cuò)誤提示信息中,可以看出,由于容器鏡像包含了Log4Shell的漏洞,同時(shí)在RHACS的Violations界面,我們可以看到阻止應(yīng)用創(chuàng)建的事件。
組合拳之三:DevSecOps防漏于未然
DevSecOps是開發(fā)、安全性和運(yùn)維的縮寫,從初始設(shè)計(jì)到集成、測試、部署和軟件交付,在軟件開發(fā)生命周期的每個(gè)階段自動(dòng)化的集成安全檢查功能。DevSecOps通過主動(dòng)改進(jìn)安全措施,加速安全漏洞修補(bǔ),快速、高效的軟件交付,可以防漏洞于未然。
在以下實(shí)踐中,DevSecOps在現(xiàn)有CI/CD Pipeline中為開發(fā)人員提供自動(dòng)化安全防護(hù),提供持續(xù)的鏡像掃描和保障。鏡像構(gòu)建之后,需要對(duì)鏡像進(jìn)行掃描來檢查漏洞,如果有Critical的漏洞,在部署之前,需要先對(duì)漏洞進(jìn)行修復(fù)。
如下圖中的鏡像掃描日志中,我們可以看出由于檢測到了Log4Shell的漏洞,所以導(dǎo)致此步驟檢測失敗。
同時(shí),在CD階段,我們基于開源的Starboard,開發(fā)了一個(gè)掃描用戶運(yùn)行容器漏洞的工具:Starboard Report。當(dāng)容器創(chuàng)建或者升級(jí)的時(shí)候,Starboard Report就會(huì)自動(dòng)的探測器漏洞,并實(shí)時(shí)的展示給用戶,如下。
點(diǎn)擊其中的一個(gè)運(yùn)行容器的報(bào)告,就可以看到漏洞掃描的詳細(xì)信息,如下所示。
組合拳之四:Hot Mitigation(熱舒緩)補(bǔ)漏趁天晴
Log4Shell 漏洞爆發(fā)以后,開源社區(qū)給予了極大的關(guān)注,在短時(shí)間內(nèi)就有大量的開源項(xiàng)目不斷的涌現(xiàn)出來,有講如何探測該漏洞的,有講如何Hot Mitigation(熱舒緩)的,有描述漏洞原理的等等,不一而足,完美的體現(xiàn)出開源社區(qū)的強(qiáng)大力量和快速響應(yīng)。下圖是在Github上以star數(shù)排名關(guān)于log4shell的Repositories, 相當(dāng)驚人。
本節(jié)會(huì)介紹一種在開源社區(qū)中較為有代表性的Hot Mitigation的方式。該方式有兩個(gè)優(yōu)點(diǎn):
? 因?yàn)楣俜秸窖a(bǔ)丁包發(fā)布是需要時(shí)間和驗(yàn)證的,在這段時(shí)間內(nèi)漏洞是毫無防護(hù)的,除非關(guān)停服務(wù),該Hot Mitigation可以有效解決這一點(diǎn)。
? 其他Mitigation方式,如修改JVM參數(shù),都需要重啟JVM,造成了停機(jī)時(shí)間,但本文介紹的這種方式不需要重啟JVM,就避免了停機(jī)時(shí)間。
在開始之前,讓我們回顧一下Log4Shell漏洞的原理:
“org/apache/logging/log4j/core/lookup/JndiLookup” 這個(gè)Java類的“l(fā)ookup”方法會(huì)在非法的服務(wù)器上下載惡意代碼,這樣一次攻擊就達(dá)成了。一個(gè)顯而易見的想法是,如果把原本的“l(fā)ookup”方法篡改掉,比如讓“l(fā)ookup”固定的返回字符串:“Patched JndiLookup::lookup()”不就避免了漏洞嗎?這恰恰就是這種Mitigation的原理,更難能可貴的是這一切都是在無需重啟JVM的情況下做到的,并且無論是本地程序還是Kubernetes下的Container都能搞定。
我們的工作是, 首先使用了開源社區(qū)所貢獻(xiàn)的,用于Hot Mitigation的Java Jars,然后輔以Kubernetes的DaemonSet,ClusterRole等,和相應(yīng)的腳本,讓它能夠很完美的在Kubernetes環(huán)境中工作。
簡單描述工作原理,安裝以后(DaemonSet),在每個(gè)Kubernetes Node上會(huì)啟動(dòng)一個(gè)進(jìn)程去探測該Node上所有的Java進(jìn)程(JVM),一旦發(fā)現(xiàn),會(huì)嘗試注入一個(gè)Java Agent到該JVM,并且嘗試去篡改所有JndiLookup。實(shí)例的Lookup方法,讓該方法只是返回一個(gè)固定的字符串Patched JndiLookup::lookup(), 如下圖所示:
為了驗(yàn)證改方案的結(jié)果,我們準(zhǔn)備了三個(gè)實(shí)驗(yàn)對(duì)象:本地Java應(yīng)用程序,不包含有漏洞版本的Log4J庫,Hot Mitigation后Log呈現(xiàn)如下:
因?yàn)樵揓ava程序中并未包含log4j庫,所以被告知并未發(fā)現(xiàn)相應(yīng)的漏洞。
本地Java應(yīng)用程序, 包含有漏洞的log4j版本:
發(fā)現(xiàn)了漏洞,并patch,符合我們的預(yù)期。運(yùn)行在Kubernetes Pod中的Java 程序,并未包含相應(yīng)的log4j庫, 所得與第一個(gè)對(duì)象相同。
最終,在DeamonSet相關(guān)的Pod日志中,我們能看一下信息:
這樣,就實(shí)現(xiàn)了在升級(jí)官方發(fā)布的補(bǔ)丁包之前并且避免的停機(jī)時(shí)間的Hot Mitigation。
結(jié)語:未雨綢繆早當(dāng)先,居安思危謀長遠(yuǎn)
在 IT 行業(yè),應(yīng)用程序的功能和性能固然重要,但安全運(yùn)行是基礎(chǔ),尤其在這種Critical級(jí)別的安全漏洞面前,人人當(dāng)存有戒心。及時(shí)的檢測到漏洞,并采取相應(yīng)的措施,才能保證應(yīng)用程序不被攻擊和利用,企業(yè)的效益才能得到保障。
在此調(diào)研過程中,我們開發(fā)了一些工具,比如如何探測應(yīng)用中是否有此漏洞,以及是否已經(jīng)受到攻擊等。如果您感興趣,請(qǐng)聯(lián)系IBM Client Engineering團(tuán)隊(duì)(熱線電話:4006682350),我們可以為您演示以上功能,也可以輔助您提升系統(tǒng)和應(yīng)用的安全。
最后,筆者想提醒大家,Hot Mitigation或許在短時(shí)間內(nèi)可以防止攻擊,我們注意到,Apache基金會(huì)已逐步推出官方補(bǔ)丁,長遠(yuǎn)來看,建議用戶給應(yīng)用程序打上安全有效的補(bǔ)丁,方能防患于未然。
??了解更多IBM相關(guān):http://server.51cto.com/act/ibm/2022q1#box1??