一、簡介
log4jpayload 是 Apache log4j 中的一個漏洞,被利用用於攻擊目標系統。該漏洞可以允許黑客通過在日誌中插入特定的負載來執行任意代碼。並且,這種攻擊是無需認證的,極具危害。
在本文中,我們將介紹該漏洞的影響、原因以及如何檢測和防護這個漏洞。
二、影響 – 悄無聲息地攻擊
log4jpayload 漏洞可以被黑客用來執行惡意代碼。利用該漏洞,攻擊者可以將惡意代碼注入到目標伺服器的內存中,然後執行該代碼。他們可以使用該漏洞獲取目標系統的敏感信息,或者執行其他惡意行為例如篡改數據。
此外,log4jpayload 漏洞是一個無需認證的漏洞。這意味著黑客可以遠程利用它,沒有任何的身份驗證。
三、原因 – 輸入驗證的缺失
log4jpayload 漏洞的根本原因是 Apache log4j 框架對潛在攻擊的輸入缺乏有效的驗證。這使得攻擊者可以輕鬆地向目標伺服器注入惡意代碼。
該漏洞是由於在 PropertyPlaceholderConfigurer 類中的 JNDI 查找函數不進行適當的驗證而引起的。Attacker 可以在 env-entry 元素的 value 屬性中注入任意 JNDI URL,將其用於訪問惡意伺服器上的惡意代碼。這個 JNDI URL 在初始化工作時被用來解析,使得惡意代碼能夠執行。
四、檢測和防範 – 阻止 log4jpayload 的攻擊
檢測和防止 log4jpayload 的最佳方法是升級到修復版本。然而,在升級之前,你可以採取以下措施來降低被攻擊的風險:
1、配置防火牆,以阻止與外部 IP 的通信
2、通過禁用 JNDI 查找和 PropertyPlaceholderConfigurer 初始化器來禁用環境變數擴展。具體地,可以防止在任何情況下調用丟棄為以下任意格式的 log4j 屬性來解析系統屬性:
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
3、使用防火牆限制所有 HTTP 請求和響應的大小,以防止腳本負載過大導致造成拒絕服務攻擊
五、攻擊代碼演示
以下是一個攻擊腳本示例,它將觸發 log4jpayload 漏洞,並將命令回顯到攻擊者的機器上。
#log4j.properties file content log4j.rootLogger=DEBUG, R log4j.appender.R=org.apache.log4j.ConsoleAppender log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p %c - %m%n env.SHELL=%2fbin%2fbash env.PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
攻擊腳本解釋:
該腳本會在日誌文件中插入一些內容,以觸發 log4jpayload 漏洞。一旦該負載被載入,將執行位於 SHELL 環境變數中的 shell。在這種情況下,我們設置了 SHELL 以讓它調用 bash。然後,該腳本將在 stderr 和 stdout 上重定向相應的輸出,以便輸出到攻擊者的機器上,同時執行一個命令,以使它回顯到攻擊者的機器上。
結束語
log4jpayload 漏洞是一個極具危害的漏洞。它允許攻擊者在目標伺服器上執行任意代碼,並可能導致數據泄露或系統癱瘓,而不需要身份驗證。通過升級到修復版本,配置防火牆以阻止與外部 IP 的通信,限制 HTTP 請求和響應的大小,禁用環境變數擴展等措施,可以降低被攻擊的風險。此外,必須始終對所有日誌文件進行嚴格的輸入驗證,以及進行對可能會觸發強制操作的代碼的審核。這樣可以確保日誌文件保持完整和可靠,以便在將來用於安全分析和恢復。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/297409.html