O blog da AWS
Como automatizar a detecção de vulnerabilidades com Amazon Inspector e automatizar a remediação com AWS System Manager
Por Cleber Gomes é Arquiteto de Soluções da AWS;
e Allyson Oliveira é arquiteto de soluções da AWS
Com o avanço das ameaças cibernéticas, temos que manter um constante estado de alerta para evitar possíveis ataques ao nosso ambiente, sendo ele no datacenter local (on premises) ou em nuvem. Uma boa prática é manter as aplicações e os servidores (Linux e Windows) atualizados com versões mais recentes e patches de segurança. Recentemente, houve a descoberta/ e o surgimento de uma vulnerabilidade que foi amplamente divulgada: O Apache log4j (informações e o CVE neste link), que é uma vulnerabilidade no sistema de logs do Java em sistemas que utilizavam uma versão especifica dessa biblioteca. Sistemas desatualizados que continham alguma das versões afetadas desta biblioteca ficaram vulneráveis a intrusões de atacantes maliciosos através da vulnerabilidade
Neste contexto, é vital manter o parque de servidores atualizado com todas as versões e patches da aplicação (e suas bibliotecas/dependências), do sistema operacional (service packs, fixes) e também reagir rapidamente ao surgimento de novas vulnerabilidades, como o caso do log4j. Neste post iremos propor uma alternativa de solução para este desafio fazendo uso de serviços sem servidor, orientados a eventos e automatizando a remediação de todo o ambiente em caso de uma nova descoberta de segurança.
Imagine um cenário onde uma nova vulnerabilidade foi descoberta e divulgada, obrigando os times de segurança a iniciarem rapidamente as ações de resposta. Neste momento é que surgem as principais perguntas e consequentemente os maiores desafios:
- Como fazer este gerenciamento em larga escala e em ambientes híbridos?
- Quais são os meus recursos de TI (servidores e contêineres) que estão expostos?
- Como manter atualizados os recursos em ambientes híbridos?
- Como reagir rapidamente?
- Como previnir futuros eventos similares?
Conforme pudemos observar, manter o parque de servidores e contêineres atualizado contra o surgimento de ameaças e vulnerabilidades se torna um desafio a medida que os ambientes crescem e evoluem. A solução para este desafio passa por duas abordagens distintas, sendo elas:
- Proativa
- Busca evitar que novos recursos sejam implementados com alguma vulnerabilidade. Este blogpost descreve esta abordagem
Ex.: verificar se a EC2 ou a imagem do contêiner possui alguma vulnerabilidade durante os testes na esteira de CI/CD evita que entrem em produção já com alguma brecha.
- Busca evitar que novos recursos sejam implementados com alguma vulnerabilidade. Este blogpost descreve esta abordagem
- Reativa
- Aplicar correções e ações de remediação em um grupo de recursos que já estão implementados no ambiente produtivo. Este abordagem é nosso alvo e será descrita neste post.
Ex.: Surgiu uma nova vulnerabilidade referente ao sistema operacional Linux e precisa ser corrigida para evitar exposição a ataques.
- Aplicar correções e ações de remediação em um grupo de recursos que já estão implementados no ambiente produtivo. Este abordagem é nosso alvo e será descrita neste post.
Adotaremos abordagem reativa neste artigo. Lembrando que as alternativas são complementares e podem co-existir no ambiente, visando garantir a maior cobertura de segurança possível.
Arquitetura e solução
Nossa solução consiste em inspecionar, analisar, reportar e automatizar a resposta a uma vulnerabilidade conhecida. Os recursos são inspecionados e caso sejam encontradas vulnerabilidades, estas são reportadas para um hub centralizador de eventos de segurança, que dispara um evento a cada nova descoberta, disparando as automações de remediação automaticamente. A arquitetura e o funcionamento são descritos conforme abaixo.
Passo a passo
Passo 1
Agora, como vamos inspecionar todos nossos servidores de uma vez só ou como fazer uma varredura na nossa infraestrutura atrás de vulnerabilidades conhecidas, centralizando em um único dashboard e estar protegido das ameaças mais comuns e de uma maneira simples e eficiente?
O Amazon Inspector é um serviço de gerenciamento de vulnerabilidade automatizado e contínuo em escala, ou seja, ele procura por findings (finding é uma possível vulnerabilidade de segurança encontrada), por exemplo, quando o Amazon Inspector detecta vulnerabilidades de software ou portas de abertas de rede para seus recursos de computação, ele cria findings de segurança.
Para utilizar o Inspector é necessário ter o agente do AWS System Manager instalado nos servidores. O AWS Systems Manager é o hub de operações para suas aplicações e recursos da AWS (e on-premises). É dividido em quatro grupos de recursos principais: Gerenciamento de operações, Gerenciamento de aplicações, Gerenciamento de alterações e Gerenciamento de nós. Cada grupo possui ferramentas que possibilitam ao operador de TI centralizar dados operacionais, resolver problemas de aplicações automaticamente, automatizar aplicação de patches e corrigir eventos de segurança.
Para instalar o agente, acesse esse link. E também, desde 31 de Agosto de 2022, o Inspector também suporta sistemas operacionais Windows.
Apenas de habilitarmos o Inspector, já realizamos o primeiro scan automaticamente. Podemos ver, conforme tela abaixo, os tres primeiros dashboards:
- Environment coverage: Quantos servidores foram analisados com o Inspectorl
- Critical findings: Os findings criticos que o Inspector encontrou;
- Risk Based Remediations: Os findings baseados em criticidade (High, Medium, Low)
O Inspector também pode ser utilizado para procurar vulnerabilidades em registry de containers, procurando vulnerabilidades em imagens hospedadas no Amazon ECR. Isso pode ser visto na imagem abaixo:
Passo 2
Os findings do Inspector podem ser integrados com o AWS Security Hub. O Security Hub é o serviço de gerenciamento de postura de segurança na nuvem que realiza verificações de práticas recomendadas de segurança, agrega alertas e permite o disparo de automações para reação e correção de eventos de segurança. Ao entrar na tela inicial do Security Hub, você pode ver os findings que foram gerados por serviços que foram integrados com o Security Hub. Notem que o Inspector identificou um finding e listou abaixo:
Ao identificar um finding, o Security Hub emite um evento para o Amazon EventBridge, que é o barramento de eventos da AWS com tecnologia sem servidor que permite receber, filtrar, transformar, rotear e entregar eventos a diversos destinos como notificações, filas, funções Lambda e outros serviços AWS. O EventBridge é integrado a uma função lambda (através de uma event rule) que será disparada quando um novo evento for recebido, e, esta função executará as chamadas das APIs do System Manager para o próximo passo.
Passo 3
Nesse caso, você pode se deparar com uma vulnerabilidade em diversos servidores. Como atualizar toda essa infraestrutura de uma única vez? Agora falaremos sobre o Gerenciamento de nós do System Manager, e, mais especificamente sobre o Run Command. Com essa função podemos utilizar o comando AWS-RunRemoteScript, onde podemos rodar scripts que foram criados por vocês mesmo, por exemplo, ou que estão hospedados em um repositório do Github ou de um bucket S3. E o mais interessante é que você pode escolher rodar o comando em um único ou em múltiplos servidores de uma única vez. O único pré requisito dessa solução é ter o ssm-agent instalado nas máquinas que rodam na nuvem AWS ou no seus servidores on premises.
O AWS-RunRemoteScript você pode encontrar em AWS Systems Manager > Run Command. Caso queira instalar o agente manualmente, esse é o link para te apoiar!:
Os próximos campos podem mudar, dependendo se você escolheu S3 ou Github.
Após preenchê-los, iremos definir os Targets (alvos), escolhendo quais nós executarão o comando especificado. Notem que pode ser um único servidor ou um grupo de servidores, baseado em tags. Então, se você tiver uma tag Ambiente:Prod, por exemplo, você pode selecionar e o RunCommand vai buscar em todos os servidores com esse grupo de tags. Lembrando que devemos testar antes de rodar em produção, rs!
Para facilitar, ao final da página, ele da o comando para você rodar através do AWS CLI:
Vimos que com o AWS System Manager você pode atualizar todos os seus servidores de uma única vez contra uma ameaça que foi encontrada pelo Inspector! E para facilitar ainda nossa mais vida, podemos centralizar os findings do Inspector no Security Hub, permitindo o disparo automatizado da correção em um grupo pré selecionado de nós alvo baseado em Tags.
Quando você roda o comando, essa é a tela que aparece com ele sendo executado:
Quando o comando for executado, aparecerá na mesma tela se foi executado com sucesso ou com falha.
Caso você queira saber o histórico das execuções, e só ir AWS System Manager > Run Command, Command history:
Conclusão
O objetivo desse texto foi mostrar como ficar com o seu ambiente atualizado, onde podemos encontrar maneiras de atualizar a sua infraestrutura, procurar por vulnerabilidades já conhecidas e centralizar toda essa informação em um único dashboard através do Security Hub. Também contamos com a integração nativa do Security Hub com Lambda, Event Bridge e System Manager, para automatizar a correção de vulnerabilidades tempestivamente, reduzindo a superfície de ataque e garantindo mais segurança para as cargas de trabalho rodando em nuvem ou on-premises
Sobre os autores
Cleber Gomes é Arquiteto de Soluções da AWS no time de Public Sector. Em mais de 9 anos de setor financeiro, atuou em projetos de migração de datacenter, construção de clouds privadas e foi líder técnico de open source. Formado em Ciência da Computação pela UFMT, é entusiasta de analytics, open source, segurança e redes.
Allyson Oliveira é arquiteto de soluções da AWS no time de Setor Público. Já liderou diversos projetos de tecnologia tanto em ambientes on-premises quanto em nuvem. Atualmente, seus projetos são focados em ajudar os clientes com modernização de aplicação com containers e segurança da informação.