Informacion General del Proyecto
- Falco is a work in progress, so features and behaviors may change. This technical Report is based on version 0.39.1; always consult the official documentation for updates.
Introduccion Falco es una herramienta de codigo abierto diseñada para entornos de nube. Su principal funcion es detectar comportamientos/acciones anomalos en tiempo real mediante la recopilacion de datos de multiples fuentes, generando alertas para mostrar posibles problemas de seguridad. Fue desarrolado originalmente por Sysdig en 2016 y donado a la CNCF en 2018, en 2024 tiene mas de 60M+ descargas en Dockerhub, 40+ integraciones, 5.800+ estrellas de Github, 170 Contribuidores en todo el mundo.1
Funcionamiento Falco se encarga de monitorear el comportamiento del sistema operativo y su nucleo mediante la captura de llamadas al sistema, que luego procesa en su motor de reglas. Cuando el motor de reglas detecte un comportamiento incorrecto o la violacion de una regla, enviara una alerta al sistema.
Los comportamientos que Falco monitorea provienen de multiples fuentes:
- Llamadas al sistema: Monitoreo de interacciones entre el espacio de usuario y el kernel
- Eventos de K8s: Recopila eventos auditados y acciones a nivel API dentro de los clusters
- Eventos en la nube: Monitorea plataformas como AWS CloudTrail para detectar cambios en la infraestructura
- Sistemas externos: Utilizando Plugins, se pueden recopilar eventos de servicios como Github, Okta, nomad, etc.
Alguno de los comportamientos que Falco puede detectar, se encuentran:
- Escalada de privilegios en contenedores
- Manipulacion de espacio de nombres (
netns
) - Acceso no autorizado a directorios criticos como:
/etc
,/bin
,/root
, etc. - Cambio de permisos de carpetas o carpetas, creacion de enlaces simbolicos, y mutaciones en conexines o sockets
- Ejecucion inesperada de binarios o scripts (
execve
)
Componentes de Falco
- Falco (Userspace): Procesa los eventos enviados por “Falco (Driver)” y aplica las reglas definidas en la “Configuracion”
- Falco (Driver): Actua como puente entre el kernel y el espacio del usuario, recopila eventos y los envia a “Falco (Userspace)” para su analisis
- Configuracion: Define el funcionamiento de “Falco (Driver)” en un archivo YAML, especificando reglas y manejo de alertas
- Reglas: Politicas escritas en YAML que definen las condiciones para generar alertas
- Plugins (Opcional): Extiende las funcionalidades de “Falco (Driver)” para añadir nuevos eventos o campos para detectar, puede ser desplegado en sistemas activos con Falcoctl para que interactue con Falco(Userspace)
Licenciamiento, Valores, Ventajas
El codigo fuente de Falco esta licenciado bajo Apache-2.0, Disponible en: https://www.apache.org/licenses/LICENSE-2.0.txt Licencia permisiva muy usado en proyectos de codigo abierto, hecha por la ASF (Apache Software Foundation), permite su uso sin gastos extras.
Apache-2.0 Permite
- Uso Comercial: Puede ser usado en entornos empresariales sin restricciones
- Proteccion de Patentes: Defiende el codigo original ante infracciones de 3ros
- Permite observar, analizar, modificar, distribuir y crear obras derivadas usando la misma licencia
Apache-2.0 No Permite
- Uso de marcas o nombres sin autorizacion explicita
- No asegura el funcionamiento, garantia o soporte del programa
La documentacion de Falco esta licenciada bajo CC-BY-4.0 (Creative Commons Attribution 4.0), Disponible en: https://creativecommons.org/licenses/by/4.0/ Licencia para cualquier material informativo sea reutilizado y modificado, mientras se acredite a los autores originales.
CC-BY-4.0 Permite
- Copiar, adaptar y distribuir el contenido
- Uso comercial: Permite usar el contenido en entornos empresariales
CC-BY-4.0 No Permite
- Omitir la atribucion: siempre debe atribuir el material original junto a sus a sus autores, incluso la adaptacion para uso interno.
Valores Falco se distribuye bajo una licencia gratuita y de uso ilimitado. Sin embargo, toda implementacion tiene costos asociados, la implementacion inicial puede tener una duracion de 40 horas dependiendo del personal, para poder revisar las necesidades de la infraestuctura, configuracion de reglas y hacer pruebas de funcionamiento, se le suman mas costos si para este proceso se necesita una consultora externa. El mantenimiento por parte de Falco es gratuito, el personal le tomara dentro de 2-4 horas mensuales. La capacitacion del personal puede ser en base a recursos gratuitos en linea como la documentacion oficial, foros, la comunidad, los contribuidores, etc. En resumen, Falco no tiene costos directos, pero si indirectos que hay que tomar en cuenta, sin embargo su costo es menor a otras alternativas empresariales.
Ventajas para la empresa
- Deteccion en tiempo real y multinivel: Falco monitorea las llamadas al sistema tanto del sistema host como de los contenedores, permitiendo ser mas eficiente que las soluciones que dependen de otros tipos de analisis.
- Ecosistema integrado y en expansion: Falco se puede integrar con otras herramientas (Prometheus, Grafana, Falcosidekick, Gotify, etc.) permitiendo un enfoque colaborativo entre aplicaciones y evitar depender de un unico punto de falla.
- Flexibilidad y Adaptabilidad: Las reglas YAML permiten adaptar Falco a las necesidades de las empresas, estandares del mercado y las auditorias, como pueden ser PCI DSS, NIST Standard, HIPPA, GDPR, RedRAMP, SOC 2, ISO 27001, CIS Benchmarks, etc.
- Permite automatizar con Falcoctl: Falcoctl permite modificar las reglas sobre la marcha, lo que es critico en organizaciones que evolucionan con el tiempo, mejorando la eficiencia y eliminando el tiempo abajo.
- Comunidad activa: Falco recibe actualizaciones frecuentes, cuenta con el respaldo de grandes empresas (AWS, Google, Red Hat) garantizando su evolucion en el futuro
Requisitos especificos de implementacion
- eBPF (extended Berkeley Packet Filter) Permite monitorear las interacciones del kernel de forma eficiente. su driver mas reciente “Modern eBPF Probe CO-RE” es compatible con:
- Arquitectura de CPU:
x86_64
oarm64
- Kernel: version minima
>=5.8
(lanzado en 2021)
- Entornos Compatibles
- Linux: Distribuciones como Debian/Ubuntu, CentOS/RHEL/Fedora/Amazon Linux, OpenSUSE
- Contenedores y Orquestadores (Solo en Host basados en Linux): Docker, K8s (Helm, Minikube, Kind, MicroK8s), K3s, GKE
- Windows(Limitado): A travez de WSL2
- MacOS(Limitado): Soporte para CPUs Apple Silicon M1/M2 mediante VMs ejecutando Ubuntu 24.04 mediante lima
Limitaciones Falco tiene dificultades con:
- Sistemas Serverless (Faas y Saas) (Pueden implementar APIs): Muchos entornos no tienen acceso al kernel
- Dispositivos IoT/embebidos: Algunos dispositivos usan kernels antiguos o modificados que limitan el acceso para el usuario final
Experiencia de Instalacion
La intalacion en Arch Linux con Docker y Docker Compose fue rapida y directa, con una duracion de 10 minutos. La lectura para comprender como funcionaba es lo que mas tiempo llevo.
El siguiente archivo docker-compose.yaml
configura Falco sin driver externo usando Modern eBPF en modo Menos Privilegiado.
docker-compose.yaml
Ejemplo de alerta con Falco Si un usuario externo intenta acceder a archivos sensibles dentro del host, Falco genera una alerta como la siguiente
2024-10-09T19:13:43.470868405+0000: Warning Grep private keys or passwords activities found (evt_type=execve user=madkoding user_uid=1002 user_loginuid=1002 process=find proc_exepath=/usr/bin/find parent=bash command=find /root -name id_rsa terminal=34817 exe_flags=0 container_id=host container_name=host)
Deglose de la alerta:
- Fecha y hora “
2024-10-09T19:13:43.470868405+0000
”:- Por defecto usa el formato ISO 8601:2019, incluyendo nanosegundos y formato UTC
- Advertencia: “
Warning Grep private keys or passwords activities found
”- Descripcion de la advertencia generada por Falco
- Detalles de los eventos
evt_type=execve
: Se ejecuto un procesouser=madkoding
: El nombre del usuario que ejecuto el comandouser_uid=1002
: El identificador unico de usuariouser_loginuid=1002
: UID del inicio de sesion, podria ser diferente si se trata de un proceso que tuvo escalamiento de privilegiosprocess=find
: El comando que ejecutoproc_exepath=/usr/bin/find
: Ruta absoluta del comando que ejecutoparent=bash
: El proceso general donde se ejecuto el comando, usualmente una shellcommand=find /root -name id_rsa
: El comando completo que se ejecutoterminal=34817
: Identificador unico de la sesion de terminalexe_flags=0
: Parametros adicionales que se ejecutaron, en este caso ninguno.container_id=host
: ID unico del contenedor, host significa que es del mismo sistema y no desde un contenedorcontainer_name=host
: Nombre del contenedor, host significa que es del mismo sistema y no desde un contenedor
Demo: Notificaciones al telefono
Falco, con la ayuda de extensiones como Falcosidekick, permite enviar notificaciones automaticas basadas en eventos con Gotify por ejemplo. Para permitir conectar se usa Cloudflare tunnel a travez de dominios.
Herramientas
- Falcosidekick: Recibe eventos desde Falco y los envia a otros servicios
- Gotify: Servidor de notificaciones que gestiona y envia alertas a los dispositivos
- Cloudflare Domains: Permite mapear ip locales y convertirlas en subdominios para poder acceder desde cualquier parte del mundo
Configuracion de Sub-Dominios http://192.168.18.24:3030 → https://gotify.proxylivy.work http://192.168.18.24:3031 → https://falcosidekick.proxylivy.work
Configuraciones
- Configuracion de Falcosidekick
El archivo
docker-compose.yaml
con la configuracion necesaria, recuerda modificar “{api-token}
” segun la seccion Aplicaciones de Gotify
- Configuracion de Gotify
El archivo
docker-compose.yaml
con la configuracion necesaria
services:
gotify:
container_name: gotify
image: gotify/server
restart: unless-stopped
ports:
- 192.168.18.24:3030:80
environment:
- GOTIFY_DEFAULTUSER_PASS=SuperSecureDefaultPassword
volumes:
- "/docker/gotify/data:/app/data"
- Modificar Falco para integrar Falcosidekick Es necesario modificar el archivo.yaml2 para habilitar la salida json y http
json_output: true
json_include_output_property: true
http_output:
enabled: true
url: "https://falcosidekick.proxylivy.work"
Esta configuracion permite que Falco envie notificaciones a Falcosidekick, la cual la reenvia a Gotify y permite notificar diferentes dispositivos.
Poner a Prueba
Acceder a Gotify: Accede a https://gotify.deathgabox.work
- user: deathgabox
- pass: demodemogotify
Envia una request y recibiras una notificacion
curl -XPOST "https://falcosidekick.proxylivy.work/" -d'{"output":"16:31:56.746609046: Error File below a known binary directory opened for writing (user=root command=touch /bin/hack file=/bin/hack)","hostname": "localhost", "priority":"Error","rule":"Write below binary dir","time":"2024-09-10T15:31:56.746609046Z", "output_fields": {"evt.time":1507591916746609046,"fd.name":"/bin/hack","proc.cmdline":"touch /bin/hack","user.name":"root"}}'
Decision Estrategica
En resumen, Falco es una solucion de seguridad de codigo abierto respaldada por la CNCF, que se adapta a las infraestructura modernas debido a su capacidad de monitorear en tiempo real el comportamiento/acciones a travez de eBPF. El punto fuerte de Falco es la seguridad que ofrece para entornos basados en contenedores como Docker, con orquestadores como Kubernetes y sus herramientas derivadas, ademas de poder conectar y monitorear sistemas externos o nubes publicas, lo que permite ampliar el rango de monitoreo a uno aun mas completo. El ecosistema de Falco continua expandiendose dia tras dia con nuevas reglas, APIs y plugins, lo que le entrega una flexibilidad y versatilidad al sistema principal.
Bibliografia
Extra
Further Reading
-
- Make sure unprivileged eBPF is disabled. Nowadays, to install an eBPF program, you typically need root—or at least CAP_SYS_ADMIN and/or CAP_BPF. This was not always the case. Unprivileged eBPF was introduced around kernel 4.4. Be sure to check this config option by running:
- sysctl kernel.unprivileged_bpf_disabled
- Disable features you don’t need. Admins can programmatically disable things like kprobes:
- echo 0 > /sys/kernel/debug/kprobes/enabled
- Create firewall filters on external firewalls to block suspicious packets
- Build kernels without support for kprobes, eBPF based TC filters, or eBPF entirely (although that may not be an option for many)
- Ensure
CONFIG_BPF_KPROBE_OVERRIDE
is not set unless absolutely necessary
- Make sure unprivileged eBPF is disabled. Nowadays, to install an eBPF program, you typically need root—or at least CAP_SYS_ADMIN and/or CAP_BPF. This was not always the case. Unprivileged eBPF was introduced around kernel 4.4. Be sure to check this config option by running:
-
Falco Talon: Motor de respuesta a incidentes | Falco Talon Docs
-
A principios de 2022 Windows agrego soporte para eBPF | Repo Microsoft/ebpf-for-windows
-
falco-no-driver(Modern eBPF): https://hub.docker.com/r/falcosecurity/falco-no-driver
Footnotes
-
The Falco Project. (s. f.). Falco. https://falco.org/docs/ ↩
-
Falcosecurity. (s. f.). falco/falco.yaml at master · falcosecurity/falco. GitHub. https://github.com/falcosecurity/falco/blob/master/falco.yaml ↩