September 3, 2020

Как блочат интернет в Беларуси | Как обойти блокировку

Всем салют, дорогие друзья!
Среди наших подписчиков наверняка есть ребята из Беларуси. Держитесь, мы с вами!

Сегодня мы расскажем, как именно блокировался и блокируется интернет в Беларуси и как обойти блокировку.

Что вообще происходит?

Выборы в Беларуси 9 августа обернулись беспрецедентными для республики протестами, которые продолжаются до сих пор!
В тот день с самого утра в республике начались проблемы со связью. Сбои фиксировались в работе как мобильного, так и стационарного интернета.
С перебоями, причем даже при подключении VPN работали мессенджер Telegram, YouTube, соцсети.

Протесты в Минске

Как устроен интернет в Беларуси?

Согласно белорусскому законодательству, интернет-выходы — те точки, где интернет «пересекает границы» страны — фактически контролируются властями. «Пересекать границу имеют право только два государственных оператора – «Белтелеком» и Национальный центр обмена трафиком (НЦОТ).

Таким образом, в Беларуси есть только два оператора связи, которые могут отрезать страну от внешнего мира, и они управляются государством

Заблокировать интернет по всей Беларуси проще, чем в соседних странах.

Чем более распределенная интернет-инфраструктура в стране, тем сложнее это сделать: тогда ее придется блокировать в разных точках. Чем она более централизована, тем сделать это проще.
В Беларуси деятельность провайдеров лицензируется, их всего около 30, в то время как в России и на Украине тысячи провайдеров.

Как отключился интернет в Беларуси?

Блокировки интернета в Беларуси в день выборов начались в 6 часов утра по универсальному времени (UTC, в 9 утра по Минску и Москве). Это видно по данным организации Ripe NCC, которая отслеживает работу интернет-провайдеров в Европе.

Проведя анализ мы выяснили, что на территории Беларуси был полностью заблокирован протокол https, который почти повсеместно используется в интернете для шифрования трафика.
Стало понятно, что это системная вещь — не глобальный сбой маршрутизации и не перерубленный кабель: в Беларуси сознательно отключили протокол https. НЦОТ (Национальный центр обмена трафиком) использовал оборудование DPI (технология «глубокого анализа пакетов») за $2,5 млн, которое принимает решение по каждому «пакету» — пропускать его или нет.

Если шифрованный трафик блокировался, то незашифрованный пытались подделать:

Например, по запросу системы «Голос» (которая должна была обеспечить альтернативный подсчет голосов на выборах президента) пользователям выдавался фишинговый сайт, который запрашивал их персональные данные, хотя настоящая система «Голос» их не требовала. Такая детская хакерская атака.

Могли ли интернет в Беларуси заблокировать из-за рубежа?

Да, теоретически это возможно. НО если власти вопят о том, что это внешняя блокировка, то значит, что Россия тоже в этом должна была участвовать вместе с Польшей и Украиной. Мы с командой Hacker Place проверили этот фантастический сценарий.

И можем вам официально заявить, что правительство Беларуси, во главе с Лукашенко Сашей 3% - пиздаболы.


Как обмануть провайдера и обойти DPI

Различают два типа DPI: пассивный и активный.

Разница лишь в том, что активный может заблокировать пакет и не дать ему дойти до адресата, а пассивный только лишь отправить фейковый пакет с редиректом или сбросом соединения. Способы обхода обоих схожи.

Методы обхода DPI

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

HTTP

Типичный HTTP запрос (такой отправляют все известные браузеры) выглядит следующим образом:

GET /index.php HTTP/1.1
Host: ru.wikipedia.org
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: keep-alive

Все заголовки начинаются с большой буквы, далее двоеточие, затем один пробел, значение заголовка и конец строки в виде CRLF (\r\n).

Заглянем в RFC 7230:

Each header field consists of a case-insensitive field name followed
by a colon (":"), optional leading whitespace, the field value, and
optional trailing whitespace.

Согласно нему, заголовки не чувствительны к регистру, а после двоеточия может быть любое число пробелов. Это значит, что сломать DPI можно с помощью изменения «Host:» на «hOsT:». Большинство серверов примет пакет и если заменить символ конца строки с CRLF (\r\n) на LF (\n).

HTTPS

В случае с HTTPS, DPI ищют незашифрованное поле SNI, в котором содержится адрес сайта. Можно было бы изменить поле SNI, но для этого придётся модифицировать системные библиотеки, поэтому для обхода блокировок по HTTPS используется фрагментация пакетов, которая, кстати, может использоваться и для HTTP. Суть в том, что почти все DPI умеют работать только с отдельно взятыми пакетами, а читать всё соединение они не умеют, поэтому достаточно отправить запрос к сайту в виде нескольких TCP пакетов.

DNS

Все предыдущие методы бесполезны, если адрес сайта неверно определился на уровне DNS сервера. Дело в том, что многие операторы перенаправляют все DNS запросы на свой сервер и если сайт заблокирован, отправляют некорректный ответ. Решается использованием протокола DNS over HTTPS.

Как обмануть и обойти DPI

Для Windows и Linux уже существуют решения вроде GoodbyeDPI и GreenTunnel, но для android до недавнего времени ничего такого не было, поэтому я решил сделать свою программу, и получился DPITunnel.

Работает эта штука как локальный HTTP прокси, на который направляет весь трафик системы и модифицирует его с использованием вышеперечисленных способов. Если и они не сработают, то есть поддержка socks5 прокси, который используется только для заблокированных сайтов и не замедляет работу остальных.

Как использовать DPITunnel

Если есть root, то в настройках программы выбрать «Установить DPITunnel прокси глобально» и нажать кнопку на главном экране, если root нет, то нажать кнопку на главном экране и выставить прокси в ручную в настройках WiFi или APN. Адрес прокси: 127.0.0.1, порт тот, что указан в настройках программы.