Kubernetes + Falco + WAZUH

Vamos a tener algo así: una historia divertida, cuando me tope con nuestro amigo y orquestador #kubernetes (AK: #k8s).

Cuando me toco jugar el partido de #k8s lo primero que quise es ganar visibilidad, fácil, rápido y sin necesidad de procesos largos de cambios (burocracia, maldita y necesaria burocracia), por lo que a mi mente vino ¿que tal si armamos un DaemonSet (o por lo menos un intento de eso) para que ejecute nuestro falco y algo mas ya que estamos?





Aqui viene lo bueno jovenes= KUBERNETES + FALCO.


#Falco, es un proyecto de sysdig, el cual permite monitorear de manera "nativa" comportamiento inesperado en kubernetes y contenedores. Me gusta llamarlo el #EDR para kubernetes, ya que se basa en deteccion de comportamiento. Ahora, falco tiene la posibilidad de ser desplegado en kubernetes como un #pod y ya viene con su imagen de #docker, así que vamos a editarla un poco para sumarle nuestras cositas... :D básicamente vamos a usar la imagen de base "FALCO", sumamos las dependencias que nos faltan, actualizamos, borramos cosas de mas, metemos un entrypoint... y guala:



Si no tienen idea de lo que paso recién, no se preocupen, google, mas repo > https://github.com/Stuxend/falco-wazuh/ y van a poder sacarlo por si mismos... para resumir simplemente deben usar la imagen> "friquetito/falco-wazuh:latest" (la imagen se autobuildea desde ese repo).


Manos a la obra:


Vamos a necesitar:


  1. WAZUH SERVER (UP AND RUNNING) link> https://documentation.wazuh.com/3.12/installation-guide/installing-wazuh-manager/

  2. K8S/K3S/Minikube (UP AND RUNNING) link minikube > https://kubernetes.io/es/docs/tasks/tools/install-minikube/

  3. GANAS Y TIEMPO. link a ustedes mismos.


Pasos:


Dentro de Kubernetes crear el namespace "wazuh" ( pueden usar el que ustedes quieran, yo lo decidí llamar así).

kubectl create namespace wazuh


Una vez que tengan el namespace creado deben ir al repo> https://github.com/Stuxend/falco-wazuh/k8/ donde van a encontrar un archivo de deployment de kubernetes. (si decidieron usar otro namespace recuerden cambiarlo en el file).


Solo tenemos que editar nuestro deployment y en la env que refiere a "wazuh_manager" por la IP/DNS name de su wazuh manager server. (si requieren especificar un password y un grupo u otro valor, deben cambiar el entrypoint de la imagen).




Aplicamos nuestro deployment.


WARNING= este deployment va a ejecutar un deaemonset con privilegios, tenganlo en cuenta para sus monitoreos.


kubectl -n wazuh apply -f deployment.yaml


Vamos a tener algo así:



Si chequeamos nuestro pod debería estar funcionando ok y deberían ver uno por cada nodo que tenga su cluster (kubernentes daemonset magic):

kubectl -n wazuh get pod


Ahora solo queda ver que todo este bien en nuestro WAZUH MANAGER y como podemos ver se ve nuestro agente reportando:


Nuestro FALCO agent, cuenta con un archivo de configuración y de rules (el cual esta en el repo y pueden validarlo) esas configuraciones van a realizar 2 cosas especificas:

1: Guardar los eventos en un archivo de log en > /var/log/falco-events.log

2: Las reglas tendrán siempre el mensaje: "FALCO-WAZUH" y hay una regla especial para detectar comandos como wget/curl a sitios no locales. (útil para detectar actividad maliciosa).


Para que nuestro WAZUH empiece a recibir los eventos solo deben copiar las configuraciones que deje en la carpeta "WAZUH-RULES" donde esta el archivo de decoder y las rules. Luego decirle a sus agente que tomen los eventos agregando simplemente a su agent.conf lo siguiente:


	<localfile>
		<log_format>syslog</log_format>
		<location>/var/log/falco-events.log</location>
	</localfile>

Con esos cambios deberían empezar a ver los eventos:



Y ahora somos capaces de detectar movimiento en nuestros POD's y actividad maliciosa. Como por ejemplo ejecución de comando CRUL (o cualquier otro que requiera conexión a una dirección no local), y todas las reglas que ustedes se les ocurra configurar :) :



Adicional y como no puede ser menos, también tenemos visibilidad sobre el nodo con el agente de wazuh, como: procesos, docker lisener, scap, log events, etc. Si bien, esta tipo de despliegue no es el optimo ya que lo mejor seria estar auditando el api server de kubernetes, nos da la posibilidad de rápidamente (sin necesidad de hacer muchos cambios y 0 reinicio) desplegar un mínimo de visibilidad sobre nuestra infra.


MAS INFO:


FALCO > https://falco.org/

WAZUH > https://wazuh.com/

Kubernetes > https://kubernetes.io/es/