WebRTC 真实IP泄露防范

WebRTC 真实IP泄露防范

1.1. 前言

很多人可能误以为使用代理就可以完全隐藏我们的真实IP地址,但实际并不总是这样。事实上,有大量文章指出,WebRTC存在安全风险,**而WebRTC安全风险的可怕之处在于,即使你使用VPN代理上网,仍然可能会暴露自己的真实IP地址。**

虽然这听起来有点让人担忧,但我们不应该失去对代理技术的信心。代理依然是一种非常有用的工具,可以保护我们的在线隐私和安全。只是我们需要意识到代理并不是百分之百可靠的,因此我们需要采取其他额外的措施来保护自己的隐私和安全。

1.2. 获取真实IP地址演示

有如下3个网站推荐使用:

  • https://ip8.com/webrtc-test
  • https://www.hackjie.com/tracking
  • https://dnsleaktest.org/dns-leak-test

我平时比较喜欢使用FireFox和Chrome,通过对这俩的测试,发现使用Firefox默认不会获取到真实IP,但Chrome就算挂了代理,仍然能获取到真实IP地址。

红色为真实IP地址

1.3. WebRTC介绍

**WebRTC**(Web Real-Time Communications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC 包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。

1.4. WebRTC 泄漏真实IP原理

WebRTC 允许浏览器之间直接建立点对点连接,从而实现实时通信,例如视频、语音和数据传输。在建立 WebRTC 连接时,浏览器会向对方发送自己的 IP 地址,以便双方建立连接。攻击者可以通过 JavaScript 或其他技术来访问 WebRTC 中的 API,以获取用户的 IP 地址,从而进行跟踪、监视或攻击。

具体来说,攻击者可以利用浏览器的 WebRTC API,通过请求媒体设备的权限,获取用户的 IP 地址。攻击者可以通过编写恶意 JavaScript 代码来执行这些请求,这些代码可能会被插入到网站中,以执行跨站点脚本攻击(XSS)等攻击。

此外,WebRTC 的 STUN/TURN 服务器也可以泄漏用户的 IP 地址。STUN/TURN 服务器是 WebRTC 中用于 NAT 穿透和中继的关键组件。如果这些服务器存在漏洞或者未正确配置,攻击者可以通过它们来获取用户的真实 IP 地址,从而进行攻击。

1.5. 防范措施

安装WebRTC Leak Shield扩展

  • Chrome
  • FireFox

1.6. 溯源利用

代码语言:html
复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>WebRTC泄露检测</title>
  </head>
  <body>
    <script>
      function findIP(onNewIP) {
        var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
        var pc = new myPeerConnection({iceServers: [{urls: "stun:stun.l.google.com:19302"}]}),
        noop = function() {},
        localIPs = {},
        ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
        key;
    function ipIterate(ip) {
      if (!localIPs[ip]) onNewIP(ip);
      localIPs[ip] = true;
    }

    pc.createDataChannel(&#34;&#34;);

    pc.createOffer(function(sdp) {
      sdp.sdp.split(&#39;\n&#39;).forEach(function(line) {
        if (line.indexOf(&#39;candidate&#39;) &lt; 0) return;
        line.match(ipRegex).forEach(ipIterate);
      });
      pc.setLocalDescription(sdp, noop, noop);
    }, noop);

    pc.onicecandidate = function(ice) {
      if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
      ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
    };
  }

  function show(ip) {
    alert(ip);
  }

  findIP(show);

</script>
</body>
</html>

上述的代码访问后直接弹出IP,可对其进行定向二次开发,达到溯源反制的目的。