Collecter les journaux Cisco IOS
Ce document explique comment ingérer des journaux Cisco Internetwork Operating System (IOS) dans Google Security Operations à l'aide d'un agent Bindplane. L'analyseur transforme les messages syslog bruts en un format structuré conforme à l'Unified Data Model (UDM). Il initialise et extrait d'abord les champs à l'aide de modèles Grok basés sur les formats syslog Cisco IOS courants. Il mappe ensuite les champs extraits aux champs UDM correspondants, catégorise les événements et enrichit les données avec un contexte supplémentaire avant de générer le journal structuré au format 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é à Cisco IOS.
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_IOS 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 Cisco IOS
- Connectez-vous à Cisco IOS.
Élevez les privilèges en saisissant la commande suivante :
enable
Passez en mode configuration en saisissant la commande suivante :
conf t
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.
- 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 syslog
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 |
---|---|---|
AcsSessionID | network.session_id | Valeur extraite du champ AcsSessionID. |
AcctRequest-Flags | security_result.summary | Valeur extraite du champ "AcctRequest-Flags". |
AcctRequest-Flags | security_result.action | Si AcctRequest-Flags contient Start , définissez-le sur ALLOW . Si AcctRequest-Flags contient Stop , définissez-le sur BLOCK . |
AuthenticationIdentityStore | additional.fields.key = AuthenticationIdentityStore , value = AuthenticationIdentityStore |
Valeur extraite du champ AuthenticationIdentityStore. |
AuthenticationMethod | additional.fields.key = AuthenticationMethod , value = AuthenticationMethod |
Valeur extraite du champ "AuthenticationMethod". |
AuthenticationStatus | security_result.summary | Valeur extraite du champ "AuthenticationStatus". |
Authen-Method | security_result.detection_fields.key = Authen-Method , value = Authen-Method |
Valeur extraite du champ "Authen-Method". |
Authen-Method | extensions.auth.type | Si Authen-Method contient TacacsPlus , définissez la valeur sur TACACS . |
AVPair_priv-lvl | security_result.detection_fields.key = AVPair_priv-lvl , value = AVPair_priv-lvl |
Valeur extraite du champ AVPair_priv-lvl. |
AVPair_start_time | additional.fields.key = AVPair_start_time , value = AVPair_start_time |
Valeur extraite du champ "AVPair_start_time". |
AVPair_task_id | additional.fields.key = AVPair_task_id , value = AVPair_task_id |
Valeur extraite du champ "AVPair_task_id". |
AVPair_timezone | additional.fields.key = AVPair_timezone , value = AVPair_timezone |
Valeur extraite du champ AVPair_timezone. |
auditid | metadata.product_log_id | Valeur extraite du champ "auditid". |
cisco_facility | Non mappé à l'objet IDM. | |
cisco_message | metadata.description | Valeur extraite du champ "cisco_message". |
cisco_mnemonic | security_result.rule_name | Valeur extraite du champ "cisco_mnemonic". |
cisco_severity | security_result.severity | Mappé à différents niveaux de gravité en fonction de la valeur : 0 : ALERTE, 1 : CRITIQUE, 2 : ÉLEVÉ, 3 : ERREUR, 4 : MOYEN, 5 : FAIBLE, 6 : INFORMATIONNEL, 7 : INFORMATIONNEL. |
cisco_severity | security_result.severity_details | Mappé à différents détails de gravité en fonction de la valeur : 0 : System unusable , 1 : Immediate action needed , 2 : Critical condition , 3 : Error condition , 4 : Warning condition , 5 : Normal but significant condition , 6 : Informational message only , 7 : Appears during debugging only . |
cisco_tag | metadata.product_event_type | Valeur extraite du champ "cisco_tag". |
cisco_tag | metadata.event_type | Mappé à différents types d'événements en fonction de la valeur : SYS-6-LOGGINGHOST_STARTSTOP, TRACK-6-STATE, SYS-3-LOGGINGHOST_FAIL, CRYPTO-4-IKMP_NO_SA, HA_EM-3-FMPD_ACTION_NOTRACK, HA_EM-3-FMPD_ERROR: GENERIC_EVENT; IPSEC-3-REPLAY_ERROR, CRYPTO-4-RECVD_PKT_INV_SPI, IPSEC-3-HMAC_ERROR, FW-6-DROP_PKT, SEC-6-IPACCESSLOGP: NETWORK_UNCATEGORIZED; CRYPTO-4-IKMP_BAD_MESSAGE, CRYPTO-6-IKMP_NOT_ENCRYPTED, CRYPTO-6-IKMP_MODE_FAILURE: STATUS_UNCATEGORIZED; SYS-5-CONFIG_I: USER_UNCATEGORIZED. |
ClientLatency | additional.fields.key = ClientLatency , value = ClientLatency |
Valeur extraite du champ "ClientLatency". |
CmdSet | additional.fields.key = CmdSet , value = CmdSet |
Valeur extraite du champ CmdSet. |
commande | principal.process.command_line | Valeur extraite du champ de commande. |
CPMSessionID | additional.fields.key = CPMSessionID , value = CPMSessionID |
Valeur extraite du champ "CPMSessionID". |
description | metadata.description | Valeur extraite du champ de description. |
DestinationIPAddress | target.asset.ip | Valeur extraite du champ DestinationIPAddress. |
DestinationIPAddress | target.ip | Valeur extraite du champ DestinationIPAddress. |
DestinationPort | target.port | Valeur extraite du champ "DestinationPort". |
Device_IP_Address | principal.asset.ip | Valeur extraite du champ "Device_IP_Address". |
Device_IP_Address | principal.ip | Valeur extraite du champ "Device_IP_Address". |
Device_Type | additional.fields.key = Device_Type , value = Device_Type |
Valeur extraite du champ "Device_Type". |
dst_ip | target.asset.ip | Valeur extraite du champ "dst_ip". |
dst_ip | target.ip | Valeur extraite du champ "dst_ip". |
dst_port | target.port | Valeur extraite du champ "dst_port". |
dst_user | target.user.userid | Valeur extraite du champ "dst_user". |
EnableFlag | security_result.detection_fields.key = EnableFlag , value = EnableFlag |
Valeur extraite du champ EnableFlag. |
IdentityGroup | additional.fields.key = IdentityGroup , value = IdentityGroup |
Valeur extraite du champ "IdentityGroup". |
IdentitySelectionMatchedRule | security_result.detection_fields.key = IdentitySelectionMatchedRule , value = IdentitySelectionMatchedRule |
Valeur extraite du champ "IdentitySelectionMatchedRule". |
intermediary_host | intermediary.hostname | Valeur extraite du champ "intermediary_host". |
intermediary_ip | intermediary.ip | Valeur extraite du champ "intermediary_ip". |
IPSEC | additional.fields.key = IPSEC , value = IPSEC |
Valeur extraite du champ IPSEC. |
ISEPolicySetName | extensions.auth.type | Si ISEPolicySetName contient Tacacs , définissez la valeur sur TACACS . |
IsMachineAuthentication | additional.fields.key = IsMachineAuthentication , value = IsMachineAuthentication |
Valeur extraite du champ IsMachineAuthentication. |
IsMachineIdentity | security_result.detection_fields.key = IsMachineIdentity , value = IsMachineIdentity |
Valeur extraite du champ IsMachineIdentity. |
Emplacement | additional.fields.key = Location , value = Location |
Valeur extraite du champ "Lieu". |
MatchedCommandSet | additional.fields.key = MatchedCommandSet , value = MatchedCommandSet |
Valeur extraite du champ "MatchedCommandSet". |
message | Non mappé à l'objet IDM. | |
metadata_event_type | metadata.event_type | Valeur extraite du champ "metadata_event_type". Si la valeur est vide ou GENERIC_EVENT , définissez-la sur NETWORK_UNCATEGORIZED si principal_mid_present et target_mid_present sont définis sur "true", sur USER_UNCATEGORIZED si principal_userid_present est défini sur "true", sur STATUS_UPDATE si principal_mid_present est défini sur "true" ou sur GENERIC_EVENT dans le cas contraire. Si le service contient Login , définissez la valeur sur USER_LOGIN si principal_userid_present, principal_mid_present et target_mid_present sont définis sur "true", ou sur USER_UNCATEGORIZED si principal_userid_present est défini sur "true". |
Model_Name | additional.fields.key = Model_Name , value = Model_Name |
Valeur extraite du champ "Model_Name". |
Nom | additional.fields.key = Name , value = Name |
Valeur extraite du champ "Nom". |
Network_Device_Profile | additional.fields.key = Network_Device_Profile , value = Network_Device_Profile |
Valeur extraite du champ "Network_Device_Profile". |
NetworkDeviceGroups | additional.fields.key = NetworkDeviceGroups , value = NetworkDeviceGroups |
Valeur extraite du champ "NetworkDeviceGroups". |
NetworkDeviceName | principal.asset.hostname | Valeur extraite du champ "NetworkDeviceName". |
NetworkDeviceName | principal.hostname | Valeur extraite du champ "NetworkDeviceName". |
NetworkDeviceProfileId | principal.resource.product_object_id | Valeur extraite du champ NetworkDeviceProfileId. |
pid | principal.process.pid | Valeur extraite du champ "pid". |
Port | principal.resource.attribute.labels.key = Port , value = Port |
Valeur extraite du champ "Port". |
Niveau de privilège | security_result.detection_fields.key = Privilege-Level , value = Privilege-Level |
Valeur extraite du champ "Niveau d'accès". |
product_event_type | metadata.product_event_type | Valeur extraite du champ "product_event_type". |
Protocole | additional.fields.key = Protocol , value = Protocol |
Valeur extraite du champ "Protocole". |
protocol | network.application_protocol | Si le protocole est HTTPS , définissez-le sur HTTPS . |
protocol | network.ip_protocol | Si le protocole est TCP ou UDP , définissez-le sur la valeur en majuscules du protocole. |
reason | security_result.summary | Valeur extraite du champ "Motif". |
région | principal.location.country_or_region | Valeur extraite du champ "Région". |
Remote-Address | target.asset.ip | Valeur extraite du champ "Adresse distante" après validation en tant qu'adresse IP. |
Remote-Address | target.ip | Valeur extraite du champ "Adresse distante" après validation en tant qu'adresse IP. |
RequestLatency | security_result.detection_fields.key = RequestLatency , value = RequestLatency |
Valeur extraite du champ "RequestLatency". |
Réponse | additional.fields.key = Response , value = Réponse |
Valeur extraite du champ "Réponse". |
SelectedAccessService | security_result.action_details | Valeur extraite du champ "SelectedAccessService". |
SelectedAuthenticationIdentityStores | security_result.detection_fields.key = SelectedAuthenticationIdentityStores , value = SelectedAuthenticationIdentityStores |
Valeur extraite du champ "SelectedAuthenticationIdentityStores". |
SelectedCommandSet | additional.fields.key = SelectedCommandSet , value = SelectedCommandSet |
Valeur extraite du champ SelectedCommandSet. |
Service | additional.fields.key = Service , value = Service |
Valeur extraite du champ "Service". |
Service-Argument | additional.fields.key = Service-Argument , value = Service-Argument |
Valeur extraite du champ "Service-Argument". |
de gravité, | security_result.severity | Si la gravité contient Notice , définissez-la sur "INFORMATIONAL". |
Software_Version | additional.fields.key = Software_Version , value = Software_Version |
Valeur extraite du champ "Software_Version". |
source_facility | principal.asset.hostname | Valeur extraite du champ "source_facility". |
source_facility | principal.hostname | Valeur extraite du champ "source_facility". |
src_ip | principal.asset.ip | Valeur extraite du champ "src_ip". |
src_ip | principal.ip | Valeur extraite du champ "src_ip". |
src_mac | principal.mac | Valeur extraite du champ src_mac après avoir remplacé . par : . |
src_port | principal.port | Valeur extraite du champ "src_port". |
src_user_id | principal.user.userid | Valeur extraite du champ "src_user_id". Si ce champ est vide, prenez la valeur du champ "Utilisateur". Si le champ est toujours vide, prenez la valeur du champ StepData_9. |
src_user_name | principal.user.user_display_name | Valeur extraite du champ src_user_name. |
Étape | additional.fields.key = Step , value = Step |
Valeur extraite du champ "Étape". |
StepData_10 | principal.asset.hostname | Valeur extraite du champ StepData_10. |
StepData_10 | principal.hostname | Valeur extraite du champ StepData_10. |
StepData_13 | security_result.summary | Valeur extraite du champ StepData_13. |
StepData_14 | security_result.detection_fields.key = StepData_14 , value = StepData_14 |
Valeur extraite du champ StepData_14. |
StepData_15 | security_result.detection_fields.key = StepData_15 , value = StepData_15 |
Valeur extraite du champ StepData_15. |
StepData_20 | security_result.detection_fields.key = StepData_20 , value = StepData_20 |
Valeur extraite du champ StepData_20. |
StepData_21 | security_result.detection_fields.key = StepData_21 , value = StepData_21 |
Valeur extraite du champ StepData_21. |
StepData_3 | additional.fields.key = StepData_3 , value = StepData_3 |
Valeur extraite du champ StepData_3. |
StepData_4 | security_result.detection_fields.key = StepData_4 , value = StepData_4 |
Valeur extraite du champ StepData_4. |
StepData_6 | security_result.detection_fields.key = StepData_6 , value = StepData_6 |
Valeur extraite du champ StepData_6. |
StepData_7 | security_result.detection_fields.key = StepData_7 , value = StepData_7 |
Valeur extraite du champ StepData_7. |
StepData_8 | security_result.detection_fields.key = StepData_8 , value = StepData_8 |
Valeur extraite du champ StepData_8. |
StepData_9 | principal.user.userid | Valeur extraite du champ StepData_9 si les champs src_user_id et "Utilisateur" sont vides. |
target_host | target.asset.hostname | Valeur extraite du champ "target_host". |
target_host | target.hostname | Valeur extraite du champ "target_host". |
timestamp | metadata.event_timestamp | Valeur extraite du champ d'horodatage après suppression des espaces superflus et analyse de la date. |
TotalAuthenLatency | additional.fields.key = TotalAuthenLatency , value = TotalAuthenLatency |
Valeur extraite du champ "TotalAuthenLatency". |
ts | metadata.event_timestamp | Valeur extraite du champ "ts" après l'analyse de la date. |
Type | security_result.category_details | Valeur extraite du champ "Type". |
Utilisateur | principal.user.userid | Valeur extraite du champ "Utilisateur" si src_user_id est vide. |
UserType | additional.fields.key = UserType , value = UserType |
Valeur extraite du champ "UserType". |
metadata.vendor_name | Variable définie sur CISCO . |
|
metadata.product_name | Variable définie sur CISCO_IOS . |
|
metadata.log_type | Variable définie sur CISCO_IOS . |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.