
CVE-2023-38831 - WinRAR
इस रिपॉजिटरी में CVE-2023-38831 (WinRAR ZIP फ़ाइल स्पूफिंग / डबल-एक्सटेंशन एक्सप्लॉइट) के लिए डिटेक्शन लॉजिक है, जिसमें रॉ क्वेरी / कोड ब्लॉक और ETW-विशिष्ट प्रोवाइडर नाम + इवेंट ID शामिल हैं। लक्ष्य सिस्टम पर WinRAR का एक कमजोर संस्करण (< 6.23)
CVE-2023-38831 तब एक्सप्लॉइट होता है जब:
उपयोगकर्ता WinRAR में एक दुर्भावनापूर्ण ZIP खोलता है
आर्काइव में शामिल होता है:
● एक डिकॉय फ़ाइल (जैसे, invoice.pdf )
● उसी नाम वाली एक डायरेक्ट्री (जैसे, invoice.pdf )
● डायरेक्ट्री के अंदर एक ही नाम वाली "दो" फ़ाइलें लेकिन थोड़े अलग नामों के साथ (एक फ़ाइल के लिए स्पेस और उसके अंत में कोई भी एक्सटेंशन, जैसे अगर पहली फ़ाइल "invoice.pdf " है तो दूसरी कोई स्क्रिप्ट या एक्ज़ीक्यूटेबल हो सकती है जैसे "invoice.pdf .cmd")
WinRAR दस्तावेज़ ("PDF" इस मामले में) खोलने के बजाय स्क्रिप्ट या एक्ज़ीक्यूटेबल चलाता है
यह निष्पादन फ़ाइल को चलाने के लिए ShellExecuteExW फ़ंक्शन को कॉल करके ट्रिगर होता है, जिसमें shExecInfo पास किया जाता है (Explorer के माध्यम से ShellExecute)
WinRAR एक चाइल्ड प्रोसेस स्पॉन करता है (cmd, powershell, mshta, wscript, exe — फ़ोल्डर के अंदर जो भी मौजूद हो)
निष्पादन अक्सर Temp / AppData / निकाले गए पथ से होता है
फ्लो सारांश उपयोगकर्ता आर्काइव खोलता है
↓
WinRAR डिकॉय फ़ाइल दिखाता है
↓
उपयोगकर्ता दस्तावेज़ पर डबल-क्लिक करता है
↓
WinRAR उसी नाम वाली डायरेक्ट्री निकालता है
↓
एक्ज़ीक्यूटेबल *.pdf\*.pdf .exe पर लिखी जाती है
↓
Explorer के माध्यम से ShellExecute
↓
एक्ज़ीक्यूटेबल का ImageLoad
↓
पेलोड निष्पादन
यह फ्लो डिटेक्शन के लिए क्यों महत्वपूर्ण है
● कोई मैक्रो उपयोग नहीं
● कोई प्रोसेस क्रिएशन निर्भरता नहीं
● एक्सप्लॉइट फाइलसिस्टम मास्करेडिंग पर टिका होता है
● उच्च-विश्वसनीयता, कम-शोर सिग्नल
महत्वपूर्ण तकनीकी विवरण
फ़ाइलें एक विशेष संरचना में लिखी जाती हैं
जैसे एक ही नाम वाली दो वस्तुएं (फ़ाइल/डायरेक्ट्री) होना और जब आर्काइव फ़ाइल में एक ही नाम वाली फ़ाइल और डायरेक्ट्री हो और आप खुली आर्काइव फ़ाइल में उस पर (लक्ष्य फ़ाइल) डबल-क्लिक करके फ़ाइल को अस्थायी रूप से खोलना चाहते हैं, तो WinRAR आपके लिए यह फ़ाइल निकालता है, साथ ही उन सभी फ़ाइलों को भी निकालता है जिनका नाम लक्ष्य फ़ाइल के समान है। उन सभी को %tmp% पथ में एक अस्थायी डायरेक्ट्री में लिखा जाता है।
| फ़ाइल/डायरेक्ट्री का नाम | निष्कर्षण पथ |
| ------------------------------------------------------ | --------------------------------------------------------------------------------- |
| CLASSIFIED_DOCUMENTS.txt <–लक्ष्य फ़ाइल जिस पर क्लिक किया गया | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
| CLASSIFIED_DOCUMENTS.txt .cmd <– डायरेक्ट्री में मौजूद फ़ाइल | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
यदि किसी अस्थायी (डीकंप्रेशन) डायरेक्ट्री में एक ही नाम वाली दो फ़ाइलें हों लेकिन अलग-अलग आकार की हों (उदाहरण के लिए, 20k और 12k) और आप आर्काइव खोलें और पहली फ़ाइल, 1.txt खोलें, जो 20k बाइट्स आकार की है, तो WinRAR आपको दूसरी फ़ाइल, 1.txt, जो 10K आकार की है, से फ़ाइल को बदलने के लिए संकेत देगा। यदि आप "हाँ" पर क्लिक करते हैं, तो केवल दूसरी फ़ाइल, 1.txt खुलेगी। इस स्थिति को बहिष्करण के लिए जोड़ा जा सकता है।
डिटेक्शन लॉजिक के लिए महत्वपूर्ण बिंदु
किसी ZIP निष्कर्षण पथ या अस्थायी डायरेक्ट्री से प्रोसेस निष्पादन ट्रिगर होना, जिसमें भ्रामक एक्सटेंशन या फ़ाइल के रूप में मास्करेड करने वाला फ़ोल्डर हो
जब WinRAR अस्थायी डायरेक्ट्री में डीकंप्रेशन के लिए एक फ़ाइल छोड़ता है, तो उसमें एक ही नाम वाली दो फ़ाइलें होनी चाहिए लेकिन थोड़े अलग नामों के साथ (स्पेस और उसके अंत में कोई भी एक्सटेंशन), जैसे मुख्य फ़ाइल के नाम के अंत में एक " " (CLASSIFIED_DOCUMENTS.pdf ) और फिर एक ".cmd" (CLASSIFIED_DOCUMENTS.pdf .cmd)।
जब WinRar एक DLL लोड करता है और ShellExecuteExA फ़ंक्शन को कॉल करता है, तो पैरामीटर "pExecInfo" में एक स्पेस वाला पथ होता है जो किसी भी एक्सटेंशन के साथ समाप्त होता है, जैसे "CLASSIFIED_DOCUMENTS.pdf .cmd."
ETW प्रोवाइडर और डिटेक्शन फिलॉसफी (केवल ETW) ETW प्रोवाइडर
| उद्देश्य | ETW प्रोवाइडर |
| -------------------------- | ------------------------------------- |
| प्रोसेस क्रिएशन | `Microsoft-Windows-Kernel-Process` |
| कमांड लाइन विज़िबिलिटी | `Microsoft-Windows-Security-Auditing` |
| फ़ाइल ऑपरेशन (वैकल्पिक) | `Microsoft-Windows-Kernel-File` |
डिटेक्शन इस पर निर्भर करेगा (यदि कोई ProcessStart, CreateProcess, या EDR-शैली पैरेंट/चाइल्ड लॉजिक नहीं है):
● फाइल सिस्टम ETW
● शेल / Explorer ETW
● इमेज लोड ETW (वैकल्पिक, नॉन-क्रिएट)
● कमांड लाइन ETW (वैकल्पिक)
कोर ETW प्रोवाइडर
| उद्देश्य | ETW प्रोवाइडर |
| -------------------------- | ------------------------------------- |
| डायरेक्ट्री क्रिएशन | `Microsoft-Windows-Kernel-File` |
| EXE क्रिएशन | `Microsoft-Windows-Kernel-File` |
| शेल निष्पादन | `Microsoft.Windows.ShellExecute` |
| इमेज लोड | `Microsoft-Windows-Kernel-Image` |
| Explorer | `Microsoft-Windows-Explorer` |
| शेल | `Microsoft-Windows-Shell-Core` |
रॉ डिटेक्शन लॉजिक
उच्च स्तर पर, यह लॉजिक निम्न का पता लगाता है:
● WinRAR.exe द्वारा फ़ाइल राइट्स शुरू करना
● एक ही बेसनेम वाली डायरेक्ट्री और फ़ाइल दोनों का निर्माण
● रीनाम या ओवरराइट के बाद एक्ज़ीक्यूटेबल एक्सटेंशन का प्रकट होना
● तंग समय-सीमा (<2s) के भीतर होने वाला अनुक्रम
यह पैटर्न सामान्य वर्कफ़्लो में अत्यंत दुर्लभ है लेकिन एक्सप्लॉइट के निष्पादन पथ का मूल है।
● यह नियम जानबूझकर इनसे बचता है:
● कमांड-लाइन निरीक्षण
● चाइल्ड प्रोसेस ट्रैकिंग
● पूर्ण फ़ाइल हैशिंग
कोर लॉजिक डिटेक्शन नीचे दिया गया है, साथ ही एक कॉन्फिडेंस लेवल और संक्षिप्त औचित्य भी।
1.इमेज लोड (निष्पादन की पुष्टि)
कारण : यह प्रोसेस क्रिएशन टेलीमेट्री के बिना वास्तविक निष्पादन की पुष्टि करता है।
डिटेक्शन लॉजिक :
Windows लोडर:
● Invoice.pdf .exe को मेमोरी में मैप करता है
ETW सिग्नल:
● ImageLoad
● इमेज पथ:
● *.pdf\*.pdf .exe
2. डिटेक्शन नियम (API ShellExecuteExA) - हाई-फिडेलिटी नियम लॉजिक
नीचे दी गई टेलीमेट्री पर आधारित जेनेरिक डिटेक्शन नियम :
● WinRar.exe द्वारा फ़ाइल क्रिएशन इवेंट
● WinRar.exe द्वारा DLL Shell32.dll लोड करने और पैरामीटर के साथ एक API (ShellExecuteExA|W) का उपयोग शुरू करने के इमेज लोड इवेंट
● यह फ़ंक्शन सिर्फ SHELLEXECUTEINFO नामक एक तर्क लेता है, जो एक स्ट्रक्चर है। जैसा कि आप देखते हैं, इस स्ट्रक्चर में कई फ़ील्ड हैं। लेकिन उनमें से दो हमारे लिए महत्वपूर्ण हैं।
lpVerb और lpFile।
● lpVerb - यह बताता है कि यदि आप LpVerb को NULL पर सेट करते हैं, तो ShellExecuteExA|W डिफ़ॉल्ट वर्ब का उपयोग करता है यदि उपलब्ध हो, अन्यथा यह “open” वर्ब करता है। और “open” वर्ब फ़ाइल को खोलता या निष्पादित करता है।
● lpFile - lpFile उस फ़ाइल का पथ है जिसका उपयोग ShellExecuteExA में वर्ब करने के लिए किया जाता है और अब आप ध्यान दे सकते हैं, फ़ाइल पथ के अंत में स्पेस वर्ण (0x20)।
नोट :
1- Shell32.dll: यह वह जगह है जहाँ ShellExecuteExA परिभाषित है। इसमें SHELLEXECUTEINFO स्ट्रक्चर को पार्स करने और यह निर्धारित करने की लॉजिक होती है कि अनुरोध को कैसे संभालना है (जैसे, दस्तावेज़ खोलना, EXE चलाना, या प्रॉपर्टीज़ डायलॉग दिखाना)
2- वैसे, यह कमजोरी इस प्रकार काम करती है : कमजोरी यहाँ है। WinRAR ने लिखते समय फ़ाइल नाम से स्पेस हटा दिया लेकिन इस बदलाव को निष्कर्षण सूची में कमिट करना भूल गया। इसलिए लक्ष्य फ़ाइल का नाम नहीं बदला और स्पेस अभी भी फ़ाइल नाम में मौजूद है।
साथ ही मैं कह सकता हूँ कि ShellExecuteExA “CLASSIFIED_DOCUMENTS.pdf .cmd” फ़ाइल खोलता है। “.cmd” ShellExecuteExA के लिए मायने नहीं रखता और यह उस पथ में “CLASSIFIED_DOCUMENTS.pdf ” नाम वाली फ़ाइल को चलाता है।
डिटेक्शन लॉजिक (हाई-फिडेलिटी नियम लॉजिक) :
● SQL-आधारित : \\Detection_Logic\\SQL-based-ShellExecute.txt
● KQL (ProcessCommandLine) : \\Detection_Logic\\KQL-API-ProcessCommandLine.txt
● स्यूडोकोड डिटेक्शन लॉजिक : \\Detection_Logic\\SQL-API-ShellExecute.txt
नोट:- आप उपरोक्त मानकों के अनुसार एक डिटेक्शन लॉजिक बना सकते हैं। मैं इवेंट प्राप्त करने के लिए एक सरल Python स्क्रिप्ट भी जोड़ रहा हूँ जो आपकी डिटेक्शन नियम लेखन में मदद करेगी। साथ ही, यह ETW-आधारित नियम बनाते समय भी उपयोगी है।
| प्रोवाइडर | इवेंट ID | इवेंट ID / कार्य |
| ------------------------------------- | ----------------------------------------- | --------------------------- |
| `Microsoft-Windows-Shell-Core` | {30336983-0362-4540-9E69-14844E6A3B7A} | इवेंट ID 1 (Execute) |
| `Microsoft-Windows-Kernel-Process` | {22FB2AD3-E163-4078-8C2A-801648437D2D} | Image Load / Process Start |
3. WinRAR CVE-2023-38831 एक्सप्लॉइटेशन के लिए हाई-फिडेलिटी नियम लॉजिक
- कारण : जब किसी डायरेक्ट्री से एक्ज़ीक्यूटेबल बनाई या लोड की जाती है जिसके नाम का अंत दस्तावेज़ एक्सटेंशन से होता है, और निष्पादन Explorer/Shell APIs के माध्यम से शुरू होता है, तो अलर्ट करें।
- स्यूडोकोड डिटेक्शन लॉजिक (हाई-फिडेलिटी नियम लॉजिक) - \\Detection_Logic\\WinRAR-CVE-2023-38831-Exploitation.txt
4. EDR डिटेक्शन नियम (ETW-आधारित)
नीचे दी गई टेलीमेट्री पर आधारित जेनेरिक EDR डिटेक्शन नियम :
● फ़ाइल क्रिएशन इवेंट
● शेल निष्पादन / Explorer इनवोकेशन
● इमेज लोड इवेंट (वैकल्पिक लेकिन मजबूत)
डिटेक्शन लॉजिक : \\Detection_Logic\\EDR-Detection-ETW-based.txt
5. DeviceProcessEvents के बिना KQL क्वेरी (यदि एंडपॉइंट समर्थन करता है)
कारण : यह संस्करण DeviceProcessEvents पर निर्भर किए बिना काम करता है
डिटेक्शन लॉजिक : \\Detection_Logic\\KQL-Detection-without-DeviceProcessEvents.txt
6. शेल निष्पादन सिग्नल (यदि सक्षम और समर्थित हो)
कारण : फ़ाइल क्रिएशन के साथ सहसंबद्ध होने पर यह विश्वसनीयता को मजबूत करता है।
डिटेक्शन लॉजिक : \\Detection_Logic\\Shell-Execution-Signal.txt
7. SOC-अनुकूल (ट्राइएज फ्लो)
कारण : यह नियम हमले के दौरान खोजे गए प्रत्येक चरण के लिए बनाया गया था।
डिटेक्शन लॉजिक : \\Detection_Logic\\SOC-Friendly.txt
(अलर्ट / यदि ProcessStart, CreateProcess, या EDR-शैली पैरेंट/चाइल्ड लॉजिक शामिल हो)
1.पता लगाएं जब winrar.exe एक संदिग्ध डायरेक्ट्री / फ़ाइल बनाता है, विशेष रूप से temp या आर्काइव निष्कर्षण पथ से, और WinRAR के कमजोर संस्करण का उपयोग करके बनाई गई संदिग्ध फ़ाइल को चलाता है
कारण : अपने उत्पाद द्वारा संभाले जाने वाले इवेंट के आधार पर नियम बनाएं, जैसे एक्सेस, इवेंट, या क्लाउड-आधारित
डिटेक्शन लॉजिक : \\Detection_Logic\\Gen-Pseudocode-Detection-Logic.txt
2.पता लगाएं जब winrar.exe एक संदिग्ध चाइल्ड प्रोसेस स्पॉन करता है, विशेष रूप से temp या आर्काइव निष्कर्षण पथ से
डिटेक्शन लॉजिक :
एंडपॉइंट : \\Detection_Logic\\winrar-spawns-suspicious-child-process.txt
सिग्मा नियम : \\Detection_Logic\\Sigma-Rule-WinRAR Exploit.txt
3. ETW प्रोवाइडर (प्रोसेस क्रिएशन) पर आधारित अलर्ट
| प्रोवाइडर | इवेंट ID |
| ------------------------------------- | --------------------------- |
| `Microsoft-Windows-Security-Auditing` | 4688 (प्रोसेस क्रिएशन) |
डिटेक्शन लॉजिक
● पैरेंट प्रोसेस = winrar.exe
● नई प्रोसेस = स्क्रिप्टिंग इंजन या एक्ज़ीक्यूटेबल
● CommandLine में Temp/AppData शामिल है
4. DeviceProcessEvents के साथ KQL क्वेरी (यदि एंडपॉइंट समर्थन करता है)
कारण : यदि हम DeviceProcessEvents का उपयोग करके विकसित करना चाहते हैं
डिटेक्शन लॉजिक : \\Detection_Logic\\KQL-Detection-with-DeviceProcessEvents.txt
5. अटैक का संकेतक (आप एक हाई-कॉन्फिडेंस अलर्ट जोड़ सकते हैं)
नीचे दी गई शर्तों को पूरा करके, आप अलर्टिंग के लिए एक IOA या वॉच-लिस्ट नियम जोड़ सकते हैं।
| संकेतक | विश्वसनीयता |
| ---------------------------------- | ---------- |
| winrar.exe द्वारा cmd/powershell स्पॉन करना | उच्च |
| Temp/AppData से निष्पादन | उच्च |
| `.cmd/.bat /.exe ` निष्पादन | उच्च |
| डबल-एक्सटेंशन ZIP खोला गया | मध्यम |
एक कमजोर WinRAR संस्करण (< 6.23) द्वारा बनाई गई डायरेक्ट्री में एक ही नाम वाली दो फ़ाइलों के लिए एक वॉचलिस्ट बनाएं :
चूंकि आप किसी डायरेक्ट्री में एक ही नाम वाली दो फ़ाइलें नहीं रख सकते। साथ ही, आप एक ही नाम वाली डायरेक्ट्री और फ़ाइल भी नहीं रख सकते।
लेकिन WinRar/7zip जैसे कंप्रेशन सॉफ़्टवेयर में यह संभव है। एक कंप्रेस्ड फ़ाइल में, चाहे आपके पास एक ही नाम वाली फ़ाइलें हों या नहीं, फ़ाइलें एक विशेष संरचना में लिखी जाती हैं।
इसलिए आप ZIP/RAR फ़ाइल में एक ही नाम वाली दो वस्तुएं (फ़ाइल/डायरेक्ट्री) रख सकते हैं।
संभावित वैध ट्रिगर
● 7-Zip/WinRAR सेल्फ-एक्सट्रैक्टिंग इंस्टॉलर द्वारा स्पॉन किया गया cmd.exe
● RAR में पैकेज्ड एंटरप्राइज़ सॉफ़्टवेयर अपडेटर द्वारा लॉन्च किया गया powershell.exe
● प्रिंटर ड्राइवर या GPU ड्राइवर इंस्टॉलर द्वारा उपयोग किया गया rundll32.exe
बहिष्करण लॉजिक (उदाहरण)
AND NOT (
ChildImage IN (cmd.exe, powershell.exe, rundll32.exe)
AND
CommandLine CONTAINS (
"setup.exe",
"install.cmd",
"driverinstall",
"vendorupdate"
)
)
यह ज्ञात इंस्टॉलर व्यवहार को दबाते हुए एक्सप्लॉइट डिटेक्शन को संरक्षित करता है।
आर्काइव फ़ाइल टेलीमेट्री (फाइल-सिस्टम इवेंट) — इस नियम को RAR/ZIP निष्कर्षण गतिविधि के साथ सहसंबद्ध करना (जैसे, निष्पादन से ठीक पहले .cmd/.bat/.exe का फ़ाइल क्रिएशन, विशेष रूप से Rar$EX* जैसी WinRAR निष्कर्षण डायरेक्ट्री से) विश्वसनीयता में उल्लेखनीय वृद्धि करेगा और निष्पादन सीधे आर्काइव निष्कर्षण के बाद हुआ यह साबित करके गलत सकारात्मक परिणाम कम करेगा।
T1204.002 – उपयोगकर्ता निष्पादन : दुर्भावनापूर्ण फ़ाइल
T1059 – कमांड और स्क्रिप्टिंग इंटरप्रेटर
T1036 – मास्करेडिंग (डबल एक्सटेंशन)
यह डिटेक्शन कोड केवल शैक्षिक और अधिकृत परीक्षण उद्देश्यों के लिए है।
इसे उन सिस्टम पर उपयोग न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण की आपके पास स्पष्ट अनुमति नहीं है।