फ़ज़ परीक्षण (फ़ज़िंग) ट्यूटोरियल

⚡ स्मार्ट सारांश

फ़ज़ टेस्टिंग किसी प्रोग्राम में अमान्य, अप्रत्याशित या यादृच्छिक डेटा डालती है और क्रैश, हैंग और मेमोरी त्रुटियों पर नज़र रखती है, जिससे सुरक्षा संबंधी खामियों का पता चलता है, जिन तक स्क्रिप्टेड कार्यात्मक परीक्षण लगभग कभी भी अपने आप नहीं पहुँच पाते हैं।

  • 🔘 उत्पत्ति: बार्टन मिलर ने विस्कॉन्सिन-मैडिसन विश्वविद्यालय में इस शब्द को गढ़ा था, और 1989 में किए गए पहले फ़ज़ रन ने परीक्षण किए गए लगभग एक तिहाई यूनिक्स यूटिलिटीज को क्रैश कर दिया था।
  • छह-चरणीय लूप: लक्ष्य की पहचान करें, इनपुट की पहचान करें, फ़ज़्ड डेटा उत्पन्न करें, निष्पादित करें, व्यवहार की निगरानी करें, और फिर दिखाई देने वाली प्रत्येक त्रुटि को लॉग करें।
  • तीन पीढ़ीगत रणनीतियाँ: म्यूटेशन फ़ज़र वैध नमूनों को विकृत करते हैं, जनरेशन फ़ज़र एक मॉडल से इनपुट बनाते हैं, और प्रोटोकॉल फ़ज़र एक विनिर्देश के आधार पर काम करते हैं।
  • 🧪 कवरेज संबंधी प्रतिक्रिया ने इस क्षेत्र को बदल दिया: आधुनिक इंजन नए कोड तक पहुंचने वाले किसी भी इनपुट को सहेज कर रखते हैं, जिससे विशुद्ध रूप से यादृच्छिक डेटा की तुलना में कहीं अधिक गंभीर बग का पता चलता है।
  • टूलिंग में काफी बदलाव आ चुका है: पीच फ़ज़र और वेबस्कारैब को आर्काइव कर दिया गया है, जबकि एएफएल++, लिबफ़ज़र, ओएसएस-फ़ज़, बूफ़ज़ और ओडब्ल्यूएएसपी ज़ैप अभी भी रखरखाव के लिए उपलब्ध विकल्प हैं।
  • ⚙️ ज्ञात सीमाएँ: फ़ज़िंग क्रैश का पता लगाता है, न कि लॉजिक की खामियों का, इसलिए यह कोड रिव्यू और पेनिट्रेशन टेस्टिंग का विकल्प नहीं है, बल्कि उसका पूरक है।

फ़ज़ परीक्षण (फ़ज़िंग) ट्यूटोरियल

फ़ज़ परीक्षण क्या है?

फ़ज़ टेस्टिंग या फ़ज़िंग फ़ज़ टेस्टिंग एक सॉफ़्टवेयर परीक्षण तकनीक है जिसमें कोडिंग त्रुटियों और सुरक्षा खामियों का पता लगाने के लिए सॉफ़्टवेयर सिस्टम में अमान्य या यादृच्छिक डेटा (जिसे फ़ज़ कहा जाता है) डाला जाता है। फ़ज़ टेस्टिंग का उद्देश्य स्वचालित या अर्ध-स्वचालित तकनीकों का उपयोग करके डेटा डालना और सिस्टम क्रैश होने या अंतर्निहित कोड की विफलता जैसी विभिन्न गड़बड़ियों के लिए सिस्टम का परीक्षण करना है।

फ़ज़ टेस्टिंग को मूल रूप से विस्कॉन्सिन-मैडिसन विश्वविद्यालय में बार्टन मिलर द्वारा विकसित किया गया था, जिन्होंने मॉडेम लिंक पर लाइन नॉइज़ के कारण उनके द्वारा उपयोग किए जा रहे प्रोग्राम क्रैश होने के बाद इस शब्द का प्रयोग किया था। उनके छात्रों ने 1989 में पहले फ़ज़र चलाए और पाया कि उनके द्वारा लक्षित लगभग एक तिहाई यूनिक्स यूटिलिटीज़ क्रैश हो गईं या हैंग हो गईं। फ़ज़ टेस्टिंग एक सॉफ्टवेयर परिक्षण तकनीक, और यह एक प्रकार की है सुरक्षा परीक्षण.

नीचे दिया गया आरेख बुनियादी फ़ज़िंग लूप को दर्शाता है, जहाँ उत्पन्न डेटा को परीक्षण के तहत एप्लिकेशन पर भेजा जाता है और प्रतिक्रिया का अवलोकन किया जाता है।

फ़ज़ टेस्टिंग की कार्यप्रणाली: एक फ़ज़र विकृत इनपुट उत्पन्न करता है और उसे परीक्षण के अंतर्गत एप्लिकेशन को भेजता है।

फ़ज़ परीक्षण क्यों करें?

फ़ज़िंग को टेस्ट प्लान में इसलिए जगह मिलती है क्योंकि यह उन इनपुट की पड़ताल करता है जिनके लिए किसी ने टेस्ट केस लिखने के बारे में सोचा भी नहीं था। टीमें इसे अपनाने के मुख्य कारण नीचे दिए गए हैं।

  • फ़ज़ टेस्टिंग आमतौर पर सबसे गंभीर सुरक्षा खामियों और दोषों को उजागर करती है, क्योंकि क्रैश होना एक अनहैंडल्ड इनपुट पाथ का प्रत्यक्ष प्रमाण होता है।
  • फ़ज़ टेस्टिंग का उपयोग करने पर अधिक प्रभावी परिणाम मिलते हैं। काली Box परीक्षण, बीटा परीक्षण, और अन्य डिबगिंग विधियाँ।
  • फ़ज़ टेस्टिंग का उपयोग सॉफ़्टवेयर की सुरक्षा खामियों की जाँच करने के लिए किया जाता है, और यह एक बहुत ही लागत प्रभावी परीक्षण तकनीक है क्योंकि इनपुट हाथ से लिखे जाने के बजाय उत्पन्न किए जाते हैं।
  • फ़ज़ टेस्टिंग ब्लैक बॉक्स टेस्टिंग तकनीकों में से एक है। फ़ज़िंग हैकर्स द्वारा सिस्टम में कमज़ोरी खोजने के लिए इस्तेमाल किए जाने वाले सबसे आम तरीकों में से एक है, इसलिए इसे पहले चलाने से हमलावर के लिए सिस्टम में घुसने का सबसे आसान रास्ता बंद हो जाता है।

फ़ज़ टेस्टिंग के प्रकार

फ़ज़र को आमतौर पर उस प्रोग्राम के बारे में उनकी जानकारी के आधार पर वर्गीकृत किया जाता है जिस पर वे हमला कर रहे हैं। फ़ज़र को जितनी अधिक जानकारी होती है, वह कोड में उतनी ही गहराई तक जा सकता है।

प्रकार फ़ज़र को क्या पता है विशिष्ट उपयोग
ब्लैक बॉक्स फ़ज़िंग आंतरिक प्रक्रियाओं के बारे में कुछ नहीं; यह केवल इनपुट और आउटपुट को ही देखता है। क्विक स्मोक बाइनरी या लाइव एंडपॉइंट के विरुद्ध चलता है।
सफेद बॉक्स फज़िंग संपूर्ण स्रोत कोड, जिसे अक्सर दुर्गम शाखाओं की समस्या को हल करने के लिए प्रतीकात्मक निष्पादन के साथ संयोजित किया जाता है। जिस घटक का स्रोत उपलब्ध है, उसका गहन विश्लेषण।
ग्रे बॉक्स फ़ज़िंग कोई सोर्स रिव्यू नहीं, लेकिन रनटाइम फीडबैक जैसे कि इनपुट किस कोड ब्रांच तक पहुंचा। AFL++ और libFuzzer जैसे आधुनिक इंजनों के लिए डिफ़ॉल्ट मान।

एक दूसरा, पुराना विभाजन अलग करता है डम्ब फ़ज़िंग से स्मार्ट फ़ज़िंगएक साधारण फ़ज़र इनपुट फ़ॉर्मेट की जानकारी के बिना ही डेटा को उलट देता है, इसलिए इसका अधिकांश डेटा पहले पार्सर द्वारा ही अस्वीकार कर दिया जाता है। वहीं, एक कुशल फ़ज़र चेकसम, लंबाई फ़ील्ड और संदेश संरचना को समझता है, इसलिए इसके इनपुट सत्यापन से बच जाते हैं और अंतर्निहित लॉजिक तक पहुँच जाते हैं। कवरेज-निर्देशित फ़ज़िंग यह ग्रे बॉक्स परिशोधन है जिसने फ़ज़िंग को मुख्यधारा में ला दिया: इंजन बाइनरी को इंस्ट्रूमेंट करता है, किसी भी इनपुट को रखता है जो एक नई शाखा तक पहुंचता है, और बचे हुए को म्यूटेट करता है, ताकि कॉर्पस यादृच्छिक शोर से फिर से शुरू होने के बजाय अनछुए कोड की ओर लगातार विकसित हो।

फ़ज़ परीक्षण कैसे करें

फ़ज़ टेस्टिंग के चरणों में बुनियादी परीक्षण चरण शामिल हैं:

चरण 1) लक्ष्य प्रणाली की पहचान करें — उस बाइनरी, लाइब्रेरी, सेवा या प्रोटोकॉल एंडपॉइंट का चयन करें जिस पर हमला किया जाएगा, और पुष्टि करें कि आपको इसका परीक्षण करने की अनुमति है।

चरण 2) इनपुट की पहचान करें — लक्ष्य जिन-जिन स्रोतों से पढ़ता है, उन सभी की सूची बनाएं: फाइलें, कमांड-लाइन तर्क, पर्यावरण चर, नेटवर्क पैकेट, फॉर्म फ़ील्ड और एपीआई पेलोड।

चरण 3) फ़ज़्ड डेटा उत्पन्न करें — मान्य नमूनों में उत्परिवर्तन करके, प्रारूप के मॉडल से उन्हें उत्पन्न करके, या दोनों को मिलाकर विकृत इनपुट उत्पन्न करना।

चरण 4) फ़ज़ी डेटा का उपयोग करके परीक्षण निष्पादित करें — उत्पन्न इनपुट के विरुद्ध लक्ष्य को चलाएँ, आदर्श रूप से एक लूप में जो प्रत्येक विफलता के बाद प्रक्रिया को स्वचालित रूप से पुनः आरंभ करता है।

चरण 5) सिस्टम व्यवहार की निगरानी करें — केवल प्रिंट किए गए आउटपुट की जांच करने के बजाय क्रैश, हैंग, अभिकथन विफलताओं, अनियंत्रित मेमोरी उपयोग और सैनिटाइजर रिपोर्ट पर भी ध्यान दें।

चरण 6) दोषों को लॉग करें — प्रत्येक विफलता को ट्रिगर करने वाले सटीक इनपुट को सहेजें, इसे सबसे छोटे पुनरुत्पादन योग्य मामले में संकुचित करें, और इसे स्टैक के साथ फ़ाइल करें। tracसंलग्न है।

फ़ज़र्स के उदाहरण

फ़ज़र को उनके इनपुट निर्माण के तरीके के आधार पर भी वर्गीकृत किया जाता है, और नीचे दिए गए तीन दृष्टिकोण वे हैं जिनसे आपका सामना अक्सर होगा।

  • उत्परिवर्तन-आधारित फ़ज़र्स मौजूदा डेटा नमूनों को बदलकर नया परीक्षण डेटा तैयार करना। यह एक बहुत ही सरल और सीधा तरीका है: यह प्रोटोकॉल के वैध नमूनों से शुरू होता है और प्रत्येक बाइट या फ़ाइल को परिवर्तित करता रहता है।
  • पीढ़ी-आधारित फ़ज़र्स मॉडल के इनपुट के आधार पर नया डेटा परिभाषित करें। वे विनिर्देश के आधार पर शुरू से इनपुट उत्पन्न करना शुरू करते हैं।
  • प्रोटोकॉल-आधारित फ़ज़र परीक्षण प्रोटोकॉल प्रारूप की विस्तृत जानकारी पर निर्भर करता है, और यह जानकारी विनिर्देश से प्राप्त होती है। इसमें विनिर्देश की एक सरणी को टूल में लिखना शामिल है, फिर मॉडल-आधारित परीक्षण निर्माण तकनीक का उपयोग करके विनिर्देश की समीक्षा करना और डेटा सामग्री, अनुक्रम आदि में अनियमितताएँ जोड़ना शामिल है। इसे सिंटैक्स परीक्षण, व्याकरण परीक्षण या मजबूती परीक्षण के रूप में भी जाना जाता है। एक फ़ज़र मौजूदा परीक्षण मामलों से परीक्षण मामले उत्पन्न कर सकता है, या यह मान्य या अमान्य इनपुट का उपयोग कर सकता है।

प्रोटोकॉल-आधारित फ़ज़िंग की दो सीमाएँ हैं:

  1. जब तक विनिर्देश परिपक्व नहीं हो जाता, परीक्षण आगे नहीं बढ़ सकता।
  2. कई उपयोगी प्रोटोकॉल प्रकाशित प्रोटोकॉल का विस्तार हैं। यदि फ़ज़ परीक्षण प्रकाशित विनिर्देशों पर आधारित है, टेस्ट कवरेज नये प्रोटोकॉल के लिए आवेदन सीमित होंगे।

फ़ज़िंग तकनीक का सबसे सरल रूप सॉफ़्टवेयर को प्रोटोकॉल पैकेट या इवेंट के रूप में रैंडम इनपुट भेजना है। रैंडम इनपुट भेजने की यह तकनीक कई एप्लिकेशन और सेवाओं में बग खोजने के लिए बहुत शक्तिशाली है। अन्य तकनीकें भी उपलब्ध हैं, और उन्हें लागू करना बहुत आसान है। इन तकनीकों को लागू करने के लिए हमें केवल मौजूदा इनपुट को बदलना होता है, और हम इनपुट को उसके बिट्स को आपस में बदलकर आसानी से बदल सकते हैं।

फ़ज़ परीक्षण द्वारा पता लगाए गए बग के प्रकार

क्योंकि फ़ज़िंग किसी अपेक्षित मान के बजाय प्रोग्राम के व्यवहार के आधार पर रन का मूल्यांकन करता है, इसलिए इसके द्वारा उजागर किए गए दोष तीन श्रेणियों में वर्गीकृत होते हैं।

  • अभिकथन विफलताएँ और मेमोरी लीक: इस पद्धति का व्यापक रूप से उन बड़े अनुप्रयोगों में उपयोग किया जाता है जहां बग मेमोरी सुरक्षा को प्रभावित करते हैं, जो एक गंभीर भेद्यता है। Buffer ओवरफ्लो, यूज़-आफ्टर-फ्री और आउट-ऑफ-बाउंड रीड्स सभी यहां दिखाई देते हैं।
  • अमान्य निवेश: फ़ज़ टेस्टिंग में, फ़ज़र का उपयोग अमान्य इनपुट उत्पन्न करने के लिए किया जाता है, जिसका उपयोग त्रुटि-प्रबंधन रूटीन के परीक्षण के लिए किया जाता है, और यह उन सॉफ़्टवेयर के लिए महत्वपूर्ण है जो अपने इनपुट को नियंत्रित नहीं करते हैं। सरल फ़ज़िंग को स्वचालन के एक तरीके के रूप में देखा जा सकता है। नकारात्मक परीक्षण.
  • त्रुटियाँ: फ़ज़िंग का उपयोग कुछ प्रकार की "शुद्धता" संबंधी त्रुटियों, जैसे कि दूषित डेटाबेस या खराब खोज परिणामों का पता लगाने के लिए भी किया जा सकता है। डिफरेंशियल फ़ज़िंग, जिसमें दो कार्यान्वयनों को समान इनपुट दिया जाता है और उत्तरों की तुलना की जाती है, इन त्रुटियों को पकड़ने का सामान्य तरीका है।

फ़ज़ परीक्षण उपकरण

वेब सुरक्षा में उपयोग किए जाने वाले उपकरण, जैसे कि, फ़ज़ टेस्टिंग में व्यापक रूप से उपयोग किए जा सकते हैं। Burp Suite और पीच फ़ज़र। नीचे दिए गए कई क्लासिक नाम अब आर्काइव कर दिए गए हैं, इसलिए प्रत्येक प्रविष्टि के साथ उनकी वर्तमान स्थिति बताई गई है।

  • पीच फ़ज़रपीच फ़ज़र स्कैनर की तुलना में अधिक मज़बूत सुरक्षा प्रदान करता है। अन्य परीक्षण उपकरण केवल ज्ञात खतरों की खोज कर सकते हैं, जबकि पीच फ़ज़र उपयोगकर्ताओं को ज्ञात और अज्ञात दोनों प्रकार के खतरों का पता लगाने में सक्षम बनाता है। पीच टेक को गिटलैब द्वारा अधिग्रहित कर लिया गया था, और कम्युनिटी एडिशन v3 अब अनुरक्षित नहीं है; अनुरक्षित उत्तराधिकारी है... GitLab प्रोटोकॉल फ़ज़र कम्युनिटी एडिशन.
  • स्पाइक प्रॉक्सीSPIKE Proxy एक पेशेवर स्तर का टूल है जो वेब एप्लिकेशन में एप्लिकेशन-स्तर की कमजोरियों की तलाश करता है। SPIKE Proxy बुनियादी बातों को कवर करता है, जैसे कि... एसक्यूएल इंजेक्शन और क्रॉस-साइट स्क्रिप्टिंग, पूरी तरह से खुले वातावरण पर Python बुनियादी ढांचा, और यह उपलब्ध था Linux और Windowsइसका रखरखाव कई वर्षों से नहीं किया गया है और इसे ऐतिहासिक संदर्भ के लिए यहां शामिल किया गया है।
  • वेबस्कारैबवेबस्कारैब इसमें लिखा गया है Java और इसलिए यह कई प्लेटफार्मों पर पोर्टेबल है। WebScarab फ्रेमवर्क HTTP और HTTPS प्रोटोकॉल का उपयोग करके संचार करता है और एक इंटरसेप्टिंग प्रॉक्सी के रूप में कार्य करता है: यह ऑपरेटर को सर्वर द्वारा अनुरोध प्राप्त करने से पहले ब्राउज़र द्वारा बनाए गए अनुरोधों की समीक्षा और संशोधन करने और ब्राउज़र द्वारा प्रतिक्रिया प्राप्त करने से पहले सर्वर द्वारा उत्पन्न प्रतिक्रियाओं की समीक्षा और अद्यतन करने की अनुमति देता है। WebScarab द्वारा पाई गई किसी भी खामी को इसकी रिपोर्ट की गई समस्याओं की सूची में जोड़ दिया जाता है। रिपॉजिटरी को अप्रैल 2024 में आर्काइव कर दिया गया था और अब यह केवल पढ़ने योग्य है।
  • OWASP WSFuzzerWSFuzzer एक GPL-लाइसेंस प्राप्त प्रोग्राम है जिसे लिखा गया है Python जो वेब सेवाओं को लक्षित करता था, और इसके अंतिम संस्करण में HTTP-आधारित था। एसओएपी सेवाएं मुख्य निशाना थे। इसे वेबस्कारैब के हिस्से के रूप में भेजा गया था और उसी के साथ इसे सेवामुक्त कर दिया गया था; OWASP ZAP और इसका फ़ज़र ऐड-ऑन ये अनुशंसित विकल्प हैं।
  • बनाए रखे गए विकल्प: एएफएल++ और लिबफज़र ये नेटिव कोड के लिए मानक कवरेज-गाइडेड इंजन हैं। ओएसएस-Fuzz यह ओपन-सोर्स प्रोजेक्ट्स के लिए इन्हें लगातार और मुफ्त में चलाता है, और बूफज़ इसमें नेटवर्क-प्रोटोकॉल फ़ज़िंग को शामिल किया गया है। Pythonगाइड में एक विस्तृत सूची संकलित की गई है। सुरक्षा परीक्षण उपकरण.

फ़ज़ टेस्टिंग के सर्वोत्तम तरीके

किसी लक्ष्य पर केंद्रित करके छोड़ दिया गया फ़ज़र शायद ही कभी कुछ खास खोज पाता है। नीचे दिए गए तरीके उन अभियानों को अलग करते हैं जो दर्ज दोष उत्पन्न करते हैं और जो केवल सीपीयू समय बर्बाद करते हैं।

  • अच्छे प्रारंभिक कोष से शुरुआत करें। एप्लिकेशन द्वारा पहले से स्वीकार किए जाने वाले वास्तविक, वैध इनपुट एकत्र करें। किसी वास्तविक फ़ाइल में बदलाव करने से रैंडम बाइट्स में बदलाव करने की तुलना में पार्सिंग कोड तक बहुत तेज़ी से पहुँचा जा सकता है।
  • एक छोटा, तेज़ हार्नेस लिखें। एंट्री पॉइंट को प्रति रन केवल एक ही काम करना चाहिए, नेटवर्क कॉल और डिस्क राइट्स से बचना चाहिए और जल्दी से परिणाम देना चाहिए, क्योंकि थ्रूपुट को प्रति सेकंड निष्पादन में मापा जाता है।
  • सैनिटाइजर चालू करें। मेमोरी में होने वाली अप्रत्यक्ष खराबी अक्सर क्रैश का कारण नहीं बनती। AddressSanitizer और UndefinedBehaviorSanitizer इसे तुरंत एक निदान योग्य विफलता में बदल देते हैं।
  • लंबी दौड़ लगाओ, और लगातार दौड़ते रहो। एक या दो घंटे के रन से सतही बग्स का पता चल जाता है; गहरी खामियों का पता लगाने में आमतौर पर कई घंटे लगते हैं, यही कारण है कि फ़ज़िंग को मैन्युअल सेशन के बजाय नाइटली सीआई जॉब में शामिल किया जाना चाहिए।
  • प्रत्येक क्रैश को कम करें और उसकी पुनरावृत्ति को दूर करें। विफल इनपुट को उसके सबसे छोटे रूप में संकुचित करें और स्टैक के अनुसार क्रैश को समूहित करें। tracअन्यथा, एक बग सैकड़ों टिकटों के रूप में सामने आ जाता है।
  • एक रिग्रेशन कॉर्पस रखें। प्रत्येक पुनरुत्पादित इनपुट को एक स्थायी सेट में जोड़ें जो प्रत्येक बिल्ड पर चलता है, ताकि ठीक किया गया दोष चुपचाप वापस न आ सके।
  • कानूनी तौर पर लक्ष्य का दायरा निर्धारित करें। लिखित अनुमति के बिना किसी लाइव थर्ड-पार्टी सेवा को फ़ज़ करना एक हमले से अलग नहीं है।

फ़ज़ परीक्षण के लाभ

व्यावहारिक अपेक्षाओं के साथ उपयोग किए जाने पर, फ़ज़िंग ऐसा मूल्य जोड़ता है जिसकी बराबरी करने में अन्य तकनीकें संघर्ष करती हैं।

  • फज़ टेस्टिंग से सॉफ्टवेयर सुरक्षा परीक्षण में सुधार होता है।
  • फ़ज़िंग में पाए जाने वाले बग कभी-कभी गंभीर होते हैं और अक्सर वही होते हैं जिनका उपयोग हमलावर करते हैं, जिनमें क्रैश, मेमोरी लीक और अनहैंडल्ड एक्सेप्शन शामिल हैं।
  • यदि समय और संसाधनों की कमी के कारण परीक्षकों द्वारा किसी बग को नोटिस नहीं किया जा सकता है, तो उन बगों को भी फ़ज़ टेस्टिंग में खोजा जाता है।
  • इनपुट एक मशीन द्वारा उत्पन्न किए जाते हैं, इसलिए अतिरिक्त मैन्युअल प्रयास के बिना कवरेज रातोंरात बढ़ता रहता है।

फ़ज़ परीक्षण के नुकसान

जिन गुणों के कारण फ़ज़िंग सस्ता होता है, वही गुण इसकी क्षमताओं को भी सीमित करते हैं।

  • फ़ज़ टेस्टिंग अकेले किसी समग्र सुरक्षा खतरे या बग के समूह की पूरी तस्वीर प्रदान नहीं कर सकती है।
  • कुछ वायरस, वर्म्स और ट्रोजन जैसे सुरक्षा खतरों से निपटने में फज टेस्टिंग कम प्रभावी होती है, क्योंकि ये खतरे प्रोग्राम क्रैश का कारण नहीं बनते हैं।
  • फ़ज़ टेस्टिंग केवल अपेक्षाकृत सरल दोषों या खतरों का पता लगा सकती है, और यह व्यावसायिक तर्क के बारे में तर्क नहीं करेगी।
  • प्रभावी ढंग से कार्य करने के लिए, इसमें मशीन का काफी समय लगता है।
  • यादृच्छिक इनपुट के साथ सीमा मान शर्त निर्धारित करना बहुत समस्याग्रस्त है, हालांकि परीक्षक अब उपयोगकर्ता इनपुट द्वारा संचालित नियतात्मक एल्गोरिदम के साथ इस समस्या का काफी हद तक समाधान कर लेते हैं।

फ़ज़ टेस्टिंग बनाम पेनिट्रेशन टेस्टिंग

दोनों ही गतिविधियां सुरक्षा खामियों की तलाश करती हैं, फिर भी वे अलग-अलग सवालों के जवाब देती हैं और शायद ही कभी एक दूसरे के स्थान पर उपयोग की जा सकती हैं।

मापदंड फ़ज़ परीक्षण भेदन परीक्षण
द्वारा संचालित एक स्वचालित इंजन जो विकृत इनपुट उत्पन्न करता है एक कुशल परीक्षक प्रणाली के बारे में तर्क करता है।
के लिए देख रहा हुँ क्रैश, हैंग और मेमोरी-सुरक्षा संबंधी त्रुटियाँ तार्किक और विन्यास संबंधी खामियों सहित, जिनका फायदा उठाया जा सकता है।
गहराई बहुत व्यापक इनपुट कवरेज, सतही तर्क सीमित दायरा, गहन तर्क
उत्पादन इनपुट और स्टैक को पुन: उत्पन्न करना traces शोषण के रास्तों और जोखिम रेटिंग के साथ एक निष्कर्ष रिपोर्ट
सबसे अच्छा पल बिल्ड पाइपलाइन में लगातार समय-समय पर, रिहाई के उम्मीदवार के विरुद्ध

व्यवहार में ये दोनों एक दूसरे के पूरक हैं: फ़ज़िंग सस्ते, स्वचालित रूप से होने वाले क्रैश को दूर करता है ताकि परीक्षक के सीमित घंटे उन खामियों को दूर करने में लग सकें जिन्हें केवल एक इंसान ही पहचान सकता है।

अक्सर पूछे जाने वाले प्रश्न

सीड कॉर्पस वैध इनपुट का प्रारंभिक सेट होता है जिसे फ़ज़र परिवर्तित करता है। छोटी, विविध और वास्तविक फ़ाइलें सबसे उपयुक्त होती हैं, क्योंकि प्रत्येक फ़ाइल पहले से ही पार्सर से पास हो जाती है और इंजन को पहली वैधता जाँच के बजाय गहरे कोड पर अपना बजट खर्च करने देती है।

फ़ज़ हार्नेस एक छोटा फ़ंक्शन है जो परीक्षण किए जा रहे कोड को फ़ज़्ड बाइट्स का एक बफ़र प्रदान करता है। इसे वैश्विक स्थिति, फ़ाइल लेखन और नेटवर्क कॉल से बचना चाहिए, ताकि इंजन इसे प्रति सेकंड हजारों बार चला सके।

एक या दो घंटे में मामूली बग्स का पता चल जाता है। गंभीर अभियान कई घंटों या दिनों तक चलते हैं, क्योंकि नया कवरेज रुक-रुक कर आता है। कवरेज कर्व में ठहराव आना, न कि घड़ी की रीडिंग, यह स्पष्ट संकेत है कि अभियान अब कारगर नहीं रहा।

AddressSanitizer बफर ओवरफ्लो और यूज़-आफ्टर-फ्री त्रुटियों को पकड़ता है, UndefinedBehaviorSanitizer पूर्णांक और पॉइंटर के दुरुपयोग को पकड़ता है, और MemorySanitizer अपरिभाषित मेमोरी से डेटा रीड को पकड़ता है। इनके बिना कई त्रुटियाँ चुपचाप छुप जाती हैं और फ़ज़र किसी भी विफलता की रिपोर्ट नहीं करता है।

इसे पुन: उत्पन्न करें, इनपुट को सबसे छोटे विफल मामले तक कम करें, और इसे समान स्टैक साझा करने वाले क्रैश के साथ समूहित करें। tracफिर, सामान्य तरीके से एक टिकट दर्ज करें। दोष प्रबंधन प्रक्रिया और इनपुट को रिग्रेशन कॉर्पस में जोड़ें।

उनमें यादृच्छिकता तो समान है, लेकिन उद्देश्य नहीं। बंदरों पर परीक्षण फ़ज़िंग किसी चल रहे इंटरफ़ेस पर मनमानी उपयोगकर्ता क्रियाएँ डालता है, जबकि फ़ज़िंग एक विशिष्ट इनपुट पार्सर को लक्षित करता है और कोड कवरेज को मापता है, ताकि यह उस कोड की ओर निर्देशित हो सके जहाँ पहले के इनपुट कभी नहीं पहुँचे थे।

भाषा मॉडल का उपयोग अनफज़्ड एपीआई के लिए हार्नेस तैयार करने, विशिष्ट प्रारूपों के लिए सीड इनपुट को संश्लेषित करने और क्रैश रिपोर्टों को क्लस्टर और सारांशित करने के लिए किया जा रहा है। इंजन अभी भी कवरेज फीडबैक प्रदान करता है; मॉडल मुख्य रूप से मैन्युअल सेटअप कार्य को हटा देता है।

गिटहब कोपिलॉट मौजूदा एपीआई हस्ताक्षर से लिबफजर एंट्री पॉइंट, बिल्ड फाइल और सीड जनरेटर का मसौदा तैयार किया जा सकता है। Revपरिणाम को ध्यानपूर्वक देखें, क्योंकि त्रुटियों को चुपचाप दबाने वाला हार्नेस किसी भी दुर्घटना की रिपोर्ट नहीं करेगा।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: