Collecter les journaux Snort
Ce document explique comment collecter des journaux Snort dans Google Security Operations à l'aide de Bindplane. L'analyseur tente de gérer deux formats de journaux Snort différents (SYSLOG + JSON) à l'aide de modèles grok
pour extraire les champs pertinents. En fonction du format identifié, il traite ensuite les données, en mappant les champs extraits au schéma UDM (Unified Data Model), en normalisant les valeurs et en enrichissant la sortie avec un contexte supplémentaire.
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é à Snort.
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: SNORT_IDS 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 l'exportation Syslog sur Snort v2.x
- Connectez-vous à l'appareil Snort à l'aide du terminal.
- Modifiez le fichier suivant :
/etc/snort/snort.conf
- Accédez à
6) Configure output plugins
. Ajoutez l'entrée suivante :
# syslog output alert_syslog: host=BINDPLANE_IP_ADDRESS:PORT_NUMBER, LOG_AUTH LOG_ALERT
Remplacez les éléments suivants :
- BINDPLANE_IP_ADDRESS: Bindplane Agent IP address.
- PORT_NUMBER: Bindplane Agent port number.
Enregistrez le fichier.
Démarrez le service snort.
Arrêtez le service rsyslog.
Modifiez le fichier suivant :
/etc/rsyslogd.conf
# remote host is: name/ip:port *.* @@BINDPLANE_IP_ADDRESS:PORT_NUMBER
Remplacez les éléments suivants :
- BINDPLANE_IP_ADDRESS: Bindplane Agent IP address.
- PORT_NUMBER: Bindplane Agent port number.
Démarrez le service rsyslog.
Configurer l'exportation syslog sur Snort v3.1.53
- Connectez-vous à l'appareil Snort à l'aide du terminal.
- Arrêtez les services rsyslog et snort.
- Accédez au répertoire d'installation de Snort suivant :
/usr/local/etc/snort/
Modifiez le fichier de configuration Snort suivant :
snort.lua
Dans les options Configurer les sorties, ajoutez le code suivant (vous pouvez utiliser n'importe quelle installation et n'importe quel niveau) :
alert_syslog = { facility = 'local3', level = 'info', }
Enregistrez le fichier de configuration Snort.
Accédez au répertoire des fichiers de configuration par défaut du service rsyslog :
/etc/rsyslog.d
.Créez un fichier :
3-snort.conf
:# cd /etc/rsyslog.d # vi 3-snort.conf
Pour envoyer des journaux via TCP ou UDP, ajoutez la configuration suivante :
local3.* @@BINDPLANE_IP_ADDRESS:PORT_NUMBER
Remplacez les éléments suivants :
- BINDPLANE_IP_ADDRESS: Bindplane agent IP address.
- PORT_NUMBER: Bindplane agent port number.
Enregistrez le fichier.
Démarrez rsyslog, puis le service snort.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
agent.hostname | observer.hostname | Valeur extraite du champ agent.hostname du journal brut. |
agent.id | observer.asset_id | Valeur extraite du champ agent.id du journal brut et concaténée avec agent.type comme suit : agent.type:agent.id . |
agent.type | observer.application | Valeur extraite du champ agent.type du journal brut. |
agent.version | observer.platform_version | Valeur extraite du champ agent.version du journal brut. |
alert.category | security_result.category_details | Valeur extraite du champ alert.category du journal brut. |
alert.rev | security_result.rule_version | Valeur extraite du champ alert.rev du journal brut. |
alert.rule | security_result.summary | Valeur extraite du champ alert.rule du journal brut, sans les guillemets doubles. |
alert.severity | security_result.severity | Si alert.severity est supérieur ou égal à 4, définissez la valeur sur LOW . Si alert.severity est défini sur 2 ou 3, définissez-le sur MEDIUM . Si alert.severity est défini sur 1, la valeur est définie sur HIGH . Sinon, définissez-la sur UNKNOWN_SEVERITY . |
alert.signature | security_result.rule_name | Valeur extraite du champ alert.signature du journal brut. |
alert.signature_id | security_result.rule_id | Valeur extraite du champ alert.signature_id du journal brut. |
app_proto | network.application_protocol | Si app_proto est dns , smb ou http , convertissez la valeur en majuscules et utilisez-la. Sinon, définissez-la sur UNKNOWN_APPLICATION_PROTOCOL . |
category | security_result.category | Si category est défini sur trojan-activity , définissez-le sur NETWORK_MALICIOUS . Si category est défini sur policy-violation , définissez-le sur POLICY_VIOLATION . Sinon, définissez-la sur UNKNOWN_CATEGORY . |
classtype | security_result.rule_type | Valeur extraite du champ classtype dans le journal brut, si elle n'est pas vide ou unknown . |
community_id | network.community_id | Valeur extraite du champ community_id du journal brut. |
date_log | Permet de définir l'horodatage de l'événement si le champ time est vide. |
|
décroiss. | metadata.description | Valeur extraite du champ desc du journal brut. |
dest_ip | target.ip | Valeur extraite du champ dest_ip du journal brut. |
dest_port | target.port | Valeur extraite du champ dest_port du journal brut et convertie en nombre entier. |
dstport | target.port | Valeur extraite du champ dstport du journal brut et convertie en nombre entier. |
file.filename | security_result.about.file.full_path | Valeur extraite du champ file.filename dans le journal brut, si elle n'est pas vide ou / . |
file.size | security_result.about.file.size | Valeur extraite du champ file.size du journal brut et convertie en entier non signé. |
host.name | principal.hostname | Valeur extraite du champ host.name du journal brut. |
nom d'hôte | principal.hostname | Valeur extraite du champ hostname du journal brut. |
inter_host | intermediary.hostname | Valeur extraite du champ inter_host du journal brut. |
log.file.path | principal.process.file.full_path | Valeur extraite du champ log.file.path du journal brut. |
metadata.version | metadata.product_version | Valeur extraite du champ metadata.version du journal brut. |
proto | network.ip_protocol | Valeur extraite du champ proto du journal brut. S'il s'agit d'un nombre, il est converti en nom de protocole IP correspondant à l'aide d'une table de conversion. |
rule_name | security_result.rule_name | Valeur extraite du champ rule_name du journal brut. |
signature_id | security_result.rule_id | Valeur extraite du champ signature_id du journal brut. |
signature_rev | security_result.rule_version | Valeur extraite du champ signature_rev du journal brut. |
src_ip | principal.ip | Valeur extraite du champ src_ip du journal brut. |
src_port | principal.port | Valeur extraite du champ src_port du journal brut et convertie en nombre entier. |
srcport | principal.port | Valeur extraite du champ srcport du journal brut et convertie en nombre entier. |
temps | Permet de définir le code temporel de l'événement. | |
metadata.event_type | Toujours défini sur SCAN_NETWORK . |
|
metadata.log_type | Codé en dur sur SNORT_IDS . |
|
metadata.product_name | Codé en dur sur SNORT_IDS . |
|
metadata.vendor_name | Codé en dur sur SNORT . |
|
security_result.action | Définie sur ALLOW si alert.action est allowed , sinon définie sur UNKNOWN_ACTION . |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.