
Antivírus para K8s. Proteja suas aplicações em execução no Kubernetes contra ataques maliciosos com código-fonte pré-registrado, monitoramento de processos em tempo de execução, análise, alertas e também compartilhamento de detecções com a comunidade. Talvez salve de Ransomware.
Queremos manter isso como código aberto para combater os ataques ao nosso ecossistema Kubernetes favorito. Podemos combater ameaças juntos como comunidade, por meio de contribuição contínua.
Como o Tarian funciona?
O Tarian é executado como um contêiner sidecar no pod da sua aplicação principal, monitorando mudanças em IDs de processos, número de processos em execução, mudanças na relação entre processos pai e filho, arquivos e diretórios no sistema de arquivos que pertencem à sua aplicação, mudanças nas assinaturas dos seus arquivos, etc. O Tarian fará parte do pod da sua aplicação desde o ambiente de desenvolvimento até o de produção, assim você pode registrar no seu banco de dados Tarian o que deve acontecer e executar no seu contêiner + o que pode ser monitorado + o que pode ser notificado + ação (autodestruir o pod) a ser tomada com base nas mudanças detectadas. Desloque seu mecanismo de detecção para a esquerda (shift-left)!
O que acontece se uma mudança desconhecida ocorrer dentro do contêiner que não está no banco de dados de registro do Tarian? Como o Tarian reage a isso?
Se uma mudança desconhecida ocorrer, o Tarian pode simplesmente notificar análises observadas para sua Equipe de Segurança + enviar o log para a Equipe de Segurança. Então seus Engenheiros de Segurança podem registrar essa mudança no banco de dados Tarian como se é uma ameaça ou não e, com base na análise deles, configurar qual ação tomar. Essa ação será enviada como comando para o aplicativo Tarian sidecar para executar a ação.
Como a contribuição da comunidade ajuda a combater ameaças através do Tarian?
Qualquer nova detecção analisada e marcada como ameaça por seus Especialistas em Segurança, se eles escolherem, pode ser compartilhada no banco de dados de código aberto da comunidade Tarian com todos os logs, strings a serem procuradas, observação, transparência, ações a configurar, basicamente qualquer coisa que o Especialista queira alertar e compartilhar com a comunidade. Você pode usar essas informações como usuário do Tarian e configurar ações no seu aplicativo Tarian que você usa no seu ambiente. Isso basicamente compartilha informações sobre ameaças e o que fazer a respeito delas. Isso ajuda todos que usam o Tarian a compartilhar suas análises e tomar ações conjuntas em seus respectivos ambientes K8s, compartilhando conhecimento e experiência.
Que tipo de ação(ões) o Tarian tomaria com base em ameaça(s) conhecida(s)?
O Tarian simplesmente autodestruiria o pod em que está executando, juntamente com a exclusão de quaisquer arquivos nos volumes para reduzir o risco. Se o malware/vírus se espalhar para o resto do ambiente, bem, você sabe o que acontece. Então, o Tarian é basicamente projetado para ajudar a reduzir o risco ao máximo, destruindo pods. O provisionamento de novos pods será tratado pelo K8s, já que é assim que o K8s funciona. O Tarian fará apenas a destruição de pods, e somente se você disser ao Tarian para fazer isso pré-configurando a ação no controlador Tarian ou dizendo ao Tarian para fazer isso em tempo real. Se você não quiser que nenhuma ação ocorra, não precisa configurar ou acionar nenhuma; você pode simplesmente dizer ao Tarian para apenas notificá-lo. O Tarian basicamente faz o que você deseja que seja feito para reduzir o risco.
Por que outra nova ferramenta de segurança quando já existem muitas ferramentas disponíveis, como Falco, Kube-Hunter, Kube-Bench, Calico Enterprise Security, e muitas outras ferramentas de segurança (código aberto e comerciais) que podem detectar e prevenir ameaças em nível de rede, infraestrutura e aplicação? Por que o Tarian?
Como mencionei acima, a principal razão pela qual o Tarian nasceu é para lutar juntos como uma comunidade contra ameaças no Kubernetes. E outra razão foi: e se ainda existir algum ataque sofisticado capaz de penetrar todas as camadas de suas seguranças e alcançar sua aplicação em tempo de execução, seus volumes de armazenamento e capaz de se espalhar para danificar ou bloquear sua infraestrutura e dados?! O que você quer fazer em relação a tais ataques, especialmente aqueles que se transformam em ransomware? O Tarian é projetado para reduzir tais riscos, tomando ação(ões). Sabemos que o Tarian não é a solução definitiva, mas estamos confiantes de que pode ajudar a reduzir riscos, especialmente quando o conhecimento é compartilhado continuamente pela comunidade e também do ponto de vista técnico, o Tarian pode ajudar a reduzir o risco destruindo os recursos infectados.
Finalizarei o diagrama de design em breve, assim que terminar de conversar com alguns especialistas em segurança (já conversei com alguns e tenho mais algumas discussões pendentes).
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
Consulte os valores do 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
Depois que as restrições forem criadas, injetamos o tarian-pod-agent no pod adicionando uma anotação:
metadata:
annotations:
pod-agent.k8s.tarian.dev/threat-scan: "true"
O pod com esta anotação terá um contêiner adicional injetado (tarian-pod-agent). O contêiner tarian-pod-agent verificará
continuamente o ambiente de execução com base nas restrições registradas. Qualquer violação será reportada, acessível
com 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
# aguarde ficar pronto
kubectl wait --for=condition=ready pod nginx
# simule a execução de um processo desconhecido
kubectl exec -ti nginx -c nginx -- sleep 15
# você deve ver isso reportado no tarian
tarianctl get events
O Tarian vem com o Prometheus Alert Manager por padrão. Se você quiser usar outra instância do 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 desabilitá-lo, você pode definir o valor alertManagerAddress como vazio.
Consulte docs/falco-integration.md
Consulte docs/troubleshooting.md
Quando o tarian-pod-agent é executado no modo de registro, em vez de reportar processos e arquivos desconhecidos como violações, ele os registra automaticamente como uma nova restrição. Isso é conveniente para economizar tempo de registro manual.
Para habilitar o registro de restrições, o cluster-agent precisa ser configurado.
helm install tarian-cluster-agent tarian/tarian-cluster-agent --devel -n tarian-system \
--set clusterAgent.enableAddConstraint=true
metadata:
annotations:
# registra ambos processos e checksums de arquivos
pod-agent.k8s.tarian.dev/register: "processes,files"
# ignora caminhos específicos do registro automático
pod-agent.k8s.tarian.dev/register-file-ignore-paths: "/usr/share/nginx/**/*.txt"
O registro automático de restrições também pode ser feito em um cluster de desenvolvimento/teste, para que haja menos mudanças em produção.
metadata:
annotations:
# especifica com que frequência o tarian-pod-agent deve verificar o checksum do arquivo
pod-agent.k8s.tarian.dev/file-validation-interval: "1m"