
उपयोगकर्ता-स्तर TCP/IP स्टैक के उपयोग के कारण तेज़ और अधिक कुशल स्टेटलेस SYN स्कैनर और बैनर ग्रैबर।
सारांश
polarbearscan तेज़ और अधिक कुशल बैनर ग्रैबिंग और पोर्ट स्कैनिंग करने का एक प्रयास है। यह दो अलग-अलग विचारों को जोड़ता है जो उम्मीद है कि इसे आपके ध्यान और समय के योग्य बनाएंगे।
इन विचारों में से पहला है स्टेटलेस SYN स्कैनिंग का उपयोग करना जिसमें क्रिप्टोग्राफिक रूप से संरक्षित कुकीज़ का उपयोग करके आने वाले स्वीकार-पत्रों (acknowledgements) को पार्स किया जाता है। लेखक की जानकारी के अनुसार, इस तकनीक का बीड़ा डैन कामिंस्की (Dan Kaminsky) ने scanrand में उठाया था। Scanrand स्वयं Paketto Keiretsu का हिस्सा था, जो स्कैनिंग उपयोगिताओं का एक संग्रह है, और यह लगभग 2001-2002 में जारी किया गया था। इस कोड का एक दर्पण (mirror) Packet Storm [1] पर पाया जा सकता है।
दूसरा विचार एक पैच किए गए यूज़रलैंड TCP/IP स्टैक का उपयोग करना है ताकि स्कैनर SYN और ACK दोनों फ़्लैग सेट के साथ एक क्रिप्टोग्राफिक रूप से सत्यापित पैकेट प्राप्त करने पर तुरंत अवस्था (state) को बहाल कर सके। polarbearscan द्वारा यहाँ उपयोग किया जा रहा यूज़रलैंड स्टैक libuinet [2] कहलाता है। बाज़ार में उपलब्ध कुछ अन्य यूज़रलैंड TCP/IP स्टैकों के विपरीत, यह बहुत परिपक्व है क्योंकि यह FreeBSD के TCP/IP स्टैक का एक साधारण पोर्ट है।
libuinet स्टैक को पैच करके, कोई एक सॉकेट बना सकता है और एक उचित ACK के साथ उत्तर देकर मानक TCP 3-वे हैंडशेक को पूरा कर सकता है। इस तरह से करने पर एक पूरी तरह कार्यात्मक TCP कनेक्शन तुरंत स्थापित हो जाता है। यह अन्य स्कैनर्स (जैसे nmap) के विपरीत है, जिन्हें यह नोट करने के बाद कि एक TCP पोर्ट खुला है, अब बैनर ग्रैबिंग या वर्ज़न स्कैनिंग जैसे कार्यों के लिए कर्नेल के माध्यम से एक पूर्ण TCP कनेक्ट करना होगा। एक पूर्ण TCP कनेक्ट एक पूरी तरह से नए TCP 3-वे हैंडशेक को निष्पादित करने की ओर ले जाता है। यह उस निहित अवस्था (implicit state) को पूरी तरह से त्याग देता है जो होस्टों के बीच प्रारंभिक दो पैकेटों के आदान-प्रदान से निर्मित हुई थी। इससे बचकर, बैंडविड्थ उपयोग को कम किया जा सकता है और पोर्ट के खुले होने का पता लगाने से सीधे उससे कनेक्ट करने की ओर बढ़ा जा सकता है। यह कनेक्शन फिर बैनर ग्रैब मोड में डेटा प्राप्त करने के लिए बस इंतज़ार कर सकता है या HTTP अनुरोध भेज सकता है।
कृपया ध्यान दें कि स्कैनर वर्तमान में केवल IPv4 आधारित स्कैनिंग का समर्थन करता है और यह केवल ईथरनेट-प्रकार (वायर्ड या वायरलेस) इंटरफ़ेस पर ठीक से काम करेगा। निकट भविष्य में IPv6 या विभिन्न इंटरफ़ेस का समर्थन करने की कोई योजना नहीं है।
स्थापना
कोड संकलन काफी सीधा है। बस एक कार्यशील इंटरनेट कनेक्शन की आवश्यकता है और git स्थापित होना चाहिए ताकि आवश्यक निर्भरताएँ डाउनलोड की जा सकें। इसके अलावा, मानक विकास उपयोगिताओं (gcc, make, patch), पुस्तकालयों के विकास संस्करण (pthread, pcap, OpenSSL) की आवश्यकता है। डेबियन-आधारित वितरणों पर, DEPENDENCIES फ़ाइल में सूचीबद्ध सभी पैकेजों को आसानी से स्थापित किया जा सकता है। उसके बाद, केवल 'make' टाइप करने पर बाहरी निर्भरताएँ git का उपयोग करके चेक आउट हो जाएँगी और पूरा स्कैनर बन जाएगा। इस बाइनरी को फिर /usr/bin या /usr/local/bin या इसी तरह कॉपी किया जा सकता है।
यदि संकलन विफल हो जाता है, तो कृपया लेखक को ईमेल करें (नीचे संपर्क विवरण) और त्रुटि आउटपुट, कर्नेल संस्करण, libc संस्करण और कोई भी अन्य चीज़ शामिल करें जो समस्या को पुन: उत्पन्न करने और ठीक करने में मदद कर सके। आपकी मदद की सराहना की जाती है।
उपयोग
उपकरण चलाना काफी सीधा होना चाहिए। आपको रूट विशेषाधिकारों की आवश्यकता होगी। -h विकल्प संक्षिप्त उपयोग जानकारी और विकल्पों की व्याख्या दर्शाता है। अधिकांश मामलों में, किसी को स्कैन के प्रकार, स्कैन करने के लिए पोर्ट सूची और लक्ष्य IP या IP-श्रेणियों को निर्दिष्ट करने से अधिक की आवश्यकता नहीं होती है। IP श्रेणियों के लिए CIDR-नोटेशन समर्थित है।
चार अलग-अलग स्कैन प्रकार हैं जिन्हें -s के साथ निर्दिष्ट किया जाता है।
-sB: यह एक मानक बैनर ग्रैब करता है। स्कैनर कोई डेटा नहीं भेजेगा; यह बस इंतज़ार करेगा और डेटा प्राप्त करेगा और इसे पहली न्यूलाइन या कैरिज रिटर्न प्राप्त होने तक प्रदर्शित करेगा।
-sH: यह मोड प्रत्येक सफलतापूर्वक स्थापित कनेक्शन पर "GET / HTTP/1.1" अनुरोध भेजता है। HTTP सर्वरों की त्वरित पहचान के लिए यह बहुत उपयोगी है।
-sT: TLS स्कैनिंग मोड शून्य विकल्पों और शून्य एल्गोरिदम निर्दिष्ट करते हुए TLS1.0 NULL प्रोब भेजता है। हालाँकि, यदि प्राप्त करने वाले छोर पर कोई वैध TLS सर्वर है, तो यह पार्स करेगा और यह पता लगाने का प्रयास करेगा कि क्या यह एक वैध TLS त्रुटि प्रतिक्रिया है, जिसे प्रदर्शित किया जाएगा।
-sC: कस्टम स्कैनिंग जो एक फ़ाइल से पेलोड लोड करेगी (-d के साथ निर्दिष्ट) और इस पेलोड को प्रत्येक सफलतापूर्वक स्थापित सॉकेट पर भेजेगी। बहुत विशिष्ट प्रोटोकॉल की त्वरित जाँच के लिए उपयोगी हो सकता है।
-p: स्कैन करने के लिए TCP पोर्टों की सूची, जो पोर्टों की एक श्रेणी या एकल पोर्ट हो सकती है, जिसमें श्रेणियाँ और एकल पोर्ट अल्पविराम से अलग किए गए हों। कुछ उदाहरण: -p22,80,8080-9000,143 पोर्ट 22,80,143 और 8080 से 9000 की श्रेणी को स्कैन करेगा।
-b : आउटगोइंग प्रोब के लिए बैंडविड्थ सीमा लागू करने के लिए। यह सॉकेट पर भेजे और प्राप्त डेटा पर लागू नहीं होता है, केवल वास्तविक SYN प्रोब पर लागू होता है। उदाहरण: -b300k, -b67m, -b500b क्रमशः 300kbps, 76mbps और 500bps की बैंडविड्थ सीमाएँ प्राप्त करेंगे।
-d : कस्टम स्कैन के लिए उपयोग किए गए पेलोड वाली फ़ाइल का नाम। पूरी फ़ाइल अधिकतम 128kB तक भेजी जाएगी, जो अधिकांश उद्देश्यों के लिए पर्याप्त से अधिक होनी चाहिए।
-t: यह उन सेकंडों की संख्या निर्दिष्ट करता है जो स्कैनर सभी प्रोब भेजने के बाद उन सॉकेटों पर डेटा प्राप्त करने की प्रतीक्षा करेगा जो अभी भी जुड़े हुए हैं। यह मानते हुए कि कोई हैं, अन्यथा यह काम खत्म होने पर तुरंत बाहर निकल जाएगा।
-x: यह उपकरण को हमेशा प्राप्त आउटपुट को हेक्साडेसिमल नोटेशन में डंप करने के लिए मजबूर करता है। अन्यथा यह केवल डेटा को हेक्साडेसिमल नोटेशन में डंप करेगा यदि गैर-मुद्रण योग्य वर्ण पाए जाते हैं।
-v: यह कुछ वर्बोज़ आउटपुट निर्दिष्ट करता है। यह अधिकतर डिबगिंग के लिए ही उपयोगी है।
-i : स्रोत IP चुनने और pcap बैकएंड सेट करने के लिए उपयोग करने वाला इंटरफ़ेस। यह मानक मशीनों पर आवश्यक नहीं होना चाहिए जिनमें केवल एक ठीक से कॉन्फ़िगर किया गया NIC हो, लेकिन कई NIC वाली मशीनों पर इसकी आवश्यकता हो सकती है।
-r : RNG के लिए उपयोग किया जाने वाला यादृच्छिक बीज। अधिकतर डिबगिंग और यह सुनिश्चित करने के लिए उपयोगी है कि उपकरण पैकेटों का ठीक वही क्रम उत्पन्न करे। तर्क एक पूर्णांक है और इसे हेक्साडेसिमल और दशमलव नोटेशन में निर्दिष्ट किया जा सकता है।
-T : SYN प्रोब में उपयोग करने के लिए डिफ़ॉल्ट IP TTL मान को ओवरराइड करता है। किसी भी चीज़ के लिए वास्तव में आवश्यक नहीं है, लेकिन पूर्णता के लिए शामिल किया गया है।
-W : SYN प्रोब में उपयोग करने के लिए डिफ़ॉल्ट TCP विंडो आकार मान को ओवरराइड करता है। किसी भी चीज़ के लिए वास्तव में आवश्यक नहीं है, लेकिन पूर्णता के लिए शामिल किया गया है।
-I : SYN प्रोब में उपयोग करने के लिए डिफ़ॉल्ट IP ID मान को ओवरराइड करता है। किसी भी चीज़ के लिए वास्तव में आवश्यक नहीं है, लेकिन पूर्णता के लिए शामिल किया गया है।
-n: यह विकल्प केवल तभी उपयोग किया जाना चाहिए यदि आप जानते हैं कि आप क्या कर रहे हैं। यह सुनिश्चित करेगा कि उपकरण सभी आउटगोइंग RST पैकेटों को हटाने के लिए फ़ायरवॉल नियम सेट नहीं करता है। यदि इसका उपयोग किया जाता है, तो स्कैनर फोर्क नहीं करेगा और आपकी जिम्मेदारी है कि इस नियम को स्वयं सेट करें, अन्यथा कर्नेल प्रत्येक प्राप्त SYNACK पैकेट के लिए वापस RST पैकेट भेजेगा। यह उपकरण को बस काम नहीं करने देगा। Linux पर सेट किया जा रहा नियम निम्नलिखित है:
$ /sbin/iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
-o: यह विकल्प I/O रीडायरेक्शन नहीं करता है, इसलिए uinet आंतरिक भागों का अधिक आउटपुट दिखाई देगा। इसे केवल पूर्णता या डिबगिंग परिदृश्यों के लिए जोड़ा गया है, क्योंकि यह अन्यथा बहुत उपयोगी नहीं है।
-h: उपयोग जानकारी।
उपकरण का उपयोग करने के कुछ उदाहरण। /24 श्रेणी पर पोर्ट 22 का बैनर ग्रैब करने के लिए इस प्रकार उपयोग करें:
./pbscan -sB -p22 x.x.x.x/24
एकल IP पर कई सामान्य HTTP पोर्टों पर HTTP स्कैन करने के लिए हेक्साडेसिमल मोड में आउटपुट के साथ उपयोग करें:
./pbscan -sH -x -p80,8080-9000 x.x.x.x
स्कैनिंग के दौरान, जब आप मानक इनपुट पर एक कुंजी दबाते हैं, तो कुछ आँकड़े मुद्रित होते हैं, जैसे पहचाने गए खुले पोर्टों की संख्या, प्राप्त वैध TCP ACK की संख्या, वर्तमान में सक्रिय कनेक्शनों की संख्या, और कुल कितने SYN प्रोब पहले ही भेजे जा चुके हैं। यह कुछ इस तरह दिखेगा:
sent: 1.97% (of 254), open: 0, active: 2, acks: 2
लेखक
यह उपकरण विंसेंट बर्ग (Vincent Berg) द्वारा लिखा गया था। मुझसे ईमेल [email protected] द्वारा संपर्क करें या इस स्कैनर के अपडेट/समाचार के लिए मेरी वेबसाइट http://santarago.org पर जाएँ।
धन्यवाद
इस ठंडे उपकरण के परीक्षण, पोर्टिंग और बग रिपोर्ट करने में मदद करने वाले कई लोगों की बहुत सराहना। एहाब, जोसेफ, अलेजांद्रो, जूलियन और डिएगो को धन्यवाद।
संदर्भ
[1] http://packetstormsecurity.com/files/30489/paketto-1.10.tar.gz.html