Collecter les journaux Cisco eStreamer

Compatible avec :

Ce document explique comment ingérer des journaux Cisco eStreamer dans Google Security Operations à l'aide de Bindplane. L'analyseur extrait les champs des messages SYSLOG au format clé-valeur, en utilisant grok pour analyser le message initial et kv pour gérer les données clé-valeur. Il mappe ensuite ces champs extraits au modèle de données unifié (UDM), en gérant différents types de données et en enrichissant l'événement avec des métadonnées telles que le type d'événement en fonction de la présence d'informations principales et cibles.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Un hôte Windows Server 2012 SP2 ou version ultérieure, ou un 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é au Cisco Firepower Management Center (FMC)
  • Un système Linux pour exécuter le client CLI eNcore

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

Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.

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

Pour plus d'options d'installation, consultez le guide d'installation.

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

  1. Accédez au fichier de configuration :
    • Trouvez le fichier config.yaml. Il se trouve généralement dans le répertoire /opt/observiq-otel-collector/ sous Linux ou dans le répertoire "C:\Program Files\observIQ OpenTelemetry Collector" sous Windows.
    • 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_file_path: '/path/to/ingestion-authentication-file.json'
        # Replace with your actual customer ID from Step 2
        customer_id: YOUR_CUSTOMER_ID
        endpoint: malachiteingestion-pa.googleapis.com
        # Add optional ingestion labels for better organization
        log_type: 'CISCO_ESTREAMER'
        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.
    • Remplacez /path/to/ingestion-authentication-file.json par 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 le transfert Syslog sur Cisco eStreamer

Configurer eStreamer sur Firepower Management Center

  1. Connectez-vous au Firepower Management Center.
  2. Accédez à Système> Intégration> eStreamer.
  3. Cliquez sur eStreamer pour accéder à la configuration des événements eStreamer.
  4. Cochez les cases à côté des types d'événements que vous souhaitez capturer :
    • Événements d'intrusion : pour les événements de détection d'intrusion
    • Données de paquets d'événements d'intrusion : pour les captures de paquets associées à des événements d'intrusion
    • Événements de connexion : pour les données de connexion réseau
    • Événements d'intelligence de sécurité : pour les données d'informations sur les menaces
    • Événements de fichier : pour les événements d'analyse de fichiers
    • Événements de logiciel malveillant : pour les événements de détection de logiciels malveillants
  5. Cliquez sur Enregistrer.

Créer un client eStreamer

  1. Sur la page eStreamer, cliquez sur Créer un client.
  2. Fournissez les informations de configuration suivantes :
    • Nom d'hôte : saisissez l'adresse IP du système Linux sur lequel le client eNcore s'exécutera.
    • Mot de passe : saisissez un mot de passe pour chiffrer le fichier de certificat.
  3. Cliquez sur Enregistrer.
  4. Téléchargez le fichier de certificat PKCS12 généré et transférez-le vers votre système client eNcore.

Installer et configurer le client eNcore CLI

  1. Sur votre système Linux, téléchargez le client CLI eStreamer eNcore depuis Cisco.
  2. Extrayez le package eNcore :

    tar -xzf eStreamer-eNcore-*.tar.gz
    cd eStreamer-eNcore-*
    
  3. Exécutez le script d'installation :

    ./encore.sh setup
    
  4. Lorsque vous y êtes invité, choisissez le format de sortie pour les paires clé/valeur (compatible avec les systèmes SIEM).

  5. Saisissez l'adresse IP du FMC et le mot de passe du certificat PKCS12.

  6. Configurez le fichier estreamer.conf pour envoyer les messages syslog à votre agent Bindplane :

    • Ouvrez le fichier estreamer.conf dans un éditeur de texte.
    • Localisez la section "outputters" et configurez-la pour envoyer syslog à votre agent Bindplane :

      {
        "handler": {
          "outputters": [
            {
              "name": "syslog",
              "adapter": "kvpair",
              "enabled": true,
              "stream": {
                "uri": "udp://BINDPLANE_AGENT_IP:514"
              }
            }
          ]
        }
      }
      
  7. Remplacez BINDPLANE_AGENT_IP par l'adresse IP de votre agent Bindplane.

Démarrer le client eNcore

  1. Testez la connexion en mode Premier plan :

    ./encore.sh foreground
    
  2. Une fois la vérification effectuée, démarrez eNcore en tant que service en arrière-plan :

    ./encore.sh start
    

Table de mappage UDM

Champ de journal Mappage UDM Logique
act security_result.action_details La valeur de act du journal brut est attribuée à ce champ.
act security_result.action Si la valeur de act est "Allow" (non sensible à la casse), la valeur "ALLOW" est attribuée à ce champ.
app network.http.user_agent La valeur de app (renommée requestClientApplication dans l'analyseur) du journal brut est attribuée à ce champ.
blockLength security_result.detection_fields[].key La chaîne "blocklength" est attribuée à ce champ.
blockLength security_result.detection_fields[].value La valeur de blockLength du journal brut, convertie en chaîne, est attribuée à ce champ.
blockType security_result.detection_fields[].key La chaîne "blockType" est attribuée à ce champ.
blockType security_result.detection_fields[].value La valeur de blockType du journal brut, convertie en chaîne, est attribuée à ce champ.
bytesIn network.received_bytes La valeur de bytesIn du journal brut est attribuée à ce champ et convertie en entier non signé.
bytesOut network.sent_bytes La valeur de bytesOut du journal brut est attribuée à ce champ et convertie en entier non signé.
cat security_result.category_details La valeur de cat du journal brut est attribuée à ce champ.
cs1 security_result.detection_fields[].value La valeur de cs1 du journal brut est attribuée à ce champ.
cs1Label security_result.detection_fields[].key La valeur de cs1Label du journal brut est attribuée à ce champ.
cs2 security_result.detection_fields[].value La valeur de cs2 du journal brut est attribuée à ce champ.
cs2Label security_result.detection_fields[].key La valeur de cs2Label du journal brut est attribuée à ce champ.
cs3 security_result.detection_fields[].value La valeur de cs3 du journal brut est attribuée à ce champ.
cs3Label security_result.detection_fields[].key La valeur de cs3Label du journal brut est attribuée à ce champ.
cs4 security_result.detection_fields[].value La valeur de cs4 du journal brut est attribuée à ce champ.
cs4Label security_result.detection_fields[].key La valeur de cs4Label du journal brut est attribuée à ce champ.
cs5 security_result.detection_fields[].value La valeur de cs5 du journal brut est attribuée à ce champ.
cs5Label security_result.detection_fields[].key La valeur de cs5Label du journal brut est attribuée à ce champ.
cs6 security_result.detection_fields[].value La valeur de cs6 du journal brut est attribuée à ce champ.
cs6 security_result.rule_id La valeur de cs6 du journal brut est attribuée à ce champ.
cs6Label security_result.detection_fields[].key La valeur de cs6Label du journal brut est attribuée à ce champ.
data security_result.detection_fields[].value La valeur de data de l'objet JSON suser dans le journal brut est attribuée à ce champ si le champ suser est un JSON.
deviceInboundInterface additional.fields[].key La chaîne "deviceInboundInterface" est attribuée à ce champ.
deviceInboundInterface additional.fields[].value.string_value La valeur de deviceInboundInterface du journal brut est attribuée à ce champ.
deviceOutboundInterface additional.fields[].key La chaîne "deviceOutboundInterface" est attribuée à ce champ.
deviceOutboundInterface additional.fields[].value.string_value La valeur de deviceOutboundInterface du journal brut est attribuée à ce champ.
dpt target.port La valeur de dpt du journal brut est attribuée à ce champ et convertie en entier.
dst target.asset.ip La valeur de dst du journal brut est attribuée à ce champ.
dst target.ip La valeur de dst du journal brut est attribuée à ce champ.
dvcpid security_result.about.process.pid La valeur de dvcpid du journal brut est attribuée à ce champ.
dvchost target.asset.hostname La valeur de dvchost du journal brut est attribuée à ce champ.
dvchost target.hostname La valeur de dvchost du journal brut est attribuée à ce champ.
hostname principal.asset.hostname La valeur de hostname du journal brut est attribuée à ce champ.
hostname principal.hostname La valeur de hostname du journal brut est attribuée à ce champ. Déterminé par la logique de l'analyseur en fonction de la présence des informations principal et target. Si les deux sont présents, la valeur est "NETWORK_CONNECTION". Si seul principal est présent, la valeur est "STATUS_UPDATE". Si seul target est présent, la valeur est "USER_UNCATEGORIZED". Sinon, la valeur est "GENERIC_EVENT".
product_event_type metadata.product_event_type La valeur de product_event_type du journal brut est attribuée à ce champ.
product_name metadata.product_name La valeur de product_name du journal brut est attribuée à ce champ.
proto network.ip_protocol La valeur de proto du journal brut est convertie en entier, puis mappée au nom du protocole IP correspondant (par exemple, 6 devient TCP, 17 devient UDP) à l'aide d'une recherche incluse dans "parse_ip_protocol.include".
severity security_result.severity_details La valeur de severity du journal brut est attribuée à ce champ.
spt principal.port La valeur de spt du journal brut est attribuée à ce champ et convertie en entier.
src principal.asset.ip La valeur de src du journal brut est attribuée à ce champ.
src principal.ip La valeur de src du journal brut est attribuée à ce champ.
suser security_result.detection_fields[].value La valeur de suser du journal brut est attribuée à ce champ si elle n'est pas un objet JSON. S'il s'agit d'un JSON, le champ data de l'objet suser est utilisé.
suser security_result.detection_fields[].key La chaîne "suser" est attribuée à ce champ.
ts metadata.event_timestamp La valeur de ts du journal brut est analysée en tant qu'horodatage et attribuée à ce champ. Plusieurs formats de code temporel sont testés jusqu'à ce qu'une analyse réussisse.
vendor_name metadata.vendor_name La valeur de vendor_name du journal brut est attribuée à ce champ.
version metadata.product_version La valeur de version du journal brut est attribuée à ce champ.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.