Collecter les journaux Cisco eStreamer
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
- 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/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).
- 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: 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
- Connectez-vous au Firepower Management Center.
- Accédez à Système> Intégration> eStreamer.
- Cliquez sur eStreamer pour accéder à la configuration des événements eStreamer.
- 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
- Cliquez sur Enregistrer.
Créer un client eStreamer
- Sur la page eStreamer, cliquez sur Créer un client.
- 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.
- Cliquez sur Enregistrer.
- 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
- Sur votre système Linux, téléchargez le client CLI eStreamer eNcore depuis Cisco.
Extrayez le package eNcore :
tar -xzf eStreamer-eNcore-*.tar.gz cd eStreamer-eNcore-*
Exécutez le script d'installation :
./encore.sh setup
Lorsque vous y êtes invité, choisissez le format de sortie pour les paires clé/valeur (compatible avec les systèmes SIEM).
Saisissez l'adresse IP du FMC et le mot de passe du certificat PKCS12.
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" } } ] } }
- Ouvrez le fichier
Remplacez
BINDPLANE_AGENT_IP
par l'adresse IP de votre agent Bindplane.
Démarrer le client eNcore
Testez la connexion en mode Premier plan :
./encore.sh foreground
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.