Personnalisez les CloudWatch alertes Amazon pour AWS Network Firewall - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Personnalisez les CloudWatch alertes Amazon pour AWS Network Firewall

Créée par Jason Owens () AWS

Environnement : PoC ou pilote

Technologies : mise en réseau ; sécurité, identité, conformité

Charge de travail : Open source

AWSservices : Amazon CloudWatch Logs ; AWS Network Firewall ; AWS CLI

Récapitulatif

Le modèle vous permet de personnaliser les CloudWatch alertes Amazon générées par Amazon Web Services (AWS) Network Firewall. Vous pouvez utiliser des règles prédéfinies ou créer des règles personnalisées qui déterminent le message, les métadonnées et la gravité des alertes. Vous pouvez ensuite agir en fonction de ces alertes ou automatiser les réponses d'autres services Amazon, tels qu'Amazon EventBridge.

Dans ce modèle, vous générez des règles de pare-feu compatibles avec Suricata. Suricata est un moteur de détection de menaces open source. Vous créez d'abord des règles simples, puis vous les testez pour confirmer que les CloudWatch alertes sont générées et enregistrées. Une fois que vous avez testé les règles avec succès, vous les modifiez pour définir des messages, des métadonnées et des niveaux de sévérité personnalisés, puis vous effectuez un nouveau test pour confirmer les mises à jour.

Conditions préalables et limitations

Prérequis

Versions du produit

  • Pour la version 1 de AWSCLI, utilisez 1.18.180 ou version ultérieure. Pour la version 2 de AWSCLI, utilisez la version 2.1.2 ou ultérieure.

  • Le fichier classification.config de Suricata version 5.0.2. Pour obtenir une copie de ce fichier de configuration, consultez la section Informations supplémentaires.

Architecture

Pile technologique cible

  • Network Firewall

  • Amazon CloudWatch Logs

Architecture cible

Une demande d'EC2instance génère une alerte dans Network Firewall, qui transmet l'alerte à CloudWatch

Le schéma d'architecture montre le flux de travail suivant :

  1. Une EC2 instance d'un sous-réseau privé envoie une demande à l'aide de curl ou de Wget.

  2. Network Firewall traite le trafic et génère une alerte.

  3. Network Firewall envoie les alertes enregistrées à CloudWatch Logs.

Outils

AWSservices

  • Amazon vous CloudWatch aide à surveiller les indicateurs de vos AWS ressources et des applications que vous utilisez AWS en temps réel.

  • Amazon CloudWatch Logs vous aide à centraliser les journaux de tous vos systèmes, applications et AWS services afin que vous puissiez les surveiller et les archiver en toute sécurité.

  • AWSL'interface de ligne de commande (AWSCLI) est un outil open source qui vous permet d'interagir avec les AWS services par le biais de commandes dans votre shell de ligne de commande.

  • AWSNetwork Firewall est un pare-feu réseau dynamique et géré, ainsi qu'un service de détection et de prévention des intrusions pour les clouds privés virtuels (VPCs) dans le AWS cloud. 

Autres outils et services

  • curl — curl est un outil de ligne de commande et une bibliothèque open source.

  • Wget — GNU Wget est un outil de ligne de commande gratuit.

Épopées

TâcheDescriptionCompétences requises
Création de règles.
  1. Dans un éditeur de texte, créez une liste de règles que vous souhaitez ajouter au pare-feu. Chaque règle doit figurer sur une ligne distincte. La valeur du classtype paramètre provient du fichier de configuration de classification Suricata par défaut. Pour le contenu complet du fichier de configuration, consultez la section Informations supplémentaires. Voici deux exemples de règles.

    alert http any any -> any any (content:"badstuff"; classtype:misc-activity; sid:3; rev:1;) alert http any any -> any any (content:"morebadstuff"; classtype:bad-unknown; sid:4; rev:1;)
  2. Enregistrez les règles dans un fichier nommécustom.rules.

AWSadministrateur système, administrateur réseau
Créez le groupe de règles.

Dans le AWSCLI, entrez la commande suivante. Cela crée le groupe de règles.

❯ aws network-firewall create-rule-group \         --rule-group-name custom --type STATEFUL \         --capacity 10 --rules file://custom.rules \         --tags Key=environment,Value=development

Voici un exemple de sortie. Prenez note duRuleGroupArn, dont vous aurez besoin à une étape ultérieure.

{     "UpdateToken": "4f998d72-973c-490a-bed2-fc3460547e23",     "RuleGroupResponse": {         "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",         "RuleGroupName": "custom",         "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",         "Type": "STATEFUL",         "Capacity": 10,         "RuleGroupStatus": "ACTIVE",         "Tags": [             {                 "Key": "environment",                 "Value": "development"             }         ]     }
AWSadministrateur système
TâcheDescriptionCompétences requises
Renseignez-vous ARN sur la politique de pare-feu.

Dans le AWSCLI, entrez la commande suivante. Cela renvoie le nom de ressource Amazon (ARN) de la politique de pare-feu. Enregistrez le ARN pour une utilisation ultérieure dans ce modèle.

❯ aws network-firewall describe-firewall \     --firewall-name aws-network-firewall-anfw \     --query 'Firewall.FirewallPolicyArn'

L'exemple ARN suivant est renvoyé par cette commande.

"arn:aws:network-firewall:us-east-2:1234567890:firewall-policy/firewall-policy-anfw"
AWSadministrateur système
Mettez à jour la politique de pare-feu.

Dans un éditeur de texte, copiez-collez le code suivant. <RuleGroupArn>Remplacez-le par la valeur que vous avez enregistrée dans l'épopée précédente. Enregistrez le fichier sous le nom firewall-policy-anfw.json.

{     "StatelessDefaultActions": [         "aws:forward_to_sfe"     ],     "StatelessFragmentDefaultActions": [         "aws:forward_to_sfe"     ],     "StatefulRuleGroupReferences": [         {             "ResourceArn": "<RuleGroupArn>"         }     ] }

Entrez la commande suivante dans le AWSCLI. Cette commande nécessite un jeton de mise à jour pour ajouter les nouvelles règles. Le jeton est utilisé pour confirmer que la politique n'a pas changé depuis que vous l'avez récupérée pour la dernière fois.

UPDATETOKEN=(`aws network-firewall describe-firewall-policy \               --firewall-policy-name firewall-policy-anfw \               --output text --query UpdateToken`)    aws network-firewall update-firewall-policy \  --update-token $UPDATETOKEN \  --firewall-policy-name firewall-policy-anfw \  --firewall-policy file://firewall-policy-anfw.json
AWSadministrateur système
Confirmez les mises à jour des politiques.

(Facultatif) Si vous souhaitez confirmer que les règles ont été ajoutées et consulter le format de la politique, entrez la commande suivante dans le AWSCLI.

❯ aws network-firewall describe-firewall-policy \   --firewall-policy-name firewall-policy-anfw \   --query FirewallPolicy

Voici un exemple de sortie.

{     "StatelessDefaultActions": [         "aws:forward_to_sfe"     ],     "StatelessFragmentDefaultActions": [         "aws:forward_to_sfe"     ],     "StatefulRuleGroupReferences": [         {             "ResourceArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom"         }     ] }
AWSadministrateur système
TâcheDescriptionCompétences requises
Générez des alertes pour les tests.
  1. Connectez-vous à un poste de test dans le sous-réseau du pare-feu.

  2. Entrez les commandes qui devraient générer des alertes. Par exemple, vous pouvez utiliser wget oucurl.

    wget -U "badstuff" http://www.amazon.com -o /dev/null
    curl -A "morebadstuff" http://www.amazon.com -o /dev/null
AWSadministrateur système
Vérifiez que les alertes sont enregistrées.
  1. Ouvrez la CloudWatch console à l'adresse https://console.aws.amazon.com/cloudwatch/

  2. Accédez au groupe de journaux et au flux appropriés. Pour plus d'informations, voir Afficher les données de journal envoyées à CloudWatch Logs (documentation sur CloudWatch les journaux).

  3. Vérifiez que les événements enregistrés sont similaires aux exemples suivants. Les exemples ne montrent que la partie pertinente de l'alerte.

    Exemple 1

            "alert": {             "action": "allowed",             "signature_id": 3,             "rev": 1,             "signature": "",             "category": "Misc activity",             "severity": 3         }

    Exemple 2

            "alert": {             "action": "allowed",             "signature_id": 4,             "rev": 1,             "signature": "",             "category": "Potentially Bad Traffic",             "severity": 2         }
AWSadministrateur système
TâcheDescriptionCompétences requises
Mettez à jour les règles du pare-feu.
  1. Dans un éditeur de texte, ouvrez le fichier custom.rules.

  2. Modifiez la première règle pour qu'elle soit similaire à la suivante. Cette règle doit être saisie sur une seule ligne du fichier.

    alert http any any -> any any (msg:"Watch out - Bad Stuff!!"; content:"badstuff"; classtype:misc-activity; priority:2; sid:3; rev:2; metadata:custom-field-2 Danger!, custom-field More Info;)

    Cela apporte les modifications suivantes à la règle :

    • Ajoute une chaîne msg (site Web de Suricata) qui fournit des informations textuelles sur la signature ou l'alerte. Dans l'alerte générée, cela correspond à la signature. 

    • Règle la priorité par défaut (site Web de Suricata) misc-activity de 3 à 2. Pour les valeurs par défaut des différentsclasstypes, consultez la section Informations supplémentaires.

    • Ajoute des métadonnées personnalisées (site Web de Suricata) à l'alerte. Il s'agit d'informations supplémentaires qui sont ajoutées à la signature. Il est recommandé d'utiliser des paires clé-valeur.

    • Modifie le rév (site Web de Suricata) de 1 à 2. Cela représente la version de la signature.

AWSadministrateur système
Mettez à jour le groupe de règles.

Dans le AWSCLI, exécutez les commandes suivantes. Utilisez la politique ARN de votre pare-feu. Ces commandes obtiennent un jeton de mise à jour et mettent à jour le groupe de règles en fonction des modifications apportées aux règles.

❯ UPDATETOKEN=(`aws network-firewall \                 describe-rule-group \ --rule-group-arn arn:aws:network-firewall:us-east-2:123457890:stateful-rulegroup/custom \ --output text --query UpdateToken`)
 ❯ aws network-firewall update-rule-group \   --rule-group-arn arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom \ --rules file://custom.rules \ --update-token $UPDATETOKEN

Voici un exemple de sortie.

{     "UpdateToken": "7536939f-6a1d-414c-96d1-bb28110996ed",     "RuleGroupResponse": {         "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",         "RuleGroupName": "custom",         "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",         "Type": "STATEFUL",         "Capacity": 10,         "RuleGroupStatus": "ACTIVE",         "Tags": [             {                 "Key": "environment",                 "Value": "development"             }         ]     } }
AWSadministrateur système
TâcheDescriptionCompétences requises
Générez une alerte pour les tests.
  1. Connectez-vous à un poste de test dans le sous-réseau du pare-feu.

  2. Entrez une commande qui doit générer une alerte. Par exemple, vous pouvez utiliser curl.

    curl -A "badstuff" http://www.amazon.com -o /dev/null
AWSadministrateur système
Validez l'alerte modifiée.
  1. Ouvrez la CloudWatch console à https://console.aws.amazon.com/cloudwatch/

  2. Accédez au groupe de journaux et au flux appropriés.

  3. Vérifiez que l'événement enregistré est similaire à l'exemple suivant. L'exemple montre uniquement la partie pertinente de l'alerte.

    "alert": {     "action": "allowed",     "signature_id": 3,     "rev": 2,     "signature": "Watch out - Bad Stuff!!",     "category": "Misc activity",     "severity": 2,     "metadata": {         "custom-field": [             "More Info"         ],         "custom-field-2": [             "Danger!"         ]     } }
AWSadministrateur système

Ressources connexes

Références

Tutoriels et vidéos

Informations supplémentaires

Voici le fichier de configuration de classification de Suricata 5.0.2. Ces classifications sont utilisées lors de la création des règles de pare-feu.

# config classification:shortname,short description,priority   config classification: not-suspicious,Not Suspicious Traffic,3 config classification: unknown,Unknown Traffic,3 config classification: bad-unknown,Potentially Bad Traffic, 2 config classification: attempted-recon,Attempted Information Leak,2 config classification: successful-recon-limited,Information Leak,2 config classification: successful-recon-largescale,Large Scale Information Leak,2 config classification: attempted-dos,Attempted Denial of Service,2 config classification: successful-dos,Denial of Service,2 config classification: attempted-user,Attempted User Privilege Gain,1 config classification: unsuccessful-user,Unsuccessful User Privilege Gain,1 config classification: successful-user,Successful User Privilege Gain,1 config classification: attempted-admin,Attempted Administrator Privilege Gain,1 config classification: successful-admin,Successful Administrator Privilege Gain,1   # NEW CLASSIFICATIONS config classification: rpc-portmap-decode,Decode of an RPC Query,2 config classification: shellcode-detect,Executable code was detected,1 config classification: string-detect,A suspicious string was detected,3 config classification: suspicious-filename-detect,A suspicious filename was detected,2 config classification: suspicious-login,An attempted login using a suspicious username was detected,2 config classification: system-call-detect,A system call was detected,2 config classification: tcp-connection,A TCP connection was detected,4 config classification: trojan-activity,A Network Trojan was detected, 1 config classification: unusual-client-port-connection,A client was using an unusual port,2 config classification: network-scan,Detection of a Network Scan,3 config classification: denial-of-service,Detection of a Denial of Service Attack,2 config classification: non-standard-protocol,Detection of a non-standard protocol or event,2 config classification: protocol-command-decode,Generic Protocol Command Decode,3 config classification: web-application-activity,access to a potentially vulnerable web application,2 config classification: web-application-attack,Web Application Attack,1 config classification: misc-activity,Misc activity,3 config classification: misc-attack,Misc Attack,2 config classification: icmp-event,Generic ICMP event,3 config classification: inappropriate-content,Inappropriate Content was Detected,1 config classification: policy-violation,Potential Corporate Privacy Violation,1 config classification: default-login-attempt,Attempt to login by a default username and password,2   # Update config classification: targeted-activity,Targeted Malicious Activity was Detected,1 config classification: exploit-kit,Exploit Kit Activity Detected,1 config classification: external-ip-check,Device Retrieving External IP Address Detected,2 config classification: domain-c2,Domain Observed Used for C2 Detected,1 config classification: pup-activity,Possibly Unwanted Program Detected,2 config classification: credential-theft,Successful Credential Theft Detected,1 config classification: social-engineering,Possible Social Engineering Attempted,2 config classification: coin-mining,Crypto Currency Mining Activity Detected,2 config classification: command-and-control,Malware Command and Control Activity Detected,1