Выпуск outline-ss-server 1.4, реализации Shadowsocks-прокси от проекта Outline

Опубликован выпуск прокси-сервера outline-ss-server 1.4, использующего протокол Shadowsocks для скрытия характера трафика, обхода межсетевых экранов и обмана систем инспектирования пакетов. Сервер развивается проектом Outline, дополнительно предоставляющим обвязку из клиентских приложений и управляющего интерфейса, позволяющего быстро развёртывать многопользовательские Shadowsocks-серверы на базе outline-ss-server в публичных облачных окружениях или на своём оборудовании, управлять ими через web-интерфейс и организовать доступ пользователей по ключам. Разработкой и сопровождением кода занимается Jigsaw, подразделение в Google, созданное для развития средств обхода цензуры и организации свободного обмена информацией.

Outline-ss-server написан на языке Go и распространяется под лицензией Apache 2.0. В качестве основы использован код прокси-сервера go-shadowsocks2, созданного сообществом разработчиков Shadowsocks. В последнее время основная активность проекта Shadowsocks сосредоточена на развитии нового сервера на языке Rust, а реализация на языке Go уже больше года не обновлялась и заметно отстаёт по функциональности.

Отличия outline-ss-server от go-shadowsocks2 сводятся к поддержке подключения нескольких пользователей через один сетевой порт, возможности открытия нескольких сетевых портов для приёма соединений, поддержке горячего перезапуска и обновления конфигурации без разрыва соединений, встроенными средствами мониторинга и изменения трафика на базе платформы prometheus.io.


В outline-ss-server также добавлена защита от атак, связанных с отправкой проверочных запросов и повторным воспроизведением трафика. Атака через проверочные запросы нацелена на определение наличия прокси, например, атакующий может отправлять на целевой сервер наборы данных разного размера и анализировать какой объём данных сервер прочитает до определения ошибки и закрытия соединения. Атака с повторным воспроизведением трафика основана на перехвате сеанса между клиентом и сервером с последующей попыткой переотправки перехваченных данных для определения наличия прокси.

Для защиты от атак через проверочные запросы сервер outline-ss-server при поступлении некорректных данных не прерывает соединение и не выводит ошибку, а продолжает принимать информацию, выступая своеобразной чёрной дырой. Для защиты от повторного воспроизведения поступающие от клиента данные дополнительно проверяются на повторы по контрольным суммам, сохраняемым для последних нескольких тысяч handshake-последовательностей (максимум 40 тысяч, размер задаётся при запуске сервера и потребляет 20 байт памяти на последовательность). Для блокирования повторных ответов от сервера во всех серверных handshake-последовательностях применяются коды аутентификации HMAC с 32-разрядными тегами.

По уровню скрытия трафика протокол Shadowsocks в реализации outline-ss-server близок к подключаемому транспорту Obfs4 в анонимной сети Tor. Протокол был создан для обхода системы цензурирования трафика в Китае (“Великий китайский фаервол“) и позволяет достаточно эффективно скрывать пробрасываемый через другой сервер трафик (трафик проблематично идентифицировать благодаря прикреплению случайной затравки и симуляции непрерывного потока).

В качестве протокола для проксирования запросов применяется SOCKS5 – на локальной системе запускается прокси с поддержкой SOCKS5, который туннелирует трафик на удалённый сервер, с которого фактически выполняются запросы. Трафик между клиентом и сервером помещается в шифрованный туннель (поддерживается аутентифицированное шифрование AEAD_CHACHA20_POLY1305, AEAD_AES_128_GCM и AEAD_AES_256_GCM), скрытие факта создания которого и является первичной задачей Shadowsocks. Поддерживается организация TCP и UDP-туннелей, а также создание произвольных туннелей, не ограниченных SOCKS5, через применение плагинов, напоминающих подключаемые транспорты в Tor.

Release. Ссылка here.