Utilice Network Firewall para capturar los nombres de dominio DNS de la indicación del nombre del servidor (SNI) para el tráfico saliente - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Utilice Network Firewall para capturar los nombres de dominio DNS de la indicación del nombre del servidor (SNI) para el tráfico saliente

Creado por Kirankumar Chandrashekar (AWS)

Entorno: PoC o piloto

Tecnologías: seguridad, identidad y conformidad; redes; aplicaciones web y móviles

Carga de trabajo: todas las demás cargas de trabajo

Servicios de AWS: AWS Lambda; AWS Network Firewall; Amazon VPC; Amazon Logs CloudWatch

Resumen

Este patrón le muestra cómo utilizar el Network Firewall de Amazon Web Services (AWS) para recopilar los nombres de dominio DNS que proporciona la indicación del nombre del servidor (SNI) en el encabezado HTTPS del tráfico de red saliente. Network Firewall es un servicio gestionado que facilita la implementación de protecciones de red críticas para Amazon Virtual Private Cloud (Amazon VPC), incluida la capacidad de proteger el tráfico saliente con un firewall que bloquea los paquetes que no cumplen determinados requisitos de seguridad. Proteger el tráfico saliente dirigido a nombres de dominio DNS específicos se denomina filtrado de salida, que consiste en monitorear y, potencialmente, restringir el flujo de información saliente de una red a otra.

Tras capturar los datos del SNI que pasan por Network Firewall, puede utilizar Amazon CloudWatch Logs y AWS Lambda para publicar los datos en un tema del Amazon Simple Notification Service (Amazon SNS) que genere notificaciones por correo electrónico. Las notificaciones por correo electrónico incluyen el nombre del servidor y otra información relevante sobre el SNI. Además, puede utilizar el resultado de este patrón para permitir o restringir el tráfico saliente por nombre de dominio en el SNI mediante reglas de firewall. Para obtener más información, consulte Trabajo con grupos de reglas con estado en AWS Network Firewall en la documentación de Network Firewall.

Requisitos previos y limitaciones

Requisitos previos 

Nota: Network Firewall puede usar cualquiera de las siguientes configuraciones de VPC:

Arquitectura

El siguiente diagrama muestra cómo usar Network Firewall para recopilar datos de SNI del tráfico de red saliente y, a continuación, publicar esos datos en un tema de SNS mediante Logs CloudWatch y Lambda.

Flujo de trabajo entre Network Firewall, CloudWatch Logs, Lambda y Amazon SNS.

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. Network Firewall recopila los nombres de dominio de los datos del SNI del encabezado HTTPS del tráfico de red saliente.

  2. CloudWatch Logs supervisa los datos del SNI e invoca una función Lambda cada vez que el tráfico de red saliente pasa a través de Network Firewall.

  3. La función Lambda lee los datos del SNI capturados por los CloudWatch registros y, a continuación, los publica en un tema de SNS.

  4. El tema de SNS le envía una notificación por correo electrónico que incluye los datos del SNI.

Automatizar y escalar

Pila de tecnología

  • Amazon CloudWatch Logs

  • Amazon SNS

  • Amazon VPC

  • AWS Lambda 

  • AWS Network Firewall

Herramientas

Servicios de AWS

  • Amazon CloudWatch Logs: puede usar Amazon CloudWatch Logs para monitorear, almacenar y acceder a sus archivos de registro desde instancias de Amazon Elastic Compute Cloud (Amazon EC2), CloudTrail AWS, Amazon Route 53 y otras fuentes.

  • Amazon SNS: Amazon Simple Notification Service (Amazon SNS) es un servicio administrado con el que se ofrece la entrega de mensajes de los publicadores a los suscriptores (también conocido como productores y consumidores).

  • Amazon VPC: Amazon Virtual Private Cloud (Amazon VPC) le permite aprovisionar una sección aislada de forma lógica de la nube de AWS donde puede lanzar recursos de AWS en una red virtual que haya definido. Dicha red virtual es prácticamente idéntica a las redes tradicionales que se utilizan en sus propios centros de datos, con los beneficios que supone utilizar la infraestructura escalable de AWS.

  • AWS Lambda: AWS Lambda es un servicio de computación que permite ejecutar código sin aprovisionar ni administrar servidores.

  • AWS Network Firewall: AWS Network Firewall es un servicio administrado que facilita la implementación de las protecciones de red esenciales para todas sus VPC de Amazon.

Epics

TareaDescripciónHabilidades requeridas

Cree un grupo de CloudWatch registros.

  1. Inicie sesión en la consola de administración de AWS y abra la CloudWatch consola.

  2. En el panel de navegación, selecione Grupos de registro.

  3. Elija Actions (Acciones) y, a continuación, elija Create log group (Crear grupo de registros).

  4. Escriba el nombre del grupo de registros y, a continuación, seleccione Crear grupo de registros.

Para obtener más información, consulte Trabajar con grupos de registros y flujos de registros en la CloudWatch documentación.

Administrador de la nube
TareaDescripciónHabilidades requeridas

Cree un tema de SNS.

Para crear un tema de SNS, siga las instrucciones de la documentación de Amazon SNS.

Administrador de la nube

Suscriba un punto de conexión a un tema SNS.

Para suscribir una dirección de correo electrónico como punto de conexión al tema de SNS que ha creado, siga las instrucciones de la documentación de Amazon SNS. En Protocolo, elija Email/Email-JSON. Nota: También puede elegir un punto de conexión diferente en función de sus requisitos.

Administrador de la nube
TareaDescripciónHabilidades requeridas

Habilite el registro de firewall.

  1. Inicie sesión en la consola de administración de AWS y abra la consola de Amazon VPC.

  2. En el panel de navegación, en NETWORK FIREWALL, elija Firewalls.

  3. En la sección Firewalls, elija el firewall en el que desee capturar el nombre del servidor del SNI para el tráfico saliente.

  4. Seleccione la pestaña de Detalles del firewall y, a continuación, elija Editar en la sección Registro

  5. En Tipo de registro, seleccione Alerta. En el destino del registro para las alertas, selecciona el grupo de CloudWatch registros

  6. Para el grupo de CloudWatch registros, busque y elija el grupo de registros que creó anteriormente y, a continuación, elija Guardar.

Para obtener más información sobre el uso de CloudWatch Logs como destino de registro para Network Firewall, consulte Amazon CloudWatch Logs en la documentación de Network Firewall. 

Administrador de la nube
TareaDescripciónHabilidades requeridas

Crear un grupo de reglas con estado.

  1. Inicie sesión en la consola de administración de AWS y abra la consola de Amazon VPC.

  2. En el panel de navegación, en NETWORK FIREWALL, seleccione Grupos de regla de Network Firewall.

  3. Elija Crear grupo de reglas de Network Firewall.

  4. En la página de grupo Crear grupo de reglas de Network Firewall, para el Tipo de grupo de reglas, elija Grupo de reglas con estado. Nota: Para obtener más información, consulte Trabajar con grupos de reglas con estado en AWS Network Firewall.

  5. En la sección Grupo de reglas con estado, introduzca un nombre y una descripción para el grupo de reglas.

  6. En Capacidad, defina la capacidad máxima que desea permitir para el grupo de reglas con estado (hasta un máximo de 30 000). Nota: No puede cambiar esta configuración después de crear el grupo de reglas. Para obtener información sobre cómo calcular la capacidad, consulte Configuración de la capacidad de los grupos de reglas en AWS Network Firewall. Para obtener información sobre la configuración máxima, consulte Cuotas de AWS Network Firewall.

  7. Para Opciones de grupos de reglas con estado, seleccione 5-tuple.

  8. En la sección Orden de reglas con estado, seleccione Predeterminado.

  9. En la sección Variables de regla, mantenga los valores predeterminados.

  10. En la sección Agregar regla, elija TLS para Protocolo. En Origen, elija Cualquiera. En Puerto de origen, elija Cualquier puerto. En Destino, seleccione Cualquiera. En Puerto de destino, seleccione Cualquier puerto. En Dirección del tráfico, seleccione Adelante. En Acción, seleccione Alerta. Seleccione Agregar regla.

  11. Elija Crear grupo de reglas con estado.

Administrador de la nube

Asocie la regla con estado a Network Firewall.

  1. Inicie sesión en la consola de administración de AWS y abra la consola de Amazon VPC.

  2. En el panel de navegación, en NETWORK FIREWALL, elija Firewalls.

  3. Elija el firewall en el que desee capturar el nombre del servidor del SNI para el tráfico saliente.

  4. En la sección Grupos de reglas con estado, elija Acciones y, a continuación, elija Agregar grupos de reglas con estado no administrados

  5. En la página Agregar grupos de reglas con estado no administrados, seleccione el grupo de reglas con estado que creó anteriormente y, a continuación, elija Agregar grupo de reglas con estado.

Administrador de la nube
TareaDescripciónHabilidades requeridas

Crear el código para la función de Lambda.

En un entorno de desarrollo integrado (IDE) que pueda leer el evento CloudWatch Logs de Network Firewall para el tráfico saliente, pegue el siguiente código de Python 3 y <SNS-topic-ARN> sustitúyalo por su 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' )

Este ejemplo de código analiza el contenido de CloudWatch los registros y captura el nombre del servidor proporcionado por el SNI en el encabezado HTTPS.

Desarrollador de aplicaciones

Crear la función de Lambda.

Para crear la función de Lambda, siga las instrucciones de la documentación de Lambda y elija Python 3.9 para el Tiempo de ejecución.

Administrador de la nube

Añada el código a la función de Lambda.

Para añadir el código Python a la función de Lambda que creó anteriormente, siga las instrucciones de la documentación de Lambda.

Administrador de la nube

Agregue CloudWatch registros como activador a la función Lambda.

  1. Inicie sesión en la consola de administración de AWS y abra la consola de Lambda.

  2. En el panel de navegación, seleccione Funciones y, a continuación, elija la función que creó anteriormente.

  3. En la sección Información general de la función, seleccione Agregar desencadenador.

  4. En la página Agregar activador, en la sección Configuración del disparador, elija CloudWatch Registros y, a continuación, elija Agregar.

  5. En Grupo de registros, elija el grupo de CloudWatch registros que creó anteriormente.

  6. En Nombre del filtro, especifique un nombre para el filtro.

  7. Seleccione Agregar.

  8. En la pestaña Configuración de la página de la función, en la sección Activadores, seleccione el activador que acabas de añadir y, a continuación, seleccione Activar.

Para obtener más información, consulte Uso de Lambda con CloudWatch registros en la documentación de Lambda.

Administrador de la nube

Agregue permisos de publicación de SNS.

Agregue el permiso sns:Publish a la función de ejecución de Lambda para que Lambda pueda realizar llamadas a la API para publicar mensajes en SNS.  

  1. Busque el rol de ejecución de la función de Lambda que creó anteriormente.

  2. Agregue la siguiente política a su AWS Identity and Access Management (rol de IAM):

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSNSPublish", "Effect": "Allow", "Action": [ "sns:GetTopicAttributes", "sns:Subscribe", "sns:Unsubscribe", "sns:Publish" ], "Resource": "*" } ] }
Administrador de la nube
TareaDescripciónHabilidades requeridas

Envíe tráfico a través de Network Firewall.

  1. Envíe o espere a que el tráfico HTTPS pase a través de Network Firewall.

  2. Compruebe el correo electrónico de notificación de SNS que recibe de AWS cuando el tráfico pasa a través de Network Firewall. El correo electrónico incluye los detalles del SNI del tráfico saliente. Por ejemplo, el correo electrónico generado a partir del código de Lambda anterior tendrá el siguiente contenido si el nombre de dominio al que se ha accedido es https://aws.amazon.com y el protocolo de suscripción es 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>" }

A continuación, consulte el registro de alertas de Network Firewall en Amazon CloudWatch siguiendo las instrucciones de la CloudWatch documentación de Amazon. El registro de alerta muestra el siguiente resultado:

{ "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" } }
Ingeniero de pruebas