Web tarayıcıları arasında herhangi bir eklentiye ihtiyaç duymadan sesli arama, video chat ve P2P dosya paylaşımı yapmayı sağlayan WebRTC teknolojisi, Firefox, Opera ve Chrome tarayıcılarından VPN veya proxy kullanılsa bile lokal ve gerçek internet IP adreslerini karşı tarafa sızdırır.
VPN Bağlantısı Sırasında Gerçek IP Adresi Nasıl Sızıyor?
WebRTC’yi destekleyen Firefox, Opera ve Google Chrome tarayıcılarında internete giderken VPN veya proxy sunucu kullanmış olsanız bile tarayıcıların baÄŸlanmış olduÄŸu STUN sunucuları sayesinde kullanıcının bilgisayarına ait local ve internet servis saÄŸlayıcısından otomatik olarak aldığı gerçek IP adresini olduÄŸu gibi sızdırıyor.
“Simple traversal of UDP over NATs” diye bilinen STUN, ses ve video iletiÅŸimi için kullanıcının NAT (internete giderken dönüştürülmüş internete çıkış IP’si) adresinin arkasındaki gerçek IP’sini port eÅŸleÅŸtirmesi yaparak UDP portlu baÄŸlantılar saÄŸlar. Yani STUN sunucusu NAT’ın tipini ve NAT tarafından belirli bir yerel port ile iliÅŸkilendirilen internet portunu bulmasına olanak saÄŸlar.
Ve STUN istekleri normal XMLHttpRequest prosedürünün haricinde/dışında ve görünmeyecek bir biçimde gerçekleşir. Ayrıca yine kullanıcıdan çıkan bu istekler geliştirici konsolu ile AdBlockPlus ve Ghostery gibi eklentilere karşı da kapalıdırlar. Bu yüzden engellenemezler. Bu durumda da başta reklam verenler olmak üzere online kullanıcı takibi yapmak isteyen herkese, kullanıcıları VPN kullansalar bile gerçek IP adresleri yoluyla tespit edilmelerini ve sürekli takip edilmelerine olanak sağlar.
Bu bilgilere sunucuları da eklemek gerekirse; Google, STUN sunucuları olarak:
- stun.l.google.com:19302
- stun1.l.google.com:19302
- stun2.l.google.com:19302
- stun3.l.google.com:19302
- stun4.l.google.com:19302
kullanırken, Mozilla Firefox da stun.services.mozilla.com adresini kullanıyor.
IP Adresinin Nasıl Sızdığını Tespit Edin
IP Adresinin nasıl sızdığını görmek için alttaki örnek Javascript kodunu Firefox veya Chrome’da F12 ile gelen konsola yapıştırıp, çalıştırın:
//get the IP addresses associated with an account
function getIPs(callback){
var ip_dups = {};
//compatibility for firefox and chrome
var RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
//bypass naive webrtc blocking
if (!RTCPeerConnection) {
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.body.appendChild(iframe);
var win = iframe.contentWindow;
window.RTCPeerConnection = win.RTCPeerConnection;
window.mozRTCPeerConnection = win.mozRTCPeerConnection;
window.webkitRTCPeerConnection = win.webkitRTCPeerConnection;
RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
}
//minimal requirements for data connection
var mediaConstraints = {
optional: [{RtpDataChannels: true}]
};
//firefox already has a default stun server in about:config
// media.peerconnection.default_iceservers =
// [{"url": "stun:stun.services.mozilla.com"}]
var servers = undefined;
//add same stun server for chrome
if(window.webkitRTCPeerConnection)
servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};
//construct a new RTCPeerConnection
var pc = new RTCPeerConnection(servers, mediaConstraints);
//listen for candidate events
pc.onicecandidate = function(ice){
//skip non-candidate events
if(ice.candidate){
//match just the IP address
var ip_regex = /([0-9]{1,3}(.[0-9]{1,3}){3})/
var ip_addr = ip_regex.exec(ice.candidate.candidate)[1];
//remove duplicates
if(ip_dups[ip_addr] === undefined)
callback(ip_addr);
ip_dups[ip_addr] = true;
}
};
//create a bogus data channel
pc.createDataChannel("");
//create an offer sdp
pc.createOffer(function(result){
//trigger the stun server request
pc.setLocalDescription(result, function(){}, function(){});
}, function(){});
}
//Test: Print the IP addresses into the console
getIPs(function(ip){console.log(ip);});


Ayrıca benzer bir testi https://diafygi.github.io/webrtc-ips/ adresini VPN’li ve VPN’si olarak ziyaret ederek de yapabilirsiniz.
VPN veya Proxy (Vekil Sunucu) Kullanırken Gerçek IP Adresi Nasıl Gizlenir?
Bu doÄŸal zafiyetten etkilenmemenin en kolay yolu Web tarayıcılarında WebRTC’yi tamamen iptal etmekten geçiyor. Önlem olarak alttaki seçeneklerin tümünü uygulayabilirsiniz.
Firefox için:
- Tarayıcı adres satırında ‘about:config‘ yazın ve ‘media.peerconnection.enabled‘ seçeneÄŸini bulup tıklayarak ‘false‘ hale getirin.
- ‘NoScript‘ eklentisini kullanın.
- Daha basit bir çözüm olan ‘Disable WebRTC‘ eklentisinden yararlanın.
Chrome için:
- ‘WebRTC block extension‘ veya ‘ScriptSafe‘ eklentilerini kullanın.
- Tarayıcı adres satırında ‘chrome://flags/‘ yazın ve ‘WebRTC’yi devre dışı bırak‘, ‘WebRTC donanım video kod çözme özelliÄŸini devre dışı bırak‘ ve ‘WebRTC donanımı video kodlaması desteÄŸini devre dışı bırak‘ seçeneklerini sırasıyla tıklayın.
İnternetin büyük oyuncuları, reklamcılar ve devletlerden korunmak için VPN kullanırken bile aslında pek güvenli ya da gizli kalınamayacağı bu tip ortaya çıkan bilgilerle daha iyi öğrenilmiş oluyor.
Referanslar:
- http://www.webrtc.org/
- WebRTC Nedir? Uç Birim Yazılımlarının Sonu Mu?
- https://github.com/diafygi/webrtc-ips
- http://en.wikipedia.org/wiki/WebRTC
- https://diafygi.github.io/webrtc-ips/
- https://threatpost.com/webrtc-found-leaking-local-ip-addresses/110803
- http://tr.wikipedia.org/wiki/STUN
- https://www.webrtc-experiment.com/docs/STUN-or-TURN.html

Kodu tarayıcıda çalıştırdım çalışmadı, https://github.com/diafygi/webrtc-ips linkindeki kodu çalıştırdım çalıştı ama gerçek ip’mi göstermedi. Vpn’nin ip adresini gösteriyor.