WebRTC, VPN Kullanırken Bile Gerçek IP’yi Sızdırıyor

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:

One thought on “WebRTC, VPN Kullanırken Bile Gerçek IP’yi Sızdırıyor

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir