понедельник, 18 августа 2014 г.

Squid: Tor + Privoxy + transparent DNS redirect. Часть I

"Ничего на свете лучше не-ету
Чем смотреть Ютуб по белу свету
Телекома ласковые сво-оды
Не заменят никогда свобо-оды!
Не заме-енят ни-ког-да сво-бо-оды!

Ничего на свете лучше не-ету
Чем гуглить что надо без запре-ета
Пусть на яндекс бегают приду-урки
Нам по нраву дудлы по наку-урке,
На-а-ам по нра-аву дудлы по наку-урке!"
(Бременские музыканты)


Не говорите мне, что мне сёрфить - и я не скажу, куда вам пойти.
(перефразированная поговорка)

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

Кроме того, есть еще один либеральный принципиальный вопрос.

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

Давайте посмотрим, как можно отправить "господ" из МарсГлавНадзора в пешее эротическое путешествие. То есть сюда.

Немного теории: Как Мордор это делает


Опыт последних лет показал, что для блокирования интернет-ресурсов используется, как правило, три подхода (по отдельности или в различных комбинациях): транспарентный перехват DNS-запросов, транспарентное проксирование HTTP/HTTPS и блокировка по URL и DPI.

Во многих особо тяжелых случаях комбинируются все три метода (телекомы) в сочетании с блокированием публичных веб-прокси и VPN-серверов плюс запрет большинства клиентских методов инициирования туннелей и защиты вспомогательного трафика (Пчелайн).

Транспарентный перехват DNS

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

Ныне данное решение практически неработоспособно.

Провайдеры используют перехват всего трафика UDP/53 как по порту, так и прямые обращения к корневым серверам (root-hints) и к широко известным публичным DNS (Google DNS, OpenDNS итп.).

Данный трафик прозрачно заворачивается на провайдерский DNS с авторитарными зонами для блокированных доменов.

Причем подобное решение практически невозможно обойти или обнаружить посредством, скажем, DNSSEC - провайдер тупо подписывает ключ своей авторитарной зоны одним из глобальных CA - и вуаля, ваш верификатор даже не гавкнет (мало кто заглянет в данные ключа зоны). В некоторых тупых случаях провайдер может тупо игнорить DNSSEC и не позволять верифицировать домены на рутах (помним? Руты перехватить легче всего, их адреса общеизвестны и редко меняются).

Прямое задание DNS-серверов, угодных лично вам, а не провайдеру - помогает плохо. Вы используете общеизвестные сервера, а Мордору они тоже известны.

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

Как обнаружить подмену DNS?

С определенными оговорками по части вероятности обнаружения - вот детектор.

Имейте в виду следующее. Надо правильно интерпретировать результаты теста. Вы не должны видеть посторонних с вашей точки зрения DNS-серверов (равно как и провайдерских) и видеть лишь то, что вы сами задали либо те сервера, которым доверяете.

Следует учитывать, также, тот факт, что наличие собственного DNS в вашей компании не спасает от подмены DNS. Кэширующие сервера отравляются недостоверными записями из провайдерских практически молниеносно (вы же не задаете для них максимальный TTL, верно?)

Да, мои маленькие мохнатые друзья. Такая вот атака Каминского в промышленных масштабах (строго говоря, это не совсем Каминский, однако для простоты примем это утверждение). Обычно провайдер, блокирующий домен подобным образом, отправляет вопросившего в никуда. Например, на широковещательный адрес его собственной внешней сети либо на отсутствующий IP, смахивающий на настоящий - т.е. фактически в никуда.

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

Транспарентный провайдерский прокси

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

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

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

Обход подобных методов требует наличия как минимум простецких средств типа Hidemyass, FriGate (практически бесполезен в 2014м году), ZenMate (легко блокируется ввиду конечного количества и статичности выходных серверов) и тому подобных браузерок.

Почему я считаю подобные методы бесполезными?

Первое. Легко блокируются сами сайты производителя.
Второе. Элементарно вычисляются и блокируются входные точки сервисов.
Третье. Подобные решения обычно используются для защиты лишь HTTP/HTTPS и 
Четвертое. Я склонен не доверять заявлениям подобных сервисов о действительной приватности ваших данных, гуляющих внутри туннелей.

Что действительно эффективно в подобном случае?

Tor, только Tor и пока ничего кроме Torа.

Достоинства Тора:

Первое. Он имеет распределенную плавающую структуру, которую дьявольски трудно заблокировать целиком. Даже Китай не сумел забанить _все_  узлы сети. Выходные ноды банятся легко. Входной нодой может являться любой узел сети.
Второе. Он образует глухие туннели, использующие в большинстве случаев самоподписную иерархию сертификатов, чрезвычайно затрудняющую бампинг и им подобные техники.
Третье. Он часто использует нестандартные порты для роутеров, что позволяет проделывать разные трюки, затрудняющие блокировку.
Четвертое. Его концепция рассчитана на обеспечение защиты даже в случае частичной компрометации сети. Разумеется, защита не абсолютна - но для наших целей ее в данный момент достаточно.
Пятое. Доступ посредством бриджей практически невозможно заблокировать никаким образом.
Шестое. Тор позволяет обойти блокировку не только HTTP/HTTPS, но практически любых сервисов, которые можно затолкать либо в туннель, либо проксировать, либо используя SOCKS.

Безусловно, Тор не волшебная пуля - но очень мощное средство, решающее задачу чуть более, чем полностью.

Помните о смерти - выходные ноды могут прослушивать выходящий трафик в открытом виде! Шифрованные туннели Тор не отменяют необходимости шифровать чувствительные данные на всем пути от вашей станции до сервиса!

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

Хотя мы рассматриваем инфраструктурное (сиречь серверное) решение, упомянуть о конечном клиентском решении все же стоит.

К недостаткам Tor следует отнести провал в скорости в большинстве случаев практического применения, что решается единственным способом - каскадированием с кэширующими прокси-серверами. Малоэффективно в случае одной клиентской машины, достаточно эффективно в случае инфраструктурного решения.

DPI

Глубокая инспекция пакетов является наиболее мощным средством блокирования почти всего, чего пожелает обладатель рубильника.

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

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

Учтите следующее. У клиентов Tor (равно как и у серверов) есть характерная сигнатура при входе в сеть. Которую легко заблокировать. 

Однако (см. второй абзац данного раздела) режим бриджа спасет гигантов мысли.

Route spoofing

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

Методика весьма эффективна против так называемых продвинутых юзеров. Причем она довольно сложно обнаружима и труднодоказуема.

Вас средствами роутеров заворачивают на бездействующие адреса. Белые. Визуально похожие на целевые. Но молчащие.

Нет, не режут средствами ACL цисок. Не посылают TCP_RESET (помните? connection reset by peer). Вас просто роутят вместо гугла на пачку адресов, которые не используются. Например.

И не факт, что вас не логгируют.

Поди, опровергни. Кстати, я подобные трюки наблюдал собственными глазами вживую. Прямо в момент выделения, как говорят химики.

Хорошо, допустим вы - продвинутый хомяк. Берете traceroute, dig, nslookup, сверяете истинные адреса (кстати, где вы их возьмете в такой ситуации? :)) и со скринами в руках рветесь к министру связи Марсианской республики.

А министр связи на голубом глазу отвечает, что на планете Марс все зашибись и это проблема на стороне сервиса Большого Сырта. :))))))))

Марсиане из Большого Сырта разводят руками и говорят, что у них все ок - на всех направлениях. Но обещают проверить еще раз.

Допустим, возмущенных хомяков много. Министр обещает дать пинка Марстелекому. Марстелеком, бия себя раздвоенным копытом в грудь, клятвенно обещает разобраться. Чуть позже, обливаясь крокодиловыми слезами, сообщает, что это-де технические проблемы с роутингом. И что скоро все будет ок. 

Но они же не обязаны бежать, расшибаясь, немедленно делать - даже если это правда, верно? Это же не 01-02-03. :)

Умная Маша в этом случае - помните слово "роутинг"? - скажет, что Tor - снова наше все - и будет совершенно права.

Conclusion

Как видите, трюки, используемые дабы тащить и не пущать - довольно продвинутые, и, мало того, совершенно грязные и хакерские.

И на данный момент существует всего пара реально непобедимых методов тюкнуть марсиашек из Марстелекома по чике и выбраться-таки туда, куда вам нужно и пошарохаться по другим каналам. :)

В следующих частях рассмотрим в деталях, как мы это делаем.

(продолжение следует)