VPN tünelleri üzerinden yapılan TCP bağlantılarının ele geçirilmesine olanak tanıyan güvenlik açığı

Yayınlanan VPN tünelleri aracılığıyla iletilen TCP bağlantılarında paketlerin aldatılmasına, değiştirilmesine veya değiştirilmesine olanak tanıyan bir saldırı tekniği (CVE-2019-14899). Sorun Linux, FreeBSD, OpenBSD, Android, macOS, iOS ve diğer Unix benzeri sistemleri etkiliyor. Linux, IPv4 için rp_filter (ters yol filtreleme) mekanizmasını destekler ve onu "Katı" modda açmak bu sorunu ortadan kaldırır.

Yöntem, şifrelenmiş bir tünelden geçen TCP bağlantıları düzeyinde paket değişimine izin verir, ancak ek şifreleme katmanları (örneğin, TLS, HTTPS, SSH) kullanan bağlantılara sıkıştırmaya izin vermez. Sahte paketler harici arayüzden geldiğinden ve çekirdek tarafından VPN arayüzünden gelen paketler olarak işlendiğinden, VPN'de kullanılan şifreleme algoritmalarının önemi yoktur. Saldırının en olası hedefi şifrelenmemiş HTTP bağlantılarına müdahale etmektir, ancak hariç tutulmadı ve DNS yanıtlarını değiştirmek için bir saldırı kullanmak.

OpenVPN, WireGuard ve IKEv2/IPSec kullanılarak oluşturulan tüneller için başarılı paket sahtekarlığı gösterilmiştir. Tor, trafiği iletmek için SOCKS kullandığından ve bir geridöngü arayüzüne bağlı olduğundan sorundan etkilenmez. IPv4 için, rp_filter "Gevşek" moduna ayarlanmışsa bir saldırı mümkündür (sysctl net.ipv4.conf.all.rp_filter = 2). Başlangıçta çoğu sistem "Katı" modunu kullanıyordu ancak sistemd 240Geçtiğimiz Aralık ayında yayınlanan sürümde varsayılan çalışma modu "Gevşek" olarak değiştirildi ve bu değişiklik birçok Linux dağıtımının varsayılan ayarlarına yansıdı.

rp_filter mekanizması uygulamak Kaynak adresi sahtekarlığını önlemek amacıyla paket yollarının ek doğrulanması için. 0'a ayarlandığında hiçbir kaynak adresi kontrolü yapılmaz ve herhangi bir paket, ağ arayüzleri arasında kısıtlama olmaksızın iletilebilir. Mod 1 "Katı", dışarıdan gelen her paketin yönlendirme tablosuna uygunluğunun kontrol edilmesini içerir ve paketin alındığı ağ arayüzü, optimum yanıt dağıtım yolu ile ilişkili değilse paket atılır. Mod 2 "Gevşek", yük dengeleyicilerin veya asimetrik yönlendirmenin aşağıdaki durumlarda çalışmasına izin vermek için kontrolü gevşetir:
Yanıt yolu, gelen paketin ulaştığı ağ arabiriminden farklı bir ağ arabiriminden geçebilir.

Gevşek modda, gelen paket yönlendirme tablosuna göre kontrol edilir, ancak kaynak adresine herhangi bir kullanılabilir ağ arayüzü üzerinden ulaşılabiliyorsa geçerli olduğu kabul edilir. Önerilen saldırı, saldırganın VPN arayüzüne karşılık gelen sahte kaynak adresine sahip bir paket gönderebilmesi ve bu paketin sisteme VPN üzerinden değil, harici ağ arayüzü üzerinden gireceği gerçeğine dayanmaktadır. rp_filter “Gevşek” modda böyle bir paket atılmayacaktır.

Bir saldırı gerçekleştirmek için saldırganın, kullanıcının ağa eriştiği ağ geçidini kontrol etmesi gerekir (örneğin, kurban, saldırgan tarafından kontrol edilen bir kablosuz erişim noktasına bağlandığında bir MITM organizasyonu aracılığıyla veya yönlendirici hackleme). Saldırgan, kullanıcının ağa bağlandığı ağ geçidini kontrol ederek, VPN ağ arayüzü bağlamında algılanacak sahte paketler gönderebilir, ancak yanıtlar tünel üzerinden yönlendirilecektir.

VPN arayüzünün IP adresinin değiştirildiği bir dizi hayali paket akışı üretilerek, müşteri tarafından kurulan bağlantıyı etkilemeye çalışılır, ancak bu paketlerin etkisi yalnızca ilgili şifrelenmiş trafik akışının pasif analizi yoluyla gözlemlenebilir. Tünelin işletilmesiyle birlikte. Bir saldırı gerçekleştirmek için, VPN sunucusu tarafından atanan tünel ağ arayüzünün IP adresini bulmanız ve ayrıca tünel üzerinden belirli bir ana bilgisayarla bağlantının şu anda etkin olduğunu belirlemeniz gerekir.

VPN sanal ağ arayüzünün IP'sini belirlemek için, kurban sistemine tüm sanal adres aralığını sırayla numaralandıran SYN-ACK paketleri gönderilir (her şeyden önce, VPN'de kullanılan adresler varsayılan olarak numaralandırılır, örneğin OpenVPN). 10.8.0.0/24 alt ağını kullanır). Bir adresin varlığı, RST bayrağıyla alınan yanıta göre değerlendirilebilir.

Benzer şekilde, belirli bir siteye bağlantının varlığı ve istemci tarafındaki port numarası belirlenir - port numaraları sıralanarak kullanıcıya kaynak adresi olarak IP'nin bulunduğu bir SYN paketi gönderilir. sitenin adresi değiştirilir ve hedef adres sanal bir IP VPN'dir. Sunucu bağlantı noktası tahmin edilebilir (HTTP için 80) ve istemci tarafındaki bağlantı noktası numarası, RST'li bir paketin yokluğuyla birlikte ACK yanıtlarının yoğunluğundaki değişikliği farklı sayılar için analiz ederek kaba kuvvetle hesaplanabilir. bayrak.

Bu aşamada saldırgan, bağlantının dört öğesini de bilir (kaynak IP adresleri/port ve hedef IP adresi/port), ancak kurban sistemin kabul edeceği hayali bir paket oluşturmak için saldırganın TCP sırasını belirlemesi ve onay numaraları (sıra ve onay) - bağlantılar. Bu parametreleri belirlemek için saldırgan, gelişi sayının TCP penceresi içinde olduğunu gösteren bir ACK yanıt paketi algılayana kadar farklı sıra numaralarını deneyerek sürekli olarak sahte RST paketleri gönderir.

Daha sonra saldırgan, aynı numaraya sahip paketleri göndererek ve ACK yanıtlarının gelişini gözlemleyerek tanımın doğruluğunu netleştirir ve ardından mevcut dizinin tam sayısını seçer. Yanıtların şifreli bir tünel içerisinde gönderilmesi ve bunların ele geçirilen trafik akışındaki varlığının yalnızca dolaylı yöntemler kullanılarak analiz edilebilmesi nedeniyle görev karmaşıklaşmaktadır. Bir istemcinin VPN sunucusuna adreslenen bir ACK paketi gönderip göndermeyeceği, sahte paketlerin gönderilmesiyle ilişkili olan şifrelenmiş yanıtların boyutuna ve gecikmesine göre belirlenir. Örneğin, OpenVPN için şifrelenmiş paket boyutu 79, içeride bir ACK olup olmadığını doğru bir şekilde değerlendirmenize olanak tanır.

Sorunu engellemenin geçici bir yöntemi olarak işletim sistemi çekirdeğine saldırı koruması eklenene kadar tavsiye “ön yönlendirme” zincirindeki bir paket filtresini kullanarak, tünelin sanal IP adresinin hedef adres olarak belirtildiği paketlerin geçişini engelleyin.

iptables -t raw -I ÖN YÖNLENDİRME ! -i wg0 -d 10.182.12.8 -m adres türü ! --src-type YEREL -j BIRAKMA

veya nftable'lar için

nft tablo ip hamını ekle
nft zincir ekle ip raw ön yönlendirme '{ type filtre kancası ön yönlendirme önceliği 0; }'
nft kural ekle ip ham ön yönlendirme 'iifname != "wg0" ip daddr 10.182.12.8 fib saddr türü != yerel bırakma'

IPv4 adresli tünelleri kullanırken kendinizi korumak için, rp_filter'ı "Katı" moduna ("sysctl net.ipv4.conf.all.rp_filter = 1") ayarlamanız yeterlidir. VPN tarafında, sıra numarası tespit yöntemi, şifrelenmiş paketlere ekstra dolgu eklenerek tüm paketlerin aynı boyutta olması sağlanarak engellenebilir.

Kaynak: opennet.ru

Yorum ekle