500/udp - Pentesting IPsec/IKE VPN
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
IPsec, ağlar (LAN-to-LAN) arasında ve uzaktan kullanıcıların ağ geçidine (uzaktan erişim) iletişimlerini güvence altına almak için ana teknoloji olarak geniş çapta tanınmaktadır ve kurumsal VPN çözümlerinin belkemiğini oluşturmaktadır.
İki nokta arasında bir güvenlik ilişkisi (SA) kurulumu, kimlik doğrulama ve anahtar değişimi için tasarlanmış bir protokol olan ISAKMP çerçevesinde çalışan IKE tarafından yönetilmektedir. Bu süreç birkaç aşamada gerçekleşir:
Aşama 1: İki uç nokta arasında güvenli bir kanal oluşturulur. Bu, bir Önceden Paylaşılmış Anahtar (PSK) veya sertifikalar kullanılarak, üç mesaj çiftini içeren ana mod veya agresif mod kullanılarak gerçekleştirilir.
Aşama 1.5: Zorunlu olmamakla birlikte, bu aşama, bağlantı kurmaya çalışan kullanıcının kimliğini doğrulamak için bir kullanıcı adı ve şifre gerektiren Genişletilmiş Kimlik Doğrulama Aşaması olarak bilinir.
Aşama 2: Bu aşama, verileri ESP ve AH ile güvence altına almak için parametrelerin müzakere edilmesine adanmıştır. Perfect Forward Secrecy (PFS) sağlamak için Aşama 1'deki algoritmalardan farklı algoritmaların kullanılmasına izin verir, güvenliği artırır.
Varsayılan port: 500/udp
IPSec yapılandırması yalnızca bir veya birkaç dönüşümü kabul edecek şekilde 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ü, Diffie-Hellman 1 veya 2 gibi anahtar dağıtım algoritması ve 28800 saniye gibi ömür içeren bir dizi özellik barındırır.
O halde, yapmanız gereken ilk şey geçerli bir dönüşüm bulmaktır, böylece sunucu sizinle iletişim kuracaktır. Bunu yapmak için ike-scan aracını kullanabilirsiniz. Varsayılan olarak, Ike-scan ana modda çalışır ve bir ISAKMP başlığı ile birlikte bir paketi geçide gönderir ve içinde sekiz dönüşüm bulunan tek bir öneri gönderir.
Aldığınız yanıta bağlı olarak, uç nokta hakkında bazı bilgiler elde edebilirsiniz:
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). Son satırın değeri de çok önemlidir:
0 döndürülen el sıkışma; 0 döndürülen bildirim: Bu, hedefin bir IPsec geçidi olmadığını gösterir.
1 döndürülen el sıkışma; 0 döndürülen bildirim: Bu, hedefin IPsec için yapılandırıldığını ve IKE müzakeresi yapmaya istekli olduğunu, önerdiğiniz dönüşümlerden birinin veya daha fazlasının kabul edilebilir olduğunu gösterir (geçerli bir dönüşüm çıktıda gösterilecektir).
0 döndürülen el sıkışma; 1 döndürülen bildirim: VPN geçitleri, dönüşümlerin hiçbiri kabul edilebilir değilse bir bildirim mesajı ile yanıt verir (bazı geçitler bunu yapmaz, bu durumda daha fazla analiz ve revize edilmiş bir öneri denenmelidir).
Bu durumda zaten geçerli bir dönüşümümüz var, ancak 3. durumda iseniz, geçerli bir dönüşüm bulmak için biraz brute-force yapmanız gerekir:
Öncelikle tüm olası dönüşümleri oluşturmanız gerekir:
Ve ardından her birini ike-scan kullanarak brute-force yapın (bu birkaç dakika sürebilir):
Eğer brute-force işe yaramadıysa, belki de sunucu, geçerli dönüşümlere bile el sıkışmaları olmadan yanıt veriyordur. O zaman, aynı brute-force'u ama agresif mod kullanarak deneyebilirsiniz:
Umarım geçerli bir dönüşüm geri yansıtılır. Aynı saldırıyı iker.py kullanarak deneyebilirsiniz. Ayrıca dönüşümleri brute force ile denemek için ikeforce kullanabilirsiniz:
DH Grubu: 14 = 2048-bit MODP ve 15 = 3072-bit
2 = HMAC-SHA = SHA1 (bu durumda). --trans
formatı $Enc,$Hash,$Auth,$DH
Cisco, DH grupları 1 ve 2'nin yeterince güçlü olmadığını belirterek kullanılmamasını öneriyor. Uzmanlar, kaynakları bol olan ülkelerin bu zayıf grupları kullanan verilerin şifrelemesini kolayca kırabileceğine inanıyor. Bu, kodları hızlı bir şekilde kırmaya hazırlayan özel bir yöntem kullanılarak yapılır. Bu yöntemi kurmanın maliyeti yüksek olsa da, bu güçlü ülkelerin, zayıf bir grup (örneğin 1,024-bit veya daha küçük) kullanıyorsa şifrelenmiş verileri gerçek zamanlı olarak okumalarına olanak tanır.
Daha sonra, cihazın satıcısını keşfetmek için ike-scan kullanabilirsiniz. Araç, bir başlangıç teklifi gönderir ve tekrar oynamayı durdurur. Ardından, sunucudan alınan mesajlar ile eşleşen yanıt deseninin zaman farkını analiz ederek, pentester VPN geçidi satıcısını başarıyla parmak izi alabilir. Ayrıca, bazı VPN sunucuları IKE ile birlikte isteğe bağlı Satıcı Kimliği (VID) yükünü kullanacaktır.
Gerekirse geçerli dönüşümü belirtin (using --trans)
IKE, satıcının kim olduğunu keşfederse, bunu yazdıracaktır:
Bu, nmap script ike-version ile de gerçekleştirilebilir.
Hash'i yakalamak için geçerli bir dönüşüm ve doğru ID (grup adı) gereklidir. Muhtemelen geçerli grup adını bilmeyeceksiniz, bu yüzden bunu brute-force ile bulmanız gerekecek. Bunu yapmak için size 2 yöntem öneririm:
Öncelikle, hash'i toplamak için sahte bir ID ile bir istek yapmayı deneyin ("-P"):
Eğer hiçbir hash döndürülmüyorsa, o zaman bu brute forcing yöntemi muhtemelen işe yarayacaktır. Eğer bazı hash'ler döndürülüyorsa, bu sahte bir kimlik için sahte bir hash'in geri gönderileceği anlamına gelir, bu nedenle bu yöntem kimliği brute-force etmek için güvenilir olmayacaktır. Örneğin, sahte bir hash döndürülebilir (bu modern versiyonlarda olur):
Ama dediğim gibi, eğer hiçbir hash döndürülmüyorsa, o zaman ike-scan kullanarak yaygın grup adlarını brute-force etmeyi denemelisiniz.
Bu script mümkün olan kimlikleri brute-force etmeye çalışacak ve geçerli bir el sıkışma döndürülen kimlikleri geri döndürecektir (bu geçerli bir grup adı olacaktır).
Eğer belirli bir dönüşüm keşfettiyseniz, bunu ike-scan komutuna ekleyin. Ve eğer birkaç dönüşüm keşfettiyseniz, hepsini denemek için yeni bir döngü eklemekten çekinmeyin (birisi düzgün çalışana kadar hepsini denemelisiniz).
Onları brute-force etmek için yaygın grup adlarının ikeforce sözlüğünü veya seclists'teki birini kullanabilirsiniz:
Or use this dict (is a combination of the other 2 dicts without repetitions):
iker.py ayrıca olası grup adlarını kırmak için ike-scan kullanır. ike-scan çıktısına dayanarak geçerli bir ID bulmak için kendi yöntemini izler.
ikeforce.py ID'leri kırmak için kullanılabilecek bir araçtır. Bu araç, geçerli ve geçersiz bir ID'yi ayırt etmek için kullanılabilecek farklı zafiyetleri istismar etmeye çalışacaktır (yanlış pozitifler ve yanlış negatifler olabilir, bu yüzden mümkünse ike-scan yöntemini kullanmayı tercih ediyorum).
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önderir.
Birinci yöntem, grup adlarını araştırarak Dead Peer Detection DPD bilgilerini kırmaktır (bu bilgi yalnızca grup adı doğruysa sunucu tarafından tekrar gönderilir).
İkinci yöntem, her denemeye gönderilen yanıt sayısını kontrol etmektir çü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 kırmaya çalışacak ve doğru ID gönderildiğinde sunucunun bazı paketlerle yanıt verip vermediğini kontrol edecektir. Elbette, ID'yi kırmanın amacı geçerli bir ID'ye sahip olduğunuzda PSK'yı elde etmektir. Ardından, ID ve PSK ile XAUTH'ı kırmanız gerekecek (eğer etkinse).
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ü eklemekten çekinmeyin (birinin düzgün çalışana kadar hepsini denemelisiniz).
(From the book Network Security Assessment: Know Your Network): VPN istemcisi ve sunucusu arasındaki bağlantıyı dinleyerek geçerli kullanıcı adları elde etmek de mümkündür, çünkü istemci kimliğini içeren ilk agresif mod paketi açık bir şekilde gönderilmektedir.
Son olarak, eğer geçerli bir dönüşüm ve grup adı bulduysanız ve agresif mod izin veriliyorsa, o zaman kırılabilir hash'i çok kolay bir şekilde elde edebilirsiniz:
Hash, hash.txt dosyasının içine kaydedilecektir.
Hash'i crack etmek için psk-crack, john (ikescan2john.py kullanarak) ve hashcat kullanabilirsiniz:
Agresif mod IKE, Önceden Paylaşılan Anahtar (PSK) ile birleştirilerek grup kimlik doğrulama amaçları için yaygın olarak kullanılmaktadır. Bu yöntem, ek bir kullanıcı kimlik doğrulama katmanı eklemek için XAuth (Genişletilmiş Kimlik Doğrulama) ile güçlendirilmiştir. Bu tür kimlik doğrulama genellikle Microsoft Active Directory, RADIUS veya benzeri sistemler gibi hizmetleri kullanır.
IKEv2'ye geçişte, kullanıcıları kimlik doğrulamak için XAuth yerine EAP (Genişletilebilir Kimlik Doğrulama Protokolü) kullanıldığına dair önemli bir değişiklik gözlemlenmektedir. Bu değişiklik, güvenli iletişim protokollerindeki kimlik doğrulama uygulamalarında bir evrimi vurgulamaktadır.
Bu nedenle, fiked kullanarak giriş verilerini yakalayabilir ve varsayılan bir kullanıcı adı olup olmadığını görebilirsiniz (IKE trafiğini yakalamak için fiked
'e yönlendirmeniz gerekir, bu ARP sahtekarlığı yardımıyla yapılabilir, daha fazla bilgi). Fiked, bir VPN uç noktası olarak hareket edecek ve XAuth kimlik bilgilerini yakalayacaktır:
Ayrıca, IPSec kullanarak bir MitM saldırısı yapmayı deneyin ve tüm trafiği 500 numaralı porta engelleyin, eğer IPSec tüneli kurulamazsa belki trafik açık olarak gönderilecektir.
XAUTH'ı brute force yapmak için (geçerli bir grup adı id ve psk bildiğinizde) bir kullanıcı adı veya kullanıcı adları listesi ve bir şifreler listesi kullanabilirsiniz:
Bu şekilde, ikeforce her bir kullanıcı adı:şifre kombinasyonunu kullanarak bağlanmaya çalışacaktır.
Eğer bir veya birkaç geçerli dönüşüm bulduysanız, bunları önceki adımlardaki gibi kullanın.
Kali'de, VPNC IPsec tünellerini kurmak için 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 bir VPN bağlantısı kurma sürecini göstermektedir:
In this setup:
[VPN_GATEWAY_IP]
ile VPN geçidinin gerçek IP adresini değiştirin.
[VPN_CONNECTION_ID]
ile VPN bağlantısının tanımlayıcısını değiştirin.
[VPN_GROUP_SECRET]
ile VPN'nin grup sırrını değiştirin.
[VPN_USERNAME]
ve [VPN_PASSWORD]
ile VPN kimlik doğrulama bilgilerini değiştirin.
[PID]
, vpnc
başlatıldığında atanacak işlem kimliğini simgeler.
VPN'i yapılandırırken yer tutucuları değiştirmek için gerçek, güvenli değerlerin kullanıldığından emin olun.
Network Security Assessment 3rd Edition
port:500 IKE
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)