Serwer internetowy jest niedostępny z powodu złośliwego ataku SYN

Symptomy

Na komputerze z uruchomionym protokołem TCP/IP, połączonym z Internetem, niektóre lub wszystkie usługi sieciowe przestają być dostępne, a na ekranie klienta sieci pojawiają się komunikaty o błędzie podobne do poniższego komunikatu:

Połączenie zostało zresetowane przez zdalnego hosta.

Ten objaw utraty dostępu do wszystkich usług sieciowych może wystąpić także na komputerze z uruchomionym systemem operacyjnym innym niż Windows NT, na przykład z systemem UNIX.

Przyczyna

Komputer padł ofiarą złośliwego ataku znanego jako „zalew SYN” lub „atak SYN” z wykorzystaniem protokołu TCP/IP.


Hakerzy komputerowi mogą zaatakować cały komputer lub określoną usługę TCP, taką jak usługi sieci Web. Atak wykorzystuje protokół TCP używany przez wszystkie komputery w Internecie i nie ogranicza się do systemu operacyjnego Windows NT.

Na czym polega zalew SYN

Zalew SYN przebiega w następujący sposób: (zobacz także artykuł CERT(sm) Advisory CA-96.21 pod adresem
ftp://info.cert.org/pub/cert_advisories
  • Do komputera docelowego jest wysyłane żądanie połączenia TCP (SYN). Źródłowy adres IP w pakiecie jest „fałszowany”, czyli zamieniany na adres nieużywany w Internecie lub należący do innego komputera. Osoba atakująca wysyła wiele takich żądań SYN w protokole TCP, aby związać jak najwięcej zasobów komputera docelowego.
  • Po odebraniu żądania połączenia komputer docelowy przydziela zasoby do obsługi i śledzenia nowego połączenia, po czym odpowiada, wysyłając pakiet „SYN-ACK”. W tym przypadku odpowiedź zostanie wysłana pod nieistniejący, „sfałszowany” adres IP.
  • Transmisja SYN-ACK pozostaje bez odpowiedzi. Komputer o domyślnej konfiguracji systemu Windows NT 3.5x lub 4.0 będzie pięciokrotnie retransmitował pakiet SYN-ACK, podwajając wartość limitu czasu po każdej retransmisji. Początkowy limit czasu wynosi 3 sekundy, tak więc próby retransmisji są ponawiane po 3, 6, 12, 24 i 48 sekundach. Po ostatniej retransmisji upływa jeszcze 96 sekund, zanim komputer zrezygnuje z oczekiwania na odbiór odpowiedzi i zwolni zasoby, które zostały wcześniej zarezerwowane na potrzeby połączenia. Całkowity czas zajęcia zasobów wynosi 189 sekund.

Jak sprawdzić, czy komputer jest celem ataku SYN

Jeśli podejrzewasz, że komputer jest celem ataku SYN, możesz wpisać w wierszu polecenia następujące polecenie w celu wyświetlenia połączeń o stanie „ODEBRANO_SYN”:


netstat -n -p tcp


W wyniku użycia tego polecenia na ekranie może pojawić się poniższy tekst:

Aktywne połączenia

Protokół Adres lokalny Obcy adres Stan
TCP 127.0.0.1:1030 127.0.0.1:1032 USTANOWIONO
TCP 127.0.0.1:1032 127.0.0.1:1030 USTANOWIONO
TCP 10.57.8.190:21 10.57.14.154:1256 ODEBRANO_SYN
TCP 10.57.8.190:21 10.57.14.154:1257 ODEBRANO_SYN
TCP 10.57.8.190:21 10.57.14.154:1258 ODEBRANO_SYN
TCP 10.57.8.190:21 10.57.14.154:1259 ODEBRANO_SYN
TCP 10.57.8.190:21 10.57.14.154:1260 ODEBRANO_SYN
TCP 10.57.8.190:21 10.57.14.154:1261 ODEBRANO_SYN
TCP 10.57.8.190:21 10.57.14.154:1262 ODEBRANO_SYN
TCP 10.57.8.190:21 10.57.14.154:1263 ODEBRANO_SYN
TCP 10.57.8.190:21 10.57.14.154:1264 ODEBRANO_SYN
TCP 10.57.8.190:21 10.57.14.154:1265 ODEBRANO_SYN
TCP 10.57.8.190:21 10.57.14.154:1266 ODEBRANO_SYN
TCP 10.57.8.190:4801 10.57.14.221:139 CZAS_OCZEKIWANIA


Jeśli duża liczba połączeń ma stan ODEBRANO_SYN, istnieje możliwość, że system jest celem ataku. Można użyć analizatora sieci do dalszego prześledzenia problemu, przy czym może zajść potrzeba skontaktowania się z usługodawcą internetowym (ISP) w celu uzyskania pomocy w próbie namierzenia źródła ataku.


Efekt zajęcia zasobów dla połączeń może być różny, w zależności od stosu TCP/IP i aplikacji prowadzących nasłuch na porcie TCP. Dla większości stosów istnieje limit liczby połączeń, które mogą mieć stan półotwarty (ODEBRANO_SYN). Po przekroczeniu limitu dla danego portu TCP komputer docelowy reaguje resetowaniem wszystkich następnych żądań połączenia, dopóki zasoby nie zostaną zwolnione.

Rozwiązanie

Uzyskaj następującą aktualizację dla systemu Windows NT 3.51 lub najnowszy dodatek Service Pack dla Windows NT 4.0.


W odpowiedzi na to zagrożenie firma Microsoft zobowiązała się do zapewnienia najlepszej możliwej ochrony przed atakami tego typu w ramach systemu operacyjnego Windows NT i wprowadziła liczne zmiany w swoich składnikach TCP/IP udostępnianych klientom.


Klucz globalny, który zaprojektowano w celu ochrony przed atakami, ustawia dla innych kluczy, wspomnianych w dalszej części tego artykułu, wartości znane jako efektywne. Użycie tego klucza zapobiega konieczności odgadywania przez administratorów wartości, które zapewniają najlepszą ochronę. Zdecydowanie zaleca się użycie następujących kluczy globalnych:


SynAttackProtect

Klucz: Tcpip\Parameters

Typ wartości: REG_DWORD

Zakres prawidłowych wartości: 0, 1, 2

0 (brak ochrony przed atakami SYN)

1 (zmniejszenie liczby prób retransmisji i opóźnienie tworzenia wpisu RCE (route cache entry) po przekroczeniu ustawień limitów TcpMaxHalfOpen i TcpMaxHalfOpenRetried)

2 (dodatkowo - oprócz 1 - opóźnienie wskazania do modułu Winsock)


UWAGA: Kiedy system zostanie zaatakowany, następujących opcji nie można już włączyć na żadnym gnieździe: skalowalne okna (scalable windows, RFC 1323) i parametry TCP konfigurowane indywidualnie dla każdej karty (wartość początkowa RTT, rozmiar okna). Dzieje się tak, ponieważ gdy działają mechanizmy ochrony, wpis buforu trasy nie jest sprawdzany przed wysłaniem pakietu SYN-ACK i opcje modułu Winsock nie są dostępne w tej fazie połączenia.


Wartość domyślna: 0 (fałsz)

Wartość zalecana: 2

Opis: Ochrona przed atakiem SYN polega na zredukowaniu liczby retransmisji pakietów SYN-ACK, co zmniejsza czas, przez który zasoby muszą pozostać przydzielone. Przydzielenie zasobów wpisu buforu trasy jest opóźniane aż do nawiązania połączenia. Jeśli wartość synattackprotect = 2, to wskazanie aktywności połączenia dla AFD jest opóźniane aż do ukończenia trójstronnego uzgadniania. Warto zauważyć, że czynności podejmowane są przez mechanizm ochronny tylko w sytuacji przekroczenia ustawień TcpMaxHalfOpen i TcpMaxHalfOpenRetried.


UWAGA: Poniższe klucze powinny być zmieniane tylko w sytuacji, gdy powyższy klucz globalny okazał się nieefektywny lub gdy atakowane są określone limity zasobów.


Oto lista wprowadzonych zmian:



*******************************************************************
* 1. Sterownik Tcpip.sys szybciej zamyka półotwarte połączenia *
*******************************************************************


Opracowano nową wersję sterownika Tcpip.sys, która pozwala kontrolować, ile razy będzie retransmitowana odpowiedź na żądanie połączenia TCP (SYN-ACK). Kontrolę umożliwia nowy parametr Rejestru:



HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\Tcpip
\Parameters
\TcpMaxConnectResponseRetransmissions
Typ wartości: REG_DWORD
Zakres prawidłowych wartości: 0-0xFFFFFFFF
Wartość domyślna: 2


Wartość domyślna dla tego parametru wynosi teraz 3. W poniższej tabeli zaprezentowano zachowanie protokołu TCP/IP w systemie Windows NT 4.0 dla różnych wartości tego parametru:



Wartość Czasy retransmisji Łącznie Uwagi
3 3, 6 i 12 sekund 45 s Czyszczenie w 24 s po ostatniej retransm.
2 3 i 6 sekund 21 s Czyszczenie w 12 s po ostatniej retransm.
1 3 sekundy 9 s Czyszczenie w 6 s po ostatniej retransm.


Ten parametr zmniejsza domyślny czas, który zajmuje wyczyszczenie półotwartego połączenia TCP, ze 189 do 45 sekund i umożliwia administratorowi jego precyzyjniejszą kontrolę. W lokacji będącej celem silnego ataku można ustawić tę wartość nisko, nawet na „1”. Możliwa jest także wartość „0”; jeśli jednak parametr zostanie ustawiony na 0, pakiety SYN-ACK w ogóle nie będą retransmitowane, a limit czasu zostanie przekroczony w 3 sekundy. Przy tak niskiej wartości legalne próby połączeń odległych klientów mogą kończyć się niepowodzeniem.



*******************************************************************
* 2. Usługa NetBT ma większy, konfigurowany zapas *
*******************************************************************


Usługa NetBT (NetBIOS przez TCP/IP) wykorzystuje port TCP o numerze 139 i jest używana przez usługi sieciowe Microsoft, takie jak udostępnianie plików i drukarek. Wersje 3.51 i 4.0 usługi NetBT mają „zapas” dostępnych bloków połączeń, w liczbie dwa plus liczba przyrostowa zależna od klientów NetBT (takich jak readresator, serwer i wszelkie uruchomione aplikacje NetBIOS). Dla typowego serwera liczba ta wynosi 7-11. Opracowano nową wersję usługi NetBT, która w miarę potrzeby automatycznie przydziela więcej bloków połączeń w sposób, który można konfigurować.


W zdarzeniu połączenia usługa sprawdza teraz, czy liczba wolnych bloków jest mniejsza od 2, i jeśli tak jest, dodaje „przyrostową” liczbę bloków, przy czym „przyrost” można konfigurować w Rejestrze w następujący sposób:



HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\NetBt
\Parameters
\BacklogIncrement
Typ wartości: REG_DWORD
Zakres prawidłowych wartości: 1-0x14 (dziesiętnie 1-20)
Wartość domyślna: 3


Każdy blok połączenia zużywa 78 bajtów pamięci. Całkowitą liczbę bloków połączeń, którą może przydzielić usługa NetBT, również można konfigurować w Rejestrze:



HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\NetBt
\Parameters
\MaxConnBackLog
Typ wartości: REG_DWORD
Zakres prawidłowych wartości: 1-0x9c40 (dziesiętnie 1-40000)
Wartość domyślna: 1000


Parametr MaxConnBackLog przyjmuje domyślną wartość 1000, ale można ustawić w nim wartość wysoką, wynoszącą nawet 40000. Bloki połączeń są „oczyszczane”, czyli usuwane, gdy upływa limit czasu retransmisji SYN-ACK i protokół TCP odrzuca próbę połączenia.



*******************************************************************
* 3. Usługę Afd.sys zmodyfikowano tak, aby wydajnie obsługiwała *
* dużą liczbę połączeń „półotwartych” *
*******************************************************************


Dla aplikacji Windows Sockets, takich jak serwery FTP i serwery sieci Web, próby połączeń obsługuje usługa Afd.sys. Usługę Afd.sys zmodyfikowano tak, aby mogła obsługiwać dużą liczbę połączeń w stanie „półotwartym” bez odmawiania dostępu legalnym klientom. Pozwala na to możliwość dynamicznej konfiguracji zapasu przez administratora.


Nowa wersja usługi Afd.sys obsługuje cztery nowe parametry Rejestru, które mogą służyć do kontrolowania zachowania zapasu dynamicznego.


EnableDynamicBacklog to przełącznik globalny, służący do włączania lub wyłączania zapasu dynamicznego. Przyjmuje on domyślnie wartość 0 (wyłączony) i ustawienie go w ten sposób nie zmienia nic w porównaniu z wersjami istniejącymi wcześniej. Ustawienie dla niego wartości 1 włącza nową funkcję zapasu dynamicznego.



HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\AFD
\Parameters
\EnableDynamicBacklog
Typ wartości: REG_DWORD
Zakres prawidłowych wartości: 0,1
Wartość domyślna: 0
Wartość sugerowana dla systemu będącego celem silnego ataku: 1


Parametr MinimumDynamicBacklog kontroluje minimalną liczbę wolnych połączeń dozwolonych w punkcie końcowym nasłuchiwania. Jeżeli liczba wolnych połączeń spadnie poniżej tej wartości, wątek zostanie ustawiony w kolejce w celu utworzenia dodatkowych wolnych połączeń. Tej wartości nie należy zbytnio zwiększać, ponieważ kod zapasu dynamicznego włącza się zawsze, gdy liczba wolnych połączeń spadnie poniżej tej wartości. Zbyt duża wartość może prowadzić do spadku wydajności.



HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\AFD
\Parameters
\MinimumDynamicBacklog
Typ wartości: REG_DWORD
Zakres prawidłowych wartości: 0-0xFFFFFFFF
Wartość domyślna: 0
Wartość sugerowana dla systemu będącego celem silnego ataku: 20


Parametr MaximumDynamicBacklog kontroluje maksymalną liczbę „quasi-wolnych” połączeń dozwolonych w punkcie końcowym nasłuchiwania. Do połączeń „quasi-wolnych” zalicza się połączenia wolne wraz z połączeniami w stanie półotwartym (ODEBRANO_SYN). Nie podejmuje się żadnych prób utworzenia dodatkowych połączeń wolnych, jeżeli spowodowałoby to przekroczenie tej wartości.



HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\AFD
\Parameters
\MaximumDynamicBacklog
Typ wartości: REG_DWORD
Zakres prawidłowych wartości: 0-0xFFFFFFFF
Wartość domyślna: 0
Wartość sugerowana dla systemu będącego celem silnego ataku: zależna
od pamięci. Wartość ta nie powinna przekraczać 5000 dla każdych 32 MB
pamięci RAM zainstalowanych w serwerze, aby uniknąć wyczerpania
zestawu niestronicowanego w czasie ataku.


Parametr DynamicBacklogGrowthDelta kontroluje liczbę wolnych połączeń, które zostaną utworzone w przypadku zapotrzebowania na dodatkowe połączenia. Przy ustawianiu tej wartości należy zachować ostrożność, ponieważ zbyt duża wartość może prowadzić do wybuchowego rozmnożenia przydziałów wolnych połączeń.



HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\AFD
\Parameters
\DynamicBacklogGrowthDelta
Typ wartości: REG_DWORD
Zakres prawidłowych wartości: 0-0xFFFFFFFF
Wartość domyślna: 0
Wartość sugerowana dla systemu będącego celem silnego ataku: 10 (0xa)



MaximumDynamicBacklog,




W celu wykorzystania zmian wprowadzonych w usłudze Afd.sys, aplikacje Windows Sockets muszą podczas wykonywania wywołania funkcji listen() jawnie zażądać zapasu większego niż wartość skonfigurowana dla parametru MinimumDynamicBacklog. Aplikacje firmy Microsoft, takie jak Internet Information Server (którego zapas domyślny wynosi 25), można konfigurować. Szczegółowe informacje dotyczące poszczególnych aplikacji są dostępne w bazie wiedzy Microsoft Knowledge Base pod adresem
http://www.microsoft.com/kb.


Zmodyfikowane sterowniki dla systemu Windows NT i instrukcje dotyczące ich instalacji są dostępne w kanałach Pomocy technicznej Microsoft lub bezpośrednio z następujących lokalizacji internetowych:


Dla systemu Windows NT 3.51:

ftp://ftp.microsoft.com/bussys/winnt/winnt-public/fixes/usa/nt351/hotfixes-postsp5/syn-attack

Stan

System Windows NT 4.0

Ten problem został usunięty w najnowszej amerykańskiej wersji dodatku Microsoft Windows NT Service Pack dla systemu Windows NT 4.0. Aby uzyskać informacje dotyczące sposobu otrzymania dodatku Service Pack, wyszukaj następujące słowo w bazie wiedzy Microsoft Knowledge Base (bez spacji):

S E R V P A C K

System Windows NT 3.51

Firma Microsoft potwierdziła, że ten problem może stanowić pewną lukę w zabezpieczeniach systemu Windows NT 3.51. Istnieje obecnie w pełni obsługiwana i dostępna poprawka, która jednak nie została do końca przetestowana i powinna być stosowana tylko w systemach, w których stwierdzono ryzyko ataku. Aby ocenić stopień narażenia systemu, należy rozważyć jego dostępność fizyczną, połączenia z siecią i z Internetem, a także inne czynniki. Jeżeli system jest znacznie narażony na ataki, firma Microsoft zaleca zastosowanie poprawki. W przeciwnym razie zaleca się poczekanie na następny dodatek Service Pack dla systemu Windows NT, który będzie zawierał tę poprawkę. Aby uzyskać więcej informacji, skontaktuj się z Pomocą techniczną firmy Microsoft.




Właściwości

Identyfikator artykułu: 142641 — ostatni przegląd: 19.09.2003 — zmiana: 1

Opinia