O blog da AWS

Como usar o AWS Transfer Family e o GuardDuty para proteção contra malware

Por James Abbott, arquiteto de soluções principal na AWS; Santhosh Srinivasan, arquiteto sênior de aplicações em nuvem da equipe de serviços profissionais da AWS e Suhas Pasricha, arquiteto de infraestrutura de nuvem na equipe de serviços profissionais da AWS. 

Muitas vezes, as organizações precisam compartilhar arquivos de forma segura com terceiros pela Internet. Permitir o acesso público a um servidor de transferência de arquivos expõe a organização a possíveis ameaças, como arquivos infectados por malware enviados por agentes de ameaças ou inadvertidamente por usuários genuínos. Para mitigar esse risco, as empresas podem tomar medidas para ajudar a garantir que os arquivos recebidos por meio de canais públicos sejam verificados em busca de malware antes do processamento.

Este artigo demonstra como usar o AWS Transfer Family e o Amazon GuardDuty para verificar se há malware em arquivos enviados por meio de um servidor FTP (SFTP) seguro como parte de um fluxo de transferência genérico. Para leitores que talvez tenham lido uma postagem anterior no blog sobre esse tópico, a principal diferença é que essa solução é totalmente gerenciada e não exige a implantação de recursos computacionais. O GuardDuty atualiza automaticamente as assinaturas de malware a cada 15 minutos em vez de usar uma imagem de contêiner para varredura, evitando a necessidade de aplicação manual de patches para manter as assinaturas atualizadas.

Pré-requisitos

Para implantar a solução apresentada, você precisará:

  • Uma conta da AWS: você precisa acessar a AWS para implantar essa solução. Se você não tiver uma conta que possa usar, consulte Comece a criar na AWS hoje mesmo.
  • AWS CLI: Instale e configure a AWS Command Line Interface (AWS CLI) para ser autenticada em sua conta da AWS. Configure as variáveis de ambiente para sua conta da AWS usando o token de acesso e a chave de acesso secreta do seu ambiente.
  • Git: você usará o Git para extrair o código de exemplo do GitHub.
  • Terraform: Você usará o Terraform para executar a automação. Siga as instruções de instalação do Terraform para baixar e configurar o Terraform.

Visão geral da solução

Essa solução usa o Transfer Family e o GuardDuty. O Transfer Family fornece um serviço seguro de transferência de arquivos que você pode usar para configurar um servidor SFTP, e o GuardDuty é um serviço inteligente de detecção de ameaças. O GuardDuty monitora atividades maliciosas e comportamentos anômalos para proteger contas, cargas de trabalho e dados na AWS. Em alto nível, a solução possui as seguintes etapas:

  • Um usuário carrega um arquivo por meio de um servidor SFTP do Transfer Family.
  • Um fluxo de trabalho gerenciado pelo Transfer Family invoca o AWS Lambda para executar um fluxo de trabalho do AWS Step Functions.
  • O fluxo de trabalho começa somente após o upload bem-sucedido do arquivo.
  • Os uploads parciais para o servidor SFTP invocarão uma função Lambda de tratamento de erros para relatar um erro de upload parcial.
  • Uma máquina de estado do Step Functions invoca uma função Lambda para mover arquivos enviados para um bucket do Amazon Simple Storage Service (Amazon S3) para processamento e, em seguida, inicia a varredura usando o GuardDuty.
  • O resultado da varredura do GuardDuty é enviado como um retorno de chamada para o Step Functions.
  • Os arquivos infectados são movidos ou limpos.
  • O fluxo de trabalho envia ao usuário os resultados por meio de um tópico do Amazon Simple Notification Service (Amazon SNS). Isso pode ser uma notificação de um erro, um upload malicioso detectado durante a verificação ou uma notificação de um upload bem-sucedido e uma verificação bem sucedida para processamento posterior.

Arquitetura da solução e passo a passo

A solução usa o GuardDuty Malware Protection for S3 para verificar objetos recém-carregados no bucket do S3. Você pode usar esse recurso do GuardDuty para configurar um plano de proteção contra malware para um bucket S3 a nível de bucket ou para monitorar prefixos de objetos específicos.

Figura 1: Arquitetura da solução

As etapas a seguir (mostradas na Figura 1) descrevem o fluxo de trabalho dessa solução a partir do momento em que o arquivo é carregado até ser analisado e marcado como seguro ou infectado, levando a etapas subsequentes que podem ser personalizadas com base no seu caso de uso.

  1. Um arquivo é carregado usando o protocolo SFTP por meio do Transfer Family.
  2. Se o arquivo for carregado com sucesso, o Transfer Family carregará o arquivo no bucket do S3 chamado Unscanned e o fluxo de trabalho do Managed Workflow Complete será acionado. Esse é o fluxo de trabalho usado para lidar com uploads bem-sucedidos e invocar a função Lambda Step Function Invoker.
  3. O Step Function Invoker inicia a máquina de estado e a primeira etapa do processo invoca a função GuardDuty – Scan Lambda.
  4. A função GuardDuty – Scan move o arquivo para o bucket Processing. Esse é o bucket a partir do qual os arquivos serão analisados.
  5. Quando uma atividade de upload de objeto é detectada, o GuardDuty analisa automaticamente o objeto. Nessa implementação, um plano de proteção contra malware é criado para o bucket de processamento.
  6. Quando uma análise é finalizada, o GuardDuty publica o resultado da análise no Amazon EventBridge.
  7. Uma regra do EventBridge foi criada para invocar a função Lambda Callback sempre que um evento de verificação for concluído. O EventBridge invocará a função com um evento que contém os resultados da verificação. Consulte Monitoramento de escaneamentos de objetos do S3 com o Amazon EventBridge para ver um exemplo.
  8. A função Lambda Callback notifica a tarefa GuardDuty – Scan usando o padrão de integração de retorno de chamada. Os resultados da análise do GuardDuty são retornados para a função GuardDuty – Scan e esses resultados são passados para a tarefa Move File.
  9. Se o resultado da análise estiver limpo e sem ameaças detectadas, a tarefa Move File colocará o arquivo no bucket S3 Clean, indicando que o arquivo foi examinado com sucesso e está seguro para um processamento posterior.
  10. Nesse ponto, a função Move File publica uma notificação no tópico SNS Success para notificar os assinantes.
  11. Se o resultado indicar que o arquivo é malicioso, a função Move File, em vez disso, moverá o arquivo para o bucket S3 Quarantine para uma investigação mais detalhada. A função também excluirá o arquivo do bucket Processing e publicará uma notificação no tópico Error no SNS para notificar o usuário sobre o upload de um possível arquivo malicioso.
  12. Se o upload do arquivo não for bem-sucedido e o arquivo não estiver totalmente carregado, o Transfer Family acionará o fluxo Managed Workflow Partial.
  13. O Managed Workflow Partial é um fluxo de trabalho de tratamento de erros e invoca a função Error Publisher, que é usada para relatar erros que ocorrem em qualquer parte do fluxo de trabalho.
  14. A função Error Publisher identifica o tipo de erro, seja devido ao upload parcial ou a um problema em outra parte do fluxo de trabalho, e define o status do erro adequadamente. Em seguida, ele publicará uma mensagem de erro no tópico Error Topic no SNS.
  15. A tarefa GuardDuty – Scan tem um tempo limite de execução para garantir que um evento seja publicado no tópico de erro para solicitar uma intervenção manual para investigar mais detalhadamente se o arquivo não for examinado com êxito. Se a tarefa GuardDuty – Scan falhar, a função lambda Error clean-up será invocada.

Por fim, há uma política de ciclo de vida do S3 anexada ao bucket Processing. Isso é para garantir que nenhum arquivo seja deixado no bucket de processamento por mais de um dia.

Repositório de código

O repositório AWS-samples do GitHub tem uma implementação de demonstração desenvolvida usando funções Lambda baseadas em Terraform e Python para implementar essa solução. A mesma solução também pode ser implementada usando o AWS CloudFormation. O código tem os componentes necessários para implantar todo o fluxo de trabalho e demonstrar as habilidades do Transfer Family e do plano de proteção contra malware do GuardDuty.

Instale a solução

Use as etapas a seguir para implantar essa solução em seu ambiente de teste.

  1. Clone o repositório em seu diretório de trabalho usando o Git.
  2. Navegue até a raiz do diretório do projeto clonado.
  3. Atualize o arquivo terraform locals.tf com os valores de sua escolha para os nomes de bucket do S3, nomes de servidores SFTP e outras variáveis.
  4. Execute o terraform plan.
  5. Se todas as alterações estiverem corretas, execute um terraform apply e digite yes para criar os recursos.

Removendo recursos

Depois de testar e explorar a solução, é importante limpar os recursos que você criou para evitar custos desnecessários. Para excluir os recursos criados por essa solução, navegue até o diretório raiz do seu projeto clonado e execute o seguinte comando:

terraform destroy

Esse comando removerá os recursos criados pelo Terraform, incluindo o servidor SFTP, buckets S3, funções Lambda e outros componentes. Confirme a exclusão digitando yes quando solicitado.

Conclusão

Usando a abordagem descrita no artigo, você pode garantir que os arquivos recebidos pelo SFTP e enviados para seu bucket S3 sejam verificados em busca de ameaças e estejam seguros para processamento. A solução reduz a superfície de exposição ao garantir que os uploads públicos sejam analisados em um ambiente seguro antes de serem enviados para outros componentes do sistema.

Se você tiver comentários sobre esta postagem, envie na seção Comentários abaixo.

Autores

James Abbott é arquiteto de soluções principal na AWS, trabalhando em serviços financeiros globais. Quando não está no escritório, ele gosta de andar de mountain bike na Carolina do Norte.
  Santhosh Srinivasan é arquiteto sênior de aplicações em nuvem da equipe de serviços profissionais da AWS. Ele é especialista em criar e modernizar aplicativos corporativos de grande escala na nuvem com foco no setor de serviços financeiros.
Suhas Pasricha é arquiteto de infraestrutura de nuvem na equipe de serviços profissionais da AWS. Ele tem experiência em desenvolvimento web e automação de infraestrutura. Na Amazon, ele tem ajudado clientes a configurar e operar uma zona de aterrissagem e um ambiente de nuvem em toda a empresa. Em seu tempo livre, ele gosta de ler e jogar videogames.

Tradutores

Makino Makino é arquiteto de soluções na AWS apoiando os clientes de governo em sua jornada para a nuvem, possui mais de 20 anos de experiência em TI e já passou pelos setores de governo, educação e pesquisa atuando como administrador de redes e sistemas, analista de segurança da informação, pesquisador de segurança da informação e especialista em nuvem, e esteve envolvido em diversos projetos de tecnologias de orquestração de infraestrutura e plataforma, otimização de aplicações, migrações, segurança de redes e aplicações e outros.
André Mello é Arquiteto de Soluções na AWS

Este conteúdo foi traduzido da postagem original do blog, que pode ser encontrada aqui.