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/shmili/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,dpkgiunattended-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.