Verwenden Sie die Network Firewall, um die DNS-Domänennamen von der Server Name Indication (SNI) für ausgehenden Datenverkehr zu erfassen - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie die Network Firewall, um die DNS-Domänennamen von der Server Name Indication (SNI) für ausgehenden Datenverkehr zu erfassen

Erstellt von Kirankumar Chandrashekar (AWS)

Umgebung: PoC oder Pilotprojekt

Technologien: Sicherheit, Identität, Compliance; Netzwerke; Web- und mobile Apps

Arbeitslast: Alle anderen Workloads

AWS-Services: AWS Lambda; AWS-Netzwerk-Firewall; Amazon VPC; Amazon-Protokolle CloudWatch

Übersicht

Dieses Muster zeigt Ihnen, wie Sie die Amazon Web Services (AWS) Network Firewall verwenden, um die DNS-Domainnamen zu sammeln, die von der Server Name Indication (SNI) im HTTPS-Header Ihres ausgehenden Netzwerkverkehrs bereitgestellt werden. Network Firewall ist ein verwalteter Service, der es einfach macht, wichtige Netzwerkschutzmaßnahmen für Amazon Virtual Private Cloud (Amazon VPC) bereitzustellen, einschließlich der Fähigkeit, ausgehenden Datenverkehr mit einer Firewall zu sichern, die Pakete blockiert, die bestimmte Sicherheitsanforderungen nicht erfüllen. Die Sicherung des ausgehenden Datenverkehrs zu bestimmten DNS-Domainnamen wird als Ausgangsfilterung bezeichnet. Dabei handelt es sich um eine Methode, bei der der Fluss ausgehender Informationen von einem Netzwerk in ein anderes überwacht und möglicherweise eingeschränkt wird.

Nachdem Sie die SNI-Daten erfasst haben, die die Network Firewall passieren, können Sie Amazon CloudWatch Logs und AWS Lambda verwenden, um die Daten in einem Amazon Simple Notification Service (Amazon SNS) -Thema zu veröffentlichen, das E-Mail-Benachrichtigungen generiert. Die E-Mail-Benachrichtigungen enthalten den Servernamen und andere relevante SNI-Informationen. Darüber hinaus können Sie die Ausgabe dieses Musters verwenden, um ausgehenden Datenverkehr anhand des Domainnamens im SNI mithilfe von Firewallregeln zuzulassen oder einzuschränken. Weitere Informationen finden Sie unter Arbeiten mit statusbehafteten Regelgruppen in der AWS-Netzwerk-Firewall in der Dokumentation zur Network Firewall.

Voraussetzungen und Einschränkungen

Voraussetzungen

Hinweis: Die Network Firewall kann jede der folgenden VPC-Konfigurationen verwenden:

Architektur

Das folgende Diagramm zeigt, wie die Network Firewall verwendet wird, um SNI-Daten aus ausgehendem Netzwerkverkehr zu sammeln und diese Daten dann mithilfe von CloudWatch Logs und Lambda in einem SNS-Thema zu veröffentlichen.

Workflow zwischen Network Firewall, CloudWatch Logs, Lambda und Amazon SNS.

Das Diagramm zeigt den folgenden Workflow:

  1. Die Network Firewall erfasst Domainnamen aus den SNI-Daten im HTTPS-Header Ihres ausgehenden Netzwerkverkehrs.

  2. CloudWatch Logs überwacht die SNI-Daten und ruft eine Lambda-Funktion auf, wenn der ausgehende Netzwerkverkehr die Network Firewall passiert.

  3. Die Lambda-Funktion liest die von CloudWatch Logs erfassten SNI-Daten und veröffentlicht diese Daten dann in einem SNS-Thema.

  4. Das SNS-Thema sendet Ihnen eine E-Mail-Benachrichtigung, die die SNI-Daten enthält.

Automatisierung und Skalierung

Technologie-Stack

  • CloudWatch Amazon-Protokolle

  • Amazon SNS

  • Amazon VPC

  • AWS Lambda 

  • AWS Network Firewall

Tools

AWS-Services

  • Amazon CloudWatch Logs — Sie können Amazon CloudWatch Logs verwenden, um Ihre Protokolldateien von Amazon Elastic Compute Cloud (Amazon EC2) -Instances, AWS CloudTrail, Amazon Route 53 und anderen Quellen zu überwachen, zu speichern und darauf zuzugreifen.

  • Amazon SNS — Amazon Simple Notification Service (Amazon SNS) ist ein verwalteter Service, der die Nachrichtenzustellung von Verlagen an Abonnenten (auch bekannt als Produzenten und Verbraucher) ermöglicht.

  • Amazon VPC — Amazon Virtual Private Cloud (Amazon VPC) stellt einen logisch isolierten Bereich der AWS-Cloud bereit, in dem Sie AWS-Ressourcen in einem von Ihnen definierten virtuellen Netzwerk starten können. Dieses virtuelle Netzwerk entspricht weitgehend einem herkömmlichen Netzwerk, wie Sie es in Ihrem Rechenzentrum betreiben, kann jedoch die Vorzüge der skalierbaren Infrastruktur von AWS nutzen.

  • AWS Lambda — AWS Lambda ist ein Rechenservice, mit dem Sie Code ausführen können, ohne Server bereitzustellen oder zu verwalten.

  • AWS Network Firewall — Die AWS Network Firewall ist ein verwalteter Service, mit dem Sie auf einfache Weise wichtige Netzwerkschutzmaßnahmen für all Ihre Amazon-VPCs bereitstellen können.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine CloudWatch Protokollgruppe.

  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die CloudWatch Konsole.

  2. Wählen Sie im Navigationsbereich Protokollgruppen aus.

  3. Wählen Sie Actions (Aktionen) und anschließend Create log group (Protokollgruppe erstellen) aus.

  4. Geben Sie einen Namen für die Protokollgruppe ein. Wählen Sie anschließend Create log group (Protokollgruppe erstellen) aus.

Weitere Informationen finden Sie in der CloudWatch Dokumentation unter Arbeiten mit Protokollgruppen und Protokollströmen.

Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie ein SNS-Thema.

Um ein SNS-Thema zu erstellen, folgen Sie den Anweisungen in der Amazon SNS SNS-Dokumentation.

Cloud-Administrator

Abonnieren Sie einen Endpunkt für das SNS-Thema.

Um eine E-Mail-Adresse als Endpunkt für das von Ihnen erstellte SNS-Thema zu abonnieren, folgen Sie den Anweisungen in der Amazon SNS SNS-Dokumentation. Wählen Sie unter Protokoll die Option Email/Email-JSON aus. Hinweis: Sie können je nach Ihren Anforderungen auch einen anderen Endpunkt auswählen.

Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Aktivieren Sie die Firewall-Protokollierung.

  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon VPC-Konsole.

  2. Wählen Sie im Navigationsbereich unter NETWORK FIREWALL die Option Firewalls aus.

  3. Wählen Sie im Abschnitt Firewalls die Firewall aus, für die Sie den Servernamen vom SNI für ausgehenden Datenverkehr erfassen möchten.

  4. Wählen Sie die Registerkarte Firewall-Details und dann im Abschnitt Protokollierung die Option Bearbeiten aus. 

  5. Wählen Sie als Protokolltyp die Option Warnung aus. Wählen Sie unter Protokollziel für Warnungen die Option CloudWatch Protokollgruppe aus. 

  6. Suchen Sie unter CloudWatch Protokollgruppe nach der Protokollgruppe, die Sie zuvor erstellt haben, wählen Sie sie aus, und klicken Sie dann auf Speichern.

Weitere Informationen zur Verwendung von CloudWatch Logs als Protokollziel für die Network Firewall finden Sie unter Amazon CloudWatch Logs in der Dokumentation zur Network Firewall. 

Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine statusorientierte Regel.

  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon VPC-Konsole.

  2. Wählen Sie im Navigationsbereich unter Network Firewall die Option Netzwerkfirewall-Regelgruppen aus.

  3. Wählen Sie „Netzwerk-Firewall-Regelgruppe erstellen“.

  4. Wählen Sie auf der Seite „Netzwerk-Firewall-Regelgruppe erstellen“ als Regelgruppentyp die Option Stateful-Regelgruppe aus. Hinweis: Weitere Informationen finden Sie unter Arbeiten mit statusbehafteten Regelgruppen in der AWS-Netzwerk-Firewall.

  5. Geben Sie im Abschnitt Stateful-Regelgruppe einen Namen und eine Beschreibung für die Regelgruppe ein.

  6. Geben Sie unter Kapazität die maximale Kapazität ein, die Sie für die statusbehaftete Regelgruppe zulassen möchten (bis zum Maximum von 30.000). Hinweis: Sie können diese Einstellung nicht ändern, nachdem Sie die Regelgruppe erstellt haben. Informationen zur Berechnung der Kapazität finden Sie unter Einstellung der Regelgruppenkapazität in der AWS-Netzwerk-Firewall. Informationen zur Maximaleinstellung finden Sie unter AWS-Netzwerk-Firewall-Kontingente.

  7. Wählen Sie für Stateful-Regelgruppenoptionen die Option 5-Tuple aus.

  8. Wählen Sie im Abschnitt Reihenfolge der Stateful-Regeln die Option Standard aus.

  9. Behalten Sie im Abschnitt Regelvariablen die Standardwerte bei.

  10. Wählen Sie im Abschnitt Regel hinzufügen TLS als Protokoll aus. Wählen Sie als Quelle die Option Beliebig aus. Wählen Sie für Quellport die Option Beliebiger Port aus. Wählen Sie als Ziel die Option Beliebig aus. Wählen Sie für Zielport die Option Beliebiger Port aus. Wählen Sie für Verkehrsrichtung die Option Forward aus. Wählen Sie für Aktion die Option Warnung aus. Wählen Sie Regel hinzufügen aus.

  11. Wählen Sie Stateful-Regelgruppe erstellen aus.

Cloud-Administrator

Ordnen Sie die statusbehaftete Regel der Network Firewall zu.

  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon VPC-Konsole.

  2. Wählen Sie im Navigationsbereich unter NETWORK FIREWALL die Option Firewalls aus.

  3. Wählen Sie die Firewall aus, in der Sie den Servernamen vom SNI für ausgehenden Datenverkehr erfassen möchten.

  4. Wählen Sie im Abschnitt Stateful-Regelgruppen die Option Aktionen und dann Unverwaltete statusbehaftete Regelgruppen hinzufügen aus. 

  5. Wählen Sie auf der Seite Nicht verwaltete statusbehaftete Regelgruppen hinzufügen die statusbehaftete Regelgruppe aus, die Sie zuvor erstellt haben, und klicken Sie dann auf Stateful-Regelgruppe hinzufügen.

Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie den Code für die Lambda-Funktion.

Fügen Sie in einer integrierten Entwicklungsumgebung (IDE), die das CloudWatch Logs-Ereignis von der Network Firewall für ausgehenden Datenverkehr lesen kann, den folgenden Python-3-Code ein und <SNS-topic-ARN> ersetzen Sie ihn durch Ihren Wert:

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' )

In diesem Codebeispiel wird der Inhalt der CloudWatch Protokolle analysiert und der vom SNI im HTTPS-Header angegebene Servername erfasst.

App-Developer

So erstellen Sie die Lambda-Funktion:

Um die Lambda-Funktion zu erstellen, folgen Sie den Anweisungen in der Lambda-Dokumentation und wählen Sie Python 3.9 für Runtime.

Cloud-Administrator

Fügen Sie den Code zur Lambda-Funktion hinzu.

Folgen Sie den Anweisungen in der Lambda-Dokumentation, um Ihren Python-Code zu der zuvor erstellten Lambda-Funktion hinzuzufügen.

Cloud-Administrator

Fügen Sie CloudWatch Logs als Trigger zur Lambda-Funktion hinzu.

  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Lambda-Konsole.

  2. Wählen Sie im Navigationsbereich Funktionen und dann die Funktion aus, die Sie zuvor erstellt haben.

  3. Wählen Sie im Abschnitt Funktionsübersicht die Option Auslöser hinzufügen aus.

  4. Wählen Sie auf der Seite Trigger hinzufügen im Abschnitt Trigger-Konfiguration die Option CloudWatch Logs und dann Add aus.

  5. Wählen Sie unter Protokollgruppe die CloudWatch Protokollgruppe aus, die Sie zuvor erstellt haben.

  6. Geben Sie unter Filtername einen Namen für Ihren Filter ein.

  7. Wählen Sie Hinzufügen aus.

  8. Wählen Sie auf der Seite Ihrer Funktion auf der Registerkarte Konfiguration im Abschnitt Trigger den Trigger aus, den Sie gerade hinzugefügt haben, und wählen Sie dann Aktivieren aus.

Weitere Informationen finden Sie unter Using Lambda with CloudWatch Logs in der Lambda-Dokumentation.

Cloud-Administrator

Fügen Sie SNS-Veröffentlichungsberechtigungen hinzu.

Fügen Sie der Lambda-Ausführungsrolle die Berechtigung sns:publish hinzu, sodass Lambda API-Aufrufe zum Veröffentlichen von Nachrichten in SNS tätigen kann.  

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSNSPublish", "Effect": "Allow", "Action": [ "sns:GetTopicAttributes", "sns:Subscribe", "sns:Unsubscribe", "sns:Publish" ], "Resource": "*" } ] }
Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Senden Sie den Datenverkehr über die Network Firewall.

  1. Senden oder warten Sie, bis der HTTPS-Verkehr die Network Firewall passiert.

  2. Überprüfen Sie die SNS-Benachrichtigungs-E-Mail, die Sie von AWS erhalten, wenn der Datenverkehr die Network Firewall passiert. Die E-Mail enthält die SNI-Details für ausgehenden Datenverkehr. Die aus dem obigen Lambda-Code generierte E-Mail hat beispielsweise den folgenden Inhalt, wenn der aufgerufene Domainname https://aws.amazon.com lautet und das Abonnementprotokoll EMAIL-JSON lautet:

{ "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>" }

Überprüfen Sie dann das Warnprotokoll der Network Firewall bei Amazon, CloudWatch indem Sie den Anweisungen in der CloudWatch Amazon-Dokumentation folgen. Das Warnprotokoll zeigt die folgende Ausgabe:

{ "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" } }
Testingenieur