Το Falco είναι γνωστό ως εργαλείο για το Kubernetes, και σχεδόν κάθε οδηγός γι' αυτό είναι γραμμένος για συστάδες. Κι όμως δεν είναι δεμένο με συστάδες: παρακολουθεί κλήσεις συστήματος, και σε έναν συνηθισμένο διακομιστή με ιστότοπο αυτό δουλεύει με ακριβώς τον ίδιο τρόπο. Απλώς σχεδόν κανείς δεν γράφει γι' αυτή την περίπτωση.
Είναι χρήσιμο εκεί όπου τα άλλα εργαλεία σιωπούν. Ένα web shell σε ιστότοπο δεν παραβιάζει δικαιώματα, δεν παράγει αποτυχημένες συνδέσεις και δεν ταιριάζει με καμία υπογραφή αν γράφτηκε με το χέρι. Έχει όμως συμπεριφορά μη φυσιολογική για διακομιστή ιστού: η διεργασία PHP-FPM ξεκινά ένα κέλυφος. Αυτό είναι που βλέπει το Falco.
Τι παρατηρεί
Τυπικά συμβάντα σε συνηθισμένο διακομιστή:
- ένα κέλυφος που γεννήθηκε από τον διακομιστή ιστού ή τη διεργασία PHP — πρακτικά αδιαμφισβήτητο σημάδι web shell·
- ένα πρόγραμμα που ξεκίνησε από
/tmp,/dev/shmή/var/tmp· - ευαίσθητα αρχεία (
/etc/shadow, ιδιωτικά κλειδιά) που διαβάζονται από διεργασία που δεν έχει καμία δουλειά να το κάνει· - τροποποίηση δυαδικών του συστήματος·
- εξερχόμενη σύνδεση από διεργασία που δεν θα έπρεπε να χρησιμοποιεί το δίκτυο.
Εγκατάσταση
Η κρίσιμη επιλογή γίνεται κατά την εγκατάσταση: πώς λαμβάνει το Falco τις κλήσεις συστήματος. Η σύγχρονη επιλογή βασίζεται σε eBPF και δεν απαιτεί ούτε μεταγλώττιση αρθρώματος πυρήνα ούτε κεφαλίδες πυρήνα:
sudo falcoctl driver config --type modern_ebpf
sudo systemctl restart falco
Το κλασικό άρθρωμα πυρήνα χρειάζεται κεφαλίδες και ξαναχτίζεται μετά από κάθε ενημέρωση πυρήνα — σε διακομιστή όπου οι ενημερώσεις εγκαθίστανται αυτόματα, αυτό είναι επαναλαμβανόμενη πηγή νεκρής υπηρεσίας. Αν ο πυρήνας είναι αρκετά πρόσφατος (5.8 και άνω), διαλέξτε eBPF και ξεχάστε το πρόβλημα.
Για να ελέγξετε ότι όντως φτάνουν συμβάντα:
sudo systemctl status falco
sudo journalctl -u falco -n 50
Ο θόρυβος και η αφαίρεσή του
Αυτή είναι η κύρια δουλειά. Το προεπιλεγμένο σύνολο κανόνων στοχεύει σε περιβάλλοντα container, και σε συνηθισμένο διακομιστή σημαντικό μέρος του είτε δεν εφαρμόζεται είτε ενεργοποιείται συνεχώς.
Οι κανόνες που παρέχονται (/etc/falco/falco_rules.yaml) δεν επεξεργάζονται — το αρχείο αντικαθίσταται στην ενημέρωση. Οι δικές σας αλλαγές πάνε στο /etc/falco/falco_rules.local.yaml, και εκεί απενεργοποιούνται και οι ανεπιθύμητοι κανόνες:
- rule: Terminal shell in container
enabled: false
Τι χρειάζεται συνήθως προσαρμογή σε διακομιστή χωρίς containers:
- κάθε κανόνας για container — χωρίς containers απλώς πιάνουν χώρο στην αναφορά·
- «Write below etc» — ενεργοποιείται σε κάθε εγκατάσταση πακέτου και σε κάθε δική σας επεξεργασία αρχείου ρυθμίσεων. Χρειάζεται εξαίρεση για
apt,dpkgκαιunattended-upgrades, αλλιώς τα συμβάντα έρχονται σε ροή· - «Read sensitive file untrusted» — ενεργοποιείται σε πράκτορες παρακολούθησης, εργαλεία αντιγράφων ασφαλείας και εργαλεία ελέγχου όπως το Lynis·
- εκκινήσεις από προσωρινούς καταλόγους — υπάρχουν νόμιμες εξαιρέσεις: η μεταγλώττιση μιας εφαρμογής ή ένας αυτοματοποιημένος περιηγητής που αποσυμπιέζει έναν οδηγό σε προσωρινό κατάλογο. Τέτοια συμβάντα φαίνονται ανησυχητικά αλλά εξηγούνται, και αξίζει να προσθέσετε αμέσως εξαίρεση για τη συγκεκριμένη διαδρομή αντί να το ξαναβρίσκετε κάθε φορά.
Η λογική σειρά είναι η ίδια όπως με κάθε άλλο εργαλείο ανίχνευσης: την πρώτη εβδομάδα μόνο παρακολουθείτε και προσθέτετε εξαιρέσεις, και μόνο μετά θεωρείτε ένα συμβάν που εμφανίζεται ως σήμα. Ο κανόνας είναι απλός — αν η αναφορά περιέχει τακτικά συμβάντα που δεν διαβάζετε, δεν κάνει τίποτα για εσάς.
Πού να στέλνονται τα συμβάντα
Η έξοδος ρυθμίζεται στο /etc/falco/falco.yaml: ένα αρχείο, το ημερολόγιο του συστήματος ή σωλήνωση σε εξωτερικό πρόγραμμα. Για έναν μόνο διακομιστή αρκεί ένα αρχείο με περιστροφή στη συνέχεια — μην ξεχάσετε την περιστροφή, το αρχείο συμβάντων μεγαλώνει όπως κάθε άλλο και από προεπιλογή κανείς δεν το προσέχει.
Αξίζει να χρησιμοποιείτε τις προτεραιότητες για διαχωρισμό: τα κρίσιμα συμβάντα πηγαίνουν εκεί όπου θα τα δείτε αμέσως, τα υπόλοιπα στο γενικό ημερολόγιο για μετέπειτα εξέταση.
Το Falco και το auditd δεν είναι το ίδιο πράγμα
Και τα δύο παρακολουθούν κλήσεις συστήματος, αλλά με διαφορετικούς σκοπούς. Το auditd καταγράφει τι συμβαίνει ώστε η εικόνα να μπορεί να ανασυγκροτηθεί αργότερα: δεν αξιολογεί τίποτα και δεν αναφέρει τίποτα, τηρεί ημερολόγιο. Το Falco εφαρμόζει κανόνες τη στιγμή του συμβάντος και λέει «αυτό φαίνεται ύποπτο» — δηλαδή δίνει σήμα και όχι εγγραφή.
Το να κρατήσετε και τα δύο είναι λογικό: το ημερολόγιο για ανασυγκρότηση και τα σήματα για αντίδραση. Αν πρέπει να διαλέξετε ένα, το auditd είναι πιο χρήσιμο σε διακομιστή όπου η ανασυγκρότηση της ακολουθίας των γεγονότων μετά από περιστατικό μετράει περισσότερο· το Falco εκεί όπου θέλετε έγκαιρο σήμα για έναν miner που τρέχει ή ένα web shell.
Αξίζει τον χώρο σε μικρό διακομιστή
Η τίμια απάντηση: όχι πάντα. Το Falco επεξεργάζεται κλήσεις συστήματος και είναι αισθητό στον επεξεργαστή σε πολυάσχολο μηχάνημα. Αν ο διακομιστής φιλοξενεί έναν ιστότοπο και δεν έχετε ακόμη ούτε παρακολούθηση ακεραιότητας ούτε αξιοπρεπείς αυτόματες ενημερώσεις, δεν είναι εκεί που ξεκινάτε.
Η ώρα του έρχεται αργότερα — αφού γίνουν τα βασικά και το ερώτημα που μένει είναι τι συμβαίνει στον διακομιστή που δεν το δείχνουν τα αρχεία. Μία κατηγορία συμβάντων την καλύπτει καλύτερα από όλα τα άλλα μαζί: ένα κέλυφος που ξεκίνησε από τη διεργασία του διακομιστή ιστού. Πώς μοιάζουν τα συμβάντα χωρισμένα ανά προτεραιότητα και κανόνα το δείχνει η σελίδα επίδειξης παρακάτω.