
Antivirus für K8s. Schützen Sie Ihre auf Kubernetes laufenden Anwendungen vor bösartigen Angriffen mit vorregistriertem Quellcode, Überwachung von Laufzeitprozessen, Analysen, Benachrichtigungen und auch der Weitergabe von Erkennungen an die Community. Vielleicht schützt es vor Ransomware.
Wir möchten dies als Open Source erhalten, um gegen Angriffe auf unser geliebtes Kubernetes-Ökosystem zu kämpfen. Gemeinsam als Community können wir Bedrohungen durch kontinuierliche Beiträge bekämpfen.
Wie funktioniert Tarian?
Tarian läuft als Sidecar-Container im Pod Ihrer Hauptanwendung und überwacht Änderungen an Prozess-IDs, der Anzahl laufender Prozesse, Änderungen in Eltern-Kind-Prozessbeziehungen, Dateien und Verzeichnissen im Dateisystem, die zu Ihrer Anwendung gehören, Änderungen an Ihren Dateisignaturen usw. Tarian ist von der Entwicklungs- bis zur Produktionsumgebung Teil des Pods Ihrer Anwendung, sodass Sie in Ihrer Tarian-DB registrieren können, was in Ihrem Container passieren und laufen soll + was überwacht werden kann + was benachrichtigt werden kann + Aktion (Selbstzerstörung des Pods) basierend auf erkannten Änderungen. Verlagern Sie Ihren Erkennungsmechanismus nach links!
Was passiert, wenn eine unbekannte Änderung im Container auftritt, die nicht in der Registrierungsdatenbank von Tarian enthalten ist? Wie reagiert Tarian darauf?
Wenn eine unbekannte Änderung auftritt, kann Tarian einfach beobachtete Analysen an Ihr Sicherheitsteam melden und das Protokoll an das Sicherheitsteam senden. Ihre Sicherheitsingenieure können diese Änderung dann in der Tarian-DB registrieren, entweder als Bedrohung oder nicht, und basierend auf ihrer Analyse konfigurieren, welche Maßnahme ergriffen werden soll. Diese Aktion wird dann als Befehl an die Sidecar-Tarian-App gesendet, um die Aktion auszuführen.
Wie hilft der Beitrag der Community im Kampf gegen Bedrohungen durch Tarian?
Jede neue Erkennung, die von Ihren Sicherheitsexperten analysiert und als Bedrohung eingestuft wird, kann – wenn sie dies wünschen – mit allen Protokollen, zu suchenden Strings, Beobachtungen, Transparenz, zu konfigurierenden Aktionen, im Grunde alles, wovor der Experte warnen und was er mit der Community teilen möchte, an die Open-Source-Tarian-Community-DB weitergegeben werden. Sie können diese Informationen als Tarian-Benutzer nutzen und Aktionen in Ihrer Tarian-App konfigurieren, die Sie in Ihrer Umgebung verwenden. Im Grunde werden so Informationen über Bedrohungen und deren Behandlung geteilt. Dies hilft allen Tarian-Benutzern, ihre Analysen zu teilen und gemeinsam in ihren jeweiligen K8s-Umgebungen Maßnahmen zu ergreifen, indem Wissen und Erfahrung geteilt werden.
Welche Art von Aktion(en) würde Tarian basierend auf bekannten Bedrohungen ergreifen?
Tarian würde einfach den Pod, auf dem es läuft, selbst zerstören und alle Dateien auf den Volumes löschen, um das Risiko zu verringern. Wenn sich die Malware/der Virus auf die restliche Umgebung ausbreitet, wissen Sie, was passiert. Tarian ist also im Grunde darauf ausgelegt, das Risiko so weit wie möglich zu reduzieren, indem Pods zerstört werden. Die Bereitstellung neuer Pods wird von K8s übernommen, da K8s so funktioniert. Tarian wird nur Pods zerstören, und zwar nur, wenn Sie Tarian dazu anweisen, indem Sie die Aktion im Tarian-Controller vorkonfigurieren oder Tarian anweisen, dies spontan zu tun. Wenn Sie keine Aktionen wünschen, müssen Sie keine konfigurieren oder auslösen; Sie können Tarian einfach anweisen, Sie nur zu benachrichtigen. Tarian macht im Grunde das, was Sie tun möchten, um das Risiko zu reduzieren.
Warum ein weiteres neues Sicherheitstool, wenn es bereits viele Tools gibt, wie Falco, Kube-Hunter, Kube-Bench, Calico Enterprise Security und viele weitere Sicherheitstools (Open Source und kommerziell), die Bedrohungen auf Netzwerk-, Infrastruktur- und Anwendungsebene erkennen und verhindern können? Warum Tarian?
Wie oben erwähnt, wurde Tarian hauptsächlich aus dem Grund ins Leben gerufen, gemeinsam als Community gegen Bedrohungen in Kubernetes zu kämpfen. Ein weiterer Grund war: Was ist, wenn es immer noch einen ausgeklügelten Angriff gibt, der jede Ihrer Sicherheitsschichten durchdringen kann, Ihre Laufzeitanwendung und Ihre Speichervolumes erreicht und sich ausbreiten kann, um Ihre Infrastruktur und Daten zu beschädigen oder zu sperren? Was möchten Sie gegen solche Angriffe tun, insbesondere wenn sie zu Ransomware werden? Tarian wurde entwickelt, um solche Risiken zu reduzieren, indem es Maßnahmen ergreift. Wir wissen, dass Tarian keine ultimative Lösung ist, aber wir sind zuversichtlich, dass es helfen kann, Risiken zu reduzieren, insbesondere wenn Wissen kontinuierlich von der Community geteilt wird und Tarian aus technischer Sicht helfen kann, das Risiko durch die Zerstörung infizierter Ressourcen zu reduzieren.
Ich werde das Designdiagramm bald fertigstellen, sobald ich mit einigen Sicherheitsexperten gesprochen habe (ich habe bereits mit einigen gesprochen und habe noch ein paar weitere Diskussionen offen).
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
Siehe Helm Chart-Werte für
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
Nachdem die Beschränkungen erstellt wurden, injizieren wir den tarian-pod-agent in den Pod, indem wir eine Annotation hinzufügen:
metadata:
annotations:
pod-agent.k8s.tarian.dev/threat-scan: "true"
Ein Pod mit dieser Annotation erhält einen zusätzlichen injizierten Container (tarian-pod-agent). Der tarian-pod-agent-Container überprüft kontinuierlich die Laufzeitumgebung basierend auf den registrierten Beschränkungen. Jede Verletzung wird gemeldet und kann mit tarianctl get events abgerufen werden.
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
# warten, bis er bereit ist
kubectl wait --for=condition=ready pod nginx
# simulieren, dass ein unbekannter Prozess läuft
kubectl exec -ti nginx -c nginx -- sleep 15
# Sie sollten sehen, dass es in Tarian gemeldet wird
tarianctl get events
Tarian wird standardmäßig mit Prometheus Alert Manager ausgeliefert. Wenn Sie eine andere Alert-Manager-Instanz verwenden möchten:
helm install tarian-server tarian/tarian-server --devel \
--set server.alert.alertManagerAddress=http://alertmanager.monitoring.svc:9093 \
--set alertManager.install=false \
-n tarian-system
Um es zu deaktivieren, setzen Sie den Wert alertManagerAddress auf leer.
Siehe docs/falco-integration.md
Siehe docs/troubleshooting.md
Wenn tarian-pod-agent im Registrierungsmodus läuft, meldet er unbekannte Prozesse und Dateien nicht als Verstöße, sondern registriert sie automatisch als neue Beschränkung. Dies ist praktisch, um Zeit für die manuelle Registrierung zu sparen.
Um die Beschränkungsregistrierung zu aktivieren, muss der Cluster-Agent konfiguriert werden.
helm install tarian-cluster-agent tarian/tarian-cluster-agent --devel -n tarian-system \
--set clusterAgent.enableAddConstraint=true
metadata:
annotations:
# sowohl Prozesse als auch Datei-Prüfsummen registrieren
pod-agent.k8s.tarian.dev/register: "processes,files"
# bestimmte Pfade von der automatischen Registrierung ausschließen
pod-agent.k8s.tarian.dev/register-file-ignore-paths: "/usr/share/nginx/**/*.txt"
Die automatische Beschränkungsregistrierung kann auch in einem Dev/Staging-Cluster durchgeführt werden, sodass es in der Produktion weniger Änderungen gibt.
metadata:
annotations:
# festlegen, wie oft tarian-pod-agent die Datei-Prüfsumme überprüfen soll
pod-agent.k8s.tarian.dev/file-validation-interval: "1m"