Collecter les journaux Cisco Stealthwatch
Ce document explique comment collecter les journaux Cisco Secure Network Analytics (anciennement Stealthwatch) dans Google Security Operations à l'aide de Bindplane. L'analyseur gère deux formats de journaux Cisco Stealthwatch : l'un avec des informations sur les adresses IP client/serveur et les paquets, et l'autre avec des ID d'appareil et des nombres d'octets. Il extrait les champs, les convertit dans les types de données appropriés, les mappe à l'UDM et définit les champs de métadonnées tels que le fournisseur, le produit et le type d'événement en fonction du contenu et du format du journal.
Avant de commencer
- Assurez-vous de disposer d'une instance Google Security Operations.
- 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 Stealthwatch.
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_STEALTHWATCH 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 le syslog Cisco Secure Network Analytics (anciennement Stealthwatch)
- Connectez-vous à l'UI Web de la console de gestion.
- Accédez à Configuration > Gestion des réponses.
Modifier le format Syslog :
- Nom : saisissez un nom pour le format syslog.
- Description : ajoutez une description du format.
- Facility (Établissement) : défini sur
Local 0
- Gravité : définie sur
Informational
. - Dans le champ Message, collez le format suivant :
Lancope|StealthWatch|time|{time}|target_hostname|{target_hostname}|alarm_severity_id|{alarm_severity_id}|alarm_type_id|{alarm_type_id}|alarm_type_description|{alarm_type_description}|port|{port}|target_ip|{target_ip}|target_mac_address|{target_mac_address}|target_label|{target_label}|alarm_type_name|{alarm_type_name}|source_hostname|{source_hostname}|source_ip|{source_ip}|source_mac_address|{source_mac_address}|source_username|{source_username}|device_ip|{device_ip}|device_name|{device_name}|details|{details}|protocol|{protocol}|alarm_id|{alarm_id}|alarm_category_name|{alarm_category_name}|start_active_time|{start_active_time}| end_active_time|{end_active_time}
Cliquez sur OK.
Accédez à Gestion des réponses > Actions > Ajouter un message Syslog.
Configurer le redirecteur Syslog :
- Nom : saisissez le nom du transmetteur Google SecOps Bindplane.
- Description : saisissez la description du transmetteur Google SecOps Bindplane.
- Adresse IP : saisissez l'adresse IP de l'agent Bindplane.
- Port : saisissez le numéro de port de l'agent Bindplane, par exemple
514
. - Format : sélectionnez le format créé à l'étape 3.
Cliquez sur OK.
Configurer les noms de règles pour Cisco Secure Network Analytics (anciennement Stealthwatch)
- Accédez à Configuration > Gestion des réponses.
- Sélectionnez Règles > Ajouter > Alarmes système SMC.
- Cliquez sur OK.
- Dans la boîte de dialogue Types de règles, sélectionnez une règle.
- Cliquez sur OK.
- Dans la boîte de dialogue Règle, procédez comme suit :
- Nom : saisissez un nom pour la règle.
- Cette règle se déclenche si : sélectionnez N'importe quel, Gravité et Informationnel dans les listes respectives.
- Cliquez sur OK.
- Sélectionnez Actions > Ajouter.
- Sélectionnez l'action que vous avez créée précédemment.
- Cliquez sur OK, puis de nouveau sur OK.
- Répétez les étapes précédentes pour renommer les trois options suivantes dans la section Règle :
- Mécanisme de collecte des journaux compatible : Syslog
- Mécanisme de collecte des journaux préféré : Syslog
- Diagramme logique du flux d'événements : serveur Syslog distant SMC
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
Alarm_ID |
additional.fields[?key=='Alarm_ID'].value.string_value |
La valeur de Alarm_ID du journal brut est placée dans une structure additional.fields imbriquée sous la clé Alarm_ID . |
ClientBytes |
network.sent_bytes |
ClientBytes du journal brut est converti en entier non signé et mappé. |
ClientIP |
principal.ip |
ClientIP du journal brut est mappé. |
ClientPort |
principal.port |
ClientPort du journal brut est converti en entier et mappé. |
CPayload |
Non mappé | Ce champ n'est pas utilisé dans l'UDM final. |
DestIPv4Address |
target.ip |
DestIPv4Address du journal brut est mappé. |
DestPort |
target.port |
DestPort du journal brut est converti en entier et mappé. |
details |
security_result.summary |
La valeur de details du journal brut, sans les guillemets doubles, est mappée. |
FC |
intermediary.ip |
FC du journal brut est mappé. |
host.country |
principal.location.country_or_region |
host.country du journal brut est mappé. |
host.hostGroupNames |
about.group.group_display_name |
Chaque élément du tableau host.hostGroupNames du journal brut est précédé de host: et mappé en tant qu'objet about distinct. |
host.ipAddress |
principal.ip |
host.ipAddress du journal brut est mappé. |
hostBytes |
network.sent_bytes |
hostBytes du journal brut est converti en entier non signé et mappé. |
InPackets |
additional.fields[?key=='InPackets'].value.string_value |
La valeur de InPackets du journal brut est placée dans une structure additional.fields imbriquée sous la clé InPackets . |
inputSNMPIface |
additional.fields[?key=='inputSNMPIface'].value.string_value |
La valeur de inputSNMPIface du journal brut est placée dans une structure additional.fields imbriquée sous la clé inputSNMPIface . |
LastTime |
Non mappé | Dans certains cas, ce champ est analysé pour obtenir le code temporel de l'événement, mais il n'est pas directement mappé à l'UDM. |
MessageSourceAddress |
principal.ip |
MessageSourceAddress du journal brut est mappé. |
method |
network.http.method |
method du journal brut est mappé. |
outputSNMPIface |
additional.fields[?key=='outputSNMPIface'].value.string_value |
La valeur de outputSNMPIface du journal brut est placée dans une structure additional.fields imbriquée sous la clé outputSNMPIface . |
PAAppID |
Non mappé | Ce champ n'est pas utilisé dans l'UDM final. |
peer.country |
target.location.country_or_region |
peer.country du journal brut est mappé. |
peer.hostGroupNames |
about.group.group_display_name |
Chaque élément du tableau peer.hostGroupNames du journal brut est précédé de peer: et mappé en tant qu'objet about distinct. |
peer.ipAddress |
target.ip |
peer.ipAddress du journal brut est mappé. |
peerBytes |
network.received_bytes |
peerBytes du journal brut est converti en entier non signé et mappé. |
peerPackets |
Non mappé | Ce champ n'est pas utilisé dans l'UDM final. |
Protocol |
Non mappé | Ce champ est analysé pour déterminer le network.ip_protocol , mais n'est pas directement mappé. |
ProtocolIdentifier |
Non mappé | Ce champ est utilisé pour dériver network.ip_protocol , mais n'est pas directement mappé. |
reportName |
metadata.product_event_type |
reportName du journal brut est mappé. |
ServerBytes |
network.received_bytes |
ServerBytes du journal brut est converti en entier non signé et mappé. |
ServerIP |
target.ip |
ServerIP du journal brut est mappé. |
ServerPort |
target.port |
ServerPort du journal brut est converti en entier et mappé. |
Service |
Non mappé | Ce champ n'est pas utilisé dans l'UDM final. |
sid |
target.user.windows_sid |
sid du journal brut est mappé. |
SourceModuleName |
target.resource.name |
SourceModuleName du journal brut est mappé. |
SourceModuleType |
observer.application |
SourceModuleType du journal brut est mappé. |
SourcePort |
principal.port |
SourcePort du journal brut est converti en entier et mappé. |
sourceIPv4Address |
principal.ip |
sourceIPv4Address du journal brut est mappé. |
SPayload |
Non mappé | Ce champ n'est pas utilisé dans l'UDM final. |
src_ip |
principal.ip |
src_ip du journal brut est mappé. |
StartTime |
Non mappé | Dans certains cas, ce champ est analysé pour obtenir le code temporel de l'événement, mais il n'est pas directement mappé à l'UDM. |
time |
Non mappé | Dans certains cas, ce champ est analysé pour obtenir le code temporel de l'événement, mais il n'est pas directement mappé à l'UDM. |
timestamp |
Non mappé | Ce champ est analysé pour obtenir le code temporel de l'événement, mais n'est pas directement mappé à l'UDM. |
UserName |
principal.user.user_display_name |
UserName du journal brut est mappé. |
Version |
metadata.product_version |
Version du journal brut est converti en chaîne et mappé. |
N/A | metadata.event_timestamp |
Le code temporel de l'événement est dérivé de différents champs (LastTime , time , timestamp , StartTime ) en fonction du format du journal, ou du champ create_time si aucun autre code temporel n'est disponible. |
N/A | metadata.log_type |
Toujours défini sur CISCO_STEALTHWATCH . |
N/A | metadata.vendor_name |
Toujours défini sur Cisco . |
N/A | metadata.event_type |
Déterminé par la logique de l'analyseur en fonction du contenu du journal. Il peut s'agir de NETWORK_CONNECTION , USER_STATS , USER_UNCATEGORIZED , FILE_OPEN , FILE_DELETION ou FILE_UNCATEGORIZED . |
N/A | network.ip_protocol |
Déterminé par la logique de l'analyseur en fonction des champs Protocol ou ProtocolIdentifier . Il peut s'agir de TCP , UDP ou ICMP . |
action |
security_result.action_details |
La valeur de action du journal brut est mappée. |
action |
security_result.action |
Dérivé du champ action . Si action est défini sur SUCCESS , ce champ est défini sur ALLOW . Sinon, il est défini sur BLOCK . |
category |
security_result.category_details |
La valeur de category du journal brut est mappée. |
description |
security_result.description |
Si description et file_type sont tous deux présents dans le journal brut, ils sont concaténés et mappés. |
desc |
metadata.description |
La valeur de desc du journal brut, sans les guillemets doubles, est mappée. |
failuer_reason |
security_result.summary |
Si failuer_reason et file_type sont tous deux présents dans le journal brut, ils sont concaténés et mappés. |
file_path |
target.file.full_path |
file_path du journal brut est mappé. |
file_type |
target.file.mime_type |
file_type du journal brut est mappé. |
hostname |
principal.hostname |
hostname du journal brut est mappé. |
ip |
principal.ip |
ip du journal brut est mappé. |
ipf |
intermediary.ip |
ipf du journal brut est mappé. |
ipt |
target.ip |
ipt du journal brut est mappé. |
process_id |
target.process.pid |
process_id du journal brut est mappé. |
protocol |
network.application_protocol |
protocol du journal brut est mappé. |
security_res.severity |
security_result.severity |
Si severity est défini sur Minor , ce champ est défini sur INFORMATIONAL . S'il est défini sur Major , il est défini sur ERROR .severity |
session_id |
network.session_id |
session_id du journal brut est mappé. |
severity |
Non mappé | Ce champ est utilisé pour dériver security_result.severity , mais n'est pas directement mappé. |
Source_HG |
principal.location.country_or_region |
Source_HG du journal brut est mappé. |
Source_HostSnapshot |
principal.url |
Source_HostSnapshot du journal brut est mappé. |
Target_HostSnapshot |
target.url |
Target_HostSnapshot du journal brut est mappé. |
user_name |
principal.user.userid |
user_name du journal brut est mappé. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.