Collecter les journaux du WAF Akamai
Présentation
Cet analyseur gère les journaux du pare-feu d'application Web (WAF) Akamai, et est compatible avec les formats syslog et CEF. Il extrait des champs tels que les adresses IP, les URL, les méthodes HTTP, les codes de réponse, les user-agents et les informations sur les règles de sécurité, et les met en correspondance avec le UDM pour une représentation cohérente. L'analyseur gère également des champs Akamai spécifiques tels que attackData
et clientReputation
, effectuant les transformations de données nécessaires et enrichissant la sortie UDM.
Avant de commencer
- Assurez-vous de disposer d'une instance Google SecOps.
- Assurez-vous de disposer d'un accès privilégié à AWS IAM et S3.
- Assurez-vous de disposer d'un accès privilégié à Akamai.
Configurer le bucket Amazon S3
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur: Créer un bucket.
- Enregistrez le nom et la région du bucket pour référence ultérieure.
- Créez un utilisateur en suivant ce guide de l'utilisateur: Créer un utilisateur IAM.
- Sélectionnez l'utilisateur créé.
- Sélectionnez l'onglet Informations d'identification de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif: ajoutez une balise de description.
- Cliquez sur Créer une clé d'accès.
- Cliquez sur Télécharger le fichier .csv. (Enregistrez la clé d'accès et la clé d'accès secrète pour référence ultérieure).
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez la règle AmazonS3FullAccess.
- Sélectionnez la règle.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Configurer le WAF Akamai pour envoyer des journaux à Amazon S3
- Connectez-vous au Control Center d'Akamai.
- Accédez à la section Sécurité.
- Sélectionnez Journaux.
Configurez une nouvelle diffusion de journaux:
- Source des journaux:sélectionnez votre configuration du WAF.
- Cible de diffusion:choisissez Amazon S3.
- Bucket S3:spécifiez le nom du bucket S3 que vous avez créé.
- Région:sélectionnez la région AWS dans laquelle se trouve votre bucket S3.
- ID de clé d'accès et clé d'accès secrète:indiquez les identifiants que vous avez générés.
- Format de journal:sélectionnez le format de journal approprié (par exemple, JSON).
- Fréquence de diffusion:sélectionnez la fréquence appropriée pour la diffusion des journaux (par exemple, toutes les cinq minutes).
Vérifiez la diffusion des journaux:
- Après avoir configuré LDS, surveillez le bucket S3 pour détecter les fichiers journaux entrants.
Configurer un flux dans Google SecOps pour ingérer les journaux du WAF Akamai
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux du WAF Akamai).
- Sélectionnez Amazon S3 comme Type de source.
- Sélectionnez Akamai WAF comme Type de journal.
- Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants:
- Region (Région) : région dans laquelle se trouve le bucket Amazon S3.
- URI S3: URI du bucket.
s3:/BUCKET_NAME
Remplacez les éléments suivants :BUCKET_NAME
: nom du bucket.
- L'URI est: sélectionnez TYPE D'URI en fonction de la configuration du flux de journaux: Fichier unique | Répertoire | Répertoire incluant des sous-répertoires.
- Options de suppression de la source: sélectionnez l'option de suppression en fonction de vos préférences.
- ID de clé d'accès: clé d'accès utilisateur ayant accès au bucket S3.
- Clé d'accès secrète: clé secrète de l'utilisateur ayant accès au bucket S3.
- Espace de noms des éléments: espace de noms des éléments.
- Libellés d'ingestion: libellé à appliquer aux événements de ce flux.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux dans l'écran Finaliser, puis cliquez sur Envoyer.
Tableau de mappage UDM
Champ de journal (ordre croissant) | Mappage UDM | Logique |
---|---|---|
attackData.clientIP |
principal.ip , principal.asset.ip |
Adresse IP du client à l'origine de la requête. Extrait du champ attackData.clientIP dans les journaux akamai_siem. |
attackData.configId |
metadata.product_log_id |
ID de configuration de sécurité. Extrait du champ attackData.configId dans les journaux akamai_siem. Ajouté également en tant que champ "detection_field" dans l'objet "security_result". |
attackData.policyId |
N/A | Utilisé dans la logique de l'analyseur pour renseigner security_result.summary avec la valeur "PolicyId:[value]". |
attackData.ruleActions |
security_result.action , security_result.action_details |
Actions effectuées en fonction de la règle déclenchée. Extrait du champ attackData.ruleActions dans les journaux akamai_siem. "deny" est mappé sur "BLOCK", les autres valeurs ("alert", "monitor", "allow", "tarpit") sont mappées sur "ALLOW". La valeur d'origine est également stockée dans action_details . |
attackData.ruleData |
security_result.detection_fields |
Données associées à la règle déclenchée. Extrait du champ attackData.ruleData dans les journaux akamai_siem. Ajouté à security_result.detection_fields avec la clé "RuleData". |
attackData.ruleMessages |
security_result.threat_name |
Messages associés à la règle déclenchée. Extrait du champ attackData.ruleMessages dans les journaux akamai_siem. |
attackData.ruleSelectors |
security_result.detection_fields |
Sélecteurs associés à la règle déclenchée. Extrait du champ attackData.ruleSelectors dans les journaux akamai_siem. Ajouté à security_result.detection_fields avec la clé "RuleSelector". |
attackData.ruleTags |
security_result.category_details |
Balises associées à la règle déclenchée. Extrait du champ attackData.ruleTags dans les journaux akamai_siem. |
attackData.ruleVersions |
security_result.detection_fields |
Versions des règles déclenchées. Extrait du champ attackData.ruleVersions dans les journaux akamai_siem. Ajouté à security_result.detection_fields avec la clé "Version de la règle". |
clientReputation |
principal.labels |
Informations sur la réputation du client Extrait du champ clientReputation dans les journaux akamai_siem. Ajouté en tant que libellé au principal avec la clé "réputation". |
cliIP , cli_ip , principal_ip |
principal.ip , principal.asset.ip |
Adresse IP du client. Extrait de cliIP , cli_ip ou principal_ip , selon le format de journal. |
cp |
additional.fields |
Code CP. Extrait du champ cp . Ajouté à additional.fields avec la clé "cp". |
eventId |
metadata.product_log_id |
ID de l'événement. Extrait du champ eventId . |
eventTime , log_date |
metadata.event_timestamp |
Code temporel de l'événement. Extrait de eventTime ou analysé à partir de log_date , selon le format de journal. |
eventType.eventDefinition.eventDefinitionId |
target.resource.product_object_id |
ID de la définition de l'événement. Extrait de eventType.eventDefinition.eventDefinitionId . |
eventType.eventDefinition.eventDescription |
metadata.description |
Description de l'événement. Extrait de eventType.eventDefinition.eventDescription . |
eventType.eventDefinition.eventName |
metadata.product_event_type |
Nom de l'événement. Extrait de eventType.eventDefinition.eventName . |
eventType.eventTypeId |
additional.fields |
ID du type d'événement. Extrait de eventType.eventTypeId . Ajouté à additional.fields avec la clé "eventTypeId". |
eventType.eventTypeName |
additional.fields |
Nom du type d'événement. Extrait de eventType.eventTypeName . Ajouté à additional.fields avec la clé "eventTypeName". |
format |
N/A | Utilisé par l'analyseur pour déterminer le format du journal. |
geo.asn |
principal.location.name |
Numéro de système autonome (ASN) Extrait de geo.asn ou AkamaiSiemASN , selon le format de journal. La valeur est précédée du préfixe "ASN ". |
geo.city |
principal.location.city |
Ville. Extrait de geo.city ou AkamaiSiemCity , selon le format de journal. |
geo.country |
principal.location.country_or_region |
Pays. Extrait de geo.country ou AkamaiSiemContinent , selon le format de journal. |
httpMessage.bytes |
network.sent_bytes |
Octets envoyés dans le message HTTP. Extrait de httpMessage.bytes . |
httpMessage.host |
target.hostname , target.asset.hostname |
Nom d'hôte. Extrait de httpMessage.host ou reqHost , selon le format de journal. |
httpMessage.method |
network.http.method |
Méthode HTTP. Extrait de httpMessage.method , network_http_method ou reqMethod , selon le format de journal. Converti en majuscules. |
httpMessage.path |
target.url |
Chemin de la requête. Extrait de httpMessage.path , target_url ou reqPath , selon le format de journal. Si httpMessage.query est présent, il est ajouté au chemin d'accès avec un séparateur "?". |
httpMessage.port |
target.port |
Port. Extrait de httpMessage.port ou reqPort , selon le format de journal. |
httpMessage.protocol |
N/A | Utilisé par l'analyseur pour déterminer le protocole. |
httpMessage.query |
N/A | Utilisé dans la logique de l'analyseur pour ajouter à httpMessage.path , le cas échéant. |
httpMessage.requestId |
network.session_id |
Numéro de demande. Extrait de httpMessage.requestId ou reqId , selon le format de journal. |
httpMessage.requestHeaders , AkamaiSiemRequestHeaders |
additional.fields |
En-têtes de requête. Extrait de httpMessage.requestHeaders ou AkamaiSiemRequestHeaders , selon le format de journal. Ajouté à additional.fields avec la clé "AkamaiSiemRequestHeaders". |
httpMessage.responseHeaders , AkamaiSiemResponseHeaders |
additional.fields |
En-têtes de réponse. Extrait de httpMessage.responseHeaders ou AkamaiSiemResponseHeaders , selon le format de journal. Ajouté à additional.fields avec la clé "AkamaiSiemResponseHeaders". |
httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code , statusCode |
network.http.response_code |
Code de réponse HTTP. Extrait de httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code ou statusCode , selon le format de journal. |
httpMessage.tls , AkamaiSiemTLSVersion , tlsVersion |
network.tls.version |
Version TLS. Extrait de httpMessage.tls , AkamaiSiemTLSVersion ou tlsVersion , selon le format de journal. |
httpMessage.useragent , network_http_user_agent , UA , useragent |
network.http.user_agent |
User-agent. Extrait de httpMessage.useragent , network_http_user_agent , UA ou useragent , selon le format de journal. |
log_description |
metadata.description |
Description du journal. Extrait de log_description . |
log_rule |
security_result.rule_name |
Règle de journalisation. Extrait de log_rule . |
message |
N/A | Message de journal brut. Utilisé par l'analyseur pour diverses extractions. |
network_http_referral_url |
network.http.referral_url |
URL de provenance HTTP. Extrait de network_http_referral_url . |
proto |
N/A | Utilisé dans la logique de l'analyseur pour renseigner security_result.summary si attackData.policyId n'est pas présent. |
reqHost |
target.hostname , target.asset.hostname |
Demander un hôte. Extrait de reqHost . |
reqId |
metadata.product_log_id , network.session_id |
Numéro de demande. Extrait de reqId . |
reqMethod |
network.http.method |
Méthode de requête. Extrait de reqMethod . |
reqPath |
target.url |
Chemin de la requête. Extrait de reqPath . |
reqPort |
target.port |
Port de requête. Extrait de reqPort . |
rspContentType |
target.file.mime_type |
Type de contenu de la réponse. Extrait de rspContentType . |
securityRules |
security_result.rule_name , security_result.about.resource.attribute.labels |
Règles de sécurité. Extrait de securityRules . La première partie est mappée sur rule_name , et le reste est ajouté en tant que libellés avec les clés "non_deny_rules" et "deny_rule_format". |
statusCode |
network.http.response_code |
Code d'état. Extrait de statusCode . |
state |
principal.location.state , target.user.personal_address.state |
État. Extrait de state . |
tlsVersion |
network.tls.version |
Version TLS. Extrait de tlsVersion . |
type |
metadata.product_event_type |
Type d'événement. Extrait de type . |
UA |
network.http.user_agent |
User-agent. Extrait de UA . |
version |
metadata.product_version , principal.asset.software.version |
Version. Extrait de version . |
N/A | metadata.event_timestamp |
L'horodatage de l'événement est dérivé du champ _ts dans les journaux akamai_lds, du champ httpMessage.start dans les journaux akamai_siem ou du champ log_date dans d'autres formats. |
N/A | metadata.vendor_name |
Code codé en dur sur "Akamai". |
N/A | metadata.product_name |
Code codé en dur sur "Kona". |
N/A | metadata.log_type |
Code codé en dur sur "AKAMAI_WAF". |
N/A | network.application_protocol |
Définissez cette valeur sur "HTTP" pour les journaux akamai_siem et akamai_lds, ou sur "DNS" pour les autres formats. |
N/A | security_result.severity |
Définissez la valeur sur "MOYENNE" pour l'action "alert" (Alerte), sur "CRITIQUE" pour l'action "deny" (Refuser) et sur "ÉLEVÉE" pour les autres actions. |
N/A | event.idm.read_only_udm.metadata.event_type |
Définissez cette valeur sur "NETWORK_HTTP" pour la plupart des formats de journaux, sur "GENERIC_EVENT" pour les événements avec des champs eventId ou eventData , ou sur "STATUS_UPDATE" pour les événements avec des champs cli_ip ou p_ip , mais sans reqHost . |
Modifications
2024-05-21
- Amélioration
- Mappage de "rules.data" sur "security_result.detection_fields".
- Mappage de "rules.action", "rules.selector" et "rules.version" sur "security_result.action_details".
- "rules.id" a été mappé sur "security_result.rule_id",
- Mappage de "rules.tag" sur "security_result.category_details".
- Mappage de "rules.message" sur "security_result.threat_name".
2024-03-01
- Amélioration
- Mappage de "attackData.configId" sur "metadata.product_log_id" et "security_result.detection_fields".
2023-10-27
- Amélioration
- Mappage de "rule.id" sur "security_result.rule_id".
- Lorsque "httpMessage.host" n'est pas présent, la valeur définie dans "metadata.event_type" est passée de "NETWORK_HTTP" à "GENERIC_EVENT".
- Ajout de la possibilité d'analyser "attackData" lorsque "attackData.rules" est un tableau.
2023-04-24
- Amélioration
- Journaux analysés ingérés au format CEF.
2023-04-04
- Amélioration
- Mappage de "reqHost" sur "target.hostname".
- Mappage de "reqPort" sur "target.port".
- Mappage de "reqPath" sur "target.url".
- Mappage de "reqId" sur "network.session_id".
- Mappage de "statusCode" sur "network.http.response_code".
- Mappage de "reqMethod" sur "network.http.method".
- Mappage de "UA" sur "network.http.user_agent".
- Mappage de "octets" sur "network.sent_bytes".
- Mappage de "reqMethod" sur "network.http.method".
- Analyse des journaux d'erreur au format syslog.
- Ajout de vérifications de conditions pour "attackData.rules" afin d'assurer une analyse correcte.
- Dans la mesure du possible, la valeur "metadata.event_type" a été modifiée de "STATUS_UPDATE" à "NETWORK_HTTP".
2022-08-12
- Amélioration
- "security_policy_id" a été mappé sur security_result.rule_name.
- "non_deny_rules" a été mappé sur security_result.about.resource.attribute.labels.
- "deny_rule_format" a été mappé sur security_result.about.resource.attribute.labels.
2022-11-07
- Amélioration
- Mise à jour de SecurityRules pour vérifier ["-"] également dans les données.
2022-06-14
- Amélioration
- Mappage de security_rules sur security_result.rule_name.
- Ville mappée sur principal.location.city.
- Pays mappé sur principal.location.country_or_region.
- Mappage de cli_ip sur principal.ip.
- État mappé sur target.user.personal_address.state.
- Version mappée sur metadata.product_version.
- User-agent mappé sur network.http.user_agent.
2022-06-14
- Enhancement-
- Mappage du proto sur security_result.summary.
- Mappage de securityRules sur security_result.rule_name.
- Ville mappée sur principal.location.city.
- Pays mappé sur principal.location.country_or_region.
- Mappage de cliIP sur principal.ip.
- Mappage du cp sur event.idm.read_only_udm.additional.fields.
- Mise en correspondance de reqId avec metadata.product_log_id.
- Mappage de rspContentType sur target.file.mime_type.
- État mappé sur target.user.personal_address.state.
- Version mappée sur principal.asset.software.version.
2022-03-23
- Correction de bug : correction de l'échec de l'analyse des données avec tous les modèles de correspondance.
- Ajout de mises en correspondance pour les nouveaux champs.
- eventId mappé sur metadata.product_log_id.
- eventDefinitionId mappé sur target.resource.product_object_id.
- eventDescription mappé sur metadata.description.
- eventName mappé sur metadata.product_event_type.
- eventTypeName mappé sur additional.fields.
- eventTypeId mappé sur additional.fields.
- eventData mappé sur additional.fields.