Collecter les journaux McAfee Firewall Enterprise
Ce document explique comment collecter les journaux McAfee Firewall Enterprise. Le code du parseur extrait d'abord les champs à l'aide d'une série de modèles Grok, en gérant les formats SYSLOG et JSON. Ensuite, en fonction de la catégorie de journaux identifiée, il applique des modèles Grok et des extractions de paires clé-valeur spécifiques pour mapper les données dans le schéma UDM de Google Security Operations.
Avant de commencer
- Assurez-vous de disposer d'une instance Google Security Operations.
- Assurez-vous d'utiliser Windows 2016 ou une version ultérieure, ou un hôte Linux avec
systemd
. - Si vous exécutez le programme derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
- Assurez-vous de disposer d'un accès privilégié à McAfee ESM.
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 l'agent 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
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
Ressources d'installation supplémentaires
- Pour plus d'options d'installation, consultez ce guide d'installation.
Configurer l'agent Bindplane pour ingérer les journaux Syslog et les envoyer à Google SecOps
Accédez au fichier de configuration :
- Recherchez le fichier
config.yaml
. En règle générale, il se trouve 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
,vi
ou le Bloc-notes).
- Recherchez le fichier
Modifiez le fichier
config.yaml
comme suit :receivers: udplog: # Replace with your specific IP and port listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Path to the ingestion authentication file creds: '/path/to/your/ingestion-auth.json' # Your Chronicle customer ID customer_id: 'your_customer_id' endpoint: malachiteingestion-pa.googleapis.com ingestion_labels: log_type: SYSLOG namespace: mcafee_esm raw_log_field: body 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.json
en 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émarrer l'agent Bindplane pour appliquer les modifications
Sous Linux, pour redémarrer l'agent Bindplane, exécutez la commande suivante :
sudo systemctl restart bindplane-agent
Sous Windows, pour redémarrer l'agent Bindplane, vous pouvez utiliser la console Services ou saisir la commande suivante :
net stop BindPlaneAgent && net start BindPlaneAgent
Configurer McAfee ESM pour transférer Syslog
- Connectez-vous à la console McAfee ESM.
- Accédez à Propriétés du système > Transfert d'événements.
- Cliquez sur Ajouter pour créer une règle de transfert syslog.
- Configurez les paramètres suivants :
- Nom : saisissez un nom descriptif (par exemple, "Transfert Google SecOps").
- Adresse IP de destination : saisissez l'adresse IP de votre serveur Syslog (ou de l'agent Bindplane).
- Port de destination : utilisez 514 pour UDP (vous pouvez spécifier un autre port, en fonction de la configuration de votre serveur Syslog/Bindplane).
- Protocole : sélectionnez UDP (les autres choix sont TCP ou TLS, selon la configuration de votre serveur Syslog/Bindplane).
- Format : sélectionnez CEF (Common Event Format) ou ASCII (format recommandé pour les journaux McAfee).
- Filtres : définissez les types d'événements que vous souhaitez transférer (par exemple, les journaux de pare-feu, les événements d'authentification ou les détections de menaces).
- Cliquez sur Enregistrer.
- Redémarrez le service McAfee ESM pour que les modifications prennent effet.
Table de mappage UDM
Champ du journal | Mappage UDM | Logique |
---|---|---|
agir | security_result.action_details | La valeur est extraite du champ "act" de la charge utile JSON analysée. |
cat | security_result.category_details | La valeur est extraite du champ "cat" de la charge utile JSON analysée. |
data.AppID | target.application | La valeur est extraite du champ "AppID" de la charge utile JSON analysée. |
data.Destination_Hostname | target.hostname | La valeur est extraite du champ "Destination_Hostname" de la charge utile JSON analysée. |
data.Destination_UserID | target.user.windows_sid | La valeur est extraite du champ "Destination_UserID" de la charge utile JSON analysée. |
data.DomainID | target.administrative_domain | La valeur est extraite du champ "DomainID" de la charge utile JSON analysée. |
data.dst_ip | target.ip | La valeur est extraite du champ "dst_ip" de la charge utile JSON analysée. |
data.dst_mac | target.mac | La valeur est extraite du champ "dst_mac" de la charge utile JSON analysée. |
data.dst_port | target.port | La valeur est extraite du champ "dst_port" de la charge utile JSON analysée et convertie en entier. |
data.HostID | target.hostname | La valeur est extraite du champ "HostID" de la charge utile JSON analysée. |
data.norm_sig.name | Ce champ détermine le type d'événement en fonction de sa valeur. | |
data.PID | target.process.pid | La valeur est extraite du champ "PID" de la charge utile JSON analysée. |
data.Process_Name | target.process.command_line | La valeur est extraite du champ "Process_Name" de la charge utile JSON analysée. |
data.severity | security_result.severity | La valeur est extraite du champ "severity" (gravité) de la charge utile JSON analysée, convertie en entier et mappée à un niveau de gravité UDM en fonction de sa valeur : FAIBLE (1 à 32), MOYENNE (33 à 65) ou ÉLEVÉE (66 à 100). |
data.sig.name | security_result.description | La valeur est extraite du champ "sig.name" de la charge utile JSON analysée. |
data.Source_Logon_ID | about.labels.value | La valeur est extraite du champ "Source_Logon_ID" de la charge utile JSON analysée. |
data.Source_UserID | principal.user.windows_sid | La valeur est extraite du champ "Source_UserID" de la charge utile JSON analysée. |
data.src_ip | principal.ip | La valeur est extraite du champ "src_ip" de la charge utile JSON analysée. |
data.src_mac | principal.mac | La valeur est extraite du champ "src_mac" de la charge utile JSON analysée. |
data.src_port | principal.port | La valeur est extraite du champ "src_port" de la charge utile JSON analysée et convertie en entier. |
data.UserIDDst | target.user.userid | La valeur est extraite du champ "UserIDDst" de la charge utile JSON analysée. |
data.UserIDSrc | principal.user.userid | La valeur est extraite du champ "UserIDSrc" de la charge utile JSON analysée. |
deviceExternalId | about.asset.asset_id | La valeur est extraite du champ "deviceExternalId" de la charge utile JSON analysée et combinée au nom du produit pour créer un ID de ressource unique. |
deviceTranslatedAddress | about.nat_ip | La valeur est extraite du champ "deviceTranslatedAddress" de la charge utile JSON analysée. |
dst | target.ip | La valeur est extraite du champ "dst" de la charge utile JSON analysée. |
dpt | target.port | La valeur est extraite du champ "dpt" de la charge utile JSON analysée et convertie en entier. |
eventId | additional.fields.value.string_value | La valeur est extraite du champ "eventId" de la charge utile JSON analysée. |
externalId | metadata.product_log_id | La valeur est extraite du champ "externalId" de la charge utile JSON analysée. |
nom d'hôte | principal.hostname | La valeur est extraite du champ "hostname" par le modèle grok. |
log_category | metadata.log_type | La valeur est extraite du champ "log_category" par le modèle grok. |
log_type | metadata.product_event_type | La valeur est extraite du champ "log_type" par le modèle Grok. |
message | Ce champ est analysé pour extraire différents champs en fonction de la catégorie de journal. | |
nitroURL | Ce champ n'est pas mappé à l'objet IDM dans l'UDM. | |
pid | principal.process.pid | La valeur est extraite du champ "pid" par le modèle grok. |
process_id | about.process.pid | La valeur est extraite du champ "process_id" par le modèle Grok. |
proto | network.ip_protocol | La valeur est extraite du champ "proto" de la charge utile JSON analysée et mappée au protocole IP correspondant. |
rhost | principal.ip | La valeur est extraite du champ "rhost" par le modèle grok et analysée en tant qu'adresse IP. |
shost | principal.hostname | La valeur est extraite du champ "shost" de la charge utile JSON analysée. |
sntdom | principal.administrative_domain | La valeur est extraite du champ "sntdom" de la charge utile JSON analysée. |
spt | principal.port | La valeur est extraite du champ "spt" de la charge utile JSON analysée et convertie en entier. |
src | principal.ip | La valeur est extraite du champ "src" de la charge utile JSON analysée. |
temps | timestamp | La valeur est extraite du champ "time" par le modèle Grok et analysée en tant que code temporel. |
type | metadata.product_event_type | La valeur est extraite du champ "type" par le filtre kv. |
uid | principal.user.userid | La valeur est extraite du champ "uid" par le filtre kv. |
metadata.event_type | metadata.event_type | La valeur est définie en fonction du nom de l'événement et d'autres champs du journal. La logique de détermination du type d'événement est la suivante : - Si le nom de l'événement contient "TCP", le type d'événement est défini sur "NETWORK_CONNECTION". - Si le nom de l'événement contient "Mail", le type d'événement est défini sur "EMAIL_TRANSACTION". - Si le nom de l'événement contient "HTTP" ou "http", le type d'événement est défini sur "NETWORK_HTTP". Si le nom de l'événement contient "User Accessed" (Utilisateur a accédé) ou "denied by access-list" (refusé par la liste d'accès), le type d'événement est défini sur "USER_RESOURCE_ACCESS". Si le nom de l'événement contient "Data Source Idle" (Source de données inactive), le type d'événement est défini sur "STATUS_UPDATE" (Mise à jour de l'état). - Si le nom de l'événement contient "Comm with snowflex", le type d'événement est défini sur "SERVICE_UNSPECIFIED". - Si le nom de l'événement contient "An account was successfully logged on" (Un compte a été connecté), le type d'événement est défini sur "USER_LOGIN" (CONNEXION_UTILISATEUR). - Si le nom de l'événement contient "Initialization status for service objects" (État d'initialisation des objets de service), le type d'événement est défini sur "GENERIC_EVENT". - Si aucune des conditions ci-dessus n'est remplie, le type d'événement est défini sur "GENERIC_EVENT". |
metadata.vendor_name | metadata.vendor_name | La valeur est définie sur "MCAFEE". |
network.direction | network.direction | La valeur est définie sur "INBOUND" si le champ "deviceDirection" de la charge utile JSON analysée est défini sur 0. Sinon, la valeur est définie sur "OUTBOUND". |
security_result.severity | security_result.severity | La valeur est définie sur "LOW" (FAIBLE) si le champ "cef_event_severity" de la charge utile JSON analysée est défini sur 1, sur "MEDIUM" (MOYENNE) s'il est défini sur 2, sur "HIGH" (ÉLEVÉE) s'il est défini sur 3 et sur "CRITICAL" (CRITIQUE) s'il est défini sur 9. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.