Falco je poznat kao alat za Kubernetes, i gotovo svaki vodič za njega pisan je za klastere. Ipak, on nije vezan za klastere: prati sistemske pozive, a na običnom serveru sa sajtom to radi na potpuno isti način. Prosto o tom slučaju gotovo niko ne piše.

Koristan je tamo gde drugi alati ćute. Veb ljuska na sajtu ne krši nikakve dozvole, ne proizvodi neuspešne prijave i ne poklapa se ni sa jednim potpisom ako je pisana ručno. Ali ima ponašanje koje je za veb server nenormalno: proces PHP-FPM pokreće ljusku. To je ono što Falco vidi.

Šta primećuje

Tipični događaji na običnom serveru:

  • ljuska koju je rodio veb server ili PHP proces — praktično nedvosmislen znak veb ljuske;
  • program pokrenut iz /tmp, /dev/shm ili /var/tmp;
  • osetljivi fajlovi (/etc/shadow, privatni ključevi) koje čita proces koji tu nema šta da traži;
  • izmena sistemskih binarnih fajlova;
  • odlazna veza iz procesa koji ne bi trebalo da koristi mrežu.

Instalacija

Ključni izbor pravi se pri instalaciji: kako Falco dobija sistemske pozive. Savremena opcija zasnovana je na eBPF-u i ne zahteva ni gradnju modula jezgra ni zaglavlja jezgra:

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

Klasičnom modulu jezgra trebaju zaglavlja i ponovo se gradi posle svakog ažuriranja jezgra — na serveru gde se ažuriranja instaliraju automatski, to je ponavljajući izvor mrtvog servisa. Ako je jezgro dovoljno novo (5.8 i naviše), izaberite eBPF i zaboravite problem.

Da proverite da događaji zaista stižu:

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

Šum i njegovo uklanjanje

To je glavni posao. Podrazumevan skup pravila usmeren je na kontejnerska okruženja, a na običnom serveru je njegov znatan deo ili neprimenljiv ili se stalno aktivira.

Isporučena pravila (/etc/falco/falco_rules.yaml) ne menjaju se — fajl se zamenjuje pri ažuriranju. Vaše izmene idu u /etc/falco/falco_rules.local.yaml, i tamo se isključuju i neželjena pravila:

- rule: Terminal shell in container
  enabled: false

Šta obično treba podesiti na serveru bez kontejnera:

  • sva kontejnerska pravila — bez kontejnera samo zauzimaju mesto u izveštaju;
  • „Write below etc" — aktivira se pri svakoj instalaciji paketa i pri svakoj vašoj izmeni konfiguracionog fajla. Treba mu izuzetak za apt, dpkg i unattended-upgrades, inače događaji stižu u toku;
  • „Read sensitive file untrusted" — aktivira se na agentima za praćenje, alatima za rezervne kopije i alatima za proveru poput Lynis-a;
  • pokretanja iz privremenih direktorijuma — legitimni izuzeci postoje: gradnja aplikacije ili automatizovan pregledač koji raspakuje drajver u privremeni direktorijum. Takvi događaji izgledaju uznemirujuće ali se mogu objasniti, i vredi odmah dodati izuzetak za konkretnu putanju umesto da to iznova utvrđujete svaki put.

Razuman redosled isti je kao kod svakog drugog alata za otkrivanje: prve nedelje samo posmatrajte i dodajte izuzetke, i tek onda događaj koji se pojavi tretirajte kao signal. Pravilo je jednostavno — ako izveštaj redovno sadrži događaje koje ne čitate, on za vas ne radi ništa.

Kuda slati događaje

Izlaz se podešava u /etc/falco/falco.yaml: fajl, sistemski dnevnik ili provlačenje kroz spoljni program. Za jedan server dovoljan je fajl uz rotaciju posle toga — ne zaboravite rotaciju, fajl događaja raste kao i svaki drugi dnevnik i podrazumevano ga niko ne prati.

Prioritete vredi koristiti za razdvajanje: kritični događaji idu tamo gde ćete ih odmah videti, ostalo u opšti dnevnik za kasniji pregled.

Falco i auditd nisu isto

Oba prate sistemske pozive, ali sa različitim ciljevima. auditd beleži šta se dešava da bi se slika kasnije mogla rekonstruisati: ne ocenjuje ništa i ne prijavljuje ništa, vodi dnevnik. Falco primenjuje pravila u trenutku događaja i kaže „ovo izgleda sumnjivo" — dakle daje signal, a ne zapis.

Držati oba je razumno: dnevnik za rekonstrukciju i signale za reakciju. Ako morate da birate jedno, auditd je korisniji na serveru gde je rekonstrukcija redosleda događaja posle incidenta najbitnija; Falco tamo gde želite rani signal o pokrenutom rudaru ili veb ljusci.

Da li vredi mesta na malom serveru

Pošten odgovor: ne uvek. Falco obrađuje sistemske pozive i primetan je na procesoru na prometnoj mašini. Ako server nosi jedan sajt a još nemate ni praćenje integriteta ni pristojna automatska ažuriranja, nije to mesto odakle se počinje.

Njegov trenutak dolazi kasnije — kada su osnove odrađene i preostalo pitanje je šta se na serveru dešava a dnevnici to ne pokazuju. Jednu klasu događaja pokriva bolje od svih ostalih zajedno: ljusku koju je pokrenuo proces veb servera. Kako događaji izgledaju razdvojeni po prioritetu i pravilu pokazuje demo stranica ispod.