WebRTC sızıntısı, tarayıcılardaki bir güvenlik açığıdır; bir web sitesinin, WebRTC'nin STUN/TURN mekanizmaları aracılığıyla ağ arayüzlerini doğrudan sorgulayarak proxy sunucularını veya VPN'leri atlaması ve kullanıcının gerçek IP adresini öğrenmesi mümkün olur. Bu ifşa, gerçek zamanlı iletişim için tasarlanan WebRTC'nin doğrudan uçtan uca bağlantı kurmak amacıyla genellikle STUN (Session Traversal Utilities for NAT) ve TURN (Traversal Using Relays around NAT) sunucularına UDP bağlantıları kullanmasından ve bu isteklerin tarayıcıda yapılandırılmış proxy üzerinden gitmeyebilmesinden kaynaklanır.
WebRTC'yi ve mimarisini anlamak
WebRTC (Web Real-Time Communication), tarayıcılar ve diğer istemci uygulamaları arasında doğrudan gerçek zamanlı ses, video ve veri iletişimini sağlayan açık kaynaklı bir projedir. Aracı sunuculara gerek kalmadan uçtan uca veri aktarımına imkân tanır; bu da video konferans, dosya paylaşımı ve canlı yayın gibi uygulamalarda gecikmeyi ve sunucu yükünü belirgin şekilde azaltır.
WebRTC'nin bağlantı kurma sürecinin temel bileşenleri şunlardır:
- Sinyalleşme sunucusu (Signaling Server): Doğrudan bağlantı kurulmadan önce eşler arasında meta verilerin (ör. oturum kontrol mesajları, ağ yapılandırması, medya yetenekleri) değişimi için kullanılır. Sinyalleşme sürecinin kendisi WebRTC tarafından standartlaştırılmamıştır ve çeşitli protokoller (ör. WebSocket) kullanabilir.
- ICE (Interactive Connectivity Establishment): Eşlerin doğrudan bağlantıları keşfetmesine ve kurmasına olanak tanıyan bir çerçevedir. ICE, mümkün olan en iyi iletişim yolunu bulmak için STUN ve TURN sunucularını kullanır.
- STUN sunucusu: Eşlerin genel IP adreslerini ve arkasında bulundukları NAT türünü keşfetmelerine yardımcı olur. NAT arkasındaki bir istemci STUN sunucusuna istek gönderdiğinde, sunucu istemcinin internetten görünen genel IP adresi ve portuyla yanıt verir.
- TURN sunucusu: Doğrudan uçtan uca bağlantı mümkün olmadığında (ör. kısıtlayıcı NAT'lar veya güvenlik duvarları nedeniyle) kullanılır. TURN sunucusu bir aktarıcı gibi çalışır ve eşler arasındaki tüm trafiği iletir.
IP sızıntısı açısından kritik nokta, ICE'nin iletişim için kullanılabilecek olası ağ adresleri ve portlar olan "adayları" (candidates) nasıl topladığıdır. Bu adaylar şunları içerir:
- Host adayları: Kullanıcının makinesindeki yerel IP adresleri (ör.
192.168.1.100,10.0.0.5). - Server reflexive adaylar: NAT yönlendiricisi tarafından tahsis edilen ve STUN sunucusu üzerinden keşfedilen genel IP adresi ve port eşlemesi.
- Relayed adaylar: Doğrudan bağlantı mümkün olmadığında kullanılan, TURN sunucusundaki IP adresleri ve portlar.
WebRTC sızıntısının mekanizması
Bir tarayıcı WebRTC bağlantısı başlattığında, yerel ağ arayüzlerini öğrenmek için JavaScript API'leriyle işletim sistemini sorgular ve ardından genel IP adresini keşfetmek üzere STUN istekleri yapar. Bu STUN istekleri tipik olarak UDP tabanlıdır ve çoğu zaman doğrudan tarayıcı veya alttaki WebRTC kütüphanesi tarafından yapılır; genel web trafiği için yapılandırılmış HTTP/SOCKS proxy ayarları atlanır.
Tarayıcının RTCPeerConnection nesnesi yerel IP adreslerini doğrudan listeler ve STUN binding istekleri gönderir. STUN sunucularından gelen yanıtlar istemcinin genel IP adresini içerir. Hem yerel hem de genel IP adaylarını kapsayan bu bilgi, ICE aday değişimi süreci aracılığıyla uzaktaki eşe (ve daha da kritik olarak, WebRTC uygulamasını barındıran web sitesine) sunulur.
Bir proxy veya VPN kullanılıyor olsa bile, tarayıcının WebRTC motoru STUN sunucularına bu doğrudan ve proxy'siz bağlantıları kurmayı ya da yerel ağ arayüzlerini doğrudan sorgulamayı sürdürebilir ve kullanıcının gerçek IP adresini açığa çıkarabilir.
Örnek: JavaScript ile IP ifşası
Kötü niyetli veya teşhis amaçlı bir web sitesi, birkaç satır JavaScript ile WebRTC bağlantısı başlatıp bu ICE adaylarını çıkarabilir.
// Bu, yalnızca açıklama amaçlı basitleştirilmiş bir örnektir.
// Gerçek dünyadaki istismar, çok daha karmaşık aday toplama içerir.
function getWebRTCIPs() {
return new Promise((resolve, reject) => {
const pc = new RTCPeerConnection({
iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
});
const candidates = [];
pc.onicecandidate = (event) => {
if (event.candidate) {
const candidate = event.candidate.candidate;
// Örnek aday dizesi:
// "candidate:4234997380 1 udp 2043278322 192.168.1.100 50000 typ host" (yerel IP)
// "candidate:4234997380 1 udp 2043278322 203.0.113.45 50000 typ srflx" (STUN üzerinden genel IP)
const ipMatch = /(?:[0-9]{1,3}\.){3}[0-9]{1,3}/.exec(candidate);
if (ipMatch && ipMatch[0] && candidates.indexOf(ipMatch[0]) === -1) {
candidates.push(ipMatch[0]);
}
} else {
// Tüm ICE adayları toplandı
if (candidates.length > 0) {
resolve(candidates);
} else {
reject(new Error('No WebRTC IP candidates found.'));
}
}
};
pc.createDataChannel(''); // Aday toplamayı tetiklemek için bir data channel gerekir
pc.createOffer()
.then(offer => pc.setLocalDescription(offer))
.catch(reject);
});
}
// Kullanım:
// getWebRTCIPs().then(ips => console.log('Discovered IPs:', ips)).catch(error => console.error(error));
Bu JavaScript kodu bir RTCPeerConnection başlatır ve onicecandidate olaylarını dinler. Her olay, bir IP adresi (yerel, STUN üzerinden genel veya TURN üzerinden aktarılan) içeren bir aday dizesi barındırır. Bir web sitesi bu adayları ayrıştırarak gerçek IP adreslerini elde edebilir.
WebRTC sızıntısını tespit etmek
Bir proxy kurulumunun WebRTC sızıntılarına açık olup olmadığını belirlemek için çevrimiçi araçlar kullanılabilir:
- Bir IP test servisini ziyaret edin: Proxy üzerinden bağlıyken
ipleak.netveyabrowserleaks.com/webrtcgibi sitelere gidin. - Bildirilen IP'leri karşılaştırın:
- Proxy IP: Proxy servisinin internete göstermesi gereken IP adresi.
- WebRTC IP: Bu bölüm, WebRTC aracılığıyla keşfedilen IP adreslerini listeler.
- Gerçek IP'niz: İdeal olarak gizli kalması gereken asıl genel IP adresiniz.
"WebRTC IP" bölümü gerçek genel IP adresinizi gösteriyorsa bir WebRTC sızıntısı vardır. Yerel ağ IP'nizi gösteriyorsa (ör. 192.168.x.x veya 10.x.x.x), bu, tarayıcının yerel arayüzleri listelediğini gösterir; bu durum genel IP'nizi doğrudan ifşa etmeyebilir ama yine de iç ağ yapılandırmanızı açığa çıkarır.
Azaltma stratejileri
WebRTC sızıntılarını azaltmak özel önlemler gerektirir, çünkü standart proxy yapılandırmaları çoğu zaman yeterli olmaz.
Tarayıcı yapılandırması ve uzantılar
Farklı tarayıcılar WebRTC üzerinde farklı düzeylerde kontrol sunar:
-
Mozilla Firefox:
- Adres çubuğuna
about:configyazın. media.peerconnection.enabledayarını arayın ve değerinifalseyapın. Bu, WebRTC'yi tamamen devre dışı bırakır ve bazı meşru web uygulamalarını bozabilir.- Alternatif olarak
media.peerconnection.ice.no_host_candidatesayarını arayın vetrueyapın. Bu, tarayıcının yerel IP adreslerini ifşa etmesini engeller. media.peerconnection.ice.default_obfuscate_host_addressesayarını arayın vetrueyapın. Bu, WebRTC tarafından bildirilen yerel IP adreslerini gizler.
- Adres çubuğuna
-
Google Chrome / Chromium tabanlı tarayıcılar:
- Chrome, diğer tarayıcı işlevlerini etkilemeden WebRTC'yi tamamen kapatmak için
chrome://flagsiçinde doğrudan bir yapılandırma bayrağı sunmaz. - Uzantılar: WebRTC sızıntılarını engellemek için tasarlanmış bir tarayıcı uzantısı kurun; örneğin "WebRTC Network Limiter" ya da belirli filtrelerle "uBlock Origin". Bu uzantılar genellikle tarayıcının WebRTC API davranışını değiştirerek doğrudan IP ifşasını önler.
- "WebRTC Network Limiter" uzantısı, Chrome'u yalnızca "mDNS host candidates" veya "proxy-only ICE candidates" kullanacak şekilde yapılandırarak toplanan ve paylaşılan aday türlerini etkin biçimde sınırlar.
- Chrome, diğer tarayıcı işlevlerini etkilemeden WebRTC'yi tamamen kapatmak için
-
Opera:
- Opera'nın yerleşik VPN özelliği bazen WebRTC sızıntı korumasını içerir. Etkinleştirildiğinde WebRTC trafiğini VPN üzerinden yönlendirir. Ayarları
Settings > Privacy & security > VPNaltından kontrol edin.
- Opera'nın yerleşik VPN özelliği bazen WebRTC sızıntı korumasını içerir. Etkinleştirildiğinde WebRTC trafiğini VPN üzerinden yönlendirir. Ayarları
İşletim sistemi düzeyinde kontroller
Daha az hassas olsalar da, işletim sistemi düzeyindeki kontroller WebRTC trafiğini kısıtlayabilir:
- Güvenlik duvarı kuralları: Yaygın STUN/TURN portlarında (ör. 3478, 19302-19309) giden UDP trafiğini engelleyin. Bu, STUN isteklerinin dış sunuculara ulaşmasını önleyebilir, ancak meşru WebRTC işlevlerini de bozabilir.
- Ağ arayüzü yönetimi: Bazı senaryolarda belirli ağ adaptörlerini devre dışı bırakmak, IP adreslerinin listelenmesini engelleyebilir; ancak bu, günlük kullanım için genellikle pratik değildir.
WebRTC sızıntı koruması: proxy mi, VPN mi?
Proxy'lerin ve VPN'lerin çalışma biçimindeki temel fark, WebRTC sızıntılarını önleme yeteneklerini de belirler.
| Özellik | Tarayıcı proxy'si (HTTP/SOCKS) | VPN (Virtual Private Network) |
|---|---|---|
| Çalışma düzeyi | Uygulama katmanı (tarayıcı) | Ağ katmanı (işletim sistemi düzeyi) |
| Trafik yönlendirme | Belirtilen tarayıcı trafiğini yönlendirir; tüm protokolleri yönlendirmeyebilir. | Cihazdaki TÜM ağ trafiğini şifreler ve yönlendirir. |
| WebRTC sızıntısı | Savunmasız: WebRTC STUN istekleri çoğu zaman tarayıcı proxy ayarlarını atlar. | Korumalı: WebRTC STUN istekleri dahil tüm trafik şifreli tünelden geçmeye zorlanır. |
| IP adresi ifşası | Özel önlem alınmazsa gerçek IP WebRTC üzerinden görünür. | Gerçek IP genellikle VPN sunucusunun IP'siyle gizlenir. |
| Kurulum karmaşıklığı | Nispeten basit (tarayıcı ayarları). | İstemci yazılımı kurulumu gerektirir; tüm sistem trafiğini yönlendirir. |
VPN, cihazdaki tüm ağ trafiğini güvenli bir tünelden şifreleyerek yönlendirir; buna WebRTC STUN isteklerinin ürettiği UDP trafiği de dahildir. Böylece dış STUN sunucularına ifşa olan tek IP adresi VPN sunucusunun IP'si olur ve WebRTC sızıntısı etkili biçimde önlenir. Tarayıcı düzeyindeki proxy'ler ise daha üst bir katmanda çalışır ve yalnızca TCP trafiğini yönlendirebilir; bu da UDP tabanlı WebRTC bağlantılarının doğrudan kurulmasına yol açar.
WebRTC sızıntılarına karşı sağlam koruma ve kapsamlı gizlilik için, sistem genelinde çalışan bir VPN çözümü genellikle tarayıcıya özgü bir proxy'den daha etkilidir. Proxy kullanırken, WebRTC'nin gerçek IP adresini ifşa etmesini önlemek için belirli tarayıcı yapılandırmaları veya uzantılar zorunludur.
