Inspirováno Fail2ban
Nástroj Fail2ban je tu s námi už téměř dvě dekády a jeho funkce je jednoduchá: démon sleduje vybrané logy a pokud se v nich objeví příliš mnoho neúspěšných pokusů o přihlášení, zablokuje dané IP adrese přístup pomocí systémového firewallu. Útočník tak z dané adresy už nemá šanci zkoušet například hádat hesla.
Má to dvě zásadní nevýhody: neznámou IP adresu to vždy nejprve ke službě pustí a teprve když zlobí, je odříznuta. Podstatnější ale je, že dnes mají útočníci k dispozici botnety a na nich velké množství adres. Běžnou praxí je, že si nejprve službu oťukají a pokud je vyhodí, sníží počet pokusů pod kritickou mez. Fail2ban je tak nakonec vlastně bezbranný.
Tvůrci projektu CrowdSec se výše popsaným postupem inspirovali a posunuli ho ještě o úroveň výš: jednotlivé instance propojili a na základě jejich hlášení začali měřit reputaci jednotlivých IP adres. Pokud některá z nich začne zlobit, ostatní servery se to dozví a preventivně ji k sobě nepustí.
CrowdSec se představuje
Nástroj CrowdSec je napsán v moderním jazyce Go a umí běžet v nejrůznějších prostředích včetně cloudu nebo kontejnerových prostředí. Kvůli tomu dokáže svou funkci rozdělit do dvou různých míst: problémy detekujete na jednom místě (logy) a řešíte úplně jinde (firewall).
Jeho práce probíhá v pěti krocích:
- Čtení a normalizace datových zdrojů (záznamů).
- Porovnání získaných informací se scénáři chování.
- Pokud je objeveno nechtěné chování, je spuštěna reakce.
- Informace o agresivních IP jsou odeslány do centrálního logu.
- Pokud je ověřeno agresivní chování, je IP zařazena do centrálního block listu, který je zohledňován v prvním kroku.
Všechna data jsou uchovávána a zpracovávána lokálně a o akcích vždy rozhoduje správce systému. Do centrálního logu je zasíláno jen minimum informací: IP adresa, scénář chování a časová značka. Tyto informace slouží k odfiltrování falešných pozitivit a případném rozhodnutí o zařazení dané adresy do block listu.
Instalace
K dispozici jsou předkompilované binární balíčky, které stačí do cílového systému stáhnout a rozbalit. K dispozici je také oficiální obraz pro Docker nebo je možné kompilovat ze zdrojových kódů.
# tar xvzf crowdsec-release.tgz # cd crowdsec-v* # sudo ./wizard.sh -i
Poslední krok spustí průvodce, který projde spuštěné služby, vyhledá jejich logy, navrhne nasazení pravidel a spustí nastaveného démona crowdsec-agent
.
Ovládání
K ovládání démona slouží nástroj cscli
. Následujícím příkazem vypíšete aktuální stav, tedy co je v systému hlídáno a jaké scénáře jsou právě sledovány.
# cscli hub list
Je také možné vypsat aktuálně platná rozhodnutí. Jejich seznam bude těsně po spuštění samozřejmě prázdný, ale postupně se bude plnit.
# cscli decisions list
Démon také uchovává všechny záznamy o předchozích varováních. Ta jsou dostupná i poté, co samotné rozhodnutí už vypršelo. Můžete tak sledovat historii celého procesu.
# cscli alerts list
Pomocí tohoto nástroje je možné také za běhu načítat nové scénáře či parsery logovacích souborů, sledovat aktuálně platná rozhodnutí nebo je manuálně měnit. Můžete tak například vyhazovat starší rozhodnutí nebo naopak přidávat svá vlastní. Vše je podrobně popsáno v dokumentaci.
Pohled dovnitř
Samotný agent používá konfigurační soubory napsané v YAML, s jejichž pomocí načítá (acquisition), doplňuje (enrichers) a zpracovává (parsers) dané logové soubory. Ty jsou vyhodnocovány pomocí scénářů (scenarios) a pokud je detekováno nechtěné chování, vznikne oznámení (alert). To je odesláno do centrální databáze k případnému vytvoření block listu. Na základě tohoto oznámení je ale především vydáno příslušné rozhodnutí o místní blokaci dané adresy.
Případná rozhodnutí (decisions) pak padají do místní databáze. Odtud je získávají vyhazovači (bouncer), tedy samostatné malé kousky software, které zařizují konkrétní akci v místě zásahu. To může být například předřazený firewall nebo třeba konkrétní aplikace, která bude zablokované IP adrese odmítat přístup.
Přehledně to ukazuje následující schéma:
Všechny zmíněné prvky architektury můžete získat v databázi (hub), kde se nacházejí jak konfigurace, tak i vyhazovači. Připravena je například možnost blokace přímo ve firewallu pomocí IPtables nebo Nftables. Vše je možné instalovat automaticky pomocí řádkové utility cscli
.
Rozhodnutí nemusí znamenat jen úplnou blokaci dané IP adresy, ale je možné nasadit například důkladnější prověřování uživatele (CAPTCHA), zapnout dvoufaktorovou autentizaci, omezit klientovi práva nebo třeba limitovat počet dotazů za jednotku času.
Se sílou davu
Přestože to vše vypadá jako vyšperkovaný Fail2ban, skutečným cílem je co nejvíce zapojit sílu davu a vytvářet ucelenou databázi podezřelých IP adres, kterou budou moci využít další správci systémů. Už teď databáze obsahuje více než 100 000 adres a je distribuována k uživatelům. Prohlédnout si ji můžete pomocí příkazu:
# cscli ban list --api
Za projektem stojí stejnojmenná francouzská společnost, která hodlá projekt živit z komerčního předplatného. To umožní firmám získat přístup k databázi IP adres, aniž by do ní musela přispívat či sdílet data o blokování ve vlastní infrastruktuře.