/fakesni

Программа для обхода блокировок путем модификации заголовков протокола TLS.

Primary LanguageGoCreative Commons Zero v1.0 UniversalCC0-1.0

FakeSNI

Программа для обхода блокировок путем модификации поля SNI в протоколе TLS.


Предпосылки

В настоящее время большинство российских провайдеров перешло на использование 
фильтров DPI. В случае соединений по протоколу HTTPS почти весь обмен 
с удаленным сервером зашифрован. Для определения адресата фильтру остаются 
доступны два параметра соединения: IP-адрес и поле ServerName в запросе 
ClientHello. По ряду причин фильтрация по IP-адресу плохо работает на практике 
поэтому обычно проверяется ServerName как более надежный способ. Современные 
браузеры всегда добавляют SNI и, соответственно, открыто отправляют ServerName. 
Однако, протокол TLS 1.2 допускает вообще не добавлять SNI в клиентский запрос. 
В этом случае сервер должен предполагать соединение с одним из обслуживаемых 
сайтов по умолчанию. Все проверенные автором провайдерские фильтры в настоящий 
момент пропускают запросы с отсутствующем SNI. Иногда возможно отправлять 
фальшивое значение для лучшей маскировки.


Реализация

К сожалению, невозможно убрать или заменить SNI путем изменения настроек 
браузеров даже с помощью расширений. Эта программа связывается с сайтом через 
соединения инициализированные ClientHello с фальшивым значением ServerName. 
Для того чтобы была возможность просматривать страницы программа локально 
запускает вебсервер ретранслирующий ответы. Таким образом, браузер может 
обмениваться с сайтом через адрес http://127.0.0.1:10000/

Если при запуске не указаны параметры -sni, -esni, -padding, -ignorecert,
программа в автоматическом режиме по очереди проверит несколько вариантов 
соединения.


Установка

Установка программы не требуется. Скачайте архив соответствующий вашей ОС:

https://github.com/stopcenz/fakesni/releases/

Распакуйте и запустите файл fakesni. Для работы достаточно учетной записи 
простого пользователя. После запуска программа сама откроет новую вкладку 
с сайтом. Если этого не произошло попробуйте открыть в вашем браузере адрес
http://127.0.0.1:10000/


Параметры

-host rutracker.org
  Доменное имя сайта с которым устанавливается соединение. Допустимо указывать 
  несколько таких ключей:

  fakesni.exe -host rutracker.org -host static.t-ru.org

-sni vk.com
  Строка отсылаемая в поле SNI/ServerName. Подойдет имя любого популярного сайта.
  Если этот параметр указан в сочетании с параметром -esni сервер с большой 
  вероятностью отклонит попытку соединения.

-esni
  Искать ключи и в случае успеха применять в запросе расширение ESNI.

-padding 12500
  Удлинить ClientHello на указанное количество байт для получения дополнительного 
  смещения поля SNI. Значения больше 10000 позволяют обойти некоторые фильтры. 
  Подробнее см.: 
  https://ntc.party/t/http-headers-tls-padding-as-a-censorship-circumvention-method/168

-addr 127.0.0.1
  IP-адрес сетевого интерфейса который прослушивает программа. По соображениям 
  безопасности по умолчанию используется "127.0.0.1". Если вы хотите 
  предоставить доступ другим устройствам в вашей сети установите значение 
  "0.0.0.0" тогда программа будет отвечать на всех доступных интерфейсах. Это 
  может быть полезно для подключения телефона через стационарный компьютер.

-port 10000
  Номер сетевого порта который прослушивает программа для связи с браузером.

-timeout 5
  Время (в секундах) ожидания завершения рукопожатия TLS.
  
-noscript
  Запретить выполнение скриптов на HTML-страницах.

-ignorecert
  Пропускать проверку полученного от сервера сертификата.

-nobrowser
  Не открывать браузер.


Рекомендации

Для большинства применений достаточно указать только параметр(ы) -host. Тогда 
программа сама попытается подобрать рабочий вариант конфигурации. 

Вместе с программой удобно использовать браузер Firefox с установленным плагином 
Temporary Containers или браузер Safari в приватном режиме. В этих случаях 
каждая вкладка будет работать с отдельным хранилищем изолированным от отстальных 
вкладок. Это позволит исключить утечки данных между сайтами.


Лицензия

Эта работа публикуется под лицензией СС0. Вы можете использовать программу 
без каких-либо ограничений.