Identyfikacja ataku typu DDoS
Łatwo rozpoznać atak typu DDoS: spowolnienie sieci, wykładające się serwery zwracają uwagę administratorów (lub ich użytkowników!). Pierwszym krokiem w obronie jest identyfikacja sposobu ataku. Większość ataków DDoS polega na generowaniu dużego ruchu przez: ICMP, UDP, TCP - zwykle ze sfałszowanymi adresami źródła. Nadzwyczajna liczba niektórych pakietów to dobry początek do identyfikacji typu ataku i źródło do tworzenia filtrów identyfikacyjnych na przyszłość. Wyjątkiem od reguły, którym zajmiemy się później, jest atak DDoS skierowany na specyficzną usługę, np. HTTP, za pomocą prawidłowego ruchu i żądań.
—eby móc identyfikować i kontrolować pakiety, musimy analizować ruch w sieci. Może to być zrealizowane za pomocą dwóch metod, zależnych od tego gdzie ruch jest badany. Pierwsza metoda może być użyta na maszynie zlokalizowanej w docelowej sieci. Tcpdump to powszechnie dostępny sniffer bardzo dobry do naszych potrzeb. Analiza "na żywo" jest niemożliwa przy dużym natężeniu ruchu, więc pierwszym krokiem jest użycie opcji "-w", by zapisywać wyniki do pliku. Następnie można użyć narzędzi, np. zmodyfikowanej przez Davida Dittricha wersji tcpdstat, lub tcptrace.
Przykładowy wynik działania programu tcpdstat na wynikach tcpdump:
DumpFile: test
FileSize: 0.01MB
Id: 200212270001
StartTime: Fri Dec 27 00:01:51 2002
EndTime: Fri Dec 27 00:02:15 2002
TotalTime: 23.52 seconds
TotalCapSize: 0.01MB CapLen: 96 bytes
# of packets: 147 (12.47KB)
AvgRate: 5.56Kbps stddev:5.40K PeakRate: 25.67Kbps
### IP flow (unique src/dst pair) Information ###
# of flows: 9 (avg. 16.33 pkts/flow)
Top 10 big flow size (bytes/total in %):
26.6% 16.5% 14.7% 11.6% 9.8% 7.6% 5.4% 5.4% 2.5%
### IP address Information ###
# of IPv4 addresses: 7
Top 10 bandwidth usage (bytes/total in %):
97.5% 34.1% 31.2% 21.4% 10.7% 2.5% 2.5%
### Packet Size Distribution (including MAC headers) ###
<<<<
[ 32- 63]: 79
[ 64- 127]: 53
[ 128- 255]: 8
[ 256- 511]: 6
[ 512- 1023]: 1
>>>>
### Protocol Breakdown ###
<<<<
protocol packets bytes bytes/pkt
------------------------------------------------------------------------
[0] total 147 (100.00%) 12769 (100.00%) 86.86
[1] ip 147 (100.00%) 12769 (100.00%) 86.86
[2] tcp 107 ( 72.79%) 6724 ( 52.66%) 62.84
[3] telnet 66 ( 44.90%) 3988 ( 31.23%) 60.42
[3] pop3 41 ( 27.89%) 2736 ( 21.43%) 66.73
[2] udp 26 ( 17.69%) 4673 ( 36.60%) 179.73
[3] dns 24 ( 16.33%) 4360 ( 34.15%) 181.67
[3] other 2 ( 1.36%) 313 ( 2.45%) 156.50
[2] icmp 14 ( 9.52%) 1372 ( 10.74%) 98.00
Widać jak takie użyteczne narzędzia pozwalają szybko określić który typ ruchu ma największy udział. To oszczędza mnóstwo czasu na analizie.
Router także może być użyty jako monitor przychodzącego ruchu, może służyć jako prosty filtr pakietów. Router jest zapewne urządzeniem skupiającym twoją uwagę, jest to przecież brama między twoją siecią a Internetem. Ten przykład z Cisco ilustruje bardzo proste zastosowanie list dostępu do monitorowania przychodzącego ruchu:
access-list 169 permit icmp any any echo
access-list 169 permit icmp any any echo-reply
access-list 169 permit udp any any eq echo
access-list 169 permit udp any eq echo any
access-list 169 permit tcp any any established
access-list 169 permit tcp any any
access-list 169 permit ip any any
interface serial 0
ip access-group 169 in
Użycie polecenia "show access-list" pokazuje sumaryczne dane dla wszystkich zasad:
Extended IP access list 169
permit icmp any any echo (2 matches)
permit icmp any any echo-reply (21374 matches)
permit udp any any eq echo
permit udp any eq echo any
permit tcp any any established (150 matches)
permit tcp any any (15 matches)
permit ip any any (45 matches)
Wynik jest prosy, ale efektywny - duża ilość pakietów ICMP (echo-reply). Więcej informacji o podejrzanych pakietach można uzyskać za pomocą komendy "log-input" dla odpowiedniej reguły. Reguła będzie logować informacje o całym ruchu ICMP:
access-list 169 permit icmp any any echo-reply log-input
Router będzie teraz logował bardziej szczegółowe dane (przegląd za pomocą "show log") o pasujących pakietach. Na przykładzie poniżej widać kilka pakietów pasujących do reguły "DENY ICMP":
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.142 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.113 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.212.72 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 172.16.132.154 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.15 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.142 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 172.16.132.47 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.212.35 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.113 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 172.16.132.59 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.82 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.212.56 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 172.16.132.84 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.212.47 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.35 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.212.15 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 172.16.132.33 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
Przyjrzyjmy się informacjom w każdym wpisie: źródłowy i docelowy adres, interfejs i reguła której dotyczy. Te informacje pomogą nam w obronie.
Odpowiedź
Po identyfikacji podejrzanego ruchu, czas zastanowić się jak nań odpowiedzieć. Niestety możliwości są nieco ograniczone, ponieważ w większości ataków DDoS używane są fałszywe adresy źródłowe, zazwyczaj generowane losowo. Co więc możemy zrobić?
Namierzanie napastnika
Najczęstszą reakcją będzie próba namierzenia napastnika. Jednakże, DDoS, w przeciwieństwie do zwykłego DoS, jest przypuszczany z wielu źródeł naraz. Największą szansą na złagodzenie ataku tą metodą jest ustalenie, który z kolejnych routerów w sieci przesyła do ciebie najwięcej ruchu. Niestety wymaga to współpracy z innymi, bo nie będziesz w stanie analizować wychodzących danych. Każdy uczestnik w tym procesie (zazwyczaj ISP) będzie wykonywał bardzo podobne czynności. Identyfikacja złośliwego typu ruchu z wykorzystaniem powyższych technik umożliwi utworzenie nowych reguł dostępu. Do stworzenia nowych reguł użyjemy znowu polecenia "log-input". Logi zarejestrują dokładne informacje o źródłowym interfejsie i adresie MAC - to są prawdziwe informacje. Proces jest następnie powtarzany dla kolejnych routerów w łańcuchu. Po kilkukrotnym wykonaniu tych czynności, źródło (lub jedno ze źródeł) zostanie zlokalizowane. Wtedy odpowiedni filtr może zablokować atakującego. Wadą tego sposobu namierzania ataku DDoS jest jego czasochłonność i komplikacja. Odnajdywanie wielu źródeł ataku może wymagać pomocy z zewnątrz, a nawet wsparcia przez organy prawa.
Ograniczenie transferu
Aby najszybciej zminiejszyć skutki ataku, lepiej użyć opcji dostępnej u większości ISP. Ograniczyć przepustowość dla typu ruchu wykorzystywanego do ataku, co pozwoli odciążyć nieco sieć. Pakiety które przekroczą pewien limit będą odrzucane, jest to użyteczne jeśli do ataku wykorzystywany jest specyficzny pakiet. Przykład ograniczenia pakietów ICMP w Cisco:
interface xy
rate-limit output access-group 2020 3000000 512000 786000 conform-action
transmit exceed-action drop
access-list 2020 permit icmp any any echo-reply
Ten przykład porusza nie analizowany wcześniej interesujący problem. Co jeśli ruch który sprawia kłopot jest całkowicie uzasadniony? Na przykład limitowanie zalewu zapytań SYN kierowanych do serwera web obrzuci jednocześnie dobry i zły ruch, bo wszystkie legalne połączenia wymagają trzy stopniowej fazy powitalnej TCP. To duży problem bez łatwej odpowiedzi. To prowadzi do tego że bardzo trudno jest walczyć z DDoS bez zgody na pewne kompromisy.
Filtrowanie czarnych dziur
ISP mają także inne możliwości zależne od routowania, np. filtrowanie czarnych dziur. Filtrowanie to polega na przekierowaniu złośliwego ruch do wirtualnego interfejsu zwanego Null0 - odpowiednik /dev/null/ w Unixie. Jako że nie jest to prawdziwy interfejs, ruch ten jest po prostu kasowany. Ponadto technika ta minimalizuje spadek wydajności - przydatna funkcja podczas wykrywania źródła ataku DDoS - reszta sieci pracuje stabilnie mimo dużego obciążenia.
Ważne jest by pamiętać przy walce z atakiem, że filtrowanie u celu ataku nie jest najlepszym rozwiązaniem. Czy jest to firewall, czy router brzegowy zatrzymujący złośliwe pakiety, to i tak duża porcja nadchodzącego ruchu jest przepuszczana, opóźniając prawidłowy ruch. Aby poważnie zniwelować skutki ataku, ruch musi być blokowany na najwyższym punkcie łańcucha. To oznacza że niektóre rozwiązania są niedostępne dla małych sieci i ich użytkowników. W niektórych przypadkach rozwiązanie problemu DDoS jest niemożliwe. To frustrująca prawda odkrywana przez każdego, kto zetknął się z tym problemem.
Zapobieganie
Jeśli masz szczęście i uniknąłeś do tej pory ataku DDoS, zastosuj poniższe zalecenia by zabezpieczyć się na przyszłość.
Komenda "ip verify unicast reverse-path" (lub ekwiwalent inny niż Cisco) powinna być powinna być wykorzystywana na wejściu wychodzących połączeń. Komenda ta odrzuca podrobione pakiety, główny problem w walce z atakami DDoS, zanim będą one routowane. Dodatkowo upewnij się że odrzucany jest przychodzący ruch z adresami z zastrzeżonych rang (np. 192.168.0.0). Filtr ten odrzuci pakiety które na pewno są nieprawidłowe.
Techniki praw wejścia i wyjścia są rozstrzygające w prewencji ataków DDoS. Te proste ACL (Acces Control List - listy praw dostępu), jeśli są prawidłowo i konsekwentnie implementowane przez ISP i duże sieci, mogą eliminować fałszywe pakiety zanim dostaną się do Internetu, mocno redukując czas potrzebny do namierzenia napastnika. Filtry ustawione na routerach brzegowych sprawdzają czy przychodzący ruch nie ma adresów należących do prywatnych sieci, i co ważniejsze, czy wychodzący ruch nie używa adresów należących do wewnętrznych sieci. Dokument RFC2267 jest świetnym podłożem pod techniki filtrowania.
W końcu, ważne jest by przedyskutować problem ataków DDoS i procedur postępowania w takich przypadkach z ISP. Plany muszą być przygotowane ZANIM nastąpi atak.
Podsumowanie
Ataki typu DDoS są trudnym wyzwaniem dla społeczności Internetu. Rzeczywistość jest taka że tylko największe ataki są w pełni badane, mniejsze, zdarzające się codziennie przeciekają pomiędzy palcami. Istnieje kilka rozwiązań, lecz większość nie ma praktycznego zastosowania w małych sieciach. Ostatecznie ty musisz walczyć i zapobiegać atakom DDoS. To oznacza umiejętność odpowiedzi w trakcie ataku: zidentyfikowania ruchu, projektowania i implementowania filtrów, prowadzenia śledztwa. Przygotowanie i planowanie to, na razie, najlepsze metody łagodzenia skutków ataków DDoS. [źródło: Security Focus, autor: Matthew Tanase]
Barbarians at the Gate: An Introduction to DDoS; Matt Tanase, SecurityFocus
Sniffers: What They Are and How to Protect Yourself , Matt Tanase, SecurityFocus
Cisco - Strategies to Protect Against DDoS Attacks Cisco White Papers
Cisco - Characterizing and Tracing Packet Floods Using Cisco Routers, Cisco White Papers
Cisco - IOS Essential Features Cisco White Papers
ISP Security: Real World Techniques, The North American Network Operators' Group (NANOG)
David Dittrich's DDoS site |