Opublikowano wydanie proxy serwera outline-ss-server 1.4, który wykorzystuje protokół Shadowsocks do ukrywania charakteru ruchu, omijania zapór sieciowych i oszukiwania systemów inspekcji pakietów. Serwer jest rozwijany przez projekt Outline, który dodatkowo oferuje klienta aplikacji i interfejs zarządzania, pozwalający szybko wdrażać wieloosobowe serwery Shadowsocks oparte na outline-ss-server w publicznych środowiskach chmurowych lub na własnym sprzęcie, zarządzać nimi przez interfejs webowy oraz organizować dostęp użytkowników za pomocą kluczy. Rozwój i wsparcie kodu zapewnia Jigsaw, jednostka w Google, stworzona w celu rozwoju narzędzi do omijania cenzury i organizacji swobodnej wymiany informacji.
Outline-ss-server jest napisany w języku Go i udostępniany na licencji Apache 2.0. Jako baza wykorzystano kod proxy-serwera go-shadowsocks2, stworzonego przez społeczność deweloperów Shadowsocks. Ostatnio główna aktywność projektu Shadowsocks skoncentrowana jest na rozwoju nowego serwera w języku Rust, podczas gdy realizacja w języku Go nie była aktualizowana od ponad roku i znacząco odstaje pod względem funkcjonalności.
Różnice między outline-ss-server a go-shadowsocks2 sprowadzają się do wsparcia połączenia wielu użytkowników przez jeden port sieciowy, możliwości otwierania wielu portów sieciowych do przyjmowania połączeń, wsparcia dla gorącego przeładowania i aktualizacji konfiguracji bez przerywania połączeń, a także wbudowanych środków monitorowania i zmiany ruchu opartej na platformie prometheus.io.

W outline-ss-server dodano również ochronę przed atakami związanymi z wysyłaniem zapytań testowych i powtarzaniem ruchu. Atak z wykorzystaniem zapytań testowych ma na celu określenie istnienia proxy, na przykład atakujący może wysyłać do docelowego serwera Shadowsocks zbiory danych różnej wielkości i analizować, jaki wolumen danych serwer odczyta przed określeniem błędu i zakończeniem połączenia. Atak z powtarzaniem ruchu oparty jest na przechwytywaniu sesji między klientem a serwerem a następnie próbie ponownego przesłania przechwyconych danych w celu określenia istnienia proxy.
Aby chronić przed atakami przez zapytania kontrolne, serwer outline-ss-server przy odbiorze nieprawidłowych danych nie przerywa połączenia i nie wyświetla błędu, a kontynuuje przyjmowanie informacji, działając jak swoiste czarne dziura. W celu ochrony przed ponownym odtworzeniem, dane otrzymane od klienta są dodatkowo sprawdzane pod kątem powtórzeń za pomocą sum kontrolnych, które są zachowywane dla ostatnich kilku tysięcy sekwencji handshake (maksymalnie 40 tysięcy, rozmiar ten jest ustawiany przy uruchomieniu serwera i zużywa 20 bajtów pamięci na sekwencję). W celu zablokowania powtarzających się odpowiedzi od serwera, w wszystkich serwerowych sekwencjach handshake stosowane są kody autoryzacji HMAC z 32-bitowymi znacznikami.
Pod względem poziomu ukrycia ruchu, protokół Shadowsocks w realizacji outline-ss-server jest bliski transportowi Obfs4 w anonimowej sieci Tor. Protokół został stworzony, aby obejść system cenzurowania ruchu w Chinach ("Wielki chiński firewall") i pozwala dość skutecznie ukrywać ruch przekazywany przez inny serwer (trudno zidentyfikować ten ruch dzięki dołączeniu losowej smugówki oraz symulacji ciągłego przepływu).
Jako protokół do proxyfikacji zapytań stosowany jest SOCKS5 — na lokalnym systemie uruchamiany jest proxy z obsługą SOCKS5, które tuneluje ruch do zdalnego serwera, z którego faktycznie wykonywane są zapytania. Ruch między klientem a serwerem jest umieszczany w szyfrowanym tunelu (obsługiwane jest uwierzytelnione szyfrowanie AEAD_CHACHA20_POLY1305, AEAD_AES_128_GCM oraz AEAD_AES_256_GCM), a ukrycie faktu jego stworzenia jest podstawowym zadaniem Shadowsocks. Obsługiwane jest organizowanie tuneli TCP i UDP oraz tworzenie dowolnych tuneli, nieograniczonych przez SOCKS5, za pomocą wtyczek przypominających transporty w Tor.
Źródło: opennet.ru
