Как стать автором
Обновить

Комментарии 46

Хорошая статья
image

В новостях российских СМИ по этому поводу можно было видеть много примеров того, как "ученый изнасиловал журналиста".


От "гугл/амазон запретили использовать свой сервис для обхода блокировок Роскомнадзора" до "амазон запретил использование прокси-серверов".


Так что всегда лучше читать оригинал.

Domain fronting это использование CDN в качестве HTTP-прокси.

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


А в случае когда прикрытие домена используется просто для доступа к обычному сайту в этой сети то разницы для CDN не должно быть.

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


function FindProxyForURL(url, host)
{
 if (host == "[заблокированный домен]" && shExpMatch(url, "http:*"))
    return "HTTPS [не блокируемый домен];"; 
 else
    return "DIRECT";
}

Алгоритм действий такой.


  1. Заходим на sslchecker
  2. Вводим заблокированный домен
  3. В поле SAN выбираем рабочий не заблокированный домен
  4. Проверяем выбранный домен(должен открываться по https)
  5. Подставляем домены в proxy.pac скрипт соответственно

Данный скрипт сработает для адреса http://[заблокированный домен]

Возможно данный метод будет работать и для сайтов у которых нет https вообще. Надо найти сайт на том-же IP у которого будет https и им прикрыть.

Уже сама формулировка "сайт без https" в наше время вызывает вопросы. Let's Encrypt опять же.

Ну почему то bittorrent.org не озаботились сертификатом для сайта. Но с этим сайтом этот метод не работает.

Скачивать болванки подписанные ключами, через vpn и ssl, вам не кажется, что легче, презерватив на роутер надеть?

Отдельные лучи света всяким фильмам, видосам и поклонникам BD рипов.
В общем много много тон угля сгорает что бы защитить порнуху.

Современные и даже уже устаревшие процессоры легко делают AES со скоростью больше гигабайта в секунду, о каких тоннах угля вы говорите? Десять-пятнадцать лет назад шифрование может быть и было проблемой, но в наше время затраты на шифрования ничтожны по сравнению с преимуществами в части безопасности и конфиденциальности, которые оно даёт.

Шифрованный трафик не кешируется оператором.

НЛО прилетело и опубликовало эту надпись здесь
AWS и Гугл зарабатывают деньги. И в еуле есть пункт что клиент не должен нарушать законодательство и создавать проблемы своими действиями соседям.
Впрочем производители железа потирают руки, как и производители OC
НЛО прилетело и опубликовало эту надпись здесь
Деньги тут не первостепенны. Телеграм своими действиями нарушает бизнес партнеров Гугла и Амазон, которые у них хостятся. Это естественно, что те пытаются их защитить. На кону их репутация.

Не Телеграм, а Signal. И даже не Signal, а хакеры из группы APT29. До того как эти личности начали для своих тёмных делишек использовать эту возможность, никому не было дела до того что Signal использует google.com для обхода цензуры. В статье даже написано что Signal пользовался этим приёмом больше года. Всё это время его приёмы никому не мешали.

Естественно не мешали — РКН ведь не блокировал сервисы Гугла и Амазона из-за Signal тогда, и всё работало. А как из-за телеграм->РКН->блокировок пошли проблемы у клиентов сетевых монстров (пусть даже только в России), тогда они и зашевелились.

На сами по себе разборки РКН-Телеграм им плевать. я думаю. Бизнес защищает только свои инвестиции.
В эту теорию не вписывается то, что Google запретил domain fronting ещё до начала ковровых бомбардировок Телеграма в России.

Об этом стало известно 13 апреля, следовательно, решение внутри корпорации было принято ещё раньше.

К тому же, говорят, что domain fronting для Google AppEngine не использовался Телеграмом вообще.
Ну тогда в эту теорию не вписывается и само предположение, что это решение Гугла как-то связано с Телеграм.
И вся дискуссия беспредметна.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Сейчас нужно дважды подумать, прежде чем связываться с Гуглей, они такое дно пробили, что ничего хорошего о этой конторе и не скажешь.
НЛО прилетело и опубликовало эту надпись здесь

К сожалению, в tls1.3 имя в sni осталось нешифрованным. Я тоже сначала понадеялся, что пришло тотальное шифрование, но нет — Wireshark видит имя сайта, на котором Chrome показывает TLS 1.3 :(

Шифровать SNI — весьма глупое занятие, по как минимум двум причинам. Во-первых, зашифровать его с хоть малейшей претензией на криптостойкость возможно только в ситуации, когда смысл этого этого расширения полностью потеряется (пока сервер вам не прислал сертификат, вам могут сделать mitm и всё расшифровать, а пока вы серверу не пришлёте hostname, он не сможет прислать вам сертификат, либо сервер должен слать сразу сертификаты ко всем хостяшимся у него доменам, но тогда SNI ему уже не нужен). Во-вторых, мне сложно представить хоть какое-то этому применение, кроме попыток обхода блокировок с последующими ip-банами, а TLS делается для бытовой приватности и бизнес-нужд, а вовсе не для подпольной борьбы с чиновниками.
Ну, в tools.ietf.org/html/draft-ietf-tls-sni-encryption-02 во вступлении описывают, зачем это всё делается. А на фоне Domain Fronting банов по IP уже практически не избежать.

Тем не менее стандарт разрабатывается: SNI Encryption in TLS Through Tunneling.
И есть два решения:


  1. Tunneling TLS in TLS
    Который работает аналогично прикрытию домена только на втором этапе создаётся уже шифрованный канал к целевому серверу. Для первой части могут быть использованы сертификаты выданные на IP а не домен. Новые соеденения с сервером уже могут быть установленны используя 0-RTT который вроде как открытого SNI уже не требует.
  2. SNI encryption with combined tickets
    Этот вариант я пока не разобрал.
Я курсе что разрабатывается, но эти решения — не решения указанной мной проблемы. Защита от mitm начинается только после того, как вы проверили сертификат домена. Следовательно, и ваш запрос на его получение, и само содержание сертификата принципиально невозможно защитить от просмотра. Про mitm вы узнаете только после проверки — можете рвать соединение, но запрашиваемое имя сервера уже перехвачено.

На IP также выдаются сертификаты и их тоже можно проверить. После этого внутри тунеля установленного по IP можно установить соединение по домену.

На IP также выдаются сертификаты и их тоже можно проверить.

А ещё некоторые считают, что если скаченный с рандомного сайта софт имеет валидный сертификат (с именем "Vasya Pupkin Ltd") — то он точно без вирусов.


После этого внутри тунеля установленного по IP можно установить соединение по домену.

А давайте ещё весь TOR-протокол в TLS засунем — чтобы никто не знал, кто с кем соединяется. У TLS другое назначение — давать каналу связи криптографическую защиту от прослушивания/подделки. Скрывать тот факт, что две известные стороны соединились друг с другом, там не планировалось — это никак не помогает его целям, но становится вообще бесполезным, когда вас и вашего партнёра просто вычислят по ай-пи (далеко не у всех сайтов ай-пи принадлежит безымянному общему cdn, ну а про клиентов и говорить нечего). Всякие прокси-подобные механизмы мутного назначения, очевидно, существуют, но в спецификации протокола поточного шифрования им не место.

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

Тут употреблено правильное выражение: "не хотят помогать". Речь тут идёт действительно именно в категориях "помогать/не помогать", а не "не мешать/мешать" (видите разницу?), как некоторые это воспринимают и обижаются. Пулы айпи-адресов стоят довольно много денег, эти деньги на них потратил условный амазон, а вы теперь хотите, чтобы вам за просто так дали ими пользоваться. Клиенты, которые на этих пулах сидят (и, местами, прикрывают их от блокировок), стоят ещё больше денег, и амазон, опять же, вложил много своих средств ради привлечения этих клиентов. А кто-то вдруг хочет всем этим (большим пулом адресов, из которых можно выбирать, и соседством с важными клиентами. которых не будут блокировать) воспользоваться по сути забесплатно (по цене одной виртуалки или что там надо заказать чтобы тебе дали адрес). Нет, выгоду от своих вложений амазон вполне логично забирает себе, а клиенту с одной виртуалкой дают только то, что он заказал. И от соседей максимально огораживают, чтобы он не эксплуатировал соседство с ними, которое в цену услуги, естественно, не входит.

Приложения такое, в целом, и без публичных CDN могут использовать: делать запрос на свой сервер, указывать в SNI хост google.com, а внутри шифрованного канала (да хоть бы и с самоподписанным сертификатом для google.com — вряд ли законотворцы обяжут все сайты подписываться только одобренными доверенными CA) передавать всё, что угодно — это ведь Гуглом не запрещается, ибо их CDN не задействован? Или я что-то упустил?

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

Ну, а в текущих реалиях, когда Телеграм меняет IP-адреса, как перчатки — РКН сможет ли с таким что-либо сделать, кроме продолжения выкашивания огромных подсетей? =)

Телеграм не просто может менять IP адреса, а может и выдавать разным людям — разные IP адреса. Значит цензура просто не сможет знать все IP адреса, которыми пользуется Телеграм, подглядывая за работой официального клиента. Даже блокировкой подсетей от этого не защититься: ведь как заблокировать то, не знаешь что?..


Значит тут остаётся только вариант прессовать провайдеров облачных услуг чтобы те выгнали Телеграм со своих мощностей, что и происходит. РКН сейчас как такие гопники-рэкетиры пытаются сыграть с Телеграмом ещё раз ту карту, с которой у них получилось раньше с Zello, без стеснения заявляя что символично блокируют ровно половину IP адресов AWS. Правда, учитывая незначительность российского рынка для облачных компаний, важность облачных сервисов для российских организаций, и политический накал ситуации (Жаров находится под санкциями), в этот раз трюк пока не работает так, как в прошлый раз.

Статье низачот. Поскольку приведено, как это происходит (но лишь вскользь про две части), но не объяснено, почему это происходит. От дампов с другим Host: немного толку — это и так было ясно. То есть, пришедший со стороны пользователь, желающий разобраться с тем, что Telegram это использовал, или с вопросом, «а что же такое в сети Google раньше работало, как они сказали, побочным эффектом, а теперь отменено?» — останется без ответа. Тут без упоминания proxy и RFC 2616 вряд ли обойтись.

Простите ради бога, но если бы подобная статья была совсем для совсем далёких от IT читателей, которые ни одной идеи о работе HTTP не имеют, то какое место такой статье было бы на Хабре, который позиционирует себя как крупнейший в Европе ресурс для IT-специалистов? У нас тут технически подкованная аудитория, которую не удивишь RFC 2616. На Хабре да на пальцах рассказывать про заголовок Host — всё равно что своих читателей не уважать.

Видите ли, я, как человек, написавший энное количество «просветительских» статей, вполне имею право позанудствовать и потребовать объяснений в «правильном стиле», даже если сам могу по обрывкам нателепатировать, что ж там на самом деле (ибо в объяснениях нуждается как раз тот, кто не может). Да и ударяться в бинарные крайности — плохо и неправильно. Во-первых, почему Вы решили, что статья ограничена аудиторией Хабра? Было бы гораздо более логично предполагать, что сюда попадут многие из поисковика по запросу «что такое domain fronting», и здесь следует предполагать уровень «в курсе о HTTP для самых стандартных случаев, не дальше». Во-вторых, а с чего Вы взяли, что большинство аудитории Хабра читало тот же RFC 2616 от корки до корки?.. Собственно, тут у Вас внутреннее противоречие, ведь если бы это было так, то и статья была бы не нужна, ведь все бы просто сразу, держа в уме весь документ, понимали логическое следствие.

То есть, надо иметь в виду приблизительный портрет читателя. Например, человек прочитал журналистскую новость «вот, раньше для объода блокировки через Гугль работало, а теперь не работают, они объясняют это косяком с настройками и случайностью, а не фичей». Человек из такого объяснения ессно нифига не понимает, и (если он немножко технарь и интересуется) начинает искать, а что же это такое. Положим, он хотя бы раз набирал в telnet
GET / HTTP/1.1
Host: site.com

и в курсе, скажем, про виртуальные хосты на ОДНОМ сервере (например, видел конфиги Апача когда-то давно). Соответственно, для такого человека, Ваши примеры с подстановкой разных Host: с одной стороны, самоочевидны — ведь в самой исходной постановке вопроса и шла речь, что при запросе на один адрес выдается какой-то другой. С другой стороны, подстановки в примерах про habr.ru и habrahabr.ru выглядят для него столь же надуманными, как попытки в первый раз объяснить рекурсию факториалом, а не Фибоначчи (будет резонный встречный вопрос про неудачность примера «а зачем, ведь цикл же проще»). То есть, не объясняется, а почему именно эти, причем тут конкретная CDN, да мало ли, а вдруг эти два имени и есть на самом деле виртхосты Апача, ведь это же один сервер по сути-то.

При этом такой человек совершенно не получает ответа на очень важный вопрос — а ЧТО там может быть указано в Host:? Каковы границы? Может ли при запросе на Амазон или на google.com там стоять Host: server.of.telega.com или вообще что угодно? Прикол-то ведь в том, что да, МОЖЕТ, но при условии, что… но ведь в статье этого момента нет!

Тащем-то, если кто-то дочитал до этого места, а из статьи это всё еще непонятно, то вот краткий ответ: с точки зрения протокола HTTP прокси-сервера и оригинальные не отличаются почти никак, и фронтенд сети CDN, например google.com, работает в качестве прокси-сервера — Вы действительно можете указать абсолютно любой Host: server.of.telega.com, при условии, что server.of.telega.com резольвится в IP-адрес, принадлежащий этой CDN (скорее всего, пресловутая Телега не разместит внутри такой CDN, гугловской или амазоновской, свои реальные сервера, а разместит ретрансляторы/прокси на них, но это уже вопрос другой). На этом месте может возникнуть вопрос, а в чем смысл такой огород городить? А вот как раз тут смысл всей затеи с фронтингом и появляется в шифровании — да, по HTTP было бы видно целевой заголовок Host: (и цензор смог бы вклиниться), но по HTTPS его НЕ видно! Поскольку все запросы будут идти к например google.com, т.е. сертификаты (и тот самый SNI) будут выписаны на google.com. Тут может возникнуть последний вопрос, а почему это не уязвимость, то есть, почему CDN именно так работают в штатном режиме? Да просто затем, чтобы иметь всегда один сертификат на фронтенд (грубо говоря, те условные 600 IP-адресов google.com или amazon.com), а не заводить его на каждую клиентскую виртуалку / доменное имя, которые, к тому же, могут меняться (число подсетей, etc.).

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

Читаю ваш комментарий и понимаю что вы действительно не понимаете что делает CDN, каким образом работает, какое отношение имеет к "виртуалка" и Апачу, и так далее. Взять хотя бы объяснение про причины именно такой работы. Вы действительно считаете что под каждое доменное имя не заводят отдельную конфигурацию, или, например, не выделяют какие-то конкретные IP согласно внутренних алгоритмов CDN?..


Чтобы вам помочь и объяснить действительно все детали и особенности работы современных CDN, статью нужно сделать в два раза длинней. Извините, на такое я не готов пойти. И это будет статья не про доменное прикрытие, а про архитектуру CDN.


Если у вас есть конкретные предложения по улучшению конкретно этой статьи, но не такие, чтобы статью пришлось увеличить в два раза, очень жду.

Человеку, который работал в Кураторе, "не понимаете что делает CDN"… смешно. На самом деле, корень противоречия здесь:


статью нужно сделать в два раза длинней. Извините, на такое я не готов пойти

Между "как правильно" и "ленью" выбрали лень. И нет, чтобы объяснить этот вопрос, как я показал в своем предыдущем комменте (его и можно считать "как улучшить"), вовсе не требуется рассказывать "детали и особенности" архитектуры CDN. Например, для озвученного в заголовке вопроса неважен BGP ANYCAST. Зато важно, кому объясняется, например, можно предположить, что человек уже прочитал статью в википедии про CDN. И т.д.

НЛО прилетело и опубликовало эту надпись здесь
Понять Google и Amazon как бизнес можно, но стоит подумать о том, что закрывая намертво двери от воров и грабителей, можно оставить и добропорядочных гостей (клиентов, соседей,...) на улице. Я вот думаю — а в каких случаях описанный способ будет работать на благо клиента и при этом не нарушать правила сервиса и законы? Если добропорядочным клиентам такой способ нужен не меньше, чем криминальным элементам, то Google и Amazon фактически пилит сук, на котором сидит.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Узнал, что TOR в китае работает с помощью Domain fronting, пошел искать, что это)

Я вот только не понял, почему CDN работает как proxy…

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации