微軟7號發(fā)布了PrintNightmare的安全漏洞補丁,PrintNightmare漏洞的CVE編號為CVE-2021-1675和CVE-2021-34527。這是Windows打印假脫機程序中的一個嚴重漏洞,微軟將其評為關鍵漏洞。在Microsoft為其發(fā)布補丁之前,漏洞利用代碼已在公共領域泄漏。微軟建議系統(tǒng)管理員在補丁可用之前禁用Print Spooler服務。當Windows Print Spooler服務錯誤地執(zhí)行特權文件操作時,遠程代碼執(zhí)行漏洞就會出現。由于 Windows Print Spooler 服務在Windows上默認運行,微軟不得不為 Windows Server 2019、Windows Server 2012 R2、Windows Server 2008、Windows 8.1、Windows RT 8.1 以及 Windows 10 的各種支持版本發(fā)布補丁。
微軟表示:“2021年7月6日及之后發(fā)布的安全更新包含對Windows Print Spooler服務中名為PrintNightmare的遠程代碼執(zhí)行漏洞的保護,記錄在CVE-2021-34527以及CVE-2021-1675中。我們建議用戶立即安裝這些更新。”
該漏洞是微軟近年來面臨的一個較為嚴重的問題,因為微軟甚至為Windows 7也發(fā)布了補丁,而早在2020年1月14日微軟就已經終止了對Windows 7的技術支持。雖然漏洞發(fā)布了,但PrintNightmare漏洞所帶來的影響尚未完全結束,因為某些版本的Windows補丁尚未發(fā)布。據了解,Windows 10版本1607、Windows Server 2016和Windows Server 2012的更新尚不可用。這些Windows版本的安全更新或將在近期發(fā)布。
CVE-2021-1675和CVE-2021-34527(也稱為PrintNightmare)的技術分析
具有普通用戶帳戶的攻擊者可以利用這兩個漏洞來控制運行Windows Print Spooler服務的易受攻擊的服務器或客戶端機器。該服務在所有Windows客戶機和服務器(包括域控制器)上默認啟用。
HEUR:Exploit.Win32.CVE-2021-1675.*
HEUR:Exploit.Win32.CVE-2021-34527.*
HEUR:Exploit.MSIL.CVE-2021-34527.*
HEUR:Exploit.Script.CVE-2021-34527.*
HEUR:Trojan-Dropper.Win32.Pegazus.gen
PDM:Exploit.Win32.Generic
PDM:Trojan.Win32.Generic
Exploit.Win32.CVE-2021-1675.*
Exploit.Win64.CVE-2021-1675.*
卡巴斯基的安全檢測工具檢測邏輯也成功阻止了來自最新 Mimikatz 框架 v. 2.2.0-20210707 的攻擊技術。
目前卡巴斯基正在密切監(jiān)控這些情況,并使用行為檢測和漏洞利用防護組件改進對這些漏洞的通用檢測。作為托管檢測和響應服務的一部分,卡巴斯基 SOC 專家能夠檢測對這些漏洞的利用、調查此類攻擊并向客戶報告。
CVE-2021-34527
當使用 RPC 協議添加新打印機(RpcAsyncAddPrinterDriver [MS-PAR] 或 RpcAddPrinterDriverEx [MS-RPRN])時,客戶端必須向 Print Spooler 服務提供多個參數:
pDataFile——此打印機的數據文件的路徑;
pConfigFile—— 此打印機的配置文件的路徑;
pDriverPath——此打印機在工作時使用的驅動程序文件的路徑;
該服務進行了多次檢查以確保 pDataFile 和 pDriverPath 不是 UNC 路徑,但是沒有對 pConfigFile 進行相應的檢查,這意味著該服務會將配置 DLL 復制到文件夾 %SYSTEMROOT%\system32\spool\drivers\x64\3\ (在 x64 版本的操作系統(tǒng)上)。
現在,如果 Windows Print Spooler 服務嘗試再次添加打印機,但這次將 pDataFile 設置為復制的 DLL 路徑(來自上一步),則打印服務將加載此 DLL,因為它的路徑不是 UNC 路徑,并且檢查將成功通過。這些方法可由低權限帳戶使用,并且 DLL 由 NT AUTHORITY\SYSTEM 組進程加載。
CVE-2021-1675
PrintNightmare 的本地版本使用與 CVE-2021-34527 相同的方法進行漏洞利用,但入口點函數(AddPrinterDriverEx)有所不同,這意味著攻擊者可以將惡意 DLL 放在任何本地可訪問的目錄中以運行漏洞利用。
緩解措施
卡巴斯基的專家們預計,試圖獲取公司內部資源的黑客攻擊將會越來越多,同時還存在著感染勒索軟件和竊取數據的高風險。
因此,強烈建議你遵循微軟的指導方針,應用最新的Windows安全更新。
雖然漏洞發(fā)布了,但PrintNightmare漏洞所帶來的影響尚未完全結束,PrintNightmare是Windows打印假脫機程序中的一個漏洞,它是由AddPrinterDriverEx()、RpcAddPrinterDriver()和RpcAsyncAddPrinterDriver()用于安裝本地或遠程打印機驅動程序的Windows API函數中缺少ACL(訪問控制列表)檢查引起的。
這些函數都可以通過不同的Windows API 使用,如下所示:
AddPrinterDriverEx (SDK)
RpcAddPrinterDriver (MS-RPRN)
RpcAsyncAddPrinterDriver (MS-PAR)
使用 PrintNightmare,可以繞過權限檢查,將惡意 DLL 安裝到 C:\Windows\System32\spool\drivers 文件夾中,然后利用漏洞將其作為打印驅動程序加載,以實現遠程代碼執(zhí)行或本地權限提升。
當測試是否允許將文件安裝到具有SYSTEM權限的文件夾中時,API將用戶提供的參數作為權限檢查的一部分。
這與文件夾上的ACL無關,它是軟件SDK內部的一個檢查,可以通過API調用為函數提供額外的參數來繞過它。
為了利用該漏洞,攻擊者可以通過 RPC 或 LRPC 將請求直接發(fā)送到本地服務。雖然微軟的 OOB 補丁專注于阻止遠程利用漏洞,但 Hickey 表示他們沒有解決底層 ACL 檢查問題,允許創(chuàng)建修改后的漏洞利用。微軟最近發(fā)布的補丁專注于解決 RCE 漏洞利用向量,似乎解決了普遍存在的 PoC,但是你也可以通過 LRPC 和本地 API 來實現這一點,具體取決于主機和環(huán)境,看來補丁確實沒有正確解決 ACL 檢查中的潛在問題,這允許在完全修補的主機上仍然利用 LPE。
另外,在更新發(fā)布后,CERT/CC 漏洞分析師 Will Dormann 警告說,該補丁似乎只解決了 PrintNightmare 的遠程代碼執(zhí)行(通過 SMB 和 RPC 的 RCE)變體,而不是本地提權(LPE)變體,因此允許攻擊者濫用后者以獲取易受攻擊系統(tǒng)的 SYSTEM 權限。
現在,對更新補丁的進一步測試表明,針對該漏洞的利用可以完全繞過補救措施,從而獲得本地權限提升和遠程代碼執(zhí)行。但是,要實現這一點,必須啟用名為“Point and Print限制”的 Windows 策略(計算機配置\策略\管理模板\打印機:Point and Print限制),該策略可能用于安裝惡意打印機驅動程序。請注意,針對 CVE-2021-34527 的 Microsoft 更新并不能有效防止對 Point and Print NoWarningNoElevationOnInstall 設置為 1 的系統(tǒng)的利用。就微軟而言,它在其公告中解釋說,Point and Print 與此漏洞沒有直接關系,但該技術削弱了本地安全態(tài)勢,從而使漏洞利用成為可能。
雖然 Microsoft 已推薦停止和禁用 Print Spooler 服務的核心選項,但另一種解決方法是啟用Point and Print的安全提示,并通過配置“RestrictDriverInstallationToAdministrators”注冊表值來將打印機驅動程序安裝權限限制給管理員,以防止普通用戶在打印服務器上安裝打印機驅動程序。
關于如何安裝這些帶外安全更新的詳細步驟,請參閱以下鏈接的支持文檔:
Windows 10,版本21H1 (KB5004945)
Windows 10,版本20H1 (KB5004945)
Windows 10,版本2004 (KB5004945)
Windows 10 1909版本(KB5004946)
Windows 10,版本1809和Windows Server 2019 (KB5004947)
Windows 10,版本1803 (KB5004949)
Windows 10,版本1607和Windows Server 2016 (KB5004948)
Windows 10,版本1507 (KB5004950)
Windows Server 2012 (Monthly Rollup KB5004956 / Security only KB5004960)
Windows 8.1和Windows Server 2012 R2 (Monthly Rollup KB5004954 / Security only KB5004958)
Windows 7 SP1、Windows Server 2008 R2 SP1 (Monthly Rollup KB5004953 / Security only KB5004951)
Windows Server 2008 SP2 (Monthly Rollup KB5004955 / Security only KB5004959)
除了立即在所有受支持的 Windows 客戶端和服務器操作系統(tǒng)上安裝此更新外,你還可以選擇配置 RestrictDriverInstallationToAdministrators 注冊表設置,以防止非管理員在打印服務器上安裝已簽名的打印機驅動程序。有關詳細信息,請參閱 KB5005010。
根據 Mimikatz 的創(chuàng)建者 Benjamin Delpy 的說法,當啟用Point and Print策略時,可以繞過補丁來實現遠程代碼執(zhí)行。
要繞過 PrintNightmare 補丁并實現 RCE 和 LPE,必須啟用名為“Point and Print限制”的 Windows 策略,并將“為新連接安裝驅動程序時”設置配置為“在提升提示時不顯示警告”。
Point and Print限制政策
此策略位于計算機配置 > 管理模板 > 打印機 > Point and Print限制下。
啟用后,“NoWarningNoElevationOnInstall”值將在 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint 項下設置為 1。
Benjamin Delpy 仍建議管理員和用戶先暫時禁用 Print Spooler 服務以保護他們的 Windows 服務器和工作站,直到新的補丁發(fā)布。0patch 還為 PrintNightmare 發(fā)布了一個免費的微補丁https://www.bleepingcomputer.com/news/security/actively-exploited-printnightmare-zero-day-gets-unofficial-patch/,迄今為止已經能夠阻止利用該漏洞的所有嘗試。
但是,Benjamin Delpy警告不要安裝微軟 7 月 6 日的補丁,因為它不僅不能防止漏洞,而且會修改“l(fā)ocalspl.dll”文件,因此 0Patch 的補丁不再有效。
建議 Windows 用戶和管理員執(zhí)行以下操作之一:
1.在微軟發(fā)布工作補丁之前,不要安裝 7 月 6 日的補丁,而是安裝 0Patch 的微補丁。
2.使用此處的說明禁用打印后臺處理程序。
微軟表示,如果調查表明他們發(fā)布的補丁存在問題,他們將采取適當措施保護客戶。