
Antivirus para K8s. Proteja sus aplicaciones que se ejecutan en Kubernetes de ataques maliciosos mediante código fuente previamente registrado, monitoreo de procesos en tiempo de ejecución, análisis, alertas y también compartiendo detecciones con la comunidad. Quizás salve de ransomware.
Queremos mantener esto como código abierto para luchar contra los ataques a nuestro ecosistema favorito de Kubernetes. Podemos combatir amenazas juntos como comunidad, mediante contribución continua.
¿Cómo funciona Tarian?
Tarian se ejecuta como un contenedor sidecar en el pod de tu aplicación principal, monitoreando cambios en los IDs de procesos, cantidad de procesos en ejecución, cambios en las relaciones padre-hijo de procesos, archivos y directorios en el sistema de archivos que pertenecen a tu aplicación, cambios en las firmas de tus archivos, etc. Tarian será parte del pod de tu aplicación desde el entorno dev hasta prod, por lo que puedes registrar en tu DB de Tarian lo que se supone que debe ocurrir y ejecutarse en tu contenedor + lo que se puede monitorear + lo que se puede notificar + la acción (autodestrucción del pod) a realizar según los cambios detectados. ¡Desplaza a la izquierda tu mecanismo de detección!
¿Qué pasa si ocurre un cambio desconocido dentro del contenedor que no está en la DB de registro de Tarian? ¿Cómo reacciona Tarian ante eso?
Si ocurre un cambio desconocido, Tarian puede simplemente notificar los análisis observados a tu equipo de seguridad + enviar el registro al equipo de seguridad. Luego, tus ingenieros de seguridad pueden registrar ese cambio en la DB de Tarian como si es una amenaza o no, y basándose en su análisis pueden configurar qué acción tomar. Esa acción será enviada como comando a la aplicación sidecar de Tarian para que realice la acción.
¿Cómo ayuda la contribución de la comunidad a combatir las amenazas a través de Tarian?
Cualquier nueva detección analizada y marcada como amenaza por tus expertos en seguridad, si así lo eligen, puede compartirse en la base de datos de la comunidad de Tarian de código abierto con todos los registros, cadenas a buscar, observación, transparencia, acciones a configurar, básicamente cualquier cosa que el experto quiera advertir y compartir con la comunidad. Puedes usar esa información como usuario de Tarian y configurar acciones en tu aplicación Tarian que utilizas en tu entorno. Esto es básicamente compartir información sobre amenazas y qué hacer al respecto. Esto ayuda a todos los que usan Tarian a compartir sus análisis y tomar acciones juntos en sus respectivos entornos K8s compartiendo el conocimiento y la experiencia.
¿Qué tipo de acción(es) tomaría Tarian basándose en amenazas conocidas?
Tarian simplemente autodestruiría el pod en el que se ejecuta, junto con eliminar cualquier archivo en los volúmenes para reducir el riesgo. Si el malware/virus se propaga al resto del entorno, bien, sabes lo que pasa. Por lo tanto, Tarian está diseñado básicamente para ayudar a reducir el riesgo tanto como sea posible, destruyendo pods. El aprovisionamiento de un nuevo pod lo gestionará K8s, ya que así es como funciona K8s. Tarian solo hará la destrucción de pods, y solo si le dices a Tarian que lo haga mediante la preconfiguración de la acción en el controlador de Tarian o diciéndole a Tarian que lo haga sobre la marcha. Si no quieres que ocurra ninguna acción, no tienes que configurar ni activar ninguna; simplemente puedes decirle a Tarian que solo te notifique. Básicamente, Tarian hace lo que quieres que se haga para reducir el riesgo.
¿Por qué otra nueva herramienta de seguridad cuando ya hay muchas herramientas disponibles, como Falco, Kube-Hunter, Kube-Bench, Calico Enterprise Security, y muchas más herramientas de seguridad (de código abierto y comerciales) que pueden detectar y prevenir amenazas a nivel de red, nivel de infraestructura y nivel de aplicación? ¿Por qué Tarian?
Como mencioné anteriormente, la razón principal por la que nació Tarian es para luchar juntos como comunidad contra las amenazas en Kubernetes. Y otra razón fue, ¿qué pasa si todavía hay algún ataque sofisticado que es capaz de penetrar cada capa de tus seguridades y llegar a tu aplicación en tiempo de ejecución, tus volúmenes de almacenamiento y que es capaz de propagarse para dañar o bloquear tu infraestructura y datos? ¿Qué quieres hacer ante tales ataques, especialmente aquellos que se convierten en ransomware? Tarian está diseñado para reducir esos riesgos, tomando acción(es). Sabemos que Tarian no es la solución definitiva, pero estamos seguros de que puede ayudar a reducir riesgos, especialmente cuando el conocimiento se comparte continuamente por la comunidad y también desde una perspectiva técnica, Tarian puede ayudar a reducir el riesgo destruyendo los recursos infectados.
Finalizaré el diagrama de diseño pronto una vez que termine de hablar con algunos expertos en seguridad (ya hablé con algunos, y tengo algunas discusiones más pendientes).
kubectl create namespace tarian-system
helm install tarian-postgresql bitnami/postgresql -n tarian-system \
--set postgresqlUsername=postgres \
--set postgresqlPassword=tarian \
--set postgresqlDatabase=tarian
helm repo add tarian https://devopstoday11.github.io/tarian
helm repo update
helm install tarian-server tarian/tarian-server --devel -n tarian-system
helm install tarian-cluster-agent tarian/tarian-cluster-agent --devel -n tarian-system
kubectl wait --for=condition=ready pod --all -n tarian-system
kubectl exec -ti deploy/tarian-server -n tarian-system -- ./tarian-server db migrate
Ver valores del chart helm para
kubectl port-forward svc/tarian-server -n tarian-system 41051:80
export TARIAN_SERVER_ADDRESS=localhost:41051
tarianctl get events
tarianctl add constraint --name nginx --namespace default \
--match-labels run=nginx \
--allowed-processes=pause,tarian-pod-agent,nginx
tarianctl get constraints
tarianctl add constraint --name nginx-files --namespace default \
--match-labels run=nginx \
--allowed-file-sha256sums=/usr/share/nginx/html/index.html=38ffd4972ae513a0c79a8be4573403edcd709f0f572105362b08ff50cf6de521
tarianctl get constraints
Luego, después de crear las restricciones, inyectamos tarian-pod-agent en el pod agregando una anotación:
metadata:
annotations:
pod-agent.k8s.tarian.dev/threat-scan: "true"
El pod con esta anotación tendrá un contenedor adicional inyectado (tarian-pod-agent). El contenedor tarian-pod-agent verificará continuamente el entorno de ejecución según las restricciones registradas. Cualquier violación será reportada, a la que se podrá acceder con tarianctl get events.
kubectl apply -f https://raw.githubusercontent.com/devopstoday11/tarian/main/dev/config/monitored-pod/configmap.yaml
kubectl apply -f https://raw.githubusercontent.com/devopstoday11/tarian/main/dev/config/monitored-pod/pod.yaml
# esperar a que esté listo
kubectl wait --for=condition=ready pod nginx
# simular ejecución de proceso desconocido
kubectl exec -ti nginx -c nginx -- sleep 15
# deberías verlo reportado en tarian
tarianctl get events
Tarian incluye Prometheus Alert Manager por defecto. Si quieres usar otra instancia de alert manager:
helm install tarian-server tarian/tarian-server --devel \
--set server.alert.alertManagerAddress=http://alertmanager.monitoring.svc:9093 \
--set alertManager.install=false \
-n tarian-system
Para deshabilitarlo, puedes establecer el valor de alertManagerAddress en vacío.
Cuando tarian-pod-agent se ejecuta en modo de registro, en lugar de reportar procesos y archivos desconocidos como violaciones, los registra automáticamente como una nueva restricción. Esto es conveniente para ahorrar tiempo al registrarlos manualmente.
Para habilitar el registro de restricciones, se debe configurar el cluster-agent.
helm install tarian-cluster-agent tarian/tarian-cluster-agent --devel -n tarian-system \
--set clusterAgent.enableAddConstraint=true
metadata:
annotations:
# register both processes and file checksums
pod-agent.k8s.tarian.dev/register: "processes,files"
# ignore specific paths from automatic registration
pod-agent.k8s.tarian.dev/register-file-ignore-paths: "/usr/share/nginx/**/*.txt"
El registro automático de restricciones también se puede realizar en un clúster de desarrollo/staging, para que haya menos cambios en producción.
metadata:
annotations:
# specify how often tarian-pod-agent should verify file checksum
pod-agent.k8s.tarian.dev/file-validation-interval: "1m"