Защита от сканирования портов: блокировка зондирования
Как веб-сайты используют JavaScript для зондирования портов локальной сети и обнаружения сервисов, и как заблокировать сканирование портов на уровне браузера.
Нужна поддерживаемая продуктовая документация?
У этой статьи есть соответствующая страница в центре документации. Используйте docs для каноничного сценария настройки, актуальных флагов и долгосрочной справки.
Введение
На вашем компьютере работают сервисы на различных сетевых портах: серверы разработки, базы данных, протоколы удаленного рабочего стола, VNC, Docker и другие. Каждый раз, когда вы посещаете веб-сайт, скрипты на этой странице могут попытаться зондировать порты вашей локальной сети, чтобы определить, какие сервисы запущены. Паттерн открытых и закрытых портов создает отличительный отпечаток вашей локальной среды, достаточно уникальный для идентификации между сессиями и даже между разными браузерами.
Это серьезная проблема конфиденциальности. Отпечаток по портам может сохраняться даже при смене IP-адреса, очистке cookie или переключении на другой профиль браузера. Сервисы, работающие на вашей машине, как правило, остаются постоянными во времени, что делает этот сигнал высоконадежным для любого веб-сайта, который решит его собирать.
BotBrowser обеспечивает встроенную защиту портов, контролирующую реакцию браузера на зондирование локальных портов на уровне движка. Вместо простой блокировки соединений (что само по себе обнаруживаемо), BotBrowser обеспечивает, что все зондирования локальных портов возвращают однородные результаты. Это делает невозможным для веб-сайтов отличить открытые порты от закрытых, эффективно нейтрализуя всю эту категорию отслеживания отпечатков.
Почему конфиденциальность портов важна
Сканирование портов из браузера - реальная и хорошо задокументированная проблема конфиденциальности. Веб-сайты были замечены за зондированием десятков локальных портов для построения картины программного обеспечения, работающего на машинах посетителей. Типы собираемой информации включают детали всей вашей вычислительной среды.
Инструменты разработки являются частой целью. Когда у веб-разработчика работают сервисы на портах, обычно связанных с фреймворками и инструментами сборки, любой веб-сайт может определить, что посетитель, вероятно, является разработчиком программного обеспечения. Одна эта информация значительно сужает потенциальный пул идентичностей.
Программное обеспечение удаленного доступа - еще один сигнал. Сервисы, связанные с удаленным рабочим столом, терминальным доступом и инструментами совместного использования экрана, раскрывают важные детали о том, как вы используете свою машину и какой инфраструктурой управляете.
Сервисы баз данных, работающие на стандартных портах, сообщают веб-сайтам о технологическом стеке, с которым вы работаете. Используете ли вы реляционные базы данных, документные хранилища или кэши в памяти, каждый работающий сервис добавляет еще одну точку данных к вашему отпечатку портов.
Сервисы контейнеризации и виртуализации особенно показательны. Их наличие указывает на определенный тип технического пользователя и может раскрыть детали вашего рабочего процесса разработки и развертывания.
Инструменты безопасности и сетевые утилиты завершают картину. VPN-клиенты, интерфейсы управления файрволами и сервисы мониторинга безопасности каждый вносят вклад в комплексный профиль вашей вычислительной установки.
Комбинация всех этих сигналов создает стабильный отпечаток. Ваш набор работающих сервисов обычно остается постоянным между сессиями просмотра, что делает его одним из самых надежных доступных сигналов отслеживания. Даже если вы ротируете IP, очищаете все хранилище браузера и используете свежий профиль браузера, паттерн ваших работающих сервисов остается в основном неизменным.
Когда результаты сканирования портов комбинируются с традиционными техниками снятия отпечатков, такими как анализ Canvas, рендеринг WebGL и перечисление шрифтов, общий отпечаток становится еще более уникальным и устойчивым. Этот многоуровневый подход к отслеживанию отпечатков объясняет, почему защита портов является важным компонентом комплексной конфиденциальности.
Проблема защиты портов
Защита от снятия отпечатков на основе портов более нюансирована, чем может показаться изначально. Несколько распространенных подходов имеют значительные ограничения, снижающие их эффективность на практике.
Почему простая блокировка не работает
Прямолинейный подход к защите портов - блокировка всех соединений к локальным адресам. Однако это создает собственный набор проблем, которые могут сделать ваш браузер более идентифицируемым, а не менее.
Когда соединения к localhost блокируются напрямую, паттерн ошибок отличается от того, что производит стандартный браузер. Веб-сайт может обнаружить само поведение блокировки, превращая вашу меру защиты в еще один отличительный сигнал. Кроме того, равномерная блокировка сама по себе заметна. Если каждый порт мгновенно возвращает один и тот же заблокированный ответ, единообразие выделяется на фоне естественной вариации, которую показал бы нормальный браузер.
Блокировка также нарушает легитимную функциональность. Многие веб-приложения нуждаются в связи с локальными сервисами. Сервисы потоковой музыки, подключающиеся к десктопным приложениям, инструменты разработки, использующие localhost для горячей перезагрузки, и потоки аутентификации, полагающиеся на локальные серверы перенаправления - все зависят от связи через localhost. Полная блокировка нарушает эти рабочие процессы.
Расширения браузера
Расширения, фильтрующие сетевые запросы, могут блокировать соединения к локальным адресам через правила фильтрации. Однако расширения работают на уровне JavaScript, что означает, что они перехватывают запросы после того, как движок браузера уже начал их обработку. Характеристики таймингов самой блокировки могут предоставить анализируемую информацию. Расширения также могут быть обнаружены через побочные эффекты на браузерных API, и не все типы соединений могут быть перехвачены согласованно через разные механизмы запросов вроде WebSocket, загрузки изображений и fetch-вызовов.
Правила файрвола
Файрволы операционной системы могут ограничивать, какие процессы могут привязываться к портам. Однако это не решает проблему снятия отпечатков по портам, потому что браузер делает исходящие соединения к localhost, а не получает входящие из интернета. Правила файрвола, блокирующие браузеру соединения к localhost, нарушат легитимную связь с локальными сервисами и создадут те же проблемы обнаруживаемости, что и простая блокировка.
Сетевые пространства имен и контейнеры
Запуск браузера в контейнере с отдельным сетевым пространством имен может предотвратить доступ к сервисам хоста. Этот подход эффективен в изоляции, но добавляет значительную сложность инфраструктуры. Он может быть непрактичен для всех сценариев развертывания, особенно когда браузер должен взаимодействовать с сервисами на хостовой машине в рамках легитимных рабочих процессов.
Подходы на основе VPN
Некоторые конфигурации VPN могут по-другому маршрутизировать локальный трафик. Это добавляет сетевые накладные расходы и вводит дополнительную сложность без полного решения основной проблемы снятия отпечатков. Фундаментальная проблема в том, как браузер реагирует на зондирование портов, и одних лишь изменений маршрутизации недостаточно для нормализации этих ответов.
Подход BotBrowser к защите портов
Защита на уровне движка
BotBrowser решает проблему снятия отпечатков по портам на правильном уровне: внутри движка браузера. Флаг --bot-port-protection (PRO) активирует защиту, контролирующую поведение доступа к портам на самом глубоком уровне. При включении все соединения к локальным адресам производят однородные характеристики таймингов независимо от того, работает ли сервис на данном порту.
chrome --bot-profile="/path/to/profile.enc" \
--bot-port-protection
Этот подход фундаментально отличается от методов блокировки и фильтрации, описанных выше, и обеспечивает защиту, которую эти методы не могут обеспечить.
Соединения проходят нормально. BotBrowser не блокирует соединения к localhost. Вместо этого он контролирует наблюдаемое поведение таймингов, чтобы открытые и закрытые порты были неотличимы для любого скрипта на странице. Ваши локальные сервисы продолжают работать как ожидается.
Нет обнаруживаемых артефактов. Все API браузера ведут себя нормально. Нет отсутствующих свойств, измененных прототипов или необычных паттернов ошибок, которые указывали бы на активную защиту. Браузер выглядит и ведет себя точно как стандартная установка.
Легитимные локальные сервисы продолжают работать. Приложения, которым нужна связь через localhost, функционируют корректно. Используете ли вы сервис потоковой музыки, локальный сервер разработки или любое другое приложение, полагающееся на связь через localhost, все работает как ожидается. Защита конкретно адресована сигналам таймингов, которые позволили бы веб-сайту различать состояния портов.
Комплексное покрытие
Защита портов BotBrowser охватывает все часто зондируемые диапазоны адресов для обеспечения полной конфиденциальности:
- 127.0.0.0/8: полный диапазон IPv4 loopback, включая все адреса 127.x.x.x
- ::1: IPv6 loopback-адрес
- localhost: доступ к локальным сервисам по имени хоста
Защита охватывает 30 часто зондируемых портов по этим диапазонам адресов. Это порты, наиболее часто атакуемые браузерным снятием отпечатков по портам, покрывающие инструменты разработки, базы данных, сервисы удаленного доступа, контейнерные платформы и другое часто используемое программное обеспечение.
Конфигурация на основе профиля
Помимо флага CLI, защита портов может быть включена непосредственно в конфигурации профиля. Это идеально для профилей, которые всегда должны иметь активную защиту портов, гарантируя, что защита никогда случайно не будет пропущена.
{
"configs": {
"portProtection": true
}
}
При установке в профиле защита портов активируется автоматически при загрузке профиля. Никакой дополнительный флаг CLI не нужен. Это упрощает стандартизацию защиты портов по всему парку браузерных профилей.
Настройка и использование
Базовая настройка CLI
Начать работу с защитой портов требуется добавить всего один дополнительный флаг к команде запуска BotBrowser:
chrome --bot-profile="/path/to/profile.enc" \
--bot-port-protection \
--user-data-dir="$(mktemp -d)"
Это одно дополнение защищает отпечаток ваших локальных сервисов на всю сессию просмотра.
Полная конфигурация конфиденциальности
Для комплексной сетевой конфиденциальности объедините защиту портов с прокси, DNS и защитой WebRTC. Эта комбинация решает все основные векторы снятия отпечатков и отслеживания на сетевом уровне:
chrome --bot-profile="/path/to/profile.enc" \
--bot-port-protection \
--proxy-server=socks5://user:pass@proxy:1080 \
--bot-local-dns \
--bot-webrtc-ice=google
Эта конфигурация обеспечивает одновременную защиту ваших локальных сервисов, DNS-запросов, IP-адреса и WebRTC-соединений. Каждый уровень защиты адресует отдельный вектор отслеживания, и вместе они обеспечивают комплексное решение сетевой конфиденциальности.
Интеграция с Playwright
const { chromium } = require('playwright-core');
(async () => {
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-port-protection',
],
headless: true,
});
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
// Защита портов активна для всей навигации страниц
await browser.close();
})();
Интеграция с Puppeteer
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-port-protection',
],
headless: true,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
})();
Развертывание на безголовом сервере
На безголовых серверах защита портов особенно важна. Серверы обычно запускают множество сервисов, включая базы данных, агенты мониторинга, контейнерные платформы и серверы приложений. Без защиты портов любой веб-сайт, посещенный браузером, мог бы потенциально каталогизировать все эти сервисы, создавая высоко отличительный отпечаток, привязанный к конкретному серверу.
chrome --bot-profile="/path/to/profile.enc" \
--bot-port-protection \
--headless=new \
--proxy-server=socks5://user:pass@proxy:1080
Для продакшен-развертываний рассмотрите установку защиты портов в конфигурации профиля, а не передачу как флага CLI. Это обеспечит, что защита всегда активна независимо от того, как запускается браузер.
Верификация
Чтобы подтвердить, что защита портов работает корректно в вашей среде:
- Запустите известный сервис на определенном порту (например, простой HTTP-сервер на порту 8080)
- Запустите BotBrowser с
--bot-port-protection - Перейдите на страницу тестирования отпечатков, проверяющую доступность портов
- Подтвердите, что тестовая страница не может отличить открытый порт от закрытых
- Убедитесь, что ваши локальные сервисы продолжают работать корректно через браузер
Этот процесс верификации гарантирует, что защита активна и ваши легитимные рабочие процессы не затронуты.
Лучшие практики
-
Включайте защиту портов на машинах разработки. Разработчики обычно запускают множество сервисов, создающих высоко отличительный отпечаток портов. Защита портов особенно ценна в этом сценарии, потому что комбинация серверов разработки, баз данных и инструментов создает отпечаток, часто уникальный для одного человека.
-
Включайте защиту портов на серверах. Безголовые серверы с множеством сервисов, таких как базы данных, агенты мониторинга, Docker и серверы приложений, особенно уязвимы для снятия отпечатков по портам. Богатый ландшафт сервисов на продакшен или стейджинг-сервере делает его легкой целью для идентификации через анализ портов.
-
Комбинируйте с другими сетевыми защитами. Защита портов адресует снятие отпечатков локальных сервисов, что является одним элементом картины сетевой конфиденциальности. Комбинируйте ее с конфигурацией прокси для конфиденциальности IP, предотвращением утечек DNS для конфиденциальности запросов и защитой WebRTC для конфиденциальности соединений. Вместе эти защиты создают комплексный слой сетевой конфиденциальности.
-
Используйте конфигурацию на основе профиля для постоянной защиты. Если защита портов должна быть активна для конкретного профиля, установите ее в поле
configs.portProtectionпрофиля, чтобы она активировалась автоматически каждый раз. Это устраняет риск забыть включить флаг CLI и обеспечивает согласованную защиту между всеми сессиями. -
Тестируйте после изменений конфигурации. При модификации сетевой конфигурации, конфигурации прокси или серверной среды убедитесь, что защита портов все еще работает как ожидается. Быстрая верификация подтверждает, что все уровни защиты работают корректно вместе.
-
Рассмотрите полную поверхность отпечатков. Защита портов наиболее эффективна при использовании как части полной стратегии защиты отпечатков. Проверьте настройки Canvas, WebGL, шрифтов и других отпечатков наряду с защитой портов для обеспечения комплексного покрытия против отслеживания.
Часто задаваемые вопросы
Нарушает ли защита портов рабочие процессы локальной разработки? Нет. Защита портов контролирует характеристики таймингов локальных соединений, а не то, успешны они или нет. Легитимные соединения к локальным сервисам работают нормально. Ваши серверы разработки, подключения к базам данных и локальные инструменты продолжают функционировать как ожидается. Защита конкретно предотвращает использование веб-сайтами различий в таймингах для картирования ландшафта локальных сервисов.
Покрывает ли защита портов все порты? BotBrowser покрывает 30 часто зондируемых портов по IPv4 loopback (127.0.0.0/8), IPv6 loopback (::1) и localhost. Эти порты были выбраны на основе анализа реальных данных о том, какие порты наиболее часто атакуются браузерным снятием отпечатков по портам. Они покрывают подавляющее большинство сервисов, которые скрипты снятия отпечатков пытаются обнаружить.
Можно ли использовать защиту портов без прокси? Да. Защита портов не зависит от конфигурации прокси. Она защищает отпечаток ваших локальных сервисов независимо от настройки сетевой маршрутизации. Однако для комплексной конфиденциальности мы рекомендуем сочетать защиту портов с прокси для защиты IP-адреса.
Влияет ли защита портов на WebSocket-соединения к localhost? WebSocket-соединения к localhost продолжают работать нормально. Защита обеспечивает однородное поведение соединений по портам, предотвращая использование веб-сайтами WebSocket-зондов для картирования локальных сервисов.
Включена ли защита портов по умолчанию?
Нет. Защита портов требует либо флага CLI --bot-port-protection, либо настройки профиля configs.portProtection. Она не активна по умолчанию, давая вам полный контроль над тем, когда и где применяется защита.
Работает ли защита портов в безголовом режиме? Да. Защита портов работает идентично как в обычном, так и в безголовом режиме. Запускаете ли вы BotBrowser на десктопе или на безголовом сервере, защита обеспечивает одинаковый уровень покрытия.
Могут ли веб-сайты обнаружить, что защита портов активна? Защита портов BotBrowser работает на уровне движка, ниже уровня JavaScript. Нормализация таймингов обеспечивает неотличимость открытых и закрытых портов друг от друга. Нет артефактов, видимых JavaScript, измененных поведений API или необычных паттернов ответов, которые указывали бы на активную защиту. Браузер ведет себя точно так, как вела бы себя стандартная установка.
А как насчет портов в локальной сети (192.168.x.x)? Защита портов BotBrowser покрывает диапазоны loopback-адресов (127.0.0.0/8, ::1, localhost). Для адресов локальной сети (192.168.x.x, 10.x.x.x, 172.16.x.x) обратитесь к последней документации для деталей текущего покрытия.
Как защита портов дополняет другие функции BotBrowser? Защита портов является одним слоем в комплексной системе защиты отпечатков BotBrowser. Она работает наряду с защитой Canvas, WebGL, шрифтов, предотвращением утечек WebRTC, DNS и многими другими функциями для создания согласованного и аутентичного отпечатка браузера. Каждая функция адресует отдельный вектор отслеживания, и вместе они обеспечивают всестороннюю защиту от отслеживания на основе отпечатков.
Итоги
Браузерное снятие отпечатков по портам создает устойчивый сигнал отслеживания, анализируя, какие сервисы работают на вашей машине. Этот отпечаток сохраняется при смене IP, очистке cookie и сбросе браузера, что делает его одним из самых долговечных методов отслеживания, доступных веб-сайтам.
Защита портов BotBrowser на уровне движка обеспечивает, что все зондирования портов возвращают однородные результаты, делая невозможным для веб-сайтов картирование ландшафта ваших локальных сервисов. Защита работает на самом глубоком уровне, не производит обнаруживаемых артефактов и сохраняет полную совместимость с легитимными локальными сервисами.
В сочетании с конфигурацией прокси, предотвращением утечек DNS и защитой WebRTC, защита портов завершает картину сетевой конфиденциальности. Вместе эти функции обеспечивают, что ваша сетевая среда не раскрывает ничего, что могло бы использоваться для отслеживания отпечатков.
Для смежных сетевых защит см. DNS Leak Prevention и WebRTC Leak Prevention. Для полного управления идентичностью см. Multi-Account Browser Isolation.
Похожие статьи
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.