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);});
[Not a valid template]
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.