Collecter les journaux de routeur Cisco
Ce document explique comment ingérer des journaux de routeur Cisco dans Google Security Operations à l'aide d'un agent Bindplane. Le parseur extrait d'abord les champs communs de différents formats de messages syslog à l'aide d'une série de modèles Grok, en gérant différentes variations de données de code temporel et de clé-valeur. Il applique ensuite une logique spécifique en fonction du type d'événement extrait (facility, mnemonics, message_type), en enrichissant les données avec des champs supplémentaires et en les mappant au modèle UDM.
Avant de commencer
- Assurez-vous de disposer d'une instance Google SecOps.
- 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é à un routeur Cisco.
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
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 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 (par exemple,
nano
,vi
ou le Bloc-notes).
- Recherchez 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: '/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 ingestion_labels: log_type: CISCO_ROUTER 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é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 sur un routeur Cisco
- Connectez-vous au routeur Cisco.
Élevez les privilèges en saisissant la commande
enable
:Switch> enable Switch#
Passez en mode configuration en saisissant la commande
conf t
:Switch# conf t Switch(config)#
Saisissez les commandes suivantes :
logging host <bindplane-server-ip> transport <tcp/udp> port <port-number> logging source-interface <interface>
- Remplacez
<bindplane-server-ip>
par l'adresse IP de l'agent Bindplane et<port-number>
par le port configuré. - Remplacez
<tcp/udp>
par le protocole d'écoute configuré sur l'agent Bindplane, par exempleudp
. - Remplacez
<interface>
par l'ID de l'interface Cisco, par exempleEthernet1/1
.
- Remplacez
Définissez le niveau de priorité en saisissant la commande suivante :
logging trap Informational logging console Informational logging severity Informational
Définissez la fonctionnalité syslog :
logging facility local6
Activez les codes temporels en saisissant la commande suivante :
service timestamps log datetime
Enregistrez la modification et quittez l'éditeur.
Configurez les paramètres pour qu'ils soient conservés après le redémarrage en saisissant la commande suivante :
copy running-config startup-config
Table de mappage UDM
Champ du journal | Mappage UDM | Logique |
---|---|---|
client_ip |
target.ip, target.asset.ip | La valeur est extraite du champ client_ip par l'analyseur grok. |
client_mac |
target.mac | La valeur est extraite du champ client_mac par l'analyseur grok. |
dst_ip |
target.ip, target.asset.ip | La valeur est extraite du champ dst_ip par l'analyseur grok. |
dst_port |
target.port | La valeur est extraite du champ dst_port par l'analyseur grok et convertie en entier. |
duration |
- | Ce champ n'est pas mappé sur l'UDM. |
host_ip |
target.ip, target.asset.ip | La valeur est extraite du champ host_ip par l'analyseur grok. |
local_proxy |
intermediary.ip | La valeur est extraite du champ local_proxy par l'analyseur grok. |
message_data |
metadata.description | La valeur est extraite du champ message_data par l'analyseur grok. |
protocol |
network.ip_protocol | La valeur est extraite du champ protocol par l'analyseur grok et convertie en majuscules. |
received_bytes |
network.received_bytes | La valeur est extraite du champ received_bytes par l'analyseur grok et convertie en entier non signé. |
referral_url |
network.http.referral_url | La valeur est extraite du champ referral_url par l'analyseur grok. |
remote_proxy |
intermediary.ip | La valeur est extraite du champ remote_proxy par l'analyseur grok. |
send_bytes |
network.sent_bytes | La valeur est extraite du champ send_bytes par l'analyseur grok et convertie en entier non signé. |
sent_bytes |
network.sent_bytes | La valeur est extraite du champ sent_bytes par l'analyseur grok et convertie en entier non signé. |
server_host |
target.hostname, target.asset.hostname | La valeur est extraite du champ server_host par l'analyseur grok. |
server_ip |
target.ip, target.asset.ip | La valeur est extraite du champ server_ip par l'analyseur grok. |
src_ip |
principal.ip, principal.asset.ip | La valeur est extraite du champ src_ip par l'analyseur grok. |
src_port |
principal.port | La valeur est extraite du champ src_port par l'analyseur grok et convertie en entier. |
user_ip |
target.ip, target.asset.ip | La valeur est extraite du champ user_ip par l'analyseur grok. |
user_mail |
principal.user.userid, principal.user.email_addresses | La valeur est extraite du champ user_mail par l'analyseur grok. |
username |
target.user.userid | La valeur est extraite du champ username par l'analyseur grok. |
- | metadata.event_timestamp | La valeur est extraite du champ create_time . |
- | metadata.event_type | La valeur est définie sur GENERIC_EVENT par défaut et est remplacée par des types d'événements spécifiques en fonction du message de journal analysé. |
- | metadata.log_type | La valeur est définie sur CISCO_ROUTER . |
- | metadata.product_event_type | La valeur est extraite du champ message_type , qui est généré en combinant les champs facility , priority et mnemonics . |
- | metadata.product_name | La valeur est définie sur Router . |
- | metadata.vendor_name | La valeur est définie sur Cisco . |
- | network.application_protocol | La valeur est définie sur HTTP ou HTTPS si le champ protocol est http ou https , respectivement. |
- | extensions.auth.type | La valeur est définie sur AUTHTYPE_UNSPECIFIED par défaut et est remplacée par des types d'authentification spécifiques en fonction du message de journal analysé. |
- | security_result.action | La valeur est définie sur ALLOW pour les connexions réussies et sur BLOCK pour les connexions ayant échoué. |
- | security_result.category | La valeur est définie sur NETWORK_SUSPICIOUS pour les événements avec des options d'adresse IP et sur AUTH_VIOLATION pour les échecs de connexion. |
- | security_result.description | La valeur est définie sur des messages spécifiques pour différents événements. |
- | security_result.severity | La valeur est définie sur LOW pour les connexions réussies, sur MEDIUM pour les connexions ayant échoué et sur INFORMATIONAL pour les autres événements. |
- | security_result.severity_details | La valeur est extraite du champ fail_reason pour les échecs de connexion et définie sur Informational message pour les événements avec options d'adresse IP. |
- | security_result.summary | La valeur est définie sur des messages spécifiques pour différents événements. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.