Use o Network Firewall para capturar os nomes de domínio DNS da Indicação de Nome do Servidor (SNI) para tráfego de saída - Recomendações da AWS

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á.

Use o Network Firewall para capturar os nomes de domínio DNS da Indicação de Nome do Servidor (SNI) para tráfego de saída

Criado por Kirankumar Chandrashekar (AWS)

Ambiente: PoC ou piloto

Tecnologias: segurança, identidade, conformidade; rede; aplicativos móveis e web

Workload: todas as outras workloads

Serviços da AWS: AWS Lambda; Firewall de Rede da AWS; Amazon VPC; Amazon Logs CloudWatch

Resumo

Esse padrão mostra como usar o Network Firewall da Amazon Web Services (AWS) para coletar os nomes de domínio DNS fornecidos pela Indicação de Nome do Servidor (SNI) no cabeçalho HTTPS do seu tráfego de rede de saída. O Network Firewall é um serviço gerenciado que facilita a implantação de proteções de rede críticas para a Amazon Virtual Private Cloud (Amazon VPC), incluindo a capacidade de proteger o tráfego de saída com um firewall que bloqueia pacotes que não atendem a determinados requisitos de segurança. Proteger o tráfego de saída para nomes de domínio DNS específicos é chamado de filtragem de saída, que é a prática de monitorar e potencialmente restringir o fluxo de informações de saída de uma rede para outra.

Depois de capturar os dados do SNI que passam pelo Network Firewall, você pode usar o Amazon CloudWatch Logs e o AWS Lambda para publicar os dados em um tópico do Amazon Simple Notification Service (Amazon SNS) que gera notificações por e-mail. As notificações por e-mail incluem o nome do servidor e outras informações relevantes da SNI. Além disso, você pode usar a saída desse padrão para permitir ou restringir o tráfego de saída por nome de domínio na SNI usando regras de firewall. Para obter mais informações, consulte Trabalhar com grupos de regras com estado no AWS Network Firewall na documentação do Network Firewall.

Pré-requisitos e limitações

Pré-requisitos

Observação: o Network Firewall pode usar qualquer uma das seguintes configurações de VPC:

Arquitetura

O diagrama a seguir mostra como usar o Firewall de Rede para coletar dados SNI do tráfego de rede de saída e, em seguida, publicar esses dados em um tópico do SNS usando Logs CloudWatch e Lambda.

Fluxo de trabalho entre Network Firewall, CloudWatch Logs, Lambda e Amazon SNS.

O diagrama mostra o seguinte fluxo de trabalho:

  1. O Network Firewall coleta nomes de domínio dos dados da SNI no cabeçalho HTTPS do tráfego de saída da rede.

  2. CloudWatch O Logs monitora os dados do SNI e invoca uma função Lambda sempre que o tráfego de saída da rede passa pelo Network Firewall.

  3. A função Lambda lê os dados SNI capturados pelo CloudWatch Logs e depois publica esses dados em um tópico do SNS.

  4. O tópico SNS envia uma notificação por e-mail que inclui os dados da SNI.

Automação e escala

Pilha de tecnologia

  • CloudWatch Registros da Amazon

  • Amazon SNS

  • Amazon VPC

  • AWS Lambda 

  • AWS Network Firewall

Ferramentas

Serviços da AWS

  • Amazon CloudWatch Logs — Você pode usar o Amazon CloudWatch Logs para monitorar, armazenar e acessar seus arquivos de log das instâncias do Amazon Elastic Compute Cloud (Amazon EC2), da AWS, do CloudTrail Amazon Route 53 e de outras fontes.

  • Amazon SNS: o Amazon Simple Notification Service (Amazon SNS) é um serviço gerenciado que fornece entrega de mensagens de publicadores para assinantes (também conhecido como produtores e consumidores).

  • Amazon VPC: a Amazon Virtual Private Cloud (Amazon VPC) provisiona uma seção logicamente isolada da Nuvem AWS, em que é possível executar recursos da AWS em uma rede virtual que você definiu. Essa rede virtual se assemelha a uma rede tradicional que você operaria no seu datacenter, com os benefícios de usar a infraestrutura dimensionável da AWS.

  • AWS Lambda: o AWS Lambda é um serviço de computação com tecnologia que pode ser usado para executar código sem provisionamento ou gerenciamento de servidores.

  • AWS Network Firewall: o AWS Network Firewall é um serviço gerenciado que facilita a implantação de proteções de rede essenciais para todas as suas Amazon VPCs.

Épicos

TarefaDescriçãoHabilidades necessárias

Crie um grupo de CloudWatch registros.

  1. Faça login no AWS Management Console e abra o CloudWatch console.

  2. No painel de navegação, escolha Grupos de logs.

  3. Selecione Actions (Ações) e selecione Create log group (Criar grupo de logs).

  4. Digite um nome para o grupo de logs e escolha Create log group (Criar grupo de logs).

Para obter mais informações, consulte Trabalhando com grupos e fluxos de registros na CloudWatch documentação.

Administrador de nuvem
TarefaDescriçãoHabilidades necessárias

Criar um tópico do SNS.

Para criar um tópico do SNS, siga as instruções na documentação do Amazon SNS.

Administrador de nuvem

Inscreva um endpoint em um tópico do SNS.

Para inscrever um endereço de e-mail como endpoint para o tópico do SNS que você criou, siga as instruções na documentação do Amazon SNS. Em Protocolo, escolha E-mail/e-mail-JSON. Observação: você também pode escolher um endpoint diferente com base em seus requisitos.

Administrador de nuvem
TarefaDescriçãoHabilidades necessárias

Habilitar o registro em log de firewall.

  1. Faça login no Console de Gerenciamento da AWS e abra o console do Amazon VPC.

  2. No painel de navegação, em NETWORK FIREWALL, escolha Firewalls.

  3. Na seção Firewalls, escolha o firewall em que você deseja capturar o nome do servidor do SNI para tráfego de saída.

  4. Escolha a guia Detalhes do firewall e, em seguida, escolha Editar na seção Registro em log

  5. Em Tipo de registro, selecione Alerta. Em Destino do registro para alertas, selecione o grupo de CloudWatch registros

  6. Em grupo de CloudWatch registros, pesquise e escolha o grupo de registros que você criou anteriormente e, em seguida, escolha Salvar.

Para obter mais informações sobre o uso de CloudWatch Logs como destino de log para o Network Firewall, consulte Amazon CloudWatch Logs na documentação do Network Firewall. 

Administrador de nuvem
TarefaDescriçãoHabilidades necessárias

Crie uma regra com estado.

  1. Faça login no Console de Gerenciamento da AWS e abra o console do Amazon VPC.

  2. No painel de navegação, em NETWORK FIREWALL, escolha Grupos de regras do Network Firewall.

  3. Escolha Criar grupo de regras do Network Firewall.

  4. Na página Criar grupo de regras do Network Firewall, para o Tipo de grupo de regra, escolha Grupo de regras com estado. Observação: para obter mais informações, consulte Trabalhar com grupos de regras com estado no AWS Network Firewall.

  5. Na seção Grupos de regras com estado, insira um nome e uma descrição para o grupo de regras com estado.

  6. Em Capacidade, defina a capacidade máxima que você deseja permitir para o grupo de regras com estado (até o máximo de 30.000). Observação: Não será possível alterar essa configuração após a criação do grupo de regras. Para obter informações sobre como calcular a capacidade, consulte Como definir a capacidade do grupo de regras no AWS Network Firewall. Para obter informações sobre a configuração máxima, consulte as cotas do AWS Network Firewall.

  7. Em Opções de grupos de regras com estado, selecione 5 tuplas.

  8. Na seção Ordem das regras com estado, escolha Padrão.

  9. Na seção Variáveis da regra, mantenha os valores padrão.

  10. Na seção Adicionar regra, escolha TLS para Protocolo. Em Fonte, escolha Qualquer. Em Porta de origem, escolha Qualquer porta. Em Destino, escolha Qualquer. Em Porta de destino, escolha Qualquer porta. Em Direção do tráfego, escolha Forward. Em Ação, escolha Alertar. Escolha Adicionar regra.

  11. Escolha Criar grupo de regras com estado.

Administrador de nuvem

Associe a regra de estado ao Network Firewall.

  1. Faça login no Console de Gerenciamento da AWS e abra o console do Amazon VPC.

  2. No painel de navegação, em NETWORK FIREWALL, escolha Firewalls.

  3. Escolha o firewall em que você deseja capturar o nome do servidor do SNI para tráfego de saída.

  4. Na seção Grupos de regras com estado, escolha Ações e, em seguida, escolha Adicionar grupos de regras com estado não gerenciados. 

  5. Na página Adicionar grupos de regras com estado não gerenciado, selecione o grupo de regras com estado que você criou anteriormente e escolha Adicionar grupo de regras com estado.

Administrador de nuvem
TarefaDescriçãoHabilidades necessárias

Crie o código da função do Lambda.

Em um ambiente de desenvolvimento integrado (IDE) que pode ler o evento CloudWatch Logs do Network Firewall para tráfego de saída, cole o seguinte código do Python 3 e <SNS-topic-ARN> substitua pelo seu valor:

import json import gzip import base64 import boto3 sns_client = boto3.client('sns') def lambda_handler(event, context): decoded_event = json.loads(gzip.decompress(base64.b64decode(event['awslogs']['data']))) body = ''' {filtermatch} '''.format( loggroup=decoded_event['logGroup'], logstream=decoded_event['logStream'], filtermatch=decoded_event['logEvents'][0]['message'], ) print(body) filterMatch = json.loads(body) data = [] if 'http' in filterMatch['event']: data.append(filterMatch['event']['http']['hostname']) elif 'tls' in filterMatch['event']: data.append(filterMatch['event']['tls']['sni']) result = 'Domain accessed ' + 1*' ' + (data[0]) + 1*' ' 'via AWS Network Firewall ' + 1*' ' + (filterMatch['firewall_name']) print(result) message = {'ServerName': result} send_to_sns = sns_client.publish( TargetArn=<SNS-topic-ARN>, #Replace with the SNS topic ARN Message=json.dumps({'default': json.dumps(message), 'sms': json.dumps(message), 'email': json.dumps(message)}), Subject='Server Name passed through the Network Firewall', MessageStructure='json' )

Esse exemplo de código analisa o conteúdo dos CloudWatch registros e captura o nome do servidor fornecido pelo SNI no cabeçalho HTTPS.

Desenvolvedor de aplicativos

Criar a função do Lambda.

Para criar a função do Lambda, siga as instruções na documentação do Lambda e escolha Python 3.9 para Runtime.

Administrador de nuvem

Adicionar o código à função do Lambda.

Para adicionar seu código Python à função do Lambda que você criou anteriormente, siga as instruções na documentação do Lambda.

Administrador de nuvem

Adicione CloudWatch registros como um gatilho à função Lambda.

  1. Faça login no Console de Gerenciamento da AWS e abra o console do Lambda.

  2. No painel de navegação, escolha Funções e escolha a função que você criou anteriormente.

  3. Na seção Visão geral da função, selecione Adicionar gatilho.

  4. Na página Adicionar gatilho, na seção Configuração do acionador, escolha CloudWatch Registros e, em seguida, escolha Adicionar.

  5. Em Grupo de registros, escolha o grupo de CloudWatch registros que você criou anteriormente.

  6. Em Nome do filtro, insira um nome para o seu filtro.

  7. Escolha Adicionar.

  8. Na guia Configuração da página da sua função, na seção Gatilhos, selecione o gatilho que você acabou de adicionar e escolha Ativar.

Para obter mais informações, consulte Como usar o Lambda com CloudWatch registros na documentação do Lambda.

Administrador de nuvem

Adicione permissões de publicação do SNS.

Adicione a permissão sns:Publish à função de execução do Lambda, para que o Lambda possa fazer chamadas de API para publicar mensagens no SNS.  

  1. Encontre a função de execução da função do Lambda criada anteriormente.

  2. Adicione a seguinte política ao seu perfil do IAM (Identity and Access Management) da AWS:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSNSPublish", "Effect": "Allow", "Action": [ "sns:GetTopicAttributes", "sns:Subscribe", "sns:Unsubscribe", "sns:Publish" ], "Resource": "*" } ] }
Administrador de nuvem
TarefaDescriçãoHabilidades necessárias

Envie tráfego por meio do Network Firewall.

  1. Envie ou aguarde até que o tráfego HTTPS passe pelo Network Firewall.

  2. Verifique o e-mail de notificação do SNS que você recebe da AWS quando o tráfego passa pelo Network Firewall. O e-mail inclui os detalhes do SNI para o tráfego de saída. Por exemplo, o e-mail gerado a partir do código Lambda acima terá o seguinte conteúdo se o nome de domínio acessado for https://aws.amazon.com e o protocolo de assinatura for EMAIL-JSON:

{ "Type": "Notification", "MessageId": "<messageID>", "TopicArn": "arn:aws:sns:us-west-2:123456789:testSNSTopic", "Subject": "Server Name passed through the Network Firewall", "Message": "{\"ServerName\": \"Domain 'aws.amazon.com' accessed via AWS Network Firewall 'AWS-Network-Firewall-Multi-AZ-firewall\"}", "Timestamp": "2022-03-22T04:10:04.217Z", "SignatureVersion": "1", "Signature": "<Signature>", "SigningCertURL": "<SigningCertUrl>", "UnsubscribeURL": "<UnsubscribeURL>" }

Em seguida, verifique o registro de alertas do Firewall de Rede na Amazon CloudWatch seguindo as instruções na CloudWatch documentação da Amazon. O log de alerta mostra a seguinte saída:

{ "firewall_name": "AWS-Network-Firewall-Multi-AZ-firewall", "availability_zone": "us-east-2b", "event_timestamp": "<event timestamp>", "event": { "timestamp": "2021-03-22T04:10:04.214222+0000", "flow_id": <flow ID>, "event_type": "alert", "src_ip": "10.1.3.76", "src_port": 22761, "dest_ip": "99.86.59.73", "dest_port": 443, "proto": "TCP", "alert": { "action": "allowed", "signature_id": 2, "rev": 0, "signature": "", "category": "", "severity": 3 }, "tls": { "subject": "CN=aws.amazon.com", "issuerdn": "C=US, O=Amazon, OU=Server CA 1B, CN=Amazon", "serial": "<serial number>", "fingerprint": "<fingerprint ID>", "sni": "aws.amazon.com", "version": "TLS 1.2", "notbefore": "2020-09-30T00:00:00", "notafter": "2021-09-23T12:00:00", "ja3": {}, "ja3s": {} }, "app_proto": "tls" } }
Engenheiro de testes