Samy Kamkar (słynny badacz bezpieczeństwa znany z opracowania szeregu zaawansowanych urządzeń atakujących, takich jak keylogger w ładowarce USB do telefonów) przedstawił nową technikę ataku zwaną „NAT slipstreaming”.
Atak umożliwia, po otwarciu strony internetowej w przeglądarce, nawiązanie połączenia z serwera atakującego do dowolnego portu UDP lub TCP w systemie użytkownika, znajdującego się za translatorem adresów. Zestaw narzędzi do ataku jest opublikowany w serwisie GitHub.
Metoda ta opiera się na oszukaniu mechanizmu śledzenia połączeń ALG (Application Level Gateway) w translatorach adresów lub zaporach sieciowych, który służy do organizowania przekazywania NAT protokołów, które wykorzystują wiele portów sieciowych (jeden do danych i jeden do sterowania), takich jak SIP, H323, IRC DCC i FTP.
Atak ten może zostać zastosowany wobec użytkowników łączących się z siecią przy użyciu wewnętrznych adresów z zakresu intranetu (192.168.xx, 10.xxx) i umożliwia wysyłanie dowolnych danych na dowolny port (bez nagłówków HTTP).
Do przeprowadzenia ataku wystarczy, że ofiara uruchomi przygotowany przez atakującego kod JavaScript , np. otwierając stronę w witrynie atakującego lub wyświetlając złośliwą reklamę na legalnej stronie internetowej.
Na pierwszym etapie atakujący uzyskuje informacje o wewnętrznym adresie użytkownika, który może zostać ustalony przez protokół WebRTC lub, jeśli protokół WebRTC jest wyłączony, za pomocą ataków siłowych z mierzonym czasem reakcji podczas żądania ukrytego obrazu (w przypadku istniejących hostów próba żądania obrazu jest szybsza niż w przypadku hostów nieistniejących ze względu na czas oczekiwania przed zwróceniem odpowiedzi TCP RST).
Na drugim etapie kod JavaScript wykonywany w przeglądarce ofiary generuje duże żądanie HTTP POST (niemieszczące się w jednym pakiecie) kierowane do serwera atakującego, korzystając z niestandardowego numeru portu sieciowego, aby zainicjować dostosowywanie parametrów fragmentacji TCP i rozmiaru MTU w stosie TCP ofiary.
W odpowiedzi serwer atakującego zwraca pakiet TCP z opcją MSS (Maximum Segment Size), która określa maksymalny rozmiar odebranego pakietu. W przypadku protokołu UDP manipulacja jest podobna, ale polega na wysłaniu dużego żądania WebRTC TURN w celu wywołania fragmentacji na poziomie IP.
«NAT Slipstreaming wykorzystuje przeglądarkę użytkownika w połączeniu z mechanizmem śledzenia połączeń Application Level Gateway (ALG) wbudowanym w NAT, routery i zapory ogniowe, łącząc w łańcuch wyodrębnianie wewnętrznego adresu IP poprzez atak czasowy lub WebRTC, wykrywanie fragmentacji zautomatyzowanego zdalnego IP i MTU, masowania rozmiaru pakietów TCP, nadużywania uwierzytelniania TURN, precyzyjnej kontroli limitów pakietów i pomieszania protokołów z powodu nadużyć przeglądarki - powiedział Kamkar w analizie.
Główną ideą jest to, że znając parametry fragmentacji, można wysłać duże żądanie HTTP, którego końcówka trafi do drugiego pakietu . Jednocześnie końcówka przychodząca drugiego pakietu jest wybierana w celu wykluczenia nagłówków HTTP i obcinana do danych, które w całości odpowiadają innemu protokołowi, dla którego obsługiwane jest NAT.
W trzecim etapie, korzystając z powyższej manipulacji, kod JavaScript generuje i wysyła specjalnie wybrane żądanie HTTP (lub TURN dla UDP) na port TCP 5060 serwera atakującego, które po fragmentacji zostaną podzielone na dwa pakiety: a pakiet z nagłówkami HTTP i częścią danych oraz ważny pakiet SIP z wewnętrznym adresem IP ofiary.
System śledzenia połączeń w stosie sieciowym uzna ten pakiet za początek sesji SIP i zezwoli na przekierowanie pakietu dla dowolnego portu wybranego przez atakującego, zakładając, że port ten jest używany do transmisji danych.
Atak może zostać przeprowadzony niezależnie od używanej przeglądarki . Aby rozwiązać ten problem, twórcy Mozilli zasugerowali zablokowanie możliwości wysyłania żądań HTTP na porty sieciowe 5060 i 5061, które są powiązane z protokołem SIP.
Twórcy silników Chromium, Blink i WebKit również zamierzają wdrożyć podobny środek ochrony.
Źródło: https://samy.pl