Je to zhruba čtyři a půl roku, co jsme hromadně spustili filtraci provozu pro webhostingy naší IPS/IDS ochranou. Systém pokročilé detekce a eliminace hrozeb. Původní pravidla pro filtrování se s těmi dnešními už nedají srovnávat. Jsou daleko benevolentnější, ale přesto efektivnější než kdykoliv předtím.
Tři stupně ochrany
Než se někdo dostane na váš web, musí projít přes tři stupně ochrany.
- DDoS ochrana – Nejdříve jsou to senzory naší masivní DDoS ochrany. Ty hledají hlavně nestandardní (nadlimitní) podezřelý provoz. Pokud jej najdou, tak provoz odkloní přes výhybku na výkonné servery, kde se začne s filtrováním. V březnu 2020 jsme zastavili DDoS útok o síle 44,5 Gbps. Nikdo si ničeho nevšiml.
- Předsazená ochrana – Předsazenou ochranu jsme vám představili v dubnu 2019. Jedná se o velice rychlou filtraci postavenou na analýze přístupů ze všech našich webserverů, které stahujeme na jedno centrální místo a v reálném čase vyhodnocujeme.
- IPS/IDS ochrana – A teď přichází na řadu IPS/IDS ochrana, která detailně zkoumá příchozí i odchozí provoz. Na základě více jak dvaceti tisíc pravidel, které se průběžně přidávají a upravují (manuálně i automaticky), dokáže zachytit jak známé hrozby, tak i ty potenciální. Nevýhodou je, že prozatím neumíme filtrovat provoz přes HTTPS. Již brzo budeme umět i to.
Do toho nepočítáme trvalá pravidla na samotných serverech a routerech. Každý paket směřující k nám na servery je tedy 3x posouzen a teprve potom se dostane k serverům. Celé to zabere několik mikrosekund. To malé zdržení za to stojí.
Systém ochran vyvíjíme několik let a neustále ho vylepšujeme.
Počet zablokovaných přístupů roste
Tento týden jsem si všimli, že počet zablokovaných přístupů na předsazené a IPS/IDS ochraně se přehoupl přes 60 % provozu. Převážná většina přístupů se blokuje právě na předsazené ochraně. Trochu nás znejistělo, jestli toho už neblokujeme třeba moc, ale oproti předchozím rokům jsme benevolentnější třeba k robotům a to díky chytřejším pravidlům. Tím jsme také snížili podíl falešně pozitivních blokací a blokujeme na kratší dobu.
Vysvětlení je asi jednoduché. Hardware, konektivita a další věci spojené s Internetem jsou levnější. Útočníci prostě mají více zdrojů. Je to jako s e-mailovým SPAMem. Je ho více a více (ale i ten umíme blokovat velmi dobře).
Hodně blokovaných přístupů nemusí přímo chtít nějakou zranitelnost zneužít, ale jen hledají, zda-li se na cílovém webu náhodou nenachází. Tohle samozřejmě blokujeme. Většinou automaticky, ale umíme zakročit i manuálně, jako tomu bylo v případě zranitelnosti PHP framework Nette a nebo jako v případě, kde jsme zase blokovali zneužití “děravého” pluginu pro WordPress. A takových příkladů je mnohem více…
Různá pravidla pro různé servery anebo nejdůležitější je člověk až potom robot
Vše je velmi komplikované a funguje zde určitý systém reputací. Jde o velké množství dat a jejich analýzu a nastavení prázdných pravidel. Sbíráme logy ze všech serverů, využíváme desítky různých blacklistů (i placených) a stahujeme různé databáze hrozeb (i placených) a zároveň se naše filtry chovají inteligentně. To vše mění naše filtrace dynamicky a v reálném čase a i několikrát za sekundu.
Ačkoli sbíráme data ze všech hostingů NoLimit a WMS, tak jednotlivé servery mohou mít individuální pravidla a nastavení, která se dynamicky mění v čase.
Například pokud máme server, kde se v důsledku třeba úspěšné reklamní kampaně zvedne několika webům naráz návštěvnost nad rámec všech rezerv, tak může dojít k omezování přístupů třeba robotů. Tyto situace jsou poměrně extrémní, ale občas se mohou přihodit. Cílem je zachovat chod služeb i za cenu, že si roboti budou muset třeba hodinku počkat.
Samozřejmě to neznamená, že vám hned začnou chodit varování o nedostupnosti z monitoringu. Restrikce se týkají opakovaných přístupů, které zásadně zatěžují server nadměrnou aktivitou.
Jen abyste měli představu, tak “běžný” agresivní robot dokáže udělat třeba tisíc požadavků za vteřinu a tam nemůžete čekat, protože by to okamžitě zákazníci poznali. Takto přetížený webserver má problém to rozdýchat a v některých případech by to muselo skončit i restartem webového serveru. To jsou dlouhé minuty pomalého načítání vašeho webu s následným výpadkem. Proti tomu se prostě musíme bránit a také bráníme. Na prvním místě jsou u nás zákazníci.
U robotů rozhoduje co dělají, ne co jsou zač
V dnešní době se nemůžete spoléhat na to, že nějaký robot o sobě tvrdí, že je třeba GoogleBot. Pokud bychom všem “googlebotům” dovolili neomezený pohyb po serverech v rámci nějakého whitelistu, tak to nedopadne dobře.
Mimochodem máme specializované filtry, které hledají falešné roboty. Pokud se někdo vydává za robota, který přistupuje jen z určitých IP adres a najednou tu máme přístup z jiné IP adresy, tak tento přístup můžeme zablokovat, výrazně omezit počet přístupů (zkušební provoz) anebo jej limitujeme v tom, co může dělat – nesmí třeba odesílat formuláře anebo přistupovat do administrace WordPress.
Právě o tom všem je chytrá ochrana. Spousta možností, kde se dá najít kompromis téměř pro každého.
Proto sledujeme hlavně aktivitu IP adres. Pokud nějaká IP adresa začne spouštět jeden anebo i více filtrů naráz, tak jí zablokujeme na omezenou dobu. Když si nedá pokoj, tak na delší a pak delší…
Roboti vyhledávačů mají výjimky, ale musí se chovat slušně
Vyhledávače máme všichni rádi a chceme, aby všechen náš obsah co nejdříve měli k dispozici v aktuální podobě. Proto ke všem známým vyhledávačům přistupujeme jinak, než třeba k robotům, co sbírají marketingová data.
Tvůrci robotů vyhledávačů počítají s tím, že mohou web anebo server přetížit, proto také reagují na různé varovné znamení, jako je například omezený počet přístupů za určitý čas anebo vzrůstající délku odezvy.
Například Google dokázal natolik přesně spočítat limity našich serverů, že prakticky nenaráží na omezení. Je to krásně vidět na následujícím grafu. Horní graf ukazuje počet přístupů GoogleBota a dolní kolik přístupů bylo zablokováno. Jedná se o 7 denní graf po hodinách.
Jen zlomek přístupů je zablokován. Pro GoogleBota evidujeme konkrétní IPv4 adresy.
Je až neuvěřitelné, jak hezky dokáže rozložit Google zátěž v čase. Naproti tomu SeznamBot jednou za čas zavelí “Zteč!” a větráky v serverech zařadí vyšší obrátky, protože se musí přetaktovat procesory na vyšší výkon 🙂
Proto také má větší množství zablokovaných požadavků. I tak se však jedná jen o zanedbatelný zlomek.
Další zajímavosti:
- Oba se nejvíce zajímají o soubor robots.txt
- Google měl 7.785.218 požadavků za posledních 7 dní
- Seznam měl 6.129.646 požadavků za posledních 7 dní
- Google také poměrně aktivně hledá soubor ads.txt – 667.876 požadavků
Roboti podle počtu přístupů
V následující tabulce najdete přístup top 45 nejaktivnějších robotů (podle toho jak se sami identifikovali) za posledních 7 dní. Tito roboti tedy prošli přes DDoS ochranu, předsazenou ochranu i IPS/IDS ochranu. Z tabulky jsou odstraněny skripty a univerzální roboti jako crawler, robot, Python request, Apache-HttpClient atd.
Robot | Komu patří | Počet požadavků |
Googlebot | 58 230 724 | |
bingbot | Bing | 56 851 376 |
SeznamBot | Seznam | 48 036 897 |
YandexBot | Yandex | 13 631 396 |
MJ12bot | Majestic | 11 453 595 |
FacebookBot | 10 818 181 | |
Googlebot-Image | 9 615 900 | |
AdsBot-Google | 5 865 139 | |
UptimeRobot | UptimeRobot | 5 487 728 |
Adsbot | 3 696 208 | |
SemrushBot | SEMrush | 3 163 259 |
Mediapartners-Google | 2 955 552 | |
ZoominfoBot | ZoomInfo | 2 837 140 |
serpstatbot | Serpsat | 2 477 853 |
Seekport Crawler | 2 406 872 | |
Applebot | Apple | 2 134 281 |
heritrix | Internet Archive | 1 779 452 |
PetalBot | Aspiegel | 1 758 849 |
BingPreview | Bing | 1 662 438 |
WP Fastest Cache Preload Bot | 1 501 166 | |
DotBot | Moz | 1 402 027 |
YandexImages | Yandex | 1 367 933 |
dns-crawler | CZ.NIC | 1 239 963 |
aranhabot | Amazon | 1 230 600 |
Pinterestbot | 1 039 024 | |
AhrefsBot | Ahrefs | 987 148 |
Datanyze | Datanyze | 870 914 |
Heurekabot | Heureka.cz | 822 107 |
ptolemaiaBot | 767 102 | |
Mail.RU_Bot | Mail.ru | 722 754 |
de/bot | 593 131 | |
Mediatoolkitbot | Mediatoolkit | 558 655 |
DuckDuckBot | DuckDuckGo | 532 675 |
magpie-crawler | Brandwatch | 425 309 |
AimySitemapCrawler | Aimy | 403 751 |
PingdomBot | Pingdom | 387 363 |
Sogou web spider | Sogou | 372 302 |
BLEXBot | WebMeUp | 333 534 |
CFNetwork | Apple | 332 778 |
SimplePie | SimplePie | 283 075 |
Electron | 264 931 | |
DuckDuckGo-Favicons-Bot | DuckDuckGo | 251 105 |
Seznam-Zbozi-robot | Seznam | 247 458 |
Amazonbot | Amazon | 239 876 |
Ještě před pár lety bychom některé z těchto robotů blokovali. Dnes už máme chytré filtry, které je jen omezí, když je to v zájmu našich zákazníků. Jinak jim v procházení webů nebráníme.
Co momentálně zlobí
V současné době máme největší problémy s CDN jako je třeba CloudFlare, přes které jde velké množství útoků. Jejich uživatelé si často neuvědomují, že za jejich pokročilejší ochranu je nutné si připlatit. Na IPS/IDS je filtrovat nemůžeme, protože se využívá HTTPS. IP adresy také nelze omezovat, protože jde všechno přes společné IP adresy CloudFlare. Cloudflare je prostě jedna velká komplikace. Domény, které mají CloudFlare, nepoužívají ani naše DNS a tak je nemůžeme rychle migrovat nebo bránit jiným způsobem. Ale o tom asi napíšeme až příště.
V budoucnu tohle vyřešíme vylepšením IPS/IDS ochrany, kdy budeme kontrolovat i provoz přes HTTPS.
Jinak jsme se za celou dobu setkali s nižšími desítkami problémů, kdy jsme blokovali něco víc, než jsme asi měli. To je fantastický úspěch.
Závěr
Jinak jsme s IPS/IDS ochranou nesmírně spokojeni. Blokuje velké množství škodlivého provozu, který nikomu nechybí. Na falešně pozitivní zablokování narazíme jen výjimečně. Většinou když hledáme problém, tak najdeme útoky z napadených počítačů anebo někdo zkouší dosti nešikovně různé penetrační testy. Pak může zjistit, že se mu nedaří pár hodin přihlásit do administrace redakčního systému, protože IPS/IDS blokuje POST requesty.
Samozřejmě mezi více jak dvaceti tisíci různými filtry se může občas něco podezřelého dostat omylem. Pokud byste něco takového našli, prostě nám napište přes kontaktní formulář a my to prověříme.
Naše ochrany považujeme za naši největší konkurenční výhodu. Takhle komplexní řešení jen tak nenajdete… A to jsme to popsali jen povrchně, protože to by bylo na stovky podobných článků.