Collecter les journaux VPN Cisco
Ce document explique comment ingérer des journaux VPN Cisco ASA dans Google Security Operations à l'aide de Bindplane. L'analyseur extrait les champs des messages syslog à l'aide de modèles Grok, en gérant à la fois les formats syslog standards et les structures de messages alternatives. Il mappe ensuite les champs extraits au modèle de données unifié (UDM), catégorise les événements en fonction des ID et des informations extraites, et enrichit les données avec des métadonnées telles que le fournisseur, le produit et le type d'événement. L'analyseur gère également des ID d'événement spécifiques, en appliquant des modèles et une logique grok supplémentaires pour extraire les détails pertinents et les mapper aux champs UDM appropriés.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Instance Google SecOps
- Un hôte Windows 2016 ou version ultérieure, ou un hôte Linux avec
systemd
- Si vous exécutez le programme derrière un proxy, les ports du pare-feu sont ouverts.
- Accès privilégié à Cisco ASA
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
Ressources d'installation supplémentaires
Pour plus d'options d'installation, consultez le guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
- Accédez au fichier de configuration :
- Trouvez 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
,vi
ou le Bloc-notes).
- Trouvez le fichier
Modifiez le fichier
config.yaml
comme 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: 'CISCO_VPN' 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.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é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-agent
Pour 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 Syslog pour Cisco ASA VPN
- Ouvrez Cisco ASDM.
- Accédez à Configuration> Fonctionnalités> Propriétés> Journalisation> Configuration de la journalisation.
- Cochez la case Activer la journalisation pour activer syslog.
- Sélectionnez Syslog Servers (Serveurs Syslog) dans Logging (Journalisation), puis cliquez sur Add (Ajouter).
- Dans la fenêtre Ajouter un serveur Syslog, saisissez les informations de configuration suivantes :
- Interface : sélectionnez l'interface pour la communication sortante.
- Adresse IP : saisissez l'adresse IP de l'agent Bindplane.
- Protocole : sélectionnez UDP.
- Port : saisissez le numéro de port de l'agent Bindplane.
- Cliquez sur OK.
- Sélectionnez Filtres de journalisation dans la section Journalisation.
- Sélectionnez Serveurs Syslog, puis cliquez sur Modifier.
- Sélectionnez Informational (Informationnel) dans la liste Filter on severity (Filtrer par gravité).
- Cliquez sur OK.
- Cliquez sur Appliquer.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
accesslist |
target.resource.name |
Extrait de message_info lorsque eventtype est "ASA-4-106103". Représente le nom de la liste d'accès. |
action |
security_result.action |
Dérivé par l'analyseur en fonction des mots clés du message de journal (par exemple, "Refuser", "Rejeter", "Autoriser", "Accepter"). Correspond à ALLOW ou BLOCK. |
action |
security_result.action_details |
Valeur brute de la chaîne de l'action effectuée (par exemple, "permitted", "denied", "disconnected"). |
app_name |
principal.application |
Nom de l'application utilisée par le principal (par exemple, "CLI"). Extrait de message_details pour les ID d'événement 111008, 111009 et 111010. |
assigned_ipv4 |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
assigned_ipv6 |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
bytes_rcv |
network.received_bytes |
Nombre d'octets reçus au cours de la session. Extrait de log_mssg pour l'ID d'événement 113019. |
bytes_sent |
network.sent_bytes |
Nombre d'octets envoyés au cours de la session. Extrait de log_mssg pour l'ID d'événement 113019. |
cipher |
network.tls.cipher |
Algorithme de chiffrement utilisé pour la session SSL. Extrait de message_info pour le type d'événement 725012. |
cisco_message_number |
security_result.rule_name |
Numéro du message Cisco, extrait du champ eventtype . |
cisco_severity |
security_result.severity_details |
Niveau de gravité Cisco brut, extrait du champ eventtype . |
command |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
cumulative_total_count.key |
security_result.outcomes.key |
La clé "cumulative_total_count" est ajoutée au tableau security_result.outcomes . |
cumulative_total_count.value |
security_result.outcomes.value |
Valeur du nombre total cumulé, extraite de message_info . |
current_average_rate.key |
security_result.outcomes.key |
La clé "current_average_rate" est ajoutée au tableau security_result.outcomes . |
current_average_rate.value |
security_result.outcomes.value |
Valeur du taux moyen actuel, extraite de message_info . |
current_burst_rate.key |
security_result.outcomes.key |
La clé "current_burst_rate" est ajoutée au tableau security_result.outcomes . |
current_burst_rate.value |
security_result.outcomes.value |
Valeur du taux de rafale actuel, extraite de message_info . |
desc |
metadata.description |
Description de l'événement, extraite du message du journal. Utilisé lorsqu'aucune description plus spécifique n'est disponible. |
description |
metadata.description |
Description plus détaillée de l'événement, extraite du message du journal, le cas échéant. |
destination_ip |
target.ip , target.asset.ip |
Adresse IP de destination, extraite de différents formats de messages de journaux. |
destination_ip_port |
target.port ou network.application_protocol |
Port de destination, extrait de différents formats de messages de journaux. Si la valeur extraite n'est pas un nombre, elle est traitée comme le protocole d'application. |
dst_email |
target.user.email_addresses ou target.user.userid |
Adresse e-mail ou ID utilisateur de destination, extraits de message_info . Si la valeur correspond à un format d'adresse e-mail, elle est ajoutée à email_addresses . Sinon, elle est utilisée comme userid . |
dst_host |
target.hostname |
Nom d'hôte de destination, extrait de message_info . |
dst_ip |
target.ip , target.asset.ip |
Adresse IP de destination, extraite du modèle grok principal ou d'autres modèles spécifiques. |
dst_port |
target.port |
Port de destination, extrait du modèle grok principal ou d'autres modèles spécifiques. |
duration |
network.session_duration |
Durée de la session, extraite de message_details et convertie en secondes. |
event_date |
@timestamp |
Date et heure de l'événement, construites à partir de différents champs d'horodatage dans le journal brut et analysées à l'aide du filtre date . |
event_id |
metadata.product_event_type (partie de) |
Utilisé en combinaison avec event_severity pour former le champ metadata.product_event_type . |
event_name |
metadata.product_event_type (partie de) |
Utilisé en combinaison avec event_severity et event_type pour former le champ metadata.product_event_type , le cas échéant. |
event_severity |
metadata.product_event_type (partie de), security_result.severity , is_alert , is_significant |
Utilisé en combinaison avec event_id ou event_name et event_type pour former le champ metadata.product_event_type . Également utilisé pour déduire les champs security_result.severity , is_alert et is_significant . |
event_type |
metadata.product_event_type (partie de) |
Utilisé en combinaison avec event_name et event_severity pour former le champ metadata.product_event_type , le cas échéant. |
eventtype |
metadata.product_event_type , security_result.rule_name , security_result.severity_details , security_result.severity |
Chaîne de type d'événement, utilisée pour dériver les champs metadata.product_event_type , security_result.rule_name , security_result.severity_details et security_result.severity . |
fragment_id |
security_result.about.resource.id |
ID du fragment IP, extrait de message_details pour l'ID d'événement 209005. |
group |
principal.group.group_display_name , principal.user.group_identifiers , target.user.group_identifiers |
Nom du groupe, extrait de différents formats de messages de journaux. |
group_name |
principal.group.group_display_name |
Nom du groupe extrait du champ group lorsqu'il s'agit d'un nom d'hôte. |
has_principal_ip |
N/A | Variable interne utilisée pour la logique, non mappée à l'UDM. |
has_target_ip |
N/A | Variable interne utilisée pour la logique, non mappée à l'UDM. |
hostname |
principal.hostname , principal.asset.hostname |
Nom d'hôte du principal, extrait de différents formats de messages de journal. |
hostname2 |
principal.hostname , principal.asset.hostname |
Nom d'hôte du principal, extrait comme solution de repli lorsque hostname n'est pas disponible. |
icmp_code |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
icmp_dst_ip |
target.ip , target.asset.ip |
Adresse IP de destination d'un message d'erreur ICMP. |
icmp_id |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
icmp_src_ip |
principal.ip , principal.asset.ip |
Adresse IP source d'un message d'erreur ICMP. |
icmp_type |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
intermediary_ip |
principal.ip , principal.asset.ip |
Adresse IP intermédiaire extraite de message_info pour l'ID d'événement 111010. |
invalid_ip |
N/A | Variable interne utilisée pour la logique, non mappée à l'UDM. |
ip_1 |
principal.ip , principal.asset.ip |
Adresse IP source extraite en tant que solution de repli lorsque les adresses IP source et de destination sont identiques. |
ip_2 |
target.ip , target.asset.ip |
Adresse IP de destination extraite en tant que solution de secours lorsque les adresses IP source et de destination sont identiques. |
ipprotocol |
network.ip_protocol |
Protocole IP, extrait de différents formats de messages de journaux et converti en majuscules. |
issuer |
network.tls.client.certificate.issuer |
Émetteur du certificat pair, extrait de message_details pour l'ID d'événement 717037. |
local_proxy_ip |
intermediary.ip |
Adresse IP du proxy local, extraite de message_details pour l'ID d'événement 713041. |
log_mssg |
security_result.description , sr.action |
Utilisé pour remplir le champ security_result.description et extraire les actions d'authentification. |
login |
security_result.summary |
État de connexion, extrait de message_info . |
max_configured_rate.key |
security_result.outcomes.key |
La clé "max_configured_rate" est ajoutée au tableau security_result.outcomes . |
max_configured_rate.value |
security_result.outcomes.value |
Valeur du taux maximal configuré, extraite de message_info . |
message_details |
Différents champs | Partie principale du message de journal, contenant des informations sur l'événement. Analysé à l'aide de différents modèles Grok en fonction de l'ID d'événement. |
message_info |
metadata.description |
Permet de remplir le champ metadata.description lorsqu'il est disponible. |
observer |
observer.hostname ou observer.ip |
Nom d'hôte ou adresse IP de l'observateur, extraits du message du journal. |
observer_ip |
observer.ip |
Adresse IP de l'observateur, extraite du champ observer . |
peer_type |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
policy |
target.resource.name |
Nom de la règle, extrait de message_details pour l'ID d'événement 113003. |
policy_name |
target.resource.name |
Nom de la règle, extrait de message_details pour les ID d'événement 113009 et 113011. |
principal_ip |
principal.ip , principal.asset.ip |
Adresse IP principale extraite de message_details pour l'ID d'événement 113009. |
privilege_level_from |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
privilege_level_to |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
process |
principal.process.command_line |
Nom du processus, extrait de message_details pour l'ID d'événement 711004. |
protocol |
network.ip_protocol ou network.application_protocol |
Protocole utilisé dans l'événement, extrait de différents formats de messages de journaux. Si le protocole est un protocole IP standard (ICMP, TCP, UDP, ESP), il est mappé sur network.ip_protocol . Sinon, il est mappé sur network.application_protocol . |
reason |
security_result.description |
Raison de l'événement, extraite de message_details pour l'ID d'événement 113016. |
remote_proxy_ip |
intermediary.ip |
Adresse IP du proxy distant, extraite de message_details pour l'ID d'événement 713041. |
retrieved_file |
target.file.full_path |
Chemin d'accès au fichier récupéré, extrait de message_info . |
security_action |
security_result.action |
Action de sécurité, dérivée par l'analyseur en fonction du contexte de l'événement. |
security_category |
security_result.category |
Catégorie de sécurité, dérivée par l'analyseur en fonction du contexte de l'événement. |
security_result.description |
security_result.description |
Description du résultat de sécurité, extraite ou dérivée du message de journal. |
security_result.severity |
security_result.severity |
Gravité du résultat de sécurité, dérivée du champ event_severity . |
security_result.summary |
security_result.summary |
Résumé du résultat de sécurité, extrait ou dérivé du message du journal. |
sent_bytes |
network.sent_bytes |
Nombre d'octets envoyés, extrait de message_info . |
ses_id |
network.session_id |
ID de session extrait de message_info . |
session_id |
network.session_id |
ID de session extrait de message_info . |
sess_type |
principal.hostname , principal.asset.hostname |
Type de session, extrait de log_mssg et utilisé comme nom d'hôte lorsque hostname n'est pas disponible. |
source_ip |
principal.ip , principal.asset.ip |
Adresse IP source, extraite de différents formats de messages de journaux. |
source_ip_port |
principal.port |
Port source, extrait de différents formats de messages de journaux. |
src_email |
principal.user.email_addresses ou principal.user.userid |
Adresse e-mail ou ID utilisateur source, extraits de message_info . Si la valeur correspond à un format d'adresse e-mail, elle est ajoutée à email_addresses . Sinon, elle est utilisée comme userid . |
src_ip |
principal.ip , principal.asset.ip |
Adresse IP source, extraite du modèle grok principal ou d'autres modèles spécifiques. |
src_port |
principal.port |
Port source, extrait du modèle grok principal ou d'autres modèles spécifiques. |
src_user |
principal.user.user_display_name |
Nom à afficher de l'utilisateur source, extrait de message_details pour les ID d'événement 713049 et 713120. |
subject |
network.tls.client.certificate.subject |
Objet du certificat pair, extrait de message_details pour l'ID d'événement 717037. |
summary |
security_result.summary |
Résumé de l'événement, extrait de message_details pour l'ID d'événement 113016. |
target_host |
target.hostname |
Nom d'hôte cible, extrait de message_details pour l'ID d'événement 113004. |
target_ip |
target.ip , target.asset.ip |
Adresse IP cible, extraite de message_details pour l'ID d'événement 113004. |
target_user |
target.user.userid |
ID utilisateur cible, extrait de message_details pour l'ID d'événement 113003. |
task_duration |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
tcp_dst_ip |
target.ip , target.asset.ip |
Adresse IP de destination de la charge utile TCP d'origine d'un message d'erreur ICMP. |
tcp_dst_port |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
tcp_src_ip |
principal.ip , principal.asset.ip |
Adresse IP source de la charge utile TCP d'origine d'un message d'erreur ICMP. |
tcp_src_port |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
threshold |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
tls_version |
network.tls.version |
Version TLS extraite de message_details pour l'ID d'événement 725002. |
ts |
@timestamp |
Code temporel de l'événement, analysé à l'aide du filtre date . |
ts_day |
@timestamp (partie de) |
Jour du mois de l'horodatage, utilisé pour construire le champ @timestamp . |
ts_month |
@timestamp (partie de) |
Mois de l'horodatage, utilisé pour construire le champ @timestamp . |
ts_time |
@timestamp (partie de) |
Heure de l'horodatage, utilisée pour construire le champ @timestamp . |
ts_year |
@timestamp (partie de) |
Année de l'horodatage, utilisée pour construire le champ @timestamp . |
tunnel_type |
N/A | Bien qu'il soit analysé, ce champ n'est pas mappé à l'objet IDM dans l'UDM. |
user |
principal.user.userid , target.user.userid |
ID utilisateur, extrait de différents formats de messages de journaux. |
user_agent |
network.http.user_agent |
Chaîne user-agent extraite de message_details pour l'ID d'événement 722055. |
user_attr.key |
principal.user.attribute.labels.key |
Clé d'un attribut utilisateur, extraite de message_details pour les ID d'événement 734003 et 734001. |
user_attr.value |
principal.user.attribute.labels.value |
Valeur d'un attribut utilisateur, extraite de message_details pour les ID d'événement 734003 et 734001. |
userid |
principal.user.userid |
ID utilisateur extrait de message_details pour l'ID d'événement 106103. |
username |
principal.user.userid |
Nom d'utilisateur extrait de message_details pour les ID d'événement 111008, 111009, 111010 et 113008. |
N/A | metadata.vendor_name |
Codé en dur sur "CISCO". |
N/A | metadata.product_name |
Codé en dur sur "ASA VPN" ou "VPN". |
N/A | metadata.event_type |
Déterminé par la logique de l'analyseur en fonction de la présence de certains champs et ID d'événement. Les valeurs possibles sont GENERIC_EVENT, NETWORK_CONNECTION, STATUS_UPDATE, NETWORK_FTP, USER_LOGIN, USER_LOGOUT, NETWORK_UNCATEGORIZED, USER_UNCATEGORIZED et NETWORK_FLOW. |
N/A | metadata.log_type |
Codé en dur sur "CISCO_VPN". |
N/A | metadata.event_timestamp |
Copié à partir du champ @timestamp analysé. |
N/A | extensions.auth.type |
Définissez sa valeur sur "VPN", "AUTHTYPE_UNSPECIFIED" ou "MACHINE" en fonction du contexte de l'événement. |
N/A | security_result.about.resource.type |
Définissez la valeur sur "PACKET FRAGMENT" pour l'ID d'événement 209005. |
N/A | is_alert |
Définissez sur "true" pour les événements de gravité élevée (event_severity 0 ou 1). |
N/A | is_significant |
Définissez sur "true" pour les événements de gravité élevée (event_severity 0 ou 1). |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.