falcó
Falco es una herramienta de seguridad en tiempo de ejecución nativa de la nube para sistemas operativos Linux. Está diseñado para detectar y alertar sobre comportamientos anormales y posibles amenazas a la seguridad en tiempo real.
En esencia, Falco es un agente de detección y monitoreo del kernel que observa eventos, como llamadas al sistema, basándose en reglas personalizadas. Falco puede mejorar estos eventos integrando metadatos del tiempo de ejecución del contenedor y Kubernetes. Los eventos recopilados se pueden analizar fuera del host en SIEM o sistemas de lago de datos.
Falco, creado originalmente por Sysdig, es un proyecto graduado de la Cloud Native Computing Foundation (CNCF) utilizado en producción por varias organizaciones.
Para obtener información técnica detallada y conocimientos sobre las amenazas cibernéticas que Falco puede detectar, visite el sitio web oficial de Falco.
Para obtener información completa sobre las últimas actualizaciones y cambios en el proyecto, consulte el Registro de cambios. Además, hemos documentado el proceso de lanzamiento para entregar nuevas versiones de Falco.
Falco Repo: impulsando el núcleo del proyecto Falco
Este es el repositorio principal de Falco que contiene el código fuente para construir el binario Falco. Al utilizar sus bibliotecas y el archivo de configuración falco.yaml, este repositorio constituye la base de la funcionalidad de Falco. El repositorio Falco está estrechamente interconectado con los siguientes repositorios principales :
- falcosecurity/libs: Las bibliotecas de Falco son clave para sus operaciones fundamentales, constituyen la mayor parte del código fuente del binario Falco y proporcionan características esenciales como controladores del kernel.
- falcosecurity/rules: contiene el conjunto de reglas oficiales para Falco, que proporciona reglas de detección predefinidas para diversas amenazas de seguridad y comportamientos anormales.
- falcosecurity/plugins: los complementos de Falco facilitan la integración con servicios externos, amplían las capacidades de Falco más allá de las llamadas al sistema y los eventos de contenedor, y están diseñados para evolucionar con funcionalidad especializada en versiones futuras.
- falcosecurity/falcoctl: utilidad de línea de comandos para gestionar e interactuar con Falco.
Para obtener más información, visite el centro oficial del Proyecto Falco: falcosecurity/evolution. Proporciona conocimientos e información valiosos sobre los repositorios del proyecto.
Empezando con Falco
Revise y siga atentamente la Documentación Oficial.
Consideraciones y orientación para los adoptantes de Falco:
Comprenda las dependencias: evalúe el entorno donde ejecutará Falco y considere las versiones y arquitecturas del kernel.
Defina objetivos de detección de amenazas: identifique claramente las amenazas que desea detectar y evalúe las fortalezas y limitaciones de Falco.
Considere el rendimiento y el costo: evalúe la sobrecarga del rendimiento informático y alinee con los administradores del sistema o SRE. Presupuesta en consecuencia.
Elija un enfoque de compilación y personalización: decida entre la compilación Falco de código abierto o la creación de una canalización de compilación personalizada. Personalice el proceso de construcción e implementación según sea necesario, incluida la incorporación de pruebas o enfoques únicos, para garantizar una implementación resistente con ciclos de implementación rápidos.
Integre con destinos de salida: integre Falco con SIEM, sistemas de lago de datos u otros destinos de salida preferidos para establecer una base sólida para un análisis de datos integral y permitir flujos de trabajo de respuesta a incidentes efectivos.
Entorno de demostración
Se proporciona un entorno de demostración a través de un archivo docker-compose que se puede iniciar en un host de Docker que incluye falco, falcosidekick, falcosidekick-ui y su base de datos redis requerida. Para obtener más información, consulte la sección Docker-Compose.
Cómo contribuir
Consulte la Guía de contribución y el Código de conducta para obtener más información sobre cómo contribuir.
Únete a la comunidad
Para participar en el Proyecto Falco, visite el repositorio de la comunidad para encontrar más información y formas de participar.
Si tiene alguna pregunta sobre Falco o sobre cómo contribuir, no dude en presentar un problema o comunicarse con los mantenedores de Falco y los miembros de la comunidad para obtener ayuda.
¿Cómo llegar?
- Únase al canal #falco en Kubernetes Slack.
- Únase a la lista de correo de Falco.
- Presente un problema o realice solicitudes de funciones.
Compromiso con la seguridad propia de Falco
Los informes completos de varias auditorías de seguridad se pueden encontrar aquí.
Además, puede consultar las secciones de seguridad de falco y libs para obtener actualizaciones detalladas sobre políticas y avisos de seguridad.
Para informar vulnerabilidades de seguridad, siga el proceso comunitario descrito en la documentación que se encuentra aquí.
¿Qué sigue para Falco?
Manténgase actualizado con las capacidades en evolución de Falco explorando la hoja de ruta de Falco, que proporciona información sobre las funciones actualmente en desarrollo y planificadas para versiones futuras.
Licencia
Falco tiene la licencia de código abierto Apache 2.0.
Pruebas
Ampliar las instrucciones de prueba
Build Falco desde el código fuente de Falco es el recurso de referencia para comprender cómo construir Falco desde el código fuente. Además, el repositorio falcosecurity/libs ofrece información valiosa adicional sobre pruebas y depuración de las bibliotecas subyacentes y los controladores del kernel de Falco.
Aquí hay un ejemplo de un comando cmake
que habilitará todo lo que necesita para todas las pruebas unitarias de este repositorio:
cmake
-DUSE_BUNDLED_DEPS=ON
-DBUILD_LIBSCAP_GVISOR=ON
-DBUILD_BPF=ON
-DBUILD_DRIVER=ON
-DBUILD_FALCO_MODERN_BPF=ON
-DCREATE_TEST_TARGETS=ON
-DBUILD_FALCO_UNIT_TESTS=ON .. ;
Cree y ejecute el conjunto de pruebas unitarias:
nproc= $( grep processor /proc/cpuinfo | tail -n 1 | awk ' {print $3} ' ) ;
make -j $(( $nproc - 1 )) falco_unit_tests ;
# Run the tests
sudo ./unit_tests/falco_unit_tests ;
Opcionalmente, cree el controlador de su elección y pruebe el binario Falco para realizar pruebas manuales.
Por último, el Proyecto Falco ha trasladado sus pruebas de regresión Falco a pruebas/falcoseguridad.
¿Por qué Falco está en C++ en lugar de Go o {idioma}?
Ampliar información
- Las primeras líneas de código en la base de Falco se escribieron hace algún tiempo, donde Go aún no tenía el mismo nivel de madurez y adopción que hoy.
- El modelo de ejecución de Falco es secuencial y monoproceso debido a los requisitos de estado de la herramienta, por lo que la mayoría de los puntos de venta relacionados con la concurrencia del tiempo de ejecución de Go no se aprovecharían en absoluto.
- El código Falco trata con programación de muy bajo nivel en muchos lugares (por ejemplo, algunos encabezados se comparten con la sonda eBPF y el módulo Kernel), y todos sabemos que interconectar Go con C es posible pero trae toneladas de complejidad y compensaciones a la mesa. .
- Como herramienta de seguridad destinada a consumir un alto rendimiento de eventos por segundo, Falco necesita exprimir el rendimiento en todas las rutas activas en tiempo de ejecución y requiere un control profundo sobre la asignación de memoria, que el tiempo de ejecución de Go no puede proporcionar (también hay recolección de basura involucrada). .
- Aunque Go no cumplía con los requisitos de ingeniería del núcleo de Falco, todavía pensamos que podría ser un buen candidato para escribir extensiones de Falco a través del sistema de complementos. Esta es la razón principal por la que le dimos especial atención y alta prioridad al desarrollo del complemento-sdk-go.
- Go no es un requisito para tener archivos binarios vinculados estáticamente. De hecho, ofrecemos compilaciones Falco totalmente estáticas desde hace algunos años. El único problema con ellos es que el sistema de complementos no puede ser compatible con el modelo de biblioteca dinámica actual que tenemos actualmente.
- El sistema de complementos ha sido concebido para admitir múltiples idiomas, por lo que, por nuestra parte, mantener una base de código compatible con C es la mejor estrategia para garantizar la máxima compatibilidad entre idiomas.
- En general, los complementos tienen requisitos/dependencias de GLIBC porque tienen enlaces C de bajo nivel necesarios para la carga dinámica. Una posible solución para el futuro podría ser admitir también que el complemento se vincule estáticamente en el momento de la compilación y se publique como incluido en el binario Falco. Aunque todavía no se ha iniciado ningún trabajo en esta dirección, esto resolvería la mayoría de los problemas que usted informó y también proporcionaría un binario totalmente estático. Por supuesto, esto ya no sería compatible con la carga dinámica, pero puede ser una solución viable para nuestra versión de construcción estática de Falco.
- La seguridad de la memoria es definitivamente una preocupación y hacemos todo lo posible para mantener un alto nivel de calidad a pesar de que C++ es bastante propenso a errores. Por ejemplo, intentamos utilizar punteros inteligentes siempre que sea posible, creamos las bibliotecas con un desinfectante de direcciones en nuestro CI, ejecutamos Falco a través de Valgrind antes de cada lanzamiento y tenemos formas de realizar pruebas de estrés para detectar regresiones de rendimiento o uso extraño de memoria ( por ejemplo, https://github.com/falcosecurity/event-generator). Además de eso, también contamos con terceros que auditan el código base de vez en cuando. Por supuesto, nada de esto constituye un punto de vista de seguridad perfecto, pero intentamos maximizar nuestras probabilidades. Go definitivamente nos haría la vida más fácil desde esta perspectiva, sin embargo, las compensaciones nunca hicieron que valga la pena hasta ahora debido a los puntos anteriores.
- La base de código C++ de falcosecurity/libs, que es el núcleo de Falco, es bastante grande y compleja. Portar todo ese código a otro lenguaje sería un esfuerzo importante que requeriría muchos recursos de desarrollo y con una alta probabilidad de fracaso y regresión. Como tal, nuestro enfoque hasta ahora ha sido elegir refactorizadores y pulir el código, hasta alcanzar un nivel óptimo de estabilidad, calidad y modularidad en esa parte del código. Esto permitiría que futuros desarrollos fueran más fluidos y viables.
Recursos
- Gobernancia
- Código de conducta
- Directrices para mantenedores
- Lista de mantenedores
- Directrices para repositorios
- Lista de repositorios
- Lista de adoptantes
- Instalar y operar
- Solución de problemas