Collecter les journaux CEF Imperva
Ce document explique comment ingérer des journaux CEF Imperva dans Google Security Operations à l'aide de Bindplane. L'analyseur extrait les journaux au format CEF des messages syslog et les convertit au format UDM. Il gère différents formats de journaux, extrait les paires clé/valeur de la charge utile, effectue des transformations et des enrichissements de données, et mappe les champs extraits aux champs UDM correspondants, y compris les informations sur le réseau, les détails sur les utilisateurs, la géolocalisation et les résultats de sécurité.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Un hôte Windows 2016 ou version ultérieure, ou Linux avec
systemd - Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
- Accès privilégié à la console de gestion ou à l'appliance Imperva
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- Téléchargez le fichier d'authentification d'ingestion. Enregistrez le fichier de manière sécurisée sur le système sur lequel Bindplane sera installé.
Obtenir l'ID client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
- Copiez et enregistrez le numéro client de la section Informations sur l'organisation.
Installer l'agent Bindplane
Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.
Installation de fenêtres
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installation de Linux
- Ouvrez un terminal avec les droits root ou sudo.
Exécutez la commande suivante :
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Autres ressources d'installation
- Pour plus d'options d'installation, consultez ce guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
Accédez au fichier de configuration :
- Recherchez le fichier
config.yaml. Il se trouve généralement dans le répertoire/etc/bindplane-agent/sous Linux ou dans le répertoire d'installation sous Windows. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano,viou le Bloc-notes).
- Recherchez le fichier
Modifiez le fichier
config.yamlcomme suit :receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <CUSTOMER_ID> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'IMPERVA_CEF' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels- Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.
- Remplacez
<customer_id>par le numéro client réel. - Mettez à jour
/path/to/ingestion-authentication-file.jsonen indiquant le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.
Redémarrez l'agent Bindplane pour appliquer les modifications.
Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :
sudo systemctl restart bindplane-agentPour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :
net stop BindPlaneAgent && net start BindPlaneAgent
Configurer la passerelle Imperva WAF (SecureSphere) pour envoyer le format CEF via syslog
Dans la console MX, créez un ensemble d'actions :
- Accédez à Règles> Ensembles d'actions.
- Cliquez sur Nouveau et nommez-le (par exemple,
Google SecOps CEF).
Ajoutez l'interface d'action CEF syslog :
- Dans Interfaces d'action disponibles, ouvrez Journal système et ajoutez une ou plusieurs des options suivantes (si nécessaire) :
- Consigner un événement de sécurité dans le journal système (syslog) à l'aide de la norme CEF
- Consigner un événement de sécurité réseau dans le journal système (syslog) à l'aide de la norme CEF
- Enregistrer un événement système dans le journal système (syslog) à l'aide de la norme CEF
- Enregistrer un événement de sécurité personnalisé dans le journal système (syslog) à l'aide de la norme CEF
- Dans Interfaces d'action disponibles, ouvrez Journal système et ajoutez une ou plusieurs des options suivantes (si nécessaire) :
Configurez les paramètres de l'interface Actions :
- Hôte Syslog : saisissez l'adresse IP de votre agent Bindplane. Pour utiliser un port autre que celui par défaut, ajoutez
:PORT(la valeur par défaut est 514 si vous n'en spécifiez pas). Exemple :10.0.0.10:514. - Établissement / Niveau de journalisation : définissez-les en fonction des exigences de votre règlement.
- Message : conservez les valeurs par défaut du fournisseur pour CEF, sauf si vous disposez d'un mappage personnalisé.
- Hôte Syslog : saisissez l'adresse IP de votre agent Bindplane. Pour utiliser un port autre que celui par défaut, ajoutez
Associez l'ensemble d'actions aux règles :
- Pour les événements Sécurité / Sécurité réseau : ouvrez les règles concernées et définissez Action suivie sur votre ensemble d'actions.
- Pour les événements système : créez ou vérifiez une règle Événements système et définissez Action suivie sur votre ensemble d'actions afin que ces événements soient également envoyés via CEF.
Facultatif : Configurez des cibles spécifiques à la passerelle :
- Si différents groupes de passerelles doivent envoyer des données à différents serveurs Syslog, configurez chaque groupe de passerelles> Enregistreur externe et activez Utiliser la configuration de la passerelle si elle existe dans la règle.
Table de mappage UDM
| Champ de journal | Mappage UDM | Logique |
|---|---|---|
act |
security_result.action |
Dérivé. Si act est défini sur "allowed" (autorisé), "alert" (alerte), commence par "REQ_PASSED" ou commence par "REQ_CACHED", alors action est défini sur "ALLOW" (AUTORISER). Si act est défini sur "deny" ou "blocked", ou commence par "REQ_BLOCKED" ou "REQ_CHALLENGE", alors action est défini sur "BLOCK". Si act correspond à l'expression régulière (?i)REQ_BAD, action est défini sur "FAIL". Sinon, action est défini sur "UNKNOWN_ACTION". security_result.action est ensuite défini sur la valeur de action. |
act |
security_result.action_details |
Dérivé. Une description détaillée est générée en fonction de la valeur de act. Exemples : "REQ_CACHED_FRESH : la réponse a été renvoyée à partir du cache du centre de données", "REQ_BLOCKED : la requête a été bloquée". |
app |
network.application_protocol |
Mappé directement après avoir été converti en majuscules. |
cs1 |
security_result.detection_fields.value |
Mappé de manière conditionnelle si cs1 n'est pas vide ou n'est pas défini sur "NA". security_result.detection_fields.key est défini sur la valeur de cs1Label. |
cs1Label |
security_result.detection_fields.key |
Mappé de manière conditionnelle si cs1 n'est pas vide ou n'est pas défini sur "NA". security_result.detection_fields.value est défini sur la valeur de cs1. |
cs2 |
security_result.detection_fields.value |
Mappé de manière conditionnelle s'il n'est pas vide. security_result.detection_fields.key est défini sur la valeur de cs2Label. |
cs2Label |
security_result.detection_fields.key |
Mappé de manière conditionnelle si cs2 n'est pas vide. security_result.detection_fields.value est défini sur la valeur de cs2. |
cs3 |
security_result.detection_fields.value |
Mappé de manière conditionnelle s'il n'est pas vide ou si sa valeur n'est pas "-". security_result.detection_fields.key est défini sur la valeur de cs3Label. |
cs3Label |
security_result.detection_fields.key |
Mappé de manière conditionnelle si cs3 n'est pas vide ou n'est pas "-". security_result.detection_fields.value est défini sur la valeur de cs3. |
cs4 |
security_result.detection_fields.value |
Mappé de manière conditionnelle s'il n'est pas vide. security_result.detection_fields.key est défini sur la valeur de cs4Label. |
cs4Label |
security_result.detection_fields.key |
Mappé de manière conditionnelle si cs4 n'est pas vide. security_result.detection_fields.value est défini sur la valeur de cs4. |
cs5 |
security_result.detection_fields.value |
Mappé de manière conditionnelle s'il n'est pas vide. security_result.detection_fields.key est défini sur la valeur de cs5Label. |
cs5Label |
security_result.detection_fields.key |
Mappé de manière conditionnelle si cs5 n'est pas vide. security_result.detection_fields.value est défini sur la valeur de cs5. |
cs6 |
security_result.detection_fields.value |
Mappé de manière conditionnelle s'il n'est pas vide. security_result.detection_fields.key est défini sur la valeur de cs6Label. |
cs6Label |
security_result.detection_fields.key |
Mappé de manière conditionnelle si cs6 n'est pas vide. security_result.detection_fields.value est défini sur la valeur de cs6. |
cs7 |
principal.location.region_latitude |
Mappé de manière conditionnelle si cs7Label est "latitude". |
cs8 |
principal.location.region_longitude |
Mappé de manière conditionnelle si cs8Label est "longitude". |
cn1 |
security_result.detection_fields.value |
Mappé de manière conditionnelle s'il n'est pas vide et si cn1Label n'est pas vide. security_result.detection_fields.key est défini sur la valeur de cn1Label. |
cn1Label |
security_result.detection_fields.key |
Mappé de manière conditionnelle si cn1 et cn1Label ne sont pas vides. security_result.detection_fields.value est défini sur la valeur de cn1. |
fileType |
security_result.detection_fields.value |
Mappé de manière conditionnelle s'il n'est pas vide. security_result.detection_fields.key est défini sur "fileType". |
filePermission |
security_result.detection_fields.value |
Mappé de manière conditionnelle s'il n'est pas vide. security_result.detection_fields.key est défini sur "filePermission". |
request |
target.url |
Mappé directement. |
requestClientApplication |
network.http.user_agent |
Mappé de manière conditionnelle s'il n'est pas vide. Remplace la valeur mappée à partir du champ user_agent extrait des paires clé/valeur requestContext ou requestClientApplication dans la charge utile CEF. |
requestMethod |
network.http.method |
Mappé directement. |
siteid |
security_result.detection_fields.value |
Mappé de manière conditionnelle s'il n'est pas vide. security_result.detection_fields.key est défini sur "siteid". |
sourceServiceName |
target.hostname |
Mappé directement. Remplace la valeur de dhost si elle est présente. |
src |
principal.ip |
Mappé directement. |
start |
metadata.event_timestamp.seconds |
Extrait à l'aide d'un modèle Grok et converti en code temporel. Utilisé comme solution de remplacement pour deviceReceiptTime s'il n'est pas présent. Si deviceReceiptTime et start sont vides, l'horodatage du journal est utilisé. |
suid |
principal.user.userid |
Mappé de manière conditionnelle s'il n'est pas vide. |
| N/A | metadata.event_type |
Codé en dur sur "NETWORK_HTTP". |
| N/A | metadata.log_type |
Directement mappé à partir du champ log_type de premier niveau. |
| N/A | metadata.product_event_type |
Mappé à partir de csv.event_id s'il n'est pas vide. |
| N/A | metadata.product_name |
Codé en dur sur "Pare-feu d'application Web". |
| N/A | metadata.vendor_name |
Codé en dur sur "Imperva". |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.