Jeden serwer, kolej M/M/1
Serwer internetowy obsługujący żądania zachowuje się, w przybliżeniu, jak typowa kolejka M/M/1 z podręcznika: żądania przychodzą średnio z określenia lambda (proces Poissona), są obsługiwane średnio z określeniem mu, i czekają w jednej kolejce FIFO, jeśli serwer jest zajęty. Całe zachowanie kolejki sprowadza się do jednej bezwymiarowej liczby, wykorzystania rho = lambda / mu:
rho = lambda / mu // wykorzystanie, musi pozostać 1, zarówno L jak i W rozpadają się – nie liniowo, ale wykładniczo live demo · żądania bota przeciążające kolejkę powyżej rho = 1● LIVE Ten rozpad jest całą historią ataku odmowy usługi: czas odpowiedzi nie pogarsza się stopniowo wraz z narastaniem obciążenia, a eksploduje. Serwer komfortowo działający przy wykorzystaniu 70% i szybkim średnim czasie oczekiwania może zostać doprowadzony do 99% przez umiarkowany wzrost ruchu i nagle mieć kolejkę, która jest w zasadzie nieskończona — każde poprawne żądanie czeka teraz za kolejną rosnącą kolejką ruchu atakującego.
rho = lambda / mu // utilisation, must stay < 1 L = rho / (1 - rho) // average number of requests in the system W = L / lambda // average time a request waits (Little's law) // as rho -> 1, both L and W diverge -- not linearly, but explosively
Dlaczego 'rozproszony' ma znaczenie
Wykorzystanie pojedynczej maszyny do ataku jest łatwe do zablokowania poprzez adres IP, a jej własne ograniczenia przepustowości upstream zmniejszają lambda, które może ona generować. Botnet składający się z tysięcy zhakowanych lub wynajętych maszyn mnoży lambda przez liczbę źródeł i unieważnia blokowanie oparte na adresie IP, ponieważ nie ma jednego adresu do zablokowania. Atakujący wykorzystują również wzmacnianie: wysyłają niewielkie zapytania z fałszywym adresem źródłowym do otwartego serwera DNS lub NTP, a serwer odpowiada znacznie większą odpowiedzią bezpośrednio do ofiary, przekształcając umiarkowany strumień wychodzący w powódź wielokrotnie większą niż jego rozmiar za darmo.
Mapa łagodzenia bezpośrednio odpowiada modelu kolejkowania
ograniczenie przepustowości – ogranicz lambda na źródło przed jej dotarciem do serwera – zapobiega pojedynczemu źródłu monopolizacji mu czyszczenie ruchu – przekierowanie podejrzanego ruchu przez warstwę filtrowania która usuwa nieprawidłowe/sfałszowane żądania przed dotarciem do rzeczywistego serwisu – redukuje efektywną lambda rozłożenie obciążenia / rozproszenie lambda na wiele serwerów (wiele mu) tak aby anycast żadna pojedyncza kolejka nie widziała pełnego wolumenu ataku; anycast dodatkowo pozwala pobliskim routerom lokalnie absorbować obciążenie Każda z tych technik jest, matematycznie, próbą albo obniżenia efektywnej lambda uderzającej w jakąkolwiek kolejkę, albo podniesienia efektywnego mu ją obsługującego – ponieważ rho = lambda/mu to jedźliwy regulator, a utrzymanie go poniżej 1 to jedyny sposób na ograniczenie czasów reakcji.
rate limiting cap lambda per source before it reaches the server
-- keeps any single source from monopolising mu
traffic scrubbing route suspicious traffic through a filtering layer
that drops malformed/spoofed requests before they
reach the real service -- reduces effective lambda
load balancing / spread lambda across many servers (many mu's) so
anycast no single queue sees the full attack volume; anycast
additionally lets nearby routers absorb load locally
Ekonomia ataku
Problem kosztów obrony jest lustrzanym odbiciem problemu kolejkowania: utrzymywanie rho komfortowo poniżej 1 w obliczu szczytowego ataku oznacza zapewnienie zapasów, które prawie cały czas pozostają nieużywane, co jest kosztowne, podczas gdy wynajem pojemności botnetu do ataku jest porównywalnie tani. Ta asymetria jest dokładnie tym powodem, dla którego istnieją usługi skalowania w chmurze i sieci anycast – pozwalają one wielu obrońcom dzielić się ogromnym pulą mu przez internet zamiast każdego nadmiernego zabezpieczania własnego serwera na wypadek, który może nigdy nie nadejść.
Często zadawane pytania
Co to jest kolej M/M/1 i dlaczego wyjaśnia ona ataki DDoS?
Jest to standardowy model pojedynczego serwera przetwarzającego przybyłe żądania po kolei: żądania przychodzą z szybkością lambda, są obsługiwane z szybkością mu, a wykorzystanie rho = lambda/mu decyduje o wszystkim. Wraz ze zbliżaniem się rho do 1, średni czas oczekiwania rośnie wykładniczo zamiast stopniowo maleć — co dokładnie jest mechanizmem stojącym za ataku typu "zatłoczenie", który napędza kolejkę serwera w kierunku nieskończoności.
Dlaczego ataki DDoS są rozproszone, a nie pochodzą z jednego źródła?
Trafika generowana przez pojedyncze źródło jest łatwa do zablokowania poprzez adres IP i ograniczona przez jego własną przepustowość. Rozproszenie ataku na botnet złożony z wielu skompromitowanych maszyn mnoży osiągalną szybkość żądań, uniemożliwia proste blokowanie IP i — w połączeniu z odbijaniem/wzmacnianiem za pomocą otwartych serwerów DNS lub NTP — może generować znacznie więcej ruchu niż mogłyby wysłać same maszyny atakującego.
Jak ograniczanie przepustowości rzeczywiście zatrzymuje atak?
Ogranicza rho z jakiegokolwiek pojedynczego źródła przed osiągnięciem wartości, która wpływa na chroniony serwer, czyli ta sama zmienna, która określa długość kolejki w modelu M/M/1. Utrzymując efektywną skumulowaną szybkość przybycia poniżej szybkości obsługi mu, ograniczanie przepustowości utrzymuje rho poniżej 1 i ogranicza czasy oczekiwania dla żądań od użytkowników.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz DDoS Attack Visualizer i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację DDoS Attack Visualizer