Serwisy www są narażone na różnego rodzaju ataki mające na celu, na przykład, pobranie z bazy danych wrażliwych i strategicznych informacji (na przykład danych osobowych) lub przerwanie – najczęściej tymczasowe – funkcjonowania części lub całości witryny. Spośród tego typu zagrożeń jednym z najbardziej popularnych i jednocześnie niebezpiecznych są ataki rodzaju Denial of Service (DoS – Odmowa Usługi), mające na celu przerwanie ciągłości usługi, lub obniżenie jej wydajności (spowolnienie). W węższym sensie ataki Denial of Service są próbą uczynienia sieci albo maszyny fizycznej (serwera) niedostępnych dla użytkowników końcowych przez pewien czas.
Najczęściej obiektami takich ataków są strony odwiedzane przez wiele osób, lub takie, których działanie w danym czasie jest przez atakującego wyjątkowo niepożądane. Najłatwiejszymi obiektami ataku są takie serwisy, które przez własną strukturę połączoną z natężeniem ruchu są na granicy wydajności. Czynnikami podwyższonego ryzyka są:
- Wysokie natężenie ruchu
- Zbytnie obciążenie bazy danych (np.: poprzez dużą ilość requestów (zapytań) lub ich słabą optymalizację) lub niezabezpieczenie połączeń od aplikacji, umożliwiające ataki typu SQL Injection
Ataki SQL Injection to ataki na bazę danych, z której korzysta dana aplikacja, poprzez modyfikację adresów URL, lub wklejanie w formularze (na przykład w formularze kontaktowe) specjalnie przygotowanych składni, które trafiają do bazy danych. Celem ataku może być zniszczenie części lub całości bazy danych lub pobranie interesujących hakera danych.
- Brak warstw cache’ujących (np. memcache, zapisywanie danych po stronie użytkownika np. w LocalStorage, Session Storage i innych miejscach przechowywania danych u klienta)
Cache, inaczej pamięć podręczna, oznacza wszystkie elementy aplikacji lub bazy danych, które są przechowywane w pamięci o parametrach pozytywnie wpływających na wydajność (na przykład szybkość wczytywania) usługi. Przykładem cache’a jest pamięć podręczna przeglądarki – miejsce na dysku twardym użytkownika, w których przechowywane są dane elementy wcześniej odwiedzonych stron, na przykład zdjęcia. Ma to na celu zmniejszenie ilości danych pobieranych z serwera strony www, ponieważ część tych danych jest pobierana bezpośrednio z komputera użytkownika.
- Współdzielenie serwera z innymi usługami bez wyraźnych ograniczeń w zużywaniu pamięci bieżącej serwera
- Brak aplikacji front-endowych, które rozdzielają ruch (np. między różne maszyny fizyczne) zanim trafi on do docelowego serwera. Rozwiązanie stosowana przede wszystkim przez administratorów dużych serwisów internetowych.
Ponieważ nowoczesne aplikacje webowe składają się z wielu elementów, takich jak backend aplikacji (mechanizmy działające po stronie serwera, panel administracyjny), frontend aplikacji (mechanizmy działające po stronie przeglądarki) czy baza danych, różne elementy mogą funkcjonować na różnych maszynach (serwerach). Dzięki temu istnieje możliwość, że atak dotknie jedynie część oprogramowania (ponieważ zostanie skierowany tylko na jeden z kilku serwerów), np. pojedynczą bazę danych, uniemożliwiając funkcjonowanie jedynie tych części witryny, która bazuje na danych zapewnianych przez ten element witryny.
Wskaźnikami ataku typu DoS są:
- Bardzo wolne działanie stron internetowych
- Niedostępność częściowa (np. bazy danych), lub całkowita strony internetowej albo innych witryn dostępnych na tych samych maszynach fizycznych (serwerach)
- Nagły wzrost requestów (zapytań) z jednego źródła (np. z jednego IP)
Wśród poszczególnych typów ataków wymienić można:
- Floodowanie, polegające na wysyłaniu wielokrotnie ciężkich (na przykład ze względu na długość) informacji w krótkim okresie czasu, co może mieć na celu zajęcie zasobów serwera przetwarzaniem tych danych w konsekwencji prowadząc do spowolnienia lub całkowitego odmówienia usługi
- ataki LDoS (atak powodujący zmniejszenie przepustowości poprzez protokół TCP, mogący spowodować odmowę / spowolnienie działania usługi)
- ataki Peer-to-peer (atakujący kieruje ruch odbywający się modelem p2p na serwer np. danej usługi www)
- PDoS (nazywany również phlashingiem), sklasyfikowany ze względu na skutki działania. PDoS oddziałuje na system w tak intruzywny i przeciążający sposób, że serwer wymaga deinstalacji oprogramowania lub nawet wymiany części lub całości sprzętu fizycznego.
- ataki RUDY (R-U-Dead-Yet?), opisany poniżej
- oraz wiele innych.
W przypadku ataku typu RUDY nie są stosowane botnety, czyli grupy komputerów, które zostały zainfekowane niepożądanym oprogramowaniem i mogą być używane przez hakera do nielegalnych celów, a atak objawia się łączeniem ze stroną internetową dużej ilości maszyn, prowadzącym do niemożności obsłużenia przez serwery tak pomnożonego ruchu.
Innym rodzajem zagrożenia często mylonym z atakiem z rodziny DoS jest tzw. UDoS (Unintentional Denial of Service). Pierwszy człon akronimu (unintentional) informuje nas z góry, że zagrożenie to nie jest intencjonalnym, planowanym atakiem a jedynie pewnym zdarzeniem, które nie wystąpiło jako konsekwencja jednostkowej lub grupowej premedytacji. Może się ono zdarzyć, kiedy z różnych przyczyn infrastruktura danej strony internetowej przestanie wytrzymywać naturalny ruch. Przyczynami takiego zdarzenia mogą być między innymi: nagły wzrost odwiedzin witryny (np. związany z akcją marketingową), wzrost 'ciężkości’ witryny (np. związany z umieszczeniem wielu ciężkich zdjęć lub filmów), czy problem z warstwami cache’ującymi (np. serwerami memcache’ującymi), lub danymi gromadzonymi po stronie klienta witryny. Wymienione w powyżej przyczyny mogą powodować problemy z wydajnością serwisu, które jednak nie są wynikiem ataku. Kiedy w 2009 roku zmarł Michael Jackson serwisy takie jak Twitter oraz Google zdecydowanie spowolniły, czego przyczyną było właśnie zagrożenie znane pod skrótowcem UDoS.
Istnieją oczywiście sposoby zabezpieczania się przed atakami związanymi z wydajnością witryn internetowych. Ogólnie wyróżnić można dwa rodzaje takich zabezpieczeń: polegającym na blokowaniu ruchu zaklasyfikowanego jako potencjalnie złośliwy, lub ogólnym odpowiednim przygotowaniu infrastruktury (broniącym również przed UDoS).
Wśród konkretnych działań prewencyjnych można wymienić:
- Stosowanie różnego rodzaju firewalli, który może być oprogramowany o różne przyjmowania lub odrzucania protokołów, portów lub adresów IP. Może być to skuteczne, jeżeli atak pochodzi z jednego adresu IP, który można łatwo określić i zablokować. W przypadku portów może być to bardziej skomplikowane: jeżeli atak pochodzi z portu 80 (http), wówczas zwykle nie jest rozważane zablokowanie całego portu. Niemniej jednak proste ataki floodujące mogą być potencjalnie ograniczane przez warstwy firewall.
- Kolejny rodzaj zabezpieczenia może odnosić się do hardware’u. Do profesjonalnych rozwiązań należy dobór odpowiednich switch’y oraz routerów (oba te elementy infrastruktury mogą mieć możliwości ACL – Access Control List czyli lista kontroli dostępu; za pomocą ACL możemy ustawić uprawnienia zapisu, odczytu oraz wykonania dla dowolnego użytkownika i grupy oraz rate-limitingu – zestaw wszystkich mechanizmów, które pomagają wprowadzać limity zapytań do usługi, np. serwisu www, przy osiągnięciu predefiniowanych parametrów, np. zużywania 85% RAM.) oraz stosowanie różnych serwerów dla elementów usługi (np. osobny serwer z kodem witryny, osobny serwer bazodanowy i osobny serwer memcache’ujący).
- Optymalizacja zapytań do bazy danych. Zapytania do bazy danych powinny być możliwie precyzyjne (czyli nie pytające o nadmiarowe dane) oraz nie stosowane w niepotrzebnych miejscach. Wczytywanie danych z bazy jest bowiem bardziej obciążające aniżeli prosto z dokumentów dostępnych w docroocie (drzewo katalogów plików aplikacji).
- Stosowanie warstw cachujących oraz przechowywanie części danych po stronie klienta (między innymi w WebStorage’u czy SessionStorage’u).
- Negatywną konsekwencją ataku jest, oprócz możliwości wyłączenia lub spowolnienia witryny na długi okres, spadek jej wiarygodności w oczach użytkowników oraz potencjalnie algorytmów wyszukiwarek, jeżeli „odwiedziny” robotów wyszukiwarek jak Google będą zbiegać się właśnie z okresami niedostępności witryny.
W kwestii ataków typu DoS i zagrożeń typu UDoS należy pamiętać, że ich istotą jest „peak”, a więc jednorazowy skok, który może nie mieć wcześniejszych symptomów. Jeżeli nasza aplikacja nie posiada zabezpieczeń, o których mowa w artykule, będzie potencjalnie stanowiła łatwiejszą ofiarę ewentualnego ataku.
Autorem artykułu jest Wojciech Scelina pracownik firmy datalab.pl