如何利用 Deepfence 來檢測和彌補 Log4j2 漏洞
譯文作者丨Owen Garrett
譯者丨陳峻
策劃丨孫淑娟
與經(jīng)典的 OpenSSL Heartbleed、Apache Struts 的漏洞類似,log4j2 漏洞對于以數(shù)字化為基礎的企業(yè)所造成的深遠影響,遠不止打上可用的補丁,以及重新部署應用那么簡單。我們往往還需要及時發(fā)現(xiàn)、并彌補生產(chǎn)環(huán)境與平臺中的潛在漏洞。下面,我將向您展示如何使用 Deepfence 的 ThreatMapper 和 ThreatStryker,來實現(xiàn)這一點。
作為一個開源的安全、可觀察性平臺,Deepfence ThreatMapper(https://github.com/deepfence/ThreatMapper)可實現(xiàn)在跨容器、Kubernetes、云平臺、無服務器環(huán)境、VM(虛擬機)、以及裸金屬等生產(chǎn)環(huán)境和應用中,搜索包括 Log4j2 在內(nèi)的各種漏洞,進而根據(jù)漏洞被利用的風險程度,予以排名。也就是說,ThreatMapper 通過進一步計算每個漏洞的利用率,來消減掃描工具所產(chǎn)生的誤報,以便您發(fā)現(xiàn)和鎖定對于應用程序可能構(gòu)成的最大風險。
Deepfence ThreatStryker(https://deepfence.io/threatstryker/)則在擴展了 ThreatMapper 的基礎上,通過捕獲網(wǎng)絡流量,識別攻擊的特征,洞察攻擊者在目標應用中的獨特行為,進而通過執(zhí)行預定義的安全策略,實現(xiàn)立即阻斷。
作為一個演示環(huán)境,下面是一個存在著 Log4j2 漏洞的 Java 應用容器映像。我將向您展示攻擊者是如何遠程利用它,以及如何使用 ThreatMapper 和 ThreatStryker 來實時檢測和防范針對 Log4j2 的攻擊。
如何使用 ThreatMapper 找到最容易被利用的漏洞
請參閱鏈接 https://deepfence.io/visualize-attack-paths-in-production-environments-with-threatmapper/ 中的步驟 1 到 4,安裝 ThreatMapper,并開始您的第一次漏洞掃描。您可以在 ThreatMapper 控制臺的“最可利用漏洞(Most Exploitable Vulnerabilities)”報告中,查看到那些最嚴重的漏洞。
下圖向您展示了,我在對演示環(huán)境進行掃描之后,發(fā)現(xiàn)的最容易被利用的漏洞報告的上半部分。ThreatMapper 不但突出顯示了風險最大的漏洞,并顯示了那些可能會被利用的攻擊路徑。您可以在圖中位于 HAproxy 的后面,看到 Log4j 容器(已用文本標出,便于您的參考)。這便可以利用 log4j2 漏洞,開展攻擊的路徑。
當您將鼠標懸停在上述攻擊路徑中的關鍵節(jié)點上時,您將看到有關該漏洞的相關信息。例如,節(jié)點 deepfenceio/log4j-vulnerable-app:latest 具有 Top CVE:CVE-2021-44228 的網(wǎng)絡攻擊向量類型(Attack Vector type:network)。攻擊者可以通過 Port:8080 訪問到。
向下滾動頁面,您將看到整張排名列表,其中各種詳細信息一目了然。
當您單擊特定漏洞項時,將能夠更加深入地了解、并在表格和 JSON 視圖中,查看到詳細的信息。在上述演示中,我們單擊了排名第一的漏洞 Log4j,并查看到了與之相關的信息。
目前,ThreatMapper 可以提取 50 多種不同的威脅源,并盡可能地為用戶提供針對各種特定漏洞的最新威脅源。同時,ThreatMapper 還提供了指向外部資源的鏈接,以便您獲取有關漏洞的最新消息。例如,在表格視圖中,您可以看到存在問題的包、它所在的位置(例如它正運行在哪個容器中)、CVSS(Common Vulnerability Scoring System,通用漏洞評分系統(tǒng))的評分、修復它的版本、以及其他便于您理解其嚴重性和修復方式的信息。
如何識別 Log4j2 類攻擊,并使用 ThreatStryker 予以阻止
為了發(fā)現(xiàn)目標系統(tǒng)中是否存在諸如 Log4j2 之類最嚴重的可利用漏洞,您需要應用臨時的 WAF(Web Application Firewall,Web 應用防火墻)規(guī)則,來限制攻擊者對于此類漏洞的訪問和利用,同時也應當與開發(fā)團隊協(xié)作,去優(yōu)先修復這些漏洞。不過常言道:我們需要知其然,更要知其所以然。不知您是否考慮過如下問題:
- 攻擊者是否已經(jīng)領先了您一步?
- 攻擊者在運用何種嘗試來發(fā)現(xiàn)漏洞?
- 他們是否已經(jīng)找到了漏洞利用的入口?
- 他們是否在使用它進行橫向擴展,進而在您的應用中獲得額外的控制?
- 您是否能立即阻止他們?
對于上述問題,ThreatStryker 正好能夠派上用場。ThreatStryker 建立在 ThreatMapper 執(zhí)行的靜態(tài)分析之上,添加了運行時(runtime)的檢查功能,以確定攻擊者為了利用潛在漏洞所做的各項嘗試。
通常,ThreatStryker 會從您的應用程序中,捕獲兩種主要類型的運行時遙測數(shù)據(jù)(runtime telemetry):
- 攻擊指標:通過深度捕獲數(shù)據(jù)包,它能夠發(fā)現(xiàn)各種嗅探、橫向傳播、命令和控制(command-and-control)、滲透、以及其他攻擊活動。
- 危害指標:通過在主機上捕獲進程和文件系統(tǒng)的異常,它能夠發(fā)現(xiàn)攻擊者是否已成功地利用了那些易受攻擊的組件。
由于 ThreatStryker 的數(shù)據(jù)包捕獲(https://deepfence.io/deep-packet-inspection/)功能運行在后臺,因此它可以對來自所有節(jié)點和容器的流量,進行靜默式采樣。出于本演示的目的,我手動啟動數(shù)據(jù)包的捕獲功能,并選擇需要監(jiān)控的特定進程:
執(zhí)行該數(shù)據(jù)包捕獲功能是不需要代理或內(nèi)核模塊的。ThreatStryker 使用 eBPF(譯者注:extended Berkeley Packet Filter,是一種可以在 Linux 內(nèi)核中運行用戶編寫的程序,而不需要修改內(nèi)核代碼或加載內(nèi)核模塊的技術)來抓取流量,對其進行采樣,然后將其與運行時的威脅源進行匹配,以識別出各種類型的惡意流量。
在收集到足夠的流量,并完成數(shù)據(jù)檢查和分析后,您將會看到包含如下警報的結(jié)果報告。
ThreatStryker 使用網(wǎng)絡殺傷鏈(Cyber Kill Chain)框架(https://www2.deloitte.com/content/dam/Deloitte/sg/Documents/risk/sea-risk-cyber-101-july2017.pdf)的擴展版本,來模擬攻擊行為。在意圖階段(Intent Stage),它會將事件映射到網(wǎng)絡殺傷鏈中,并以上下文的方式,提供攻擊類型和嚴重程度。您只需單擊下半部分列表中的某個警報,就能夠看到各種深入的詳細信息。例如,下圖是我在單擊了嘗試獲取管理員權(quán)限警報后,所看到的內(nèi)容。下半部分有一個?;鶊D(Sankey Diagram)。該圖顯示了惡意活動隨著時間變化,而推進的情況。這方便了您開展追蹤,應用策略,以及獲悉正在發(fā)生的攻擊。而上半部分則包括了表格和 JSON 視圖。它收錄了各種觸發(fā)警報的詳細信息,您可以上下滾動,以查看包括數(shù)據(jù)包的有效負載、以及違規(guī)字符串等大量的表述信息。如圖所示,我停留在了臭名昭著的 ${jndi:ldap 字符串處,它便是 Log4j2 攻擊的簽名。
上面的示例展示了針對入站(或入口)流量的檢查。此類檢查可以有效地發(fā)現(xiàn)、并報告各種利用 Log4j2 漏洞,獲取管理員權(quán)限的行為。不過,光有入站流量檢查顯然是不夠的。ThreatStryker 也會去檢查出站(或出口)流量、以及各種主機上的異常情況。
讓我們來查看另一個警報 --Suspicious tracing event process strace /bin/ls -l:23408 trying to ptrace:23409。它是在主機檢查中產(chǎn)生的,即:一個進程正在嘗試著執(zhí)行系統(tǒng)追蹤。這是在正常操作中并不常見的事件,它指示了攻擊者已經(jīng)找到了破壞容器或應用程序的方法。
孤立地看,這些事件中的每一個都足以引起安全人員的警覺,并且它們表明了攻擊的演變階段。而當 ThreatStryker 為事件添加意圖和分類時,它會進一步將各項攻擊指標和危害程度關聯(lián)起來,以描述攻擊是如何演變的,以及漏洞被利用的風險是如何增加的。
當然,您也可以使用一系列監(jiān)控工具,實時跟蹤 ThreatStryker 事件日志,或者在 ThreatStryker 中配置好安全措施,以便在目標達到確定性的閾值時,予以干預,并抑制正在發(fā)生的攻擊。
如下圖所示,在 ThreatStryker 的保護策略(Protection Policies)儀表板中,您可以定義各種安全策略(包括隔離策略和網(wǎng)絡策略等),以阻止正在進行的各類攻擊。
您可能已經(jīng)注意到了,在該演示環(huán)境中,我們尚未創(chuàng)建或設置任何保護策略。為此,請單擊網(wǎng)絡策略(Network Policies)選項卡,然后單擊右上角的添加策略(Add Policy)按鈕。您將看到一個選項菜單,并可以在其中選擇嚴重性、警報類型、意圖類型等。
接著,您可以在所選的時段內(nèi),自定義或無限期地阻止入站和出站流量。
當然,僅靠阻斷攻擊只能部分解決問題。對此,ThreatStryker 還可以識別主機上已發(fā)生的攻擊事件,包括:異常的文件系統(tǒng)篡改、進程活動、以及主機或負載已被攻陷等狀況。對此,我們可以采用各種隔離政策,根據(jù)實際情況予以凍結(jié)、阻止、終止或刪除主機,防止攻擊影響的進一步傳播與惡化。
若要創(chuàng)建隔離策略,請前往保護策略(Protection Policies)儀表板上的隔離策略(Quarantine Policies)選項卡,單擊添加策略(Add Policy)。下圖便是我們在演示環(huán)境中創(chuàng)建的示例策略。
小結(jié)
綜上所述,作為一個開源的平臺,ThreatMapper 可以學習到應用程序的邏輯拓撲結(jié)構(gòu),識別潛在的易受攻擊負載,并針對 50 多個不同的威脅源開展掃描工作,進而實時、準確地向您展示和提供有關每個負載可能存在的漏洞信息。通過將發(fā)現(xiàn)的結(jié)果與攻擊面相關聯(lián),ThreatMapper 會告訴您,諸如 Log4j2 之類的漏洞是如何被利用的,以便您迅速采取行之有效的修復措施。
而 ThreatStryker 是建立在由 ThreatMapper 創(chuàng)建的漏洞圖表和信息的基礎上,通過識別攻擊行為,判斷攻擊步驟,進而阻斷和防范其攻陷目標應用。
- 參考鏈接:
- ThreatMapper 和 ThreatStryker 的演示視頻 --https://go.deepfence.io/log4j2-vulnerability-detection-protection
- ThreatStryker 的實時沙箱 --https://deepfence.io/view-enterprise-sandbox/
- 在 GitHub 上獲取全開源的 ThreatMapper--https://github.com/deepfence/ThreatMapper
譯者介紹
陳 峻 (Julian Chen),51CTO 社區(qū)編輯,具有十多年的 IT 項目實施經(jīng)驗,善于對內(nèi)外部資源與風險實施管控,專注傳播網(wǎng)絡與信息安全知識與經(jīng)驗;持續(xù)以博文、專題和譯文等形式,分享前沿技術與新知;經(jīng)常以線上、線下等方式,開展信息安全類培訓與授課。