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 地址。
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. 溯源利用
<!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("");
pc.createOffer(function(sdp) {sdp.sdp.split('\n').forEach(function(line) {if (line.indexOf('candidate') < 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,可对其进行定向二次开发,达到溯源反制的目标。