Похоже, что к WebRTC был применен закон непредвиденных последствий, потому что одну небольшую полезную функцию можно превратить в идеальный трекер пользователей.
Интернет по-прежнему работает на IP4, и чтобы он работал, нам нужно использовать преобразование сетевых адресов или NAT. Почти все внутренние сети используют частные или локальные IP-адреса, которые нельзя использовать в общедоступном Интернете. Когда машина хочет подключиться к общедоступному Интернету, она использует общедоступный IP-адрес, который она использует совместно с другими машинами. Идентификатор машины сохраняется в виде номера порта, что фактически увеличивает количество используемых IP-адресов еще на 16 бит адреса. Таким образом, один общедоступный IP-адрес может обслуживать около 216 локальных пользователей.
Многие интернет-провайдеры также используют динамическое выделение пользователям общедоступных IP-адресов. поэтому вы можете даже не получать один и тот же общедоступный IP-адрес при каждом подключении к Интернету.
NAT — это гениальное решение, которое позволило IP4 продолжать работать в эпоху, когда IP6 с его огромным адресным пространством должен стать существенным обновлением. Пока вам не нужно поддерживать входящие соединения или вы можете использовать переадресацию портов, если вы это делаете, NAT — это столько возможностей подключения, сколько вам нужно.
Это также обеспечивает хорошую анонимность.
Когда вы подключаетесь к веб-сайту, скажем, все, что веб-сайт получает, — это ваш IP-адрес и номер порта, который будет использоваться для отправки данных обратно вам. Учитывая, что IP-адрес может быть передан большому количеству пользователей, он не очень полезен для отслеживания вашего просмотра.
Проще говоря, веб-сайт не может знать, что это вы в следующий раз, когда появится запрос с того же IP-адреса и номера порта, потому что они динамически сопоставляются с локальными IP-адресами, которые меняются.
Это причина того, что городской миф о том, что вас идентифицируют по общедоступному IP-адресу, является всего лишь мифом. Конечно, ваш интернет-провайдер может регистрировать веб-сайты, к которым вы подключаетесь, потому что он отвечает за выдачу вам общедоступного IP-адреса и, если он использует NAT, выделенного номера порта. Однако, если ваша локальная сеть подключается через собственный NAT, интернет-провайдер не может зарегистрировать, какой пользователь в локальной сети что просматривает.
Хотя может быть неправда, что для большинства пользователей общедоступный IP-адрес идентифицирует их, почти всегда верно, что локальный IP-адрес является идентификатором. Локальные IP-адреса меняются не так часто, поэтому вызывает тревогу обнаружение, что существует очень простой способ для веб-сайта обнаружить ваш локальный IP-адрес.
Дэниел Рослер не первый, кто это заметил, но он собрал красивую демонстрацию действующего механизма на GitHub.
WebRTC — это протокол одноранговой связи, который позволяет двум браузерам легко устанавливать голосовую или видеосвязь без использования промежуточного сервера. Как вы могли догадаться, иногда требуется знание общедоступного и локального IP-адреса машины.
STUN — (Утилиты обхода сеанса для Nat) — это протокол, который позволяет машине обнаруживать свой общедоступный IP-адрес, даже если он находится за NAT. Все, что происходит, — это то, что машина отправляет пакет UDP на сервер STUN, а сервер STUN отправляет обратно пакет ответа, содержащий общедоступный IP-адрес. Это очень просто, и в Firefox есть STUN-сервер по умолчанию, который может использоваться даже Chrome.
Однако теперь у нас есть механизм WebRTC, который легко использовать в JavaScript, который найдет общедоступный и локальный IP-адрес с использованием серверов по умолчанию. При этом не используется обычный Ajax XMLHttpRequest, поэтому в настоящее время он не отображается в консоли разработчика и не блокируется надстройками конфиденциальности. Кроме того, в настоящий момент по умолчанию включены средства WebRTC.
Вы можете попробовать это сами: https://diafygi.github.io/webrtc-ips/
На странице будет отображаться ваш публичный и локальный IP.
Всегда было относительно легко найти общедоступный IP-адрес, он находится в заголовках, это новость в доступности обоих из JavaScript.
Учитывая оба IP-адреса, идентификация пользователя без использования файлов cookie или снятия отпечатков пальцев довольно проста и точна.
Итак, непредвиденные последствия:
IP4 нуждался в NAT для поддержки большего числа пользователей, а NAT улучшает анонимность, разделяя общедоступный IP-адрес и идентификацию пользователя.
WebRTC необходимо знать локальный и общедоступный IP-адрес для обеспечения децентрализованной и, следовательно, более частной связи, и WebRTC предоставляет эту информацию всем, кто этого хочет, что снижает анонимность.
Каждый раз, когда безопасность или конфиденциальность защищаются одной группой программистов, это приводит к ограничению ваших возможностей, и другая группа программ тратит годы, пытаясь обойти это.
В этом случае это буря во временной чашке чая, потому что с IP6 все и вся вещь будет однозначно идентифицироваться по своему общедоступному IP-адресу. Означает ли это, что группы гражданских прав будут протестовать против введения IP6? В конце концов, это будет универсальное удостоверение личности.