Collecter les journaux Cisco Email Security
Ce document explique comment ingérer des journaux Cisco Email Security dans Google Security Operations à l'aide de Bindplane.
L'analyseur extrait les champs des journaux au format syslog, clé-valeur et JSON de Cisco Email Security Appliance. Il utilise grok et/ou kv pour analyser le message du journal, puis mappe ces valeurs au modèle de données unifié (UDM). Il définit également les valeurs de métadonnées par défaut pour la source et le type d'événement.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Windows Server 2016 ou version ultérieure, ou hôte 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é à l'interface Web de l'appliance Cisco Email Security
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" /quietAttendez la fin de l'installation.
Vérifiez l'installation en exécutant la commande suivante :
sc query observiq-otel-collector
Le service doit être indiqué comme RUNNING (EN COURS D'EXÉCUTION).
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.shAttendez la fin de l'installation.
Vérifiez l'installation en exécutant la commande suivante :
sudo systemctl status observiq-otel-collector
Le service doit être indiqué comme actif (en cours d'exécution).
Autres ressources d'installation
Pour obtenir d'autres options d'installation et de dépannage, consultez le guide d'installation de l'agent Bindplane.
Configurer l'agent Bindplane pour ingérer les journaux syslog et les envoyer à Google SecOps
Localiser le fichier de configuration
Linux :
sudo nano /etc/bindplane-agent/config.yamlWindows :
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifiez le fichier de configuration
Remplacez l'intégralité du contenu de
config.yamlpar la configuration suivante :receivers: tcplog: listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'CISCO_EMAIL_SECURITY' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Paramètres de configuration
Remplacez les espaces réservés suivants :
Configuration du récepteur :
tcplog: utilisezudplogpour syslog UDP outcplogpour syslog TCP.0.0.0.0: adresse IP à écouter (0.0.0.0pour écouter sur toutes les interfaces)514: numéro de port à écouter (port syslog standard)
Configuration de l'exportateur :
creds_file_path: chemin d'accès complet au fichier d'authentification de l'ingestion :- Linux :
/etc/bindplane-agent/ingestion-auth.json - Windows :
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux :
YOUR_CUSTOMER_ID: ID client de la section "Obtenir l'ID client"endpoint: URL du point de terminaison régional :- États-Unis :
malachiteingestion-pa.googleapis.com - Europe :
europe-malachiteingestion-pa.googleapis.com - Asie :
asia-southeast1-malachiteingestion-pa.googleapis.com - Pour obtenir la liste complète, consultez Points de terminaison régionaux.
- États-Unis :
log_type: type de journal tel qu'il apparaît dans Chronicle (CISCO_EMAIL_SECURITY)
Enregistrez le fichier de configuration.
- Après avoir modifié le fichier, enregistrez-le :
- Linux : appuyez sur
Ctrl+O, puis surEnter, puis surCtrl+X. - Windows : cliquez sur Fichier > Enregistrer.
- Linux : appuyez sur
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 observiq-otel-collectorVérifiez que le service est en cours d'exécution :
sudo systemctl status observiq-otel-collectorRecherchez les erreurs dans les journaux :
sudo journalctl -u observiq-otel-collector -f
Pour redémarrer l'agent Bindplane dans Windows, choisissez l'une des options suivantes :
Invite de commandes ou PowerShell en tant qu'administrateur :
net stop observiq-otel-collector && net start observiq-otel-collectorConsole Services :
- Appuyez sur
Win+R, saisissezservices.msc, puis appuyez sur Entrée. - Localisez observIQ OpenTelemetry Collector.
Effectuez un clic droit, puis sélectionnez Redémarrer.
Vérifiez que le service est en cours d'exécution :
sc query observiq-otel-collectorRecherchez les erreurs dans les journaux :
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Appuyez sur
Configurer le transfert Syslog sur Cisco Email Security Appliance
- Connectez-vous à l'interface Web de Cisco Email Security Appliance.
- Accédez à Administration du système > Abonnements aux journaux.
- Cliquez sur Ajouter un abonnement au journal.
- Fournissez les informations de configuration suivantes :
- Type de journal : sélectionnez le type de journal à transférer (par exemple, Journaux d'événements consolidés, Journaux de messagerie ou Journaux de messagerie texte).
- Nom : saisissez un nom descriptif (par exemple,
Google-SecOps-Syslog). - Méthode de récupération : sélectionnez Syslog Push.
- Nom d'hôte : saisissez l'adresse IP de l'hôte de l'agent Bindplane.
- Protocole : sélectionnez TCP.
- Port : saisissez
514. - Établissement : sélectionnez LOG_MAIL (ou l'établissement de votre choix).
- Cliquez sur Envoyer.
- Répétez les étapes 3 à 5 pour chaque type de journal supplémentaire à transférer. Types de journaux recommandés :
- Journaux d'événements consolidés
- Journaux des messages
- Journaux antispam
- Journaux antivirus
- Journaux du moteur AMP
- Journaux du filtre de contenu
- Cliquez sur Valider les modifications pour appliquer la configuration.
- Vérifiez que les messages syslog sont envoyés en consultant les journaux de l'agent Bindplane.
Table de mappage UDM
| Champ du journal | Mappage UDM | Logique |
|---|---|---|
| acl_decision_tag | read_only_udm.security_result.detection_fields.value | Directement mappé s'il n'est pas vide, "-" ou "NONE". La clé est "ACL Decision Tag". |
| access_or_decryption_policy_group | read_only_udm.security_result.detection_fields.value | Directement mappé s'il n'est pas vide, "-" ou "NONE". La clé est "AccessOrDecryptionPolicyGroup". |
| agir | read_only_udm.security_result.action_details | Mappé directement. |
| authenticated_user | read_only_udm.principal.user.userid | Directement mappé s'il n'est pas vide, "-" ou "NONE". |
| cache_hierarchy_retrieval | read_only_udm.security_result.detection_fields.value | Directement mappé s'il n'est pas vide, "-" ou "NONE". La clé est "Cache Hierarchy Retrieval". |
| chiffrement | read_only_udm.network.tls.cipher | Mappé directement. |
| pays | read_only_udm.principal.location.country_or_region | Mappé directement. |
| data_security_policy_group | read_only_udm.security_result.detection_fields.value | Directement mappé s'il n'est pas vide, "-" ou "NONE". La clé est "DataSecurityPolicyGroup". |
| description | read_only_udm.metadata.description | Mappé directement pour les messages syslog. Pour les messages CEF, il s'agit de la description générale du produit. Différents modèles Grok extraient des descriptions spécifiques en fonction de l'événement produit. Certaines descriptions sont modifiées par gsub pour supprimer les espaces et les deux-points en début et en fin de ligne. |
| deviceDirection | read_only_udm.network.direction | Si la valeur est "0", elle correspond à "INBOUND". Si la valeur est "1", la valeur correspondante est "OUTBOUND". Permet de déterminer le protocole et le chiffrement TLS à mapper directement et ceux à mapper en tant qu'étiquettes. |
| deviceExternalId | read_only_udm.principal.asset.asset_id | Mappé en tant que "ID de l'appareil". |
| domaine | read_only_udm.target.administrative_domain | Mappé directement à partir des journaux JSON. |
| domain_age | read_only_udm.security_result.about.labels.value | Mappé directement. La clé est "YoungestDomainAge". |
| duser | read_only_udm.target.user.email_addresses, read_only_udm.network.email.to | S'il contient ";", divisez-le en plusieurs adresses e-mail et mappez chacune d'elles aux deux champs UDM. Sinon, mappez directement les deux champs UDM si l'adresse e-mail est valide. Également utilisé pour remplir network_to s'il est vide. |
| dvc | read_only_udm.target.ip | Mappé directement. |
| entries.collection_time.nanos, entries.collection_time.seconds | read_only_udm.metadata.event_timestamp.nanos, read_only_udm.metadata.event_timestamp.seconds | Utilisé pour construire le code temporel de l'événement. |
| env-from | read_only_udm.additional.fields.value.string_value | Mappé directement. La clé est "Env-From". |
| ESAAttachmentDetails | read_only_udm.security_result.about.file.full_path, read_only_udm.security_result.about.file.sha256 | Analysé pour extraire les noms de fichiers et les hachages SHA256. Plusieurs fichiers et hachages peuvent être extraits. |
| ESADCID | read_only_udm.security_result.about.labels.value | Mappé directement. La clé est "ESADCID". |
| ESAFriendlyFrom | read_only_udm.principal.user.user_display_name, read_only_udm.network.email.from | Analysé pour extraire le nom à afficher et l'adresse e-mail. |
| ESAHeloDomain | read_only_udm.intermediary.administrative_domain | Mappé directement. |
| ESAHeloIP | read_only_udm.intermediary.ip | Mappé directement. |
| ESAICID | read_only_udm.security_result.about.labels.value | Mappé directement. La clé est "ESAICID". |
| ESAMailFlowPolicy | read_only_udm.security_result.rule_name | Mappé directement. |
| ESAMID | read_only_udm.security_result.about.labels.value | Mappé directement. La clé est "ESAMID". |
| ESAReplyTo | read_only_udm.network.email.reply_to | Mappé directement s'il s'agit d'une adresse e-mail valide. Sert également à renseigner network_to. |
| ESASDRDomainAge | read_only_udm.security_result.about.labels.value | Mappé directement. La clé est "ESASDRDomainAge". |
| ESASenderGroup | read_only_udm.principal.group.group_display_name | Mappé directement. |
| ESAStatus | read_only_udm.security_result.about.labels.value | Mappé directement. La clé est "ESAStatus". |
| ESATLSInCipher | read_only_udm.network.tls.cipher ou read_only_udm.security_result.about.labels.value | Mappé directement au chiffrement si deviceDirection est défini sur "0". Dans le cas contraire, elle est mappée en tant que libellé avec la clé "ESATLSInCipher". |
| ESATLSInProtocol | read_only_udm.network.tls.version ou read_only_udm.security_result.about.labels.value | La version TLS est extraite et mappée directement si deviceDirection est défini sur "0". Dans le cas contraire, elle est mappée en tant que libellé avec la clé "ESATLSInProtocol". |
| ESATLSOutCipher | read_only_udm.network.tls.cipher ou read_only_udm.security_result.about.labels.value | Mappé directement au chiffrement si deviceDirection est défini sur "1". Dans le cas contraire, elle est mappée en tant que libellé avec la clé "ESATLSOutCipher". |
| ESATLSOutProtocol | read_only_udm.network.tls.version ou read_only_udm.security_result.about.labels.value | La version TLS est extraite et mappée directement si deviceDirection est défini sur "1". Dans le cas contraire, elle est mappée en tant que libellé avec la clé "ESATLSOutProtocol". |
| ESAURLDetails | read_only_udm.target.url | L'URL est analysée pour être extraite. Seule la première URL est mappée, car le champ n'est pas répété. |
| external_dlp_policy_group | read_only_udm.security_result.detection_fields.value | Directement mappé s'il n'est pas vide, "-" ou "NONE". La clé est "ExternalDlpPolicyGroup". |
| ExternalMsgID | read_only_udm.security_result.about.labels.value | Mappé directement après la suppression des guillemets simples et des chevrons. La clé est "ExternalMsgID". |
| de | read_only_udm.network.email.from | Mappé directement s'il s'agit d'une adresse e-mail valide. Sert également à renseigner network_from. |
| host.hostname | read_only_udm.principal.hostname ou read_only_udm.intermediary.hostname | Mappé au nom d'hôte principal si le champ "hôte" n'est pas valide. Également mappé au nom d'hôte intermédiaire. |
| host.ip | read_only_udm.principal.ip ou read_only_udm.intermediary.ip | Mappé à l'adresse IP principale si le champ "ip" n'est pas défini dans les journaux JSON. Également mappé à l'adresse IP intermédiaire. |
| nom d'hôte | read_only_udm.target.hostname | Mappé directement. |
| http_method | read_only_udm.network.http.method | Mappé directement. |
| http_response_code | read_only_udm.network.http.response_code | Mappé directement et converti en entier. |
| identity_policy_group | read_only_udm.security_result.detection_fields.value | Directement mappé s'il n'est pas vide, "-" ou "NONE". La clé est "IdentityPolicyGroup". |
| ip | read_only_udm.principal.ip | Mappé directement. Remplacé par source_ip, le cas échéant. |
| kv_msg | Diverses | Analysé à l'aide du filtre kv. Le prétraitement consiste à remplacer les espaces avant les clés par "#" et à inverser les valeurs csLabel. |
| log_type | read_only_udm.metadata.log_type | Codé en dur sur "CISCO_EMAIL_SECURITY". |
| loglevel | read_only_udm.security_result.severity, read_only_udm.security_result.action | Utilisé pour déterminer la gravité et l'action. "Info", "", "Debug" et "Trace" correspondent à "INFORMATIONAL" et "ALLOW". "Avertissement" correspond à "MEDIUM" et "ALLOW". "High" correspond à "HIGH" et "BLOCK". "Critique" et "Alerte" correspondent à "CRITICAL" et "BLOCK". |
| mail_id | read_only_udm.network.email.mail_id | Mappé directement à partir des journaux JSON. |
| mailto | read_only_udm.target.user.email_addresses, read_only_udm.network.email.to | Mappé directement aux deux champs UDM s'il s'agit d'une adresse e-mail valide. |
| MailPolicy | read_only_udm.security_result.about.labels.value | Mappé directement. La clé est "MailPolicy". |
| message | Diverses | Analysé au format JSON si possible. Sinon, il est traité comme un message syslog. |
| message_id | read_only_udm.network.email.mail_id | Mappé directement. Également utilisé pour remplir network_data. |
| Message | read_only_udm.network.email.subject | Mappé directement après le décodage UTF-8 et la suppression des retours chariot, des sauts de ligne et des guillemets supplémentaires. Également utilisé pour remplir network_data. |
| msg1 | Diverses | Analysé à l'aide du filtre kv. Utilisé pour extraire le nom d'hôte, helo, env-from et reply-to. |
| outbound_malware_scanning_policy_group | read_only_udm.security_result.detection_fields.value | Directement mappé s'il n'est pas vide, "-" ou "NONE". La clé est "DataSecurityPolicyGroup". |
| port | read_only_udm.target.port | Mappé directement et converti en entier. |
| principalMail | read_only_udm.principal.user.email_addresses | Mappé directement. |
| principalUrl | read_only_udm.principal.url | Mappé directement. |
| product_event | read_only_udm.metadata.product_event_type | Mappé directement. Permet de déterminer les modèles grok à appliquer. Les caractères "%" en début de chaîne sont supprimés. "amp" est remplacé par "SIEM_AMPenginelogs". |
| product_version | read_only_udm.metadata.product_version | Mappé directement. |
| protocol | read_only_udm.network.tls.version | Mappé directement. |
| received_bytes | read_only_udm.network.received_bytes | Mappé directement et converti en entier non signé. |
| adresse-réponse | read_only_udm.additional.fields.value.string_value | Mappé directement. La clé est "Reply-To". |
| réputation | read_only_udm.security_result.confidence_details | Mappé directement. |
| request_method_uri | read_only_udm.target.url | Mappé directement. |
| result_code | read_only_udm.security_result.detection_fields.value | Mappé directement. La clé est "Code de résultat". |
| routing_policy_group | read_only_udm.security_result.detection_fields.value | Directement mappé s'il n'est pas vide, "-" ou "NONE". La clé est "RoutingPolicyGroup". |
| règle | read_only_udm.security_result.detection_fields.value | Mappé directement. La clé est "Matched Condition". |
| SDRThreatCategory | read_only_udm.security_result.threat_name | Directement mappé s'il n'est pas vide ou si la valeur est "N/A". |
| SenderCountry | read_only_udm.principal.location.country_or_region | Mappé directement. |
| senderGroup | read_only_udm.principal.group.group_display_name | Mappé directement. |
| security_description | read_only_udm.security_result.description | Mappé directement. |
| security_email | read_only_udm.security_result.about.email ou read_only_udm.principal.hostname | Mappé à l'adresse e-mail si elle est valide. Sinon, mappé au nom d'hôte après extraction avec grok. |
| source | read_only_udm.network.ip_protocol | Si la valeur contient "tcp", elle est associée à "TCP". |
| sourceAddress | read_only_udm.principal.ip | Mappé directement. |
| sourceHostName | read_only_udm.principal.administrative_domain | Mappé directement si la valeur n'est pas "unknown" (inconnu). |
| source_ip | read_only_udm.principal.ip | Mappé directement. Remplace l'adresse IP, le cas échéant. |
| Objet | read_only_udm.network.email.subject | Mappé directement après suppression des points de fin. Également utilisé pour remplir network_data. |
| suser | read_only_udm.principal.user.email_addresses, read_only_udm.network.email.bounce_address | Mappé directement aux deux champs UDM s'il s'agit d'une adresse e-mail valide. |
| target_ip | read_only_udm.target.ip | Mappé directement. |
| à | read_only_udm.network.email.to | Mappé directement s'il s'agit d'une adresse e-mail valide. Sert également à renseigner network_to. |
| total_bytes | read_only_udm.network.sent_bytes | Mappé directement et converti en entier non signé. |
| trackerHeader | read_only_udm.additional.fields.value.string_value | Mappé directement. La clé est "Tracker Header". |
| ts, ts1, year | read_only_udm.metadata.event_timestamp.seconds | Permet de construire l'horodatage de l'événement. ts1 et l'année sont combinés si ts1 est présent. Différents formats sont acceptés, avec ou sans l'année. Si l'année n'est pas indiquée, l'année en cours est utilisée. Codé en dur sur "Cisco". Codé en dur sur "Cisco Email Security". La valeur par défaut est "ALLOW" (AUTORISER). Défini sur "BLOCK" en fonction du niveau de journalisation ou de la description. La valeur par défaut est "INBOUND" si application_protocol est présent. Définissez deviceDirection pour les messages CEF. Déterminé en fonction d'une combinaison de champs, y compris network_from, network_to, target_ip, ip, description, event_type, principal_host, Hostname, user_id et sourceAddress. La valeur par défaut est "GENERIC_EVENT". Définissez sur "SMTP" si application_protocol est "SMTP" ou "smtp", ou si target_ip et ip sont présents. Définissez la valeur sur "AUTHTYPE_UNSPECIFIED" si login_status et user_id sont présents dans les journaux sshd. Défini sur "true" si le niveau de journalisation est "Critical" ou "Alert". |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.