
Антивирус для K8s. Защитите свои приложения, работающие на Kubernetes, от вредоносных атак с помощью предварительно зарегистрированного исходного кода, мониторинга процессов во время выполнения, аналитики, оповещений, а также обмена обнаружениями с сообществом. Возможно, защищает от программ-вымогателей.
Мы хотим сохранить этот проект как open-source, чтобы бороться с атаками на нашу любимую экосистему Kubernetes. Мы можем противостоять угрозам вместе, как сообщество, непрерывно внося свой вклад.
Как работает Tarian?
Tarian работает как sidecar-контейнер в поде вашего основного приложения, отслеживая изменения в идентификаторах процессов, количестве запущенных процессов, изменениях в отношениях родитель-дочерний процесс, файлах и каталогах в файловой системе, принадлежащих вашему приложению, изменениях в сигнатурах ваших файлов и т.д. Tarian будет частью пода вашего приложения от разработки до рабочей среды, поэтому вы можете зарегистрировать в своей базе данных Tarian то, что должно происходить и выполняться в вашем контейнере, а также то, что можно отслеживать, о чем можно уведомлять, и действие (самоуничтожение пода), которое нужно предпринять на основе обнаруженных изменений. Сдвиньте свой механизм обнаружения влево!
Что произойдет, если внутри контейнера произойдет неизвестное изменение, которого нет в базе данных регистрации Tarian? Как Tarian отреагирует на это?
Если произойдет неизвестное изменение, Tarian может просто уведомить вашу команду безопасности о наблюдаемой аналитике и отправить лог команде безопасности. Затем ваши инженеры по безопасности могут зарегистрировать это изменение в базе данных Tarian как угрозу или нет и на основе своего анализа настроить действие, которое необходимо предпринять. Это действие будет отправлено как команда sidecar-приложению Tarian для его выполнения.
Как вклад сообщества помогает бороться с угрозами с помощью Tarian?
Любое новое обнаружение, проанализированное и помеченное как угроза вашими экспертами по безопасности, может быть, по их желанию, передано в базу данных сообщества Tarian с открытым исходным кодом вместе со всеми логами, строками для поиска, наблюдениями, прозрачностью, действиями для настройки — в общем, всем, чем эксперт хочет предупредить и поделиться с сообществом. Вы можете использовать эту информацию как пользователь Tarian и настроить действия в своем приложении Tarian, которое используете в своей среде. По сути, это обмен информацией об угрозах и о том, что с ними делать. Это помогает всем, кто использует Tarian, делиться своим анализом и совместно принимать действия в своих средах K8s, обмениваясь знаниями и опытом.
Какие действия Tarian предпримет на основе известных угроз?
Tarian просто самоуничтожит под, на котором работает, вместе с удалением любых файлов на томах, чтобы снизить риск. Если вредоносное ПО/вирус распространится на остальную среду, ну, вы знаете, что происходит. Таким образом, Tarian в основном предназначен для максимального снижения риска путем уничтожения подов. Предоставление нового пода будет осуществляться K8s, поскольку так работает K8s. Tarian будет выполнять только уничтожение подов, и только если вы скажете Tarian сделать это, предварительно настроив действие в контроллере Tarian или сказав Tarian сделать это на лету. Если вы не хотите, чтобы какие-либо действия происходили, вам не нужно их настраивать или запускать; вы можете просто сказать Tarian только уведомлять вас. Tarian делает то, что вы хотите, чтобы снизить риск.
Почему еще один новый инструмент безопасности, когда уже доступно много инструментов, таких как Falco, Kube-Hunter, Kube-Bench, Calico Enterprise Security и многие другие инструменты безопасности (с открытым исходным кодом и коммерческие), которые могут обнаруживать и предотвращать угрозы на уровне сети, инфраструктуры и приложений? Зачем Tarian?
Как я упоминал выше, основная причина создания Tarian — совместная борьба сообщества с угрозами в Kubernetes. И еще одна причина: что, если все еще существует какая-то сложная атака, способная проникнуть через все уровни вашей защиты, добраться до вашего приложения во время выполнения, ваших томов хранения и способная распространяться, чтобы повредить или заблокировать вашу инфраструктуру и данные?! Что вы хотите делать с такими атаками, особенно когда они превращаются в программы-вымогатели? Tarian предназначен для снижения таких рисков путем принятия мер. Мы знаем, что Tarian не является идеальным решением, но мы уверены, что он может помочь снизить риски, особенно когда знания постоянно передаются сообществом, а с технической точки зрения Tarian может помочь снизить риск, уничтожая зараженные ресурсы.
Я завершу диаграмму дизайна в ближайшее время, как только закончу обсуждения с некоторыми экспертами по безопасности (я уже говорил с несколькими, и у меня еще несколько обсуждений в плане).
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
Смотрите значения helm chart для
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
После создания ограничений мы внедряем tarian-pod-agent в под, добавляя аннотацию:
metadata:
annotations:
pod-agent.k8s.tarian.dev/threat-scan: "true"
Под с этой аннотацией получит дополнительный встроенный контейнер (tarian-pod-agent). Контейнер tarian-pod-agent будет непрерывно проверять среду выполнения на основе зарегистрированных ограничений. Любое нарушение будет зафиксировано и доступно через 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
# дождитесь, пока он станет готовым
kubectl wait --for=condition=ready pod nginx
# имитация запуска неизвестного процесса
kubectl exec -ti nginx -c nginx -- sleep 15
# вы должны увидеть его в отчетах tarian
tarianctl get events
Tarian поставляется с Prometheus Alert Manager по умолчанию. Если вы хотите использовать другой экземпляр 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
Чтобы отключить его, установите значение alertManagerAddress пустым.
Смотрите docs/falco-integration.md
Смотрите docs/troubleshooting.md
Когда tarian-pod-agent работает в режиме регистрации, вместо сообщения о неизвестных процессах и файлах как о нарушениях, он автоматически регистрирует их как новое ограничение. Это удобно для экономии времени на ручную регистрацию.
Чтобы включить регистрацию ограничений, необходимо настроить cluster-agent.
helm install tarian-cluster-agent tarian/tarian-cluster-agent --devel -n tarian-system \
--set clusterAgent.enableAddConstraint=true
metadata:
annotations:
# регистрировать как процессы, так и контрольные суммы файлов
pod-agent.k8s.tarian.dev/register: "processes,files"
# игнорировать определенные пути для автоматической регистрации
pod-agent.k8s.tarian.dev/register-file-ignore-paths: "/usr/share/nginx/**/*.txt"
Автоматическая регистрация ограничений также может быть выполнена в dev/staging кластере, чтобы в продакшене было меньше изменений.
metadata:
annotations:
# указать, как часто tarian-pod-agent должен проверять контрольную сумму файла
pod-agent.k8s.tarian.dev/file-validation-interval: "1m"