
Anti-Virus pour K8s. Protégez vos applications exécutées sur Kubernetes contre les attaques malveillantes grâce à un code source pré-enregistré, une surveillance des processus en cours d'exécution, des analyses, des alertes et également le partage des détections avec la communauté. Peut-être sauver des ransomwares.
Nous souhaitons maintenir cet outil en open-source pour lutter contre les attaques visant notre écosystème Kubernetes préféré. Nous pouvons combattre les menaces ensemble en tant que communauté, grâce à une contribution continue.
Comment fonctionne Tarian ?
Tarian s'exécute en tant que conteneur sidecar dans le pod de votre application principale, surveillant les changements dans les identifiants de processus, le nombre de processus en cours, les relations parent-enfant entre processus, les fichiers et répertoires du système de fichiers appartenant à votre application, les changements survenus dans les signatures de vos fichiers, etc. Tarian fera partie du pod de votre application de l'environnement de développement à la production, vous pouvez donc enregistrer dans votre base de données Tarian ce qui est censé se produire et s'exécuter dans votre conteneur + ce qui peut être surveillé + ce qui peut être notifié + les actions (auto-destruction du pod) à entreprendre en fonction des changements détectés. Déplacez votre mécanisme de détection vers la gauche !
Que se passe-t-il si un changement inconnu survient à l'intérieur du conteneur qui n'est pas dans la base de données d'enregistrement de Tarian ? Comment Tarian réagit-il à cela ?
Si un changement inconnu se produit, Tarian peut simplement notifier les analyses observées à votre équipe de sécurité + envoyer le journal à l'équipe de sécurité. Ensuite, vos ingénieurs de sécurité peuvent enregistrer ce changement dans la base de données Tarian, que ce soit comme une menace ou non, et en fonction de leur analyse, ils peuvent configurer l'action à entreprendre. Cette action sera envoyée comme commande à l'application sidecar Tarian pour exécuter l'action.
Comment la contribution de la communauté aide-t-elle à lutter contre les menaces via Tarian ?
Toute nouvelle détection analysée et marquée comme menace par vos experts en sécurité, s'ils le souhaitent, peut être partagée avec la base de données open-source de la communauté Tarian, avec tous les journaux, les chaînes à rechercher, les observations, la transparence, les actions à configurer, en gros tout ce que l'expert souhaite avertir et partager avec la communauté. Vous pouvez utiliser ces informations en tant qu'utilisateur de Tarian et configurer des actions dans votre application Tarian que vous utilisez dans votre environnement. Cela revient essentiellement à partager des informations sur les menaces et sur la façon de les gérer. Cela aide tous ceux qui utilisent Tarian à partager leurs analyses et à agir ensemble dans leurs environnements K8s respectifs en partageant les connaissances et l'expérience.
Quel(s) type(s) d'action(s) Tarian entreprendrait-il en fonction des menaces connues ?
Tarian détruirait simplement le pod sur lequel il s'exécute, ainsi que la suppression de tous les fichiers sur les volumes pour réduire le risque. Si le malware/virus se propage au reste de l'environnement, vous savez ce qui se passe. Donc, Tarian est essentiellement conçu pour aider à réduire le risque autant que possible, en détruisant les pods. La mise à disposition d'un nouveau pod sera gérée par K8s, car c'est ainsi que fonctionne K8s. Tarian ne fera que détruire les pods, et seulement si vous lui dites de le faire en préconfigurant l'action dans le contrôleur Tarian ou en disant à Tarian de le faire à la volée. Si vous ne voulez pas que des actions aient lieu, vous n'avez pas à les configurer ni à les déclencher ; vous pouvez simplement dire à Tarian de vous notifier. Tarian fait essentiellement ce que vous voulez qu'il fasse pour réduire le risque.
Pourquoi un nouvel outil de sécurité alors qu'il existe déjà de nombreux outils disponibles, comme Falco, Kube-Hunter, Kube-Bench, Calico Enterprise Security, et bien d'autres outils de sécurité (open-source et commerciaux) capables de détecter et de prévenir les menaces au niveau réseau, infrastructure et application ? Pourquoi Tarian ?
Comme je l'ai mentionné ci-dessus, la principale raison pour laquelle Tarian est né est de lutter ensemble en tant que communauté contre les menaces dans Kubernetes. Une autre raison était : et s'il existe encore une attaque sophistiquée capable de pénétrer toutes les couches de vos sécurités, d'atteindre votre application runtime, vos volumes de stockage, et capable de se propager pour endommager ou verrouiller votre infrastructure et vos données ? Que voulez-vous faire face à de telles attaques, surtout celles qui se transforment en ransomware ? Tarian est conçu pour réduire ces risques en entreprenant des actions. Nous savons que Tarian n'est pas la solution ultime, mais nous sommes confiants qu'il peut aider à réduire les risques, surtout lorsque les connaissances sont partagées en continu par la communauté, et aussi d'un point de vue technique, Tarian peut aider à réduire le risque en détruisant les ressources infectées.
Je finaliserai le schéma de conception bientôt, une fois que j'aurai fini de discuter avec quelques experts en sécurité (j'ai déjà parlé à quelques-uns et j'ai encore quelques discussions en attente).
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
Voir les valeurs du chart Helm pour
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
Ensuite, après avoir créé les contraintes, nous injectons tarian-pod-agent dans le pod en ajoutant une annotation :
metadata:
annotations:
pod-agent.k8s.tarian.dev/threat-scan: "true"
Un pod avec cette annotation verra un conteneur supplémentaire injecté (tarian-pod-agent). Le conteneur tarian-pod-agent
vérifiera en continu l'environnement d'exécution en fonction des contraintes enregistrées. Toute violation sera signalée, accessible avec 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
# attendre qu'il devienne prêt
kubectl wait --for=condition=ready pod nginx
# simuler l'exécution d'un processus inconnu
kubectl exec -ti nginx -c nginx -- sleep 15
# vous devriez le voir signalé dans tarian
tarianctl get events
Tarian est livré avec Prometheus Alert Manager par défaut. Si vous souhaitez utiliser une autre instance de gestionnaire d'alertes :
helm install tarian-server tarian/tarian-server --devel \
--set server.alert.alertManagerAddress=http://alertmanager.monitoring.svc:9093 \
--set alertManager.install=false \
-n tarian-system
Pour le désactiver, vous pouvez définir la valeur alertManagerAddress sur vide.
Voir docs/falco-integration.md
Lorsque tarian-pod-agent s'exécute en mode d'enregistrement, au lieu de signaler les processus et fichiers inconnus comme des violations, il les enregistre automatiquement comme une nouvelle contrainte. Cela permet de gagner du temps en évitant un enregistrement manuel.
Pour activer l'enregistrement des contraintes, l'agent de cluster doit être configuré.
helm install tarian-cluster-agent tarian/tarian-cluster-agent --devel -n tarian-system \
--set clusterAgent.enableAddConstraint=true
metadata:
annotations:
# enregistrer à la fois les processus et les sommes de contrôle des fichiers
pod-agent.k8s.tarian.dev/register: "processes,files"
# ignorer des chemins spécifiques de l'enregistrement automatique
pod-agent.k8s.tarian.dev/register-file-ignore-paths: "/usr/share/nginx/**/*.txt"
L'enregistrement automatique des contraintes peut également être effectué dans un cluster de dev/staging, de sorte qu'il y ait moins de changements en production.
metadata:
annotations:
# spécifier la fréquence à laquelle tarian-pod-agent doit vérifier la somme de contrôle des fichiers
pod-agent.k8s.tarian.dev/file-validation-interval: "1m"