Номер телефона

Последнее обновление:

Как запретить прослушивание открытых локальных портов браузером?

Если кто не в курсе, то стоит знать, что вебстраница, открытая в браузере, может осуществлять прослушивание локальных портов. Для чего это нужно?

Как правило, для двух вещей:

  1. Для неких шпионских целей,
  2. Для технических целей.

Программа, загруженная в оперативную память и запущенная на выполнение, может открывать сокеты и, соответственно, порты для прослушивания. Это может использоваться программой для того, чтобы получать или передавать данные каким-либо другим программам, в том числе, через локальную сеть или сеть интернет. Так может обстоять дело в любой операционной системе, будь то Windows, Linux, MacOS или что-то другое. 

Как правило, на компьютере любого пользователя имеются такие программы. Это, например, браузер, виртуальная машина, антивирус, мессенджер, почтовый клиент, да и множество других программ. К такому роду программ относятся, разумеется, и практически все вирусы. При этом, как правило, та или иная программа предпочитает "свои" порты, которые держит открытыми в процессе своей работы. Это означает, что перечень локальных портов, открытых на компьютере пользователя, является, зачастую, постоянным. Это возможно, в свою очередь, отслеживать. Например, для дополнительной идентификации пользователя на каком-нибудь вебсервисе. Кроме того, по наличию того определенных открытых портов можно делать вывод, запущена ли на компьютере соответствующая программа. 

Так вот, узнать, открыт ли какой-нибудь порт или нет, вполне может какая-нибудь вебстраница, открытая в браузере. При помощи средств языка javascript.

Опасно ли это для пользователя?

В целом, беспокойства по этому поводу лишены оснований. Так как даже если вебстраница (и, следовательно, сайт - сервер, с которого она загружена) и узнает о том или ином открытом порте, то максимум, что сможет вебстраница (и соответствующий сервер), это просто знать об этом. Направить запрос на открытые порты или как-то получить данные от них вебстраница НЕ СМОЖЕТ.

Если, конечно, браузер, запущенный на компьютере, не содержит серьезные уязвимости. Но, вроде бы, браузеров с подобными уязвимостями уже нет лет так 20-30 назад.

Т.е. даже если некая вебстраница и будет пытаться, путем сканирования, узнать открытые портя на компьютере пользователя, практически никакого толку для нее это не принесет. Если, конечно, речь не идет, скажем, о дополнительной проверке работы лицензионных программ, использующих определенные порты - в таком случае вебстраница сможет контролировать, например, запущена ли подобная программа или нет. Однако, даже и для такой цели лицензионные программы используют, как правило, свои собственные механизмы, не полагаясь на сканирование портов вебстраницами.

Т.е. в целом стоит сказать, что особо опасаться нечего. Но, как говорится, мало ли... У некоторых пользователей может все же возникнуть желание - дополнительно защитить свой компьютер в сети, принять меря для дополнительной анонимизации.

Как запретить прослушивание локальных портов вебстраницам

Для этой цели можно использовать разные подходы. Один из них - это использование технологии проксирования (прокси-серверов), предоставляемой браузерами. А также - небольшое расширение этой технологии. 

Надо сказать, что это - достаточно старая технология, она работает даже в ныне позабытом Internet Explorer. Это - использование файла с расширением .pac, разместив его в соответствующем каталоге - там, где установлен браузер.

Примечание: предлагаемая в этой статье технология может использоваться пользователем компьютера только на его страхи риск. Ни автор статьи, ни администрация сайта не несут никакой ответственности за какие бы то ни было возможные проблемы, связанные с применением этой технологии.

Итак, рассмотрим по шагам на примере браузеров Firefox.

1. Создаем небольшой код на языке javascript

Перейдем сразу к делу. Нужно создать файл с именем proxy.pac. В нем - поместить JS-код следующего содержания:

 // SPDX-License-Identifier: CC0-1.0
/* Блокирует сканирование портов на localhost
Также нужно изменить настройки:

URL автоматический настройки сервиса прокси - путь к этому файлу по протоколу http(s) или file, вида:
file:///C:\Users\User\AppData\Roaming\Mozilla\Firefox\Your-Profiles\profile\proxy.pac

- в настройках сетевого соединения или в about:config
Set network.proxy.autoconfig_url -> URL
Set network.proxy.type -> 2.
Set network.proxy.allow_hijacking_localhost ->; true (для браузеров версий Firefox >= 66).
 

Чтобы видеть вывод функции alert() в консоли, нужно открыть консоль БРАУЗЕРА:
Tools -> Web Developer -> Browser Console (Ctrl+Shift+J) [This is not Web Console!!]

*/

function FindProxyForURL(url, host){
alert('FindProxyForURL (file proxy.pac) had worked!'); // Вывод сообщения в КОНСОЛЬ

var allowed_ports = [
// uncomment and list any exceptions:
// 80, 3000, …
];

// CIDR
var local_cidrs = /^(?:\w+:\/\/)?(127\.(?:\d){1,3}\.(?:\d){1,3}\.(?:\d){1,3}):(\d+)?$/;

// other notations of local addresses
var localhosts = [ 'localhost', '::', '::1', '0x00.0', '0177.1', '0x7f.1' ];

var port = '';
host = '';

var rez = url.match(local_cidrs);
if(rez){
host = rez[1];
port = rez[2];
}

for(var i=0; i < localhosts.length; i++){
var host_num = url.indexOf(localhosts[i]);

if(host_num > -1){
var reg = /^(?:\w+:\/\/)?[.\d]+(:?\d+)?$/;
host = localhosts[i];
port = url.match(reg)[1].replace(":", "");
break;
}
}

// check if localhost
if (host) {
// make exceptions for allowed ports

if (port) {
if (allowed_ports.indexOf(port) > -1) {
return 'DIRECT';
}
}
// reject by proxying to local discard
var finish_IP = 'PROXY 127.0.0.1:9';
alert('Request to local server or IP was killed here: ')+ finish_IP;
return finish_IP;
}
// all other requests are allowed
return 'DIRECT';
}

Примечание. Этот  код был когда-то почерпнут на просторах интернета, но доработан с целью работоспособности.

По идее, имя файла может быть и иным, но как-то уж принято называть его именно так.

Пояснения. Это файл можно разместить где-нибудь на вебресурсе (но тогда URL будет, конечно, другой). Либо - на своем компьютере, например, в каталоге профиля браузера Firefox. Опять же, его можно разместить в любом каталоге, хоть даже в C:\Мои документы. Но тогда и путь нужно указать именно к этому каталогу.

Также желательно сделать настройки. для чего открыть файл настроек about:config, согласиться с тем, что вы знаете, что делаете. И - внести предложенные настройки. Впрочем, можно и не вносить вначале, попробовав, будет ли работать без этого.

На всякий случай: стоит ЗАПОМНИТЬ, где именно и какие настройки вы вносите. Чтобы потом, если работа браузера при новых настройках не понравится, можно было легко вернуть все обратно без переустановки и/или сброса браузера.

Что делает этот код? Он анализирует, не направлен ли был запрос от вебстраницы на локальный хостинг (т.е. на компьютер пользователя, на котором запущен браузер). Для этого используется проверка 'localhost', '::', '::1', '0x00.0', '0177.1', '0x7f.1' (это всё - возможные имена локального хостинга).

Если был обнаружен такой запрос, то он направляется по адресу 127.0.0.1:9. Это - локальный адрес, порт 9. Т.е. практически все запросы на локальный адрес будут перенаправлены на порт 9. Это - специальный порт для излишних запросов, что-то типа "мусорной корзины" или dev null. На этом порту запросы будут благополучно прекращены. Т.е. вебстраница, направляя запросы на разные локальные порты, не сможет понять, дошли ли они до программы-адресата (открывшей соответствующий порт), получены ли или нет. Так как в любом случае они будут перенаправлены на порт 9. 

По идее, при желании, можно указать список разрешенных портов, а также список разрешенных хостов, запросы с которых НЕ БУДУТ направляться на порт 9, а будут обрабатываться обычным образом. Но, не будем этим заниматься, в целях простоты. Приведенный JS-код позволяет запросы на все локальные порты, сделанные вебстраницей, перенаправить на порт 9.

Но, для того, чтобы эта технология заработала, нужно также включить прокси-настройки в браузере. Где указать URL-адрес файла proxy.pac.

2. Включаем прокси-настройки в браузере

Сетевые прокси-настройки браузера Firefox с указанием URL для файла proxy.pac
 

В зависимости от версии браузера Firefox, сетевые настройки могут выглядеть по-разному. Например, в одной из старых версий они могут выглядеть так, как показано на скриншоте. 

Нужно использовать самую нижнюю (по скриншоту) возможность прокси-настроек URL автоматической настройки сервиса прокси. Если путь отличается от указанного, нужно, соответственно, задать правильный путь.

После чего следует закрыть настройки, потом снова открыть их и нажать кнопку Обновить.

Дело в том, что браузер будет кэшировать содержимое файла proxy.pac. Поэтому при внесении изменений в него следует дать знать об этом браузеру, чтобы он вместо кэша взял новое содержимое этого файла. Что осуществляется нажатием кнопки Обновить.

Если не заработает, то нужно очистить кэш браузера (Shift + Ctrl + Delete), затем снова открыть сетевые настройки и нажать Обновить. После чего технология должна заработать.

Если все же возникнут проблемы, способы их устранения можно посмотреть здесь. Там также есть ссылка на источник, где более подробно описывается технология PAC.

Что будет в результате?

Все вебзапросы с открытых в браузере страниц, направленные в интернет, будут проходить обычным образом, БЕЗ проксирования. А вот запросы, направленные на локальный хост (т.е. на компьютер пользователя) будут перенаправляться на порт 9, т.е. блокироваться, по сути.

Это можно отключить в любой момент - просто открыв сетевые настройки и указав там пункт, например, "Без прокси".

Где эта технология будет работать?

В целом, она должна работать не только в Firefox (причем, начиная чуть ли не с самых первых версий), но и в других браузерах, например, в Google Chrome.

Стоит ли это применять?

В целом, толку от этой технологии не столь много. Это больше как дополнительный способ анонимизации. Но, есть и такой нюанс. Если некая вебстраница имеет, скажем так, нехорошие намерения, то она может, помимо всего прочего, еще и сканировать локальные порты, пытаясь собрать о компьютере пользователя еще и эту информацию. Чтобы потом как-то ее использовать в своих целях.

Мы проводили тестирование этой технологии на ряде подозрительных сайтах, в частности, на https://t.me, т.е. на Telegram. Никакого сканирования портов обнаружено не было. Т.е. Telegram этим, судя по всему, не занимается.По крайней мере, в его вебверсии.

Этот вывод НЕ КАСАЕТСЯ приложения Telegram. Как там обстоят дела, мы не знаем.

Однако, некоторые другие сайты могут это делать. Поэтому, если пользователь обнаружит, что локальные порты на его компьютере подвергаются сканированию, то это, как минимум, будет информацией к размышлению. А уж дальше - выбор самого пользователя, что делать. Оставаться ли на этой вебстранице, стоит ли вообще посещать такой сайт - решать ему и только ему, конечному пользователю.

Да и вообще, сейчас имеются соответствующие дополнения к браузерам, которые точно так же могут блокировать запросы, в том числе, и на локальные порты компьютера. Приведенный в статье способ позволяет все сделать без установки дополнений, самостоятельно.

Другое дело, что далеко не все дополнения для браузеров позволяют установить факт такого сканирования портов.

Как узнать, что некая вебстраница сканирует локальные порты?

Для этого нужно посмотреть консоль БРАУЗЕРА. Открыть ее можно либо через Ctrl+Shift+J, либо путем 

Инструменты → Вебразработка → Консоль браузера.

Это НЕ вебконсоль. Отличие между ними в том, что консоль браузера, помимо результатов выполнения кода javascript на открытой вебстранице, выводит также информацию о работе браузера (в вебконсоли ее нет).


Комментарии:
Всего комментариев:0
Пожалуйста, не забудьте ознакомиться с правилами оставления комментариев.



Подписаться на комментарии на этой странице

Мы можем выполнить

Другие услуги
Интересная и полезная
информация
НАПИШИТЕ НАМ
Яндекс.Метрика
Номер телефона
© Copyright Все права защищены 2013-2025 Научный консалтинг