As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Resposta a incidentes e análise forense
Sua capacidade de reagir rapidamente a um incidente pode ajudar a minimizar os danos causados por uma violação. Ter um sistema de alerta confiável que possa alertá-lo sobre comportamentos suspeitos é a primeira etapa de um bom plano de resposta a incidentes. Quando ocorre um incidente, você precisa decidir rapidamente se deseja destruir e substituir o contêiner afetado ou isolar e inspecionar o contêiner. Se você optar por isolar o contêiner como parte de uma investigação forense e análise da causa raiz, o seguinte conjunto de atividades deverá ser seguido:
Exemplo de plano de resposta a incidentes
Identifique o pod ofensivo e o nó de trabalho
Seu primeiro curso de ação deve ser isolar os danos. Comece identificando onde a violação ocorreu e isole esse pod e seu nó do resto da infraestrutura.
Identifique os pods e nós de trabalho ofensivos usando o nome da carga de trabalho
Se você souber o nome e o namespace do pod ofensivo, poderá identificar o node de trabalho que está executando o pod da seguinte forma:
kubectl get pods <name> --namespace <namespace> -o=jsonpath='{.spec.nodeName}{"\n"}'
Se um recurso de carga de trabalho
selector=$(kubectl get deployments <name> \ --namespace <namespace> -o json | jq -j \ '.spec.selector.matchLabels | to_entries | .[] | "\(.key)=\(.value)"') kubectl get pods --namespace <namespace> --selector=$selector \ -o json | jq -r '.items[] | "\(.metadata.name) \(.spec.nodeName)"'
O comando acima é para implantações. Você pode executar o mesmo comando para outros recursos de carga de trabalho, como replicasets, statefulsets etc.
Identifique os pods e nós de trabalho ofensivos usando o nome da conta de serviço
Em alguns casos, você pode identificar que uma conta de serviço está comprometida. É provável que os pods que usam a conta de serviço identificada estejam comprometidos. Você pode identificar todos os pods usando a conta de serviço e os nós em que estão sendo executados com o seguinte comando:
kubectl get pods -o json --namespace <namespace> | \ jq -r '.items[] | select(.spec.serviceAccount == "<service account name>") | "\(.metadata.name) \(.spec.nodeName)"'
Identifique pods com imagens e nós de trabalho vulneráveis ou comprometidos
Em alguns casos, você pode descobrir que uma imagem de contêiner usada em pods em seu cluster é maliciosa ou está comprometida. Uma imagem de contêiner é maliciosa ou está comprometida se for detectada que contém malware, é uma imagem incorreta conhecida ou tem um CVE que foi explorado. Você deve considerar que todos os pods que usam a imagem do contêiner estão comprometidos. Você pode identificar os pods usando a imagem e os nós em que estão sendo executados com o seguinte comando:
IMAGE=<Name of the malicious/compromised image> kubectl get pods -o json --all-namespaces | \ jq -r --arg image "$IMAGE" '.items[] | select(.spec.containers[] | .image == $image) | "\(.metadata.name) \(.metadata.namespace) \(.spec.nodeName)"'
Isole o pod criando uma política de rede que negue todo o tráfego de entrada e saída para o pod
Uma regra de negar todo o tráfego pode ajudar a interromper um ataque que já está em andamento ao cortar todas as conexões com o pod. A política de rede a seguir se aplicará a um pod com o rótuloapp=web.
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny spec: podSelector: matchLabels: app: web policyTypes: - Ingress - Egress
Importante
Uma política de rede pode se mostrar ineficaz se um invasor tiver acesso ao host subjacente. Se você suspeitar que isso aconteceu, você pode usar os grupos de segurança da AWS para isolar um host comprometido de outros hosts. Ao alterar o grupo de segurança de um host, esteja ciente de que isso afetará todos os contêineres em execução nesse host.
Revogue as credenciais de segurança temporárias atribuídas ao pod ou ao nó de trabalho, se necessário
Se o node de trabalho tiver recebido uma função do IAM que permite que os pods tenham acesso a outros recursos da AWS, remova essas funções da instância para evitar maiores danos causados pelo ataque. Da mesma forma, se o pod tiver recebido uma função do IAM, avalie se você pode remover com segurança as políticas do IAM da função sem afetar outras workloads.
Isole o nó do trabalhador
Ao isolar o nó de trabalho afetado, você está informando o agendador para evitar o agendamento de pods no nó afetado. Isso permitirá que você remova o nó para estudo forense sem interromper outras cargas de trabalho.
nota
Essa orientação não se aplica ao Fargate, onde cada pod Fargate é executado em seu próprio ambiente de sandbox. Em vez de isolar, sequestre os pods Fargate afetados aplicando uma política de rede que nega todo o tráfego de entrada e saída.
Habilite a proteção contra rescisão no nó de trabalho afetado
Um atacante pode tentar apagar seus delitos encerrando um nó afetado. Ativar a proteção contra rescisão pode impedir que isso aconteça. A proteção de expansão da instância protegerá o nó de um evento de expansão.
Atenção
Você não pode ativar a proteção contra encerramento em uma instância Spot.
Rotule a ofensa Pod/Node com uma etiqueta indicando que ela faz parte de uma investigação ativa
Isso servirá como um aviso para os administradores do cluster não alterarem os afetados Pods/Nodes até que a investigação seja concluída.
Capture artefatos voláteis no nó de trabalho
-
Capture a memória do sistema operacional. Isso capturará o daemon do Docker (ou outro tempo de execução do contêiner) e seus subprocessos por contêiner. Isso pode ser feito usando ferramentas como LiME
e Volatility , ou por meio de ferramentas de alto nível, como o Automated Forensics Orchestrator for Amazon EC2, que se baseiam nelas. -
Execute um dump em árvore netstat dos processos em execução e das portas abertas. Isso capturará o daemon docker e seu subprocesso por contêiner.
-
Execute comandos para salvar o estado no nível do contêiner antes que as evidências sejam alteradas. Você pode usar os recursos do tempo de execução do contêiner para capturar informações sobre os contêineres em execução no momento. Por exemplo, com o Containerd, você pode fazer o seguinte:
-
crictl pspara processos em execução. -
crictl logs CONTAINERpara registros mantidos em nível de daemon.O mesmo pode ser feito com o containerd usando a CLI
nerdctl, no lugar de (por exemplo). dockernerdctl inspectAlguns comandos adicionais estão disponíveis dependendo do tempo de execução do contêiner. Por exemplo, o Dockerdocker diffprecisa ver alterações no sistema de arquivos do contêiner oudocker checkpointsalvar todo o estado do contêiner, incluindo memória volátil (RAM). Veja esta postagem no blog do Kubernetespara uma discussão sobre recursos semelhantes com containers ou tempos de execução. CRI-O
-
-
Pausa o contêiner para captura forense.
-
Capture um instantâneo dos volumes do EBS da instância.
Reimplante o pod ou o recurso de carga de trabalho comprometido
Depois de coletar dados para análise forense, você pode reimplantar o pod ou o recurso de carga de trabalho comprometido.
Primeiro, corrija a vulnerabilidade que foi comprometida e inicie novos pods substitutos. Em seguida, exclua os pods vulneráveis.
Se os pods vulneráveis forem gerenciados por um recurso de carga de trabalho do Kubernetes de nível superior (por exemplo, uma implantação ou DaemonSet), excluí-los agendará novos pods. Portanto, os pods vulneráveis serão lançados novamente. Nesse caso, você deve implantar um novo recurso de carga de trabalho substituto depois de corrigir a vulnerabilidade. Em seguida, você deve excluir a carga de trabalho vulnerável.
Recomendações
Leia o whitepaper de resposta a incidentes de segurança da AWS
Embora esta seção forneça uma breve visão geral, juntamente com algumas recomendações para lidar com suspeitas de violações de segurança, o tópico é abordado exaustivamente no white paper, AWS Security Incident Response.
Pratique dias de jogos de segurança
Divida seus profissionais de segurança em duas equipes: vermelha e azul. A equipe vermelha se concentrará em investigar vulnerabilidades em diferentes sistemas, enquanto a equipe azul será responsável por se defender contra elas. Se você não tem profissionais de segurança suficientes para criar equipes separadas, considere contratar uma entidade externa que tenha conhecimento das explorações do Kubernetes.
O Kubesploit
Execute testes de penetração em seu cluster
Atacar periodicamente seu próprio cluster pode ajudar você a descobrir vulnerabilidades e configurações incorretas. Antes de começar, siga as diretrizes do teste de penetração
Ferramentas e recursos
-
kube-hunter
, uma ferramenta de teste de penetração para Kubernetes. -
Gremlin
, um kit de ferramentas de engenharia do caos que você pode usar para simular ataques contra seus aplicativos e sua infraestrutura. -
NeuVector da SUSE, plataforma de segurança de contêineres de código
aberto e de confiança zero, fornece relatórios de vulnerabilidade e risco, bem como notificação de eventos de segurança -
Comprometendo o cluster Kubernetes explorando as permissões do RBAC