
पावरशेल स्क्रिप्ट जो विंडोज़ पर Zenbleed (CVE-2023-20593) MSR वर्कअराउंड लागू करती है
नई खोजी गई Zenbleed कमजोरी (CVE-2023-20593) AMD के सभी Zen2 प्रोसेसरों को प्रभावित करती है। दुर्भाग्य से, AMD नवंबर या दिसंबर 2023 तक अपने कई प्रोसेसरों के लिए माइक्रोकोड अपडेट प्रदान नहीं करेगा। तब तक सुरक्षित कैसे रहें? सौभाग्य से, एक सॉफ्टवेयर वर्कअराउंड मौजूद है। जबकि लिनक्स पर सॉफ्टवेयर वर्कअराउंड लगाना एक-लाइनर है, विंडोज पर मामले अधिक जटिल हैं।
सॉफ्टवेयर वर्कअराउंड लागू करने के लिए, MSR CPU रजिस्टर में एक निश्चित बिट (चिकन बिट DE_CFG[9]) सेट करना होता है।
जैसा कि Travis Ormandy ने बताया लिनक्स पर Zenbleed से बचने के लिए निम्नलिखित कमांड का उपयोग किया जा सकता है:
# wrmsr -a 0xc0011029 $(($(rdmsr -c 0xc0011029) | (1<<9)))
विंडोज के तहत MSR रजिस्टर सेट करना अधिक कठिन है। केवल कर्नेल-स्तरीय ड्राइवरों को MSR रजिस्टर में लिखने की अनुमति है। इसके अलावा, कर्नेल-स्तरीय ड्राइवर लोड करने के लिए, इसे साइन किया जाना आवश्यक है। यही कारण है कि हमने OpenLibSys.org से मौजूदा WinRing0 ड्राइवर का उपयोग करने का निर्णय लिया। हमने एक PowerShell स्क्रिप्ट लिखी है जो WinRing0 को लोड करती है, ड्राइवरों को उपयुक्त MSR राइट अनुरोध भेजती है और तुरंत बाद WinRing0 ड्राइवर को अनलोड कर देती है। वर्तमान में, हमारी PowerShell स्क्रिप्ट केवल तभी काम करती है जब Hyper-V अक्षम हो। हमारी PowerShell स्क्रिप्ट यहाँ होस्ट की गई है: https://github.com/sbaresearch/stop-zenbleed-win
कृपया ध्यान दें कि PowerShell स्क्रिप्ट के साथ कुछ चेतावनियाँ जुड़ी हैं। स्क्रिप्ट का उपयोग करने से पहले कृपया 'caveats' अनुभाग पढ़ें और अपने विशिष्ट वातावरण के लिए जोखिम विश्लेषण करें।
Stop-Zenbleed.ps1 चलाएँ।NT AUTHORITY\SYSTEM अधिकारों के लिए विशेषाधिकार वृद्धि संभव है।
एक वास्तविक समाधान के लिए WinRing0 ड्राइवर में बदलाव और इस प्रकार एक नए हस्ताक्षर की आवश्यकता होगी, जो जटिल है।
OpenHardwareMonitor लाइब्रेरी, एक वर्कअराउंड के रूप में, ड्राइवर लोड करने के तुरंत बाद एक्सेस अधिकारों को ठीक करती है (https://github.com/openhardwaremonitor/openhardwaremonitor/commit/0e435cafc61fe84d429e8a9500d666e34e3de67b)।
हमारी PowerShell स्क्रिप्ट चिकन बिट सेट करने के तुरंत बाद ड्राइवर को अनलोड करके CVE-2020–14979 के आसपास काम करती है।
हालांकि, स्क्रिप्ट के प्रत्येक निष्पादन पर अवसर की एक छोटी समय खिड़की मौजूद होती है।
चूंकि चिकन बिट सेट करना स्थायी नहीं है, स्क्रिप्ट को प्रत्येक रीबूट पर निष्पादित करना होता है।
हमारे जोखिम विश्लेषण में, Zenbleed (जो दूरस्थ रूप से हो सकता है) के विरुद्ध सुरक्षा के लाभ फिर से स्थानीय विशेषाधिकार वृद्धि के जोखिमों से अधिक हैं।
इसके अलावा, हम उपयोगकर्ता प्रक्रियाओं द्वारा शोषण की संभावना को सीमित करने के लिए बूट प्रक्रिया में जितनी जल्दी हो सके स्क्रिप्ट चलाने की सलाह देते हैं।
PowerShell स्क्रिप्ट को तैनात करने से पहले कृपया अपने विशिष्ट वातावरण के लिए जोखिम विश्लेषण करें।PS C:\stop-zenbleed-win> powershell -ExecutionPolicy RemoteSigned .\Stop-Zenbleed.ps1
[>] Installing driver...
[SC] CreateService SUCCESS
[>] Starting driver...
SERVICE_NAME: WinRing0_1_2_0
TYPE : 1 KERNEL_DRIVER
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
PID : 0
FLAGS :
[>] Opening driver...
[+] Driver access OK, handle: 2456
[>] Try 1 to apply fix on processor 1
[+] Fix is applied on processor 1 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 2 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 3
[+] Fix is applied on processor 3 (MSR 0xC0011029=0x3004310E08202)
[+] Fix is applied on processor 4 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 5
[+] Fix is applied on processor 5 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 6 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 7
[+] Fix is applied on processor 7 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 8 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 9
[+] Fix is applied on processor 9 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 10 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 11
[+] Fix is applied on processor 11 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 12 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 13
[+] Fix is applied on processor 13 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 14 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 15
[+] Fix is applied on processor 15 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 16 (MSR 0xC0011029=0x300C310E08203)
[>] Closing driver...
[>] Stopping driver...
SERVICE_NAME: WinRing0_1_2_0
TYPE : 1 KERNEL_DRIVER
STATE : 1 STOPPED
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
[>] Uninstalling driver...
[SC] DeleteService SUCCESS
हमारी PowerShell स्क्रिप्ट को निष्पादित करने के बाद, POC शोषण को कोई और आउटपुट उत्पन्न नहीं करना चाहिए।
Stop-Zenbleed.ps1 GNU GPL v3.0 लाइसेंस के तहत प्रदान किया गया है: LICENSE