Collecter les journaux Cisco IOS

Compatible avec :

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

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Agents de collecte.
  3. 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

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Profil.
  3. Copiez et enregistrez le numéro client de la section Informations sur l'organisation.

Installer l'agent Bindplane

Installation de fenêtres

  1. Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Installation de Linux

  1. Ouvrez un terminal avec les droits root ou sudo.
  2. 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

Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps

  1. Accédez au fichier de configuration :

    1. 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.
    2. Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple, nano, vi ou le Bloc-notes).
  2. 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
    
  3. Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.

  4. Remplacez <customer_id> par le numéro client réel.

  5. 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

  1. Connectez-vous à Cisco IOS.
  2. Élevez les privilèges en saisissant la commande suivante :

    enable
    
  3. Passez en mode configuration en saisissant la commande suivante :

    conf t
    
  4. 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 exemple udp.
    • Remplacez <interface> par l'ID de l'interface Cisco.
  5. Définissez le niveau de priorité en saisissant la commande suivante :

    logging trap Informational 
    logging console Informational 
    logging severity Informational
    
  6. Définissez la fonctionnalité syslog :

    logging facility syslog
    
  7. Enregistrez la modification et quittez l'éditeur.

  8. 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.