Falco je známe ako nástroj pre Kubernetes a takmer všetky návody k nemu sú písané pre klastre. Na klastre pritom viazané nie je: ide o sledovanie systémových volaní a na bežnom serveri s webom funguje úplne rovnako. Len o tomto scenári píše málokto.

Užitočné je tam, kde ostatné nástroje mlčia. Webshell na webe neporušuje prístupové práva, nevytvára neúspešné prihlásenia a nespustí signatúru, ak je napísaný ručne. Má však správanie, ktoré je pre webový server nenormálne: proces PHP-FPM spúšťa shell. Práve to Falco vidí.

Čo zachytí

Typické udalosti na bežnom serveri:

  • shell zrodený procesom webového servera alebo PHP — prakticky jednoznačný znak webshellu;
  • spustenie programu z /tmp, /dev/shm alebo /var/tmp;
  • čítanie citlivých súborov (/etc/shadow, privátne kľúče) procesom, ktorému to neprislúcha;
  • zmena systémových binárnych súborov;
  • odchádzajúce spojenie od procesu, ktorý sieť používať nemá.

Inštalácia

Kľúčová voľba padá pri inštalácii — akým spôsobom Falco získava systémové volania. Súčasný variant stojí na eBPF a nevyžaduje ani zostavenie modulu jadra, ani hlavičkové súbory:

sudo falcoctl driver config --type modern_ebpf
sudo systemctl restart falco

Klasický modul jadra vyžaduje hlavičkové súbory a po každej aktualizácii jadra sa znova zostavuje — na serveri, kde sa aktualizácie inštalujú automaticky, je to pravidelný zdroj nefunkčnej služby. Ak je jadro dostatočne čerstvé (5.8 a vyššie), zvoľte eBPF a na tento problém zabudnite.

Kontrola, že udalosti skutočne prichádzajú:

sudo systemctl status falco
sudo journalctl -u falco -n 50

Šum a ako sa ho zbaviť

To je hlavná práca. Štandardná sada pravidiel počíta s kontajnerovým prostredím a na bežnom serveri je jej značná časť buď nepoužiteľná, alebo sa spúšťa neustále.

Pravidlá z dodávky (/etc/falco/falco_rules.yaml) sa neupravujú — súbor sa pri aktualizácii nahrádza. Vlastné zmeny sa ukladajú do /etc/falco/falco_rules.local.yaml a tamtiež sa vypínajú zbytočné:

- rule: Terminal shell in container
  enabled: false

Čo obvykle býva treba upraviť na serveri bez kontajnerov:

  • všetky pravidlá o kontajneroch — ak kontajnery nie sú, len zaberajú miesto v správe;
  • „Write below etc“ — spúšťa sa pri každej inštalácii balíka a pri akejkoľvek vašej úprave konfigurácie. Je potrebná výnimka pre apt, dpkg a unattended-upgrades, inak pôjdu udalosti prúdom;
  • „Read sensitive file untrusted“ — spúšťa sa na monitorovacích a zálohovacích agentoch a na auditných nástrojoch typu Lynis;
  • spúšťanie z dočasných adresárov — legitímne výnimky existujú: zostavenie aplikácie, automatizovaný prehliadač, ktorý rozbaľuje ovládač do dočasného adresára. Také spustenia vyzerajú znepokojivo, ale dajú sa vysvetliť, a výnimku pre konkrétnu cestu je vhodné založiť rovno, aby sa to nemuselo zakaždým riešiť znova.

Rozumné poradie je rovnaké ako pri ktoromkoľvek inom detekčnom nástroji: prvý týždeň len sledovať a zakladať výnimky a až potom brať novú udalosť ako signál. Pravidlo je jednoduché — ak sú v správe pravidelne udalosti, ktoré nečítate, nie je z nej úžitok.

Kam s udalosťami

V /etc/falco/falco.yaml sa nastavuje výstup: súbor, systémový žurnál alebo odovzdanie externému programu. Pre jeden server stačí súbor s následnou rotáciou — nezabudnite na ňu, súbor udalostí rastie ako každý log a v predvolenom stave ho nikto nestráži.

Priority (priority) sa oplatí použiť na rozdelenie: kritické udalosti tam, kde ich uvidíte hneď, ostatné do všeobecného logu na rozbor.

Falco a auditd nie sú to isté

Oba sledujú systémové volania, ale s odlišnými cieľmi. auditd zaznamenáva dianie, aby bolo možné neskôr obraz zrekonštruovať: nič nehodnotí a neupozorňuje, vedie denník. Falco aplikuje pravidlá v okamihu udalosti a hovorí „toto je podozrivé“ — dáva teda signál, nie záznam.

Držať oba je rozumné: denník na rozbor a signály na reakciu. Ak treba vybrať jeden, tak na serveri, kde je dôležitejšie zrekonštruovať sled udalostí po incidente, je užitočnejší auditd; tam, kde je potrebný včasný signál o spustenom ťažiarovi alebo webshelle, je to Falco.

Stojí za miesto na malom serveri

Poctivá odpoveď: nie vždy. Falco spracúva systémové volania a na zaťaženom stroji je cítiť na procesore. Ak server drží jeden web a z nástrojov zatiaľ nie je ani kontrola integrity, ani poriadne automatické aktualizácie, začínať treba inde.

Jeho chvíľa príde neskôr — keď sú základné veci hotové a zostáva otázka: čo sa na serveri deje také, čo v logoch vidieť nie je. Jednu triedu udalostí pokrýva lepšie než všetky ostatné dokopy — shell spustený procesom webového servera. Ako vyzerajú udalosti s rozdelením podľa priorít a pravidiel, ukazuje ukážková stránka nižšie.