
wtf v0.5.8
वितरित, कोड-कवरेज निर्देशित स्नैपशॉट-आधारित फ़ज़र जो विंडोज और लिनक्स पर उपयोगकर्ता और कर्नेल-मोड लक्ष्यों के लिए है, जिसमें एमुलेटर और हाइपरवाइज़र बैकएंड शामिल हैं।
what the fuzz
एक वितरित, कोड-कवरेज निर्देशित, क्रॉस-प्लेटफ़ॉर्म स्नैपशॉट-आधारित फज़र जो Microsoft Windows और Linux यूज़र-मोड (प्रायोगिक!) पर चलने वाले यूज़र और/या कर्नेल-मोड लक्ष्यों पर हमला करने के लिए डिज़ाइन किया गया है।
अवलोकन
what the fuzz या wtf एक वितरित, कोड-कवरेज निर्देशित, अनुकूलन योग्य, क्रॉस-प्लेटफ़ॉर्म स्नैपशॉट-आधारित फज़र है जो Microsoft Windows या Linux (प्रायोगिक, linux_mode देखें) पर चलने वाले यूज़र और/या कर्नेल-मोड लक्ष्यों पर हमला करने के लिए डिज़ाइन किया गया है। लक्ष्य का निष्पादन bochscpu के साथ एक एमुलेटर के अंदर (धीमा, सबसे सटीक), Windows Hypervisor Platform APIs के साथ Windows VM के अंदर, या KVM APIs के साथ Linux VM के अंदर (सबसे तेज़) किया जा सकता है।
इसने सॉफ़्टवेयर की एक विस्तृत श्रृंखला में मेमोरी भ्रष्टाचार भेद्यताओं का पता लगाया: IDA Pro, एक लोकप्रिय AAA गेम, Windows कर्नेल, Microsoft RDP क्लाइंट, NVIDIA GPU डिस्प्ले ड्राइवर, आदि।
संकलित बाइनरीज़ CI आर्टिफैक्ट्स या रिलीज़ अनुभाग से Windows और Linux दोनों के लिए उपलब्ध हैं।
यदि आप इसके इतिहास के बारे में अधिक पढ़ना चाहते हैं या इसे वास्तविक लक्ष्य पर कैसे उपयोग करें, तो मैं शुरू करने के लिए इन पोस्टों को देखने की सलाह देता हूं 🔥
- एक नया स्नैपशॉट फज़र बनाना और IDA को फज़ करना
- स्नैपशॉट-आधारित फज़र्स के साथ आधुनिक UDP गेम प्रोटोकॉल को फज़ करना by Markus Gaasedelen
- "what the fuzz" के साथ RDPEGFX को फज़ करना by Colas Le Guernic, Jérémy Rubert, and Anonymous
- नेटवर्क प्रोटोकॉल फज़िंग की एक यात्रा – Microsoft IMAP क्लाइंट प्रोटोकॉल का विच्छेदन by Wayne Chin Yick Low
- Trail Of Bits के टेस्टिंग हैंडबुक का स्नैपशॉट फज़िंग अनुभाग
- EDRs पर हमला भाग 4: डिफ़ेंडर के स्कैनिंग और एमुलेशन इंजन (mpengine.dll) को फज़ करना by Manuel Feifel
उपयोग
सुविधाओं को आज़माने का सबसे अच्छा तरीका fuzzer_hevd / fuzzer_tlv_server मॉड्यूल के साथ काम करना है। आप target-hevd.7z / target-tlv_server.7z आर्काइव को प्राप्त कर सकते हैं और उन्हें targets/ निर्देशिका में निकाल सकते हैं। आर्काइव में प्रत्येक लक्ष्य के लिए अपेक्षित निर्देशिका ट्री होते हैं:
inputsवह फ़ोल्डर है जहां आपके इनपुट टेस्ट-केस जाते हैं,outputsवह फ़ोल्डर है जहां वर्तमान मिनसेट फ़ाइलें सहेजी जाती हैं,coverageवह फ़ोल्डर है जहां.covफ़ाइलें होने की अपेक्षा की जाती है,crashesवहां है जहां क्रैश सहेजे जाते हैं,stateवहां है जहां मेमोरी डंप (mem.dmp) के साथ-साथ CPU स्थिति (regs.json) और सिंबल स्टोर (symbol-store.json) संग्रहीत किए जाते हैं। सिंबल स्टोर एक सरल JSON फ़ाइल है जिसका उपयोग Linux सिस्टम पर यह जानने के लिए किया जाता है कि ब्रेकपॉइंट कहां रखें, क्योंकि उन प्लेटफार्मों पर सिंबल / dbgeng के लिए कोई समर्थन नहीं है। wtf इस फ़ाइल को रनटाइम पर उत्पन्न करता है जब भी आप Windows पर अपना लक्ष्य चलाते हैं।
निम्नलिखित यह मानता है कि आपने नवीनतम रिलीज़ से जुड़ी target-hevd.7z फ़ाइल डाउनलोड की है, और इसे wtf के आपके क्लोन की targets निर्देशिका में निकाला है। आपके पास wtf/targets/hevd होना चाहिए जिसमें आपको inputs / outputs आदि निर्देशिकाएं मिलेंगी।
सर्वर नोड प्रारंभ करना
सर्वर मूल रूप से मस्तिष्क है और सभी स्थिति का ट्रैक रखता है: समग्र कोड-कवरेज, कोर्पस, यह टेस्ट-केस उत्पन्न करता है और उन्हें क्लाइंट को वितरित करता है।
यहां बताया गया है कि आप स्थानीय सर्वर नोड कैसे लॉन्च कर सकते हैं:```text wtf.exe master --name hevd --max_len=1028 --runs=10000000
`max_len` विकल्प उत्पन्न टेस्ट-केस के आकार को सीमित करने के लिए उपयोग किया जाता है, `runs` उत्पन्न होने वाले टेस्ट-केस की संख्या है, `address` निर्दिष्ट करता है कि **wtf** को कहाँ सुनना चाहिए, `target` एक निर्देशिका है जिसमें ऊपर वर्णित निर्देशिका ट्री है (उपयोगकर्ता `--input` / `--output` / `--crashes` के साथ उन निर्देशिकाओं को ओवरराइड करना भी चुन सकता है) और `name` आपके फ़ज़िंग मॉड्यूल का नाम निर्दिष्ट करता है ताकि मास्टर आपके जनरेटर फ़ंक्शन को कॉल कर सके यदि आपने एक परिभाषित किया है।
<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/4a03fc75eed3ed5a92f7f10def697dbf220ae36b0701f05b37759eb432fc0fd9.webp">
</p>
### Fuzzing नोड्स
क्लाइंट नोड्स एक टेस्ट-केस चलाते हैं जो सर्वर द्वारा उत्पन्न और वितरित किया गया है और परिणाम सर्वर को वापस भेजते हैं (कोड-कवरेज, परिणाम, आदि)।
इस प्रकार आप एक क्लाइंट नोड शुरू करेंगे जो *bochscpu* बैकएंड का उपयोग करता है:```text
wtf.exe fuzz --name hevd --limit 10000000
fuzz उप-कमांड का उपयोग name विकल्प के साथ किया जाता है ताकि यह निर्दिष्ट किया जा सके कि किस फ़ज़र मॉड्यूल का उपयोग करना है, backend निष्पादन बैकएंड निर्दिष्ट करता है और limit प्रति टेस्टकेस निष्पादित करने के लिए निर्देशों की अधिकतम संख्या (बैकएंड पर निर्भर करते हुए, इस विकल्प का अलग अर्थ होता है)।
एक टेस्ट-केस चलाना
यदि आप कोई टेस्ट-केस (या टेस्ट-केसों से भरा फ़ोल्डर) चलाना चाहते हैं, तो आप run उप-कमांड का उपयोग कर सकते हैं।
इस प्रकार आप crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0 टेस्ट-केस चलाएंगे:```
wtf.exe run --name hevd --limit 10000000 --input crashes\crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0
<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/49b3ca8582d6314724e5615c687472499d5f8f41d04c9543c0a6a070c51f56f8.webp">
</p>
### कॉर्पस को मिनसेट करना
कॉर्पस को मिनसेट करने के लिए, आपको एक सर्वर नोड और जितने आवश्यक हों उतने क्लाइंट नोड्स का उपयोग करना होगा, जैसे आप फ़ज़िंग जॉब के लिए करते हैं। आप बस `runs` विकल्प को 0 पर सेट कर सकते हैं।
इस प्रकार आप `outputs` में कॉर्पस को `minset` निर्देशिका में मिनसेट करेंगे (यह भी दर्शाता है कि आप `inputs` और `outputs` निर्देशिकाओं को कैसे ओवरराइड कर सकते हैं):```
wtf.exe master --name hevd --max_len=1028 --runs=0 --inputs=outputs --outputs=minset
निष्पादन ट्रेस उत्पन्न करना
किसी निष्पादन बैकएंड में अंतर्दृष्टि प्राप्त करने के लिए उपलब्ध मुख्य तंत्र एक निष्पादन ट्रेस उत्पन्न करना है। bochscpu ऐसा करने के लिए सबसे तेज़ बैकएंड है, क्योंकि अन्य बैकएंड पर VMX मोड से बाहर निकलना बहुत महंगा होता है।