
एक Linux पैकेट निर्माण उपकरण।
Pig (जिसे Packet intruder generator के रूप में समझा जा सकता है) एक Linux पैकेट निर्माण उपकरण है।
आप Pig का उपयोग अपने IDS/IPS आदि के परीक्षण के लिए कर सकते हैं।
Pig उपयोग के लिए तैयार कई सुप्रसिद्ध आक्रमण हस्ताक्षर लाता है और आप अपनी आवश्यकताओं के अनुसार अधिक विशिष्ट चीज़ों से इस संग्रह का विस्तार कर सकते हैं।
अब तक TCP, UDP और ICMP पर आधारित ट्रांसपोर्ट लेयर के साथ IPv4 हस्ताक्षर बनाना संभव है। आप ARP प्रोटोकॉल पर आधारित हस्ताक्षर भी बना सकते हैं, साथ ही इसके Ethernet फ्रेम से पैकेट का निर्माण भी कर सकते हैं।
यदि आप यहाँ मेरे 2600 लेख के SPRING 2016 अंक से पहुँचे हैं, तो कृपया निम्नलिखित दस्तावेज़ीकरण अनुभाग पढ़ते रहें क्योंकि यह छोटा Pig तब से विकसित हो रहा है।
यह काफी सरल है:
[email protected]:~/src# git clone https://github.com/rafael-santiago/pig pig
[email protected]:~/src# cd pig
[email protected]:~/src/pig# git submodule update --init
pig बनाने के लिए आपको Hefesto का उपयोग करना होगा। Hefesto को अपने सिस्टम पर काम करने के लिए चरणों का पालन करने के बाद, pig उप-निर्देशिका src पर जाएँ और निम्नलिखित कमांड चलाएँ:
[email protected]:~/src/pig/src# hefesto
इस कमांड के बाद आपको src/bin पथ के अंतर्गत pig बाइनरी मिलनी चाहिए। आप बाइनरी का उपयोग src/bin से सापेक्ष रूप से कर सकते हैं या इसे स्थापित करें।
यदि किसी कारण से आपको निर्माण में समस्या हो रही है, तो आपको BUILD.md में मौजूद कुछ टिप्पणियाँ पढ़नी चाहिए।
स्थापित करने के लिए आपको src उप-निर्देशिका के अंदर होना होगा और यह कॉल करें:
[email protected]:~/src/pig/src# hefesto --install
अनइंस्टॉल करने के लिए, src उप-निर्देशिका के अंदर होने पर आपको यह कॉल करनी चाहिए:
[email protected]:~/src/pig/src# hefesto --uninstall
Pigsty फ़ाइलें सादा पाठ फ़ाइलें हैं जहाँ आप पैकेट हस्ताक्षरों का एक सेट परिभाषित कर सकते हैं। इसके लिए एक विशिष्ट सिंटैक्स का पालन करना होता है। एक pigsty फ़ाइल का उदाहरण देखें:
[ signature = "Hello",
ip.version = 4,
ip.ihl = 5,
ip.tos = 0,
ip.src = 192.30.70.10,
ip.dst = 192.30.70.3,
ip.protocol = 17,
udp.dst = 1008,
udp.src = 32000,
udp.payload = "Hello!!" ]
मूल रूप से, सभी हस्ताक्षर डेटा वर्गाकार कोष्ठकों के बीच होना चाहिए: [ ... ]।
इस क्षेत्र के अंदर जानकारी का टुकड़ा योजना field = data द्वारा प्रदान किया जाता है।
यदि आपको कंप्यूटर नेटवर्क का कुछ अनुभव है, तो निश्चित है कि तालिका 1 में सूचीबद्ध अधिकांश फ़ील्ड आपके लिए सार्थक हैं। आपको अपने आगामी हस्ताक्षर बनाने के लिए इन फ़ील्ड का उपयोग करना होगा।
तालिका 1: pig हस्ताक्षर फ़ील्ड।
हस्ताक्षर बनाते समय आपको सभी डेटा निर्दिष्ट करने की आवश्यकता नहीं है। यदि आप केवल सबसे प्रासंगिक पैकेट भागों को निर्दिष्ट करते हैं, तो शेष भाग डिफ़ॉल्ट मानों से भर दिए जाएंगे। checksums हमेशा पुनर्गणना की जाती हैं।
सुझाव: उप-निर्देशिका pigsty पर एक नज़र डालें। आपको कई हस्ताक्षर फ़ाइलें मिलेंगी और आप देखेंगे कि नए को परिभाषित करना काफी सरल है।
हाँ, यह संभव है। इस सुविधा का उपयोग करने के लिए आपको बस ip adddress प्रकार के फ़ील्ड में तालिका 2 पर सूचीबद्ध मान निर्दिष्ट करने होंगे।
तालिका 2: भौगोलिक क्षेत्र के अनुसार IPs.
| उपयोग करने का मान |
|---|
आपको किसी भी ip address प्रकार के फ़ील्ड में मान के रूप में user-defined-ip का उपयोग करना चाहिए। ध्यान दें कि इस मामले में आपको कमांड लाइन विकल्प --targets का उपयोग करने की आवश्यकता है। अधिक जानकारी के लिए अनुभाग Pig का उपयोग देखें।
यदि आप pigsty फ़ाइलें बनाते हैं जो आपके अपने वातावरण से परे प्रासंगिक हों, तो इन उपयोगी फ़ाइलों को यहाँ शामिल करने के लिए एक पुल अनुरोध खोलें। अग्रिम धन्यवाद!
Pig का उपयोग बहुत सीधा है, इसमें चार बुनियादी विकल्प प्रदान करना आवश्यक है जो हैं:
--signatures--gateway--net-mask--lo-ifaceक्या आप प्रत्येक विकल्प के बारे में अधिक जानना चाहते हैं, हुह?... तो चलिए:
--signatures को pigsty फ़ाइलों के फ़ाइल पथों की एक सूची मिलती है।--gateway वह है जहाँ आप अपना गेटवे पता निर्दिष्ट करते हैं। ध्यान रखें कि pig ethernet फ्रेम भी उत्पन्न करता है या कम से कम उत्पन्न करने का प्रयास करता है। इसके कारण layer-1 डेटा को सही ढंग से बनाने के लिए गेटवे पता काफी महत्वपूर्ण है।--net-mask को आपका नेटवर्क मास्क प्राप्त करना होगा।--lo-iface वह स्थान है जहाँ आपको स्थानीय नेटवर्क इंटरफ़ेस का नाम बताना चाहिए जिसका उपयोग आप उत्पन्न पैकेटों को "बाहर निकालने" के लिए करेंगे।--no-gateway इंगित करता है कि कोई भी पैकेट नेटवर्क के बाहर नहीं भेजा जाएगा।मान लीजिए कि हम DDos आधारित ट्रैफ़िक उत्पन्न करना चाहते हैं:
[email protected]:~# pig --signatures=pigsty/ddos.pigsty\
> --gateway=10.0.2.2\
> --net-mask=255.255.255.0 --lo-iface=eth0
अब हम सब कुछ गड़बड़ करना चाहते हैं:
[email protected]:~# pig --signatures=pigsty/ddos.pigsty,pigsty/attackresponses.pigsty,\
> pigsty/badtraffic.pigsty,pigsty/backdoors.pigsty\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0
इसके लिए विकल्प --timeout=<मिलीसेकंड> का उपयोग करें
--no-echo विकल्प का उपयोग करें।
--targets विकल्प का उपयोग करें। आप सटीक IP, IP मास्क और CIDRs पर आधारित एक सूची निर्दिष्ट कर सकते हैं।
यह देखें:
[email protected]:~# pig --signatures=pigsty/local-mess.pigsty\
> --targets=192.30.70.3,192.30.70.*,192.30.70.0/9\
> --gateway=10.0.2.2\
> --net-mask=255.255.255.0\
> --lo-iface=eth0
यह उपयोगी है जब लोड किए गए हस्ताक्षर वर्तमान नेटवर्क के बाहर डेटा नहीं भेजेंगे। इसे चिह्नित करने के लिए आपको --no-gateway विकल्प का उपयोग करना होगा। जब --no-gateway विकल्प का उपयोग किया जाता है, तो आपको गेटवे का पता निर्दिष्ट करने की आवश्यकता नहीं है क्योंकि पैकेट वर्तमान खंड के बाहर प्रवाहित नहीं होंगे। परिणामस्वरूप नेटवर्क मास्क को सूचित करना भी अप्रासंगिक हो जाता है।
उदाहरण के लिए:
[email protected]:~# pig --signatures=pigsty/local_traffic.pigsty --no-gateway --lo-iface=eth2
उपरोक्त नमूने में ईथरनेट फ्रेम अब pig की जिम्मेदारी नहीं होगी। इस कारण pig --gateway और --net-mask विकल्प की कमी के बारे में शिकायत नहीं करेगा।
--no-gateway विकल्प उन मामलों में काफी उपयोगी है जहाँ आपको ARP ट्रैफ़िक उत्पन्न करने की आवश्यकता होती है। ARP spoofing with pig के बारे में बताने वाले इस अन्य दस्तावेज़ पर एक नज़र डालें।
हो सकता है कि आपको केवल एक हस्ताक्षर भेजने की आवश्यकता हो और फिर यह जाँचने के लिए कि बाद में क्या हुआ, कॉलर पर वापस लौटें। इस प्रकार की आवश्यकता तब सामान्य होती है जब आप इस एप्लिकेशन का उपयोग system tests या unit tests के समर्थन के रूप में करते हैं। तो, यदि आपको ऐसा करने की आवश्यकता है, तो आपको --single-test विकल्प का उपयोग करने का प्रयास करना चाहिए:
[email protected]:~# pig --signature=pigsty/syn-scan.pigsty --targets=127.0.0.1 --single-test\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0
इस कमांड को चलाने के बाद pig फ़ाइल syn-scan.pigsty से केवल एक हस्ताक्षर चुनेगा और उसे भेजने का प्रयास करेगा और फिर बाहर निकल जाएगा। यदि प्रक्रिया के दौरान कोई त्रुटि हुई है, तो pig exit-code 1 के बराबर के साथ बाहर निकलेगा, अन्यथा pig exit-code 0 के बराबर के साथ बाहर निकलेगा।
pig's का मूल संचालन मोड एक अंतहीन लूप के बारे में है जो एक पूर्वनिर्धारित टाइमआउट का सम्मान करते हुए नेटवर्क में टनों पैकेट उगलता है।
आप --loop=<mode> विकल्प का उपयोग करके परिभाषित कर सकते हैं कि pig भेजने के लिए लोड किए गए पैकेटों को कैसे ट्रैवर्स करता है। अब तक दो मोड हैं: random (डिफ़ॉल्ट) और sequential।
sequential मोड हस्ताक्षरों को पुनरावृत्त करेगा जब वह लोड किए गए पैकेट हस्ताक्षर सूची के अंत तक पहुँचता है।
उप-कार्य पैकेट क्राफ्टिंग से संबंधित उपयोगी छोटे कार्य हैं जो आपके क्राफ्टिंग सत्र में आपकी सहायता के लिए pig में शामिल हैं। इन कार्यों को --sub-task=<task-name> विकल्प का उपयोग करके एक्सेस किया जा सकता है।
व्यावहारिक रूप से उप-प्रोग्राम होने के कारण, उप-कार्यों की अपनी विशेषताएँ होती हैं और इसके कारण उनके बारे में विवरण उनके अपने मैनुअल में दिए गए हैं। इसका अनुसरण करने के लिए तालिका 3 देखें।
तालिका 3: pig उप-कार्य।
अब तक आप IPv4 पर आधारित पैकेट बना सकते हैं जिनमें ट्रांसपोर्ट लेयर में UDP या TCP हो। आप ARP पैकेट भी बना सकते हैं।
हालाँकि, आप Ethernet फ्रेम से शुरू करके भी पैकेट बना सकते हैं। इसके बारे में अच्छी बात यह है कि Ethernet's पेलोड के ऊपर वस्तुतः कुछ भी बनाने की संभावना है।
उदाहरण के लिए, भले ही pig अब तक, पके हुए IPv6 निर्माण के लिए समर्थन प्रदान नहीं करता है, आप इसे कच्चे Ethernet आधारित pigsty का उपयोग करके बना सकते हैं। देखें:
[ eth.hwdst = "5C:AC:4C:AA:F5:B5",
eth.hwsrc = "08:95:2A:AD:D6:4F",
eth.type = 0x86DD,
eth.payload = "\x60\x00\x00\x00\x00\x20\x3a\xff\xfe\x80\x00\x00\x00\x00\x00\x00\x0a\x95\x2a\xff\xfe\xad\xd6\x4f\xfe\x80\x00\x00\x00\x00\x00\x00\x55\x51\x00\xc2\x18\x0f\xdb\x46\x88\x00\x32\x01\xe0\x00\x00\x00\xfe\x80\x00\x00\x00\x00\x00\x00\x0a\x95\x2a\xff\xfe\xad\xd6\x4f\x02\x01\x08\x95\x2a\xad\xd6\x4f",
signature = "IPv6 from Sparta" ]
यह ध्यान में रखते हुए कि "Ethernet pigsty" के अंदर गंतव्य और स्रोत MAC पतों का समावेश वैकल्पिक है, हम बिना किसी plush field का उपयोग किए भी काम पूरा कर सकते हैं।
यह तब अच्छा होता है जब आपको अपने वातावरण में अन्य विषम मज़ेदार चीज़ों के बीच नए प्रोटोकॉल का परीक्षण करना होता है। इस कच्चे तरीके पर, pig आपके लिए उपयोगी बना रह सकता है।
निम्नलिखित डेटा को "oink.pigsty" के रूप में सहेजें:
[ signature = "oink",
ip.version = 4,
ip.ihl = 5,
ip.tos = 0,
ip.src = 127.0.0.1,
ip.dst = user-defined-ip,
ip.protocol = 17,
udp.dst = 1008,
udp.src = 32000,
udp.payload = "Oink!!\n" ]
दूसरे tty पर netcat को UDP mode में चलाएँ जो पोर्ट 1008 पर कनेक्शन सुनता है:
[email protected]:~# nc -u -l -p 1008
अब "oink.pigsty" का उपयोग करके pig चलाएँ, लक्ष्य के रूप में loopback की सूचना दें:
[email protected]:~# pig --signatures=oink.pigsty --targets=127.0.0.1\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0
netcat को कई oinks प्राप्त होने लगने चाहिए और... हाँ, बधाई!! pig आपके सिस्टम पर चालू और चल रहा है! ;)
अपने नेटवर्क को सूँघने का प्रयास करें ताकि आपके इंटरफ़ेस के आसपास प्रवाहित हो रहे इन UDP पैकेटों के बारे में अधिक जानकारी प्राप्त हो सके...
मज़े करो!
| क्षेत्र | अर्थ | प्रोटोकॉल | डेटा प्रकार | नमूना परिभाषा |
|---|
signature | हस्ताक्षर का नाम | - | string | signature = "Udp flood" |
eth.hwdst | ईथरनेट गंतव्य MAC | Ethernet | MAC | eth.hwdst = "00:de:ad:be:ef:00" |
eth.hwsrc | ईथरनेट स्रोत MAC | Ethernet | MAC | eth.hwsrc = "00:de:ad:be:ef:00" |
eth.type | ईथर प्रकार | Ethernet | number | eth.type = 0x0800 |
eth.payload | ईथरनेट पेलोड | Ethernet | string | eth.payload = "f\x00ob\x04r" |
ip.version | IP संस्करण | IP | number | ip.version = 4 |
ip.ihl | इंटरनेट हेडर लंबाई | IP | number | ip.ihl = 5 |
ip.tos | सेवा का प्रकार | IP | number | ip.tos = 0 |
ip.tlen | कुल लंबाई | IP | number | ip.tlen = 20 |
ip.id | पैकेट आईडी | IP | number | ip.id = 0xbeef |
ip.flags | IP फ़्लैग | IP | number | ip.flags = 4 |
ip.offset | खंड ऑफ़सेट | IP | number | ip.offset = 0 |
ip.ttl | जीवन काल | IP | number | ip.ttl = 64 |
ip.protocol | प्रोटोकॉल | IP | number | ip.protocol = 6 |
ip.checksum | चेकसम | IP | number | ip.checksum = 0 |
ip.src | स्रोत पता | IP | ip address | ip.src = 192.30.70.3 |
ip.dst | गंतव्य पता | IP | ip address | ip.dst = 192.30.70.3 |
ip.payload | IP कच्चा पेलोड | IP | string | ip.payload = "\x01\x02" |
tcp.src | स्रोत पोर्ट | TCP | number | tcp.src = 80 |
tcp.dst | गंतव्य पोर्ट | TCP | number | tcp.dst = 21 |
tcp.seqno | अनुक्रम संख्या | TCP | number | tcp.seqno = 10202 |
tcp.ackno | स्वीकृति संख्या | TCP | number | tcp.ackno = 10200 |
tcp.size | TCP लंबाई | TCP | number | tcp.size = 4 |
tcp.reserv | TCP आरक्षित क्षेत्र | TCP | number | tcp.reserv = 0 |
tcp.urg | TCP आपात ध्वज | TCP | bit | tcp.urg = 0 |
tcp.ack | TCP स्वीकृति ध्वज | TCP | bit | tcp.ack = 1 |
tcp.psh | TCP धकेल ध्वज | TCP | bit | tcp.psh = 0 |
tcp.rst | TCP रीसेट ध्वज | TCP | bit | tcp.rst = 0 |
tcp.syn | TCP सिंक ध्वज | TCP | bit | tcp.syn = 0 |
tcp.fin | TCP समाप्त ध्वज | TCP | bit | tcp.fin = 0 |
tcp.wsize | TCP विंडो आकार | TCP | number | tcp.wsize = 0 |
tcp.checksum | चेकसम | TCP | number | tcp.checksum = 0 |
tcp.urgp | आपात सूचक | TCP | number | tcp.urgp = 0 |
tcp.payload | पेलोड | TCP | string | tcp.payload = "\x01abc" |
udp.src | स्रोत पोर्ट | UDP | number | udp.src = 53 |
udp.dst | गंतव्य पोर्ट | UDP | number | udp.dst = 7 |
udp.size | UDP लंबाई | UDP | number | udp.size = 8 |
udp.checksum | चेकसम | UDP | number | udp.checksum = 0 |
udp.payload | पेलोड | UDP | number | udp.payload = "boo!" |
icmp.type | ICMP प्रकार | ICMP | number | icmp.type = 0 |
icmp.code | ICMP कोड | ICMP | number | icmp.code = 0 |
icmp.checksum | चेकसम | ICMP | number | icmp.checksum = 0 |
icmp.payload | पेलोड | ICMP | string | icmp.payload = "ping!" |
arp.hwtype | ARP हार्डवेयर प्रकार | ARP | number | arp.hwtype = 0x1 |
arp.ptype | ARP प्रोटोकॉल प्रकार | ARP | number | arp.ptype = 0x0800 |
arp.hwlen | ARP हार्डवेयर लंबाई | ARP | number | arp.hwlen = 6 |
arp.opcode | ARP संचालन कोड | ARP | number | arp.opcode = 2 |
arp.hwsrc | ARP स्रोत hw पता | ARP | MAC | arp.hwsrc = "de:ad:be:ef:0:0" |
arp.psrc | ARP स्रोत प्रोटो पता | ARP | ip address | arp.psrc = 192.30.70.3 |
arp.hwdst | ARP गंतव्य hw पता | ARP | MAC | arp.hwdst = "de:ad:be:ef:0:0" |
arp.pdst | ARP गंतव्य प्रोटो पता | ARP | ip address | arp.pdst = 192.30.70.3 |
| अर्थ |
|---|
north-american-ip | उत्तरी अमेरिका से IP पते |
south-american-ip | दक्षिण अमेरिका से IP पते |
asian-ip | एशिया से IP पते |
european-ip | यूरोप से IP पते |
| उप-कार्य | यह क्या करता है? | मैनुअल |
|---|
pcap-import | एक PCAP फ़ाइल से pigsty फ़ाइल में पैकेट आयात करता है | cat doc/pcap-import.md |
shell | pig को इंटरैक्टिव मोड पर निष्पादित करता है | cat doc/shell.md |