Паттерны убивают
Прошлой осенью я лишился своего VPN-сервиса. Вскользь я уже упоминал об этом в одном из предыдущих постов. Классический «самовар»: VDS у зарубежного хостера, поднятый своими руками, без посредников. Работал надежно, стоил копейки — и я привык к тому, что все просто работает. Осенняя волна блокировок смела его вместе с тысячами похожих. Под раздачу попали не только одиночки вроде меня: крупные коммерческие сервисы тоже не устояли — кто-то частично, кто-то полностью.
Эта история заставила меня остановиться и подумать. Не о том, как быстрее восстановить доступ — это вполне решаемо. А о природе произошедшего: почему схема, работавшая годами, сломалась?
Если честно — я был слишком беспечен. Расслабился и перестал следить за ситуацией. А звоночки были: еще в мае в СМИ начали появляться первые сообщения о проблемах с VLESS — протоколом, на котором держалась большая часть «самоваров».
Ноябрьский обвал стал шоком. Протокол, казавшийся нерушимым, пал. СМИ подавали это как великое достижение российского регулятора: России удалось то, чего не смог Китай — страна с самой совершенной системой интернет-цензуры в мире, с многолетним опытом и колоссальными ресурсами. Великий Китайский Файрвол при всей своей мощи не нашел противодействия VLESS. Российский регулятор — нашел.
Однако когда я начал по кусочкам собирать картину произошедшего, все оказалось не так мрачно. Протокол устоял. Расколоть его до сих пор не удалось никому. Но тогда — что? Их всех сгубили общие паттерны: характерные признаки трафика, по которым системы DPI научились его детектировать и выделять из общего потока. Сам протокол оказался ни при чем. Виноваты были те, кто его использовал — и то, как они его использовали.
Мое знакомство с VLESS началось в первые месяцы его существования — так совпало. Когда я поднимал свой первый Xray-сервер, протокол только вышел, и клиентов под него можно было пересчитать по пальцам одной руки. Никаких веб-панелей и прочей мишуры: конфиги писались вручную в терминале, прямо на сервере. Так оно и работало — несколько лет, без особого внимания с моей стороны, лишь изредка требуя перезагрузки.
В мае прошлого года я наконец решил разобраться, почему сервер периодически падает. Причина оказалась прозаической: несколько клиентских устройств с разными ОС были зарегистрированы под одной учеткой, и при одновременном подключении где-то возникал конфликт. Известная проблема, тривиальное решение — создать отдельные учетные записи на каждое устройство. Но пока я возился с этим, меня дернул черт посмотреть, что вообще происходит в мире VPN за последние годы.
А произошло следующее. VLESS все еще актуален и неуязвим — ничего лучше пока не придумали. При этом он стал невероятно популярен — и вот это, как я понимаю теперь, и было первым тревожным звоночком, который я пропустил. Вместе с популярностью пришли удобство и инструменты: веб-панели, готовые скрипты, тулзы на любой вкус. Я размяк. Поставил себе удобную панель 3X-UI, не удосужившись сменить дефолтный порт или хоть как-то ее замаскировать. Xray, к слову, крутился без всякой маскировки — прямо на 443 порту.
Я оказался одним из тех десяти миллионов леммингов, которые не могут ошибаться. Поддался всеобщей эйфории, уверовал в неуязвимость VLESS — и совсем потерял осторожность. Стал делать, как все. Это меня и сгубило.
Именно это и детектировали системы DPI. Миллионы пользователей, действующих по одному шаблону: однотипные гайды по настройке, одни и те же сайты для мимикрии трафика — microsoft.com, cloudflare.com, apple.com — одни и те же инструменты и панели с дефолтными портами, которые известны, как выяснилось, не только энтузиастам. Поверх этого — активное зондирование со стороны регулятора: по некоторым данным, системы DPI направляли на подозрительные серверы специально модифицированные TLS-пакеты с переставленными байтами в ClientHello — первом сообщении, которым клиент «представляется» серверу при установке соединения. Настоящий веб-сервер отвечает на такой запрос предсказуемо. Xray без правильно настроенного фоллбека — немного иначе. И это тоже паттерн, который начали детектировать системы обнаружения.
Результатом действий регулятора стала не компрометация протокола, а выявление и компрометация узлов, которые его использовали, — с последующей блокировкой по IP. Я убедился в этом лично: в судорожной попытке починить упавший сервис потерял доступ к узлу даже по SSH — но только из российского сегмента сети. С зарубежных серверов он по-прежнему оставался доступен.
Кампания по блокировке VLESS оказалась беспрецедентной по масштабу. Она наглядно показала: времена, когда можно было целиком полагаться на одну технологию — пусть даже самую совершенную — остались в прошлом. Никто больше не может чувствовать себя неуязвимым. Под угрозой компрометации оказались даже самые современные решения.
Но у этой истории есть и обратная сторона. Кампания обнажила слабости самого регулятора. Когда все силы были брошены на VLESS, многие другие протоколы, прежде заблокированные, вдруг снова начали работать. На короткое время открылся доступ к ранее недоступным ресурсам — мощностей оборудования, судя по всему, не хватило, чтобы блокировать всё и сразу: тотальный контроль уперся в лимиты железа. При этом ситуация разительно отличалась в зависимости от региона, провайдера и типа соединения — что вносило дополнительную суматоху и делало любые обобщения практически невозможными.
Тем не менее главный вывод, который сделало большинство участников рынка, был однозначным: жизнь больше не будет прежней. Схемы, работавшие раньше — когда можно было арендовать сервер за рубежом по цене чашки кофе, прокинуть до него защищенный канал и получить свой личный VPN, — больше не работают. Такие каналы будут вычислены и заблокированы. И с развитием систем и техник DPI срок их обнаружения и компрометации будет только уменьшаться.
Время простых схем закончилось. Чтобы обеспечить стабильную работу сети в будущем, потребуются более сложные инфраструктурные решения — масштабные и диверсифицированные, способные гибко реагировать на действия регулятора: менять топологию и протоколы в зависимости от ситуации и обеспечивать всё более глубокую маскировку.