Collecter les journaux McAfee Firewall Enterprise
Ce document explique comment collecter les journaux McAfee Firewall Enterprise. Le code de l'analyseur extrait d'abord les champs à l'aide d'une série de modèles Grok, en traitant 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 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 l'application 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 BindPlane sera installé.
Obtenir le numéro client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Profil.
- Copiez et sauvegardez l'ID client dans la section Détails de l'organisation.
Installer l'agent BindPlane
Installation de Windows
- Ouvrez l'invite de commande 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 des 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
. 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 (
nano
,vi
ou Bloc-notes, par exemple).
- 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 dans votre infrastructure si nécessaire.
Remplacez
<customer_id>
par le numéro client réel.Remplacez
/path/to/ingestion-authentication-file.json
par le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification d'ingestion Google SecOps.
Redémarrez 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 les journaux syslog
- Connectez-vous à la console McAfee ESM.
- Accédez à Propriétés 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 votre 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 options sont TCP ou TLS, en fonction de la configuration de votre serveur Syslog/Bindplane).
- Format: choisissez 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 du 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.
Tableau 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" de la charge utile JSON analysée, convertie en entier et mappée sur un niveau de gravité UDM en fonction de sa valeur: LOW (1 à 32), MEDIUM (33 à 65) ou HIGH (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 d'élément 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 format grok. |
log_category | metadata.log_type | La valeur est extraite du champ "log_category" par le format grok. |
log_type | metadata.product_event_type | La valeur est extraite du champ "log_type" par le format 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 le 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" extrait par le format grok. |
proto | network.ip_protocol | La valeur est extraite du champ "proto" de la charge utile JSON analysée et mappée sur le protocole IP correspondant. |
rhost | principal.ip | La valeur est extraite du champ "rhost" par le format 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 format 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" (Accès de l'utilisateur) 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 "Source de données inactive", le type d'événement est défini sur "STATUS_UPDATE". - 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 "Un compte a été connecté", le type d'événement est défini sur "USER_LOGIN". - Si le nom de l'événement contient "É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 égal à 0. Sinon, elle est définie sur "OUTBOUND". |
security_result.severity | security_result.severity | La valeur est définie sur "LOW" si le champ "cef_event_severity" de la charge utile JSON analysée est égal à 1, sur "MEDIUM" si elle est égale à 2, sur "HIGH" si elle est égale à 3 et sur "CRITICAL" si elle est égale à 9. |
Modifications
2024-03-21
- Analyseur nouvellement créé.