Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!
falco — Agente di sicurezza runtime cloud-native in tempo reale per Linux che monitora le syscall e i metadati di container/Kubernetes per rilevare comportamenti anomali e minacce. | Kitploit
Agente di sicurezza runtime cloud-native in tempo reale per Linux che monitora le syscall e i metadati di container/Kubernetes per rilevare comportamenti anomali e minacce.
Falco è uno strumento di sicurezza runtime nativo per il cloud, destinato ai sistemi operativi Linux. È progettato per rilevare e segnalare in tempo reale comportamenti anomali e potenziali minacce alla sicurezza.
Alla base, Falco è un agente di monitoraggio e rilevamento del kernel che osserva eventi, come le syscall, sulla base di regole personalizzate. Falco può arricchire questi eventi integrando metadati provenienti dal runtime dei container e da Kubernetes. Gli eventi raccolti possono essere analizzati off-host in sistemi SIEM o data lake.
Per informazioni tecniche dettagliate e approfondimenti sulle minacce informatiche che Falco può rilevare, visita il sito ufficiale di Falco.
Per informazioni complete sugli ultimi aggiornamenti e modifiche al progetto, consulta il Change Log.
Il Progetto Falco
Il codebase del Progetto Falco è mantenuto nell'organizzazione GitHub falcosecurity. Il repository principale, falcosecurity/falco, contiene il codice sorgente del binario di Falco, mentre gli altri sottoprogetti sono ospitati in repository dedicati. Questo approccio, che isola i componenti in repository specializzati, migliora la modularità e favorisce uno sviluppo mirato. Tra i notevoli core repositories troviamo:
falcosecurity/libs: Questo repository ospita le librerie core di Falco, che costituiscono la maggior parte del codice sorgente del binario e forniscono funzionalità essenziali, come i driver del kernel.
falcosecurity/rules: Contiene il ruleset ufficiale per Falco, offrendo regole di rilevamento predefinite per varie minacce alla sicurezza e comportamenti anomali.
falcosecurity/plugins: Questo repository supporta l'integrazione con servizi esterni tramite plugin che estendono le capacità di Falco oltre le syscall e gli eventi dei container, con piani per evolvere funzionalità specializzate nelle versioni future.
falcosecurity/falcoctl: Un'utilità da riga di comando progettata per gestire e interagire con Falco.
falcosecurity/charts: Questo repository pubblica gli Helm chart per distribuire Falco e il suo ecosistema. Il sorgente del chart di Falco vive in chart/falco.
Per ulteriori approfondimenti sui nostri repository e maggiori dettagli sul nostro modello di governance, visita l'hub ufficiale del Progetto Falco: falcosecurity/evolution.
Introduzione a Falco
Se sei nuovo a Falco, inizia il tuo percorso con la nostra guida Getting Started. Per le distribuzioni in produzione, consulta la nostra documentazione completa su Setup.
Come raccomandazioni finali prima di distribuire Falco, verifica la compatibilità dell'ambiente, definisci i tuoi obiettivi di rilevamento, ottimizza le prestazioni, scegli la build appropriata e pianifica l'integrazione con SIEM o data lake per garantire un'efficace risposta agli incidenti.
Ambiente Demo
Viene fornito un ambiente demo tramite un file docker-compose che può essere avviato su un host docker e include falco, falcosidekick, falcosidekick-ui e il relativo database redis. Per maggiori informazioni consulta la sezione docker-compose
Unisciti alla Community
Per partecipare al Progetto Falco visita il repository Community per trovare maggiori informazioni e modi per coinvolgerti.
Se hai domande su Falco o sul contribuire, non esitare ad aprire un issue o a contattare i maintainer di Falco e i membri della community per assistenza.
I report completi dei vari audit di sicurezza si trovano qui.
Inoltre, puoi fare riferimento alle sezioni sulla sicurezza di falco e libs per aggiornamenti dettagliati su advisory e policy di sicurezza.
Per segnalare vulnerabilità di sicurezza, segui il processo della community descritto nella documentazione disponibile qui.
Build
Per istruzioni complete e dettagliate su come compilare Falco dal sorgente, consulta la documentazione ufficiale.
Test
Espandi le Istruzioni di Test
La guida Build Falco from source di Falco è la risorsa di riferimento per capire come compilare Falco dal sorgente. Inoltre, il repository falcosecurity/libs offre ulteriori informazioni preziose sui test e il debug delle librerie sottostanti e dei driver del kernel di Falco.
Ecco un esempio di comando cmake che abilita tutto il necessario per tutti gli unit test di questo repository:
Le prime righe di codice alla base di Falco sono state scritte diverso tempo fa, quando Go non aveva ancora lo stesso livello di maturità e adozione di oggi.
Il modello di esecuzione di Falco è sequenziale e mono-thread a causa dei requisiti di statefulness dello strumento, quindi la maggior parte dei punti di forza legati alla concorrenza del runtime di Go non verrebbe affatto sfruttata.
Il codice di Falco gestisce programmazione di bassissimo livello in molti punti, e sappiamo tutti che interfacciare Go con C è possibile ma comporta enormi complessità e compromessi.
Essendo uno strumento di sicurezza destinato a consumare un throughput incredibilmente elevato di eventi al secondo, Falco deve spremere le prestazioni in tutti i percorsi critici a runtime e richiede un controllo profondo sull'allocazione della memoria, cosa che il runtime di Go non può offrire (c'è anche la garbage collection di mezzo).
Sebbene Go non fosse adatto ai requisiti ingegneristici del nucleo di Falco, abbiamo comunque pensato che potesse essere un buon candidato per scrivere estensioni di Falco tramite il sistema di plugin. Questo è il motivo principale per cui abbiamo dato particolare attenzione e alta priorità allo sviluppo di plugin-sdk-go.
Go non è un requisito per avere binari collegati staticamente. Infatti, forniamo build di Falco completamente statiche da alcuni anni. L'unico problema con queste è che il sistema di plugin non può essere supportato con l'attuale modello di librerie dinamiche che abbiamo.
Il sistema di plugin è stato concepito per supportare più linguaggi, quindi dal nostro punto di vista mantenere un codebase compatibile con C è la strategia migliore per garantire la massima compatibilità cross-linguaggio.
In generale, i plugin hanno requisiti/dipendenze GLIBC perché hanno binding C di basso livello necessari per il caricamento dinamico. Una potenziale soluzione per il futuro potrebbe essere quella di supportare anche plugin collegati staticamente in fase di compilazione e quindi rilasciati come inclusi nel binario di Falco. Sebbene non sia ancora iniziato alcun lavoro in questa direzione, ciò risolverebbe la maggior parte dei problemi segnalati e fornirebbe anche un binario totalmente statico. Naturalmente, questo non sarebbe più compatibile con il caricamento dinamico, ma potrebbe essere una soluzione praticabile per la nostra variante di build statica di Falco.
La sicurezza della memoria è sicuramente una preoccupazione e facciamo del nostro meglio per mantenere un alto livello di qualità anche se il C++ è piuttosto soggetto a errori. Ad esempio, cerchiamo di usare smart pointer quando possibile, compiliamo le librerie con un address sanitizer nella nostra CI, eseguiamo Falco tramite Valgrind prima di ogni release e abbiamo modi per fare stress-test e rilevare regressioni delle prestazioni o usi anomali della memoria (ad es. https://github.com/falcosecurity/event-generator). In aggiunta, abbiamo anche terze parti che revisionano il codebase di tanto in tanto. Niente di tutto ciò garantisce ovviamente una posizione perfetta dal punto di vista della sicurezza, ma cerchiamo di massimizzare le nostre probabilità. Go renderebbe sicuramente la nostra vita più facile da questa prospettiva, tuttavia i compromessi non ne hanno mai valsa la pena finora a causa dei punti sopra.
Il codebase C++ di falcosecurity/libs, che è al cuore di Falco, è piuttosto grande e complesso. Portare tutto quel codice in un altro linguaggio richiederebbe uno sforzo enorme, con molte risorse di sviluppo e un'alta probabilità di fallimento e regressioni. Pertanto, il nostro approccio finora è stato quello di preferire refactoring e pulizia del codice, fino a raggiungere un livello ottimale di stabilità, qualità e modularità in quella porzione di codice. Ciò consentirebbe sviluppi futuri più fluidi e più fattibili.
Cosa succederà dopo per Falco?
Resta aggiornato sulle capacità in evoluzione di Falco esplorando la Falco Roadmap, che fornisce informazioni sulle funzionalità attualmente in sviluppo e pianificate per le release future.
Licenza
Falco è concesso in licenza a te secondo la licenza open source Apache 2.0.