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 journal Snort différents (SYSLOG + JSON) à l'aide de modèles grok
pour extraire les champs pertinents. Selon le format identifié, il traite ensuite les données, en mappant les champs extraits sur le 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 l'application 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 le numéro client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Profil.
- Copiez et sauvegardez le numéro client dans la section Détails de l'organisation.
Installer l'agent Bindplane
Installation de Windows
- Ouvrez l'invite de commande 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 des 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
Autres ressources d'installation
- Pour plus d'options d'installation, consultez ce guide d'installation.
Configurer l'agent Bindplane pour qu'il ingère les journaux Syslog et les envoie à 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 (
nano
,vi
ou Bloc-notes, par exemple).
- 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 dans votre infrastructure si nécessaire.
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 d'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 d'un 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 d'un terminal.
- Arrêtez les services rsyslog et snort.
- Accédez au répertoire d'installation 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 quel établissement et 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.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
agent.hostname | observer.hostname | Valeur extraite du champ agent.hostname dans le journal brut. |
agent.id | observer.asset_id | Valeur extraite du champ agent.id dans le 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 dans le journal brut. |
agent.version | observer.platform_version | Valeur extraite du champ agent.version dans le journal brut. |
alert.category | security_result.category_details | Valeur extraite du champ alert.category dans le journal brut. |
alert.rev | security_result.rule_version | Valeur extraite du champ alert.rev dans le journal brut. |
alert.rule | security_result.summary | Valeur extraite du champ alert.rule dans le journal brut, sans guillemets doubles. |
alert.severity | security_result.severity | Si alert.severity est supérieur ou égal à 4, définissez-le sur LOW . Si alert.severity est égal à 2 ou 3, définissez la valeur sur MEDIUM . Si alert.severity est défini sur 1, définissez-le sur HIGH . Sinon, définissez-le sur UNKNOWN_SEVERITY . |
alert.signature | security_result.rule_name | Valeur extraite du champ alert.signature dans le journal brut. |
alert.signature_id | security_result.rule_id | Valeur extraite du champ alert.signature_id dans le journal brut. |
app_proto | network.application_protocol | Si app_proto est dns , smb ou http , convertissez en majuscules et utilisez cette valeur. Sinon, définissez-le sur UNKNOWN_APPLICATION_PROTOCOL . |
category | security_result.category | Si category est trojan-activity , définissez la valeur sur NETWORK_MALICIOUS . Si category est policy-violation , définissez la valeur sur POLICY_VIOLATION . Sinon, définissez-le sur UNKNOWN_CATEGORY . |
classtype | security_result.rule_type | Valeur extraite du champ classtype dans le journal brut, si elle n'est pas vide ni unknown . |
community_id | network.community_id | Valeur extraite du champ community_id dans le journal brut. |
date_log | Permet de définir le code temporel de l'événement si le champ time est vide. |
|
décroiss. | metadata.description | Valeur extraite du champ desc dans le journal brut. |
dest_ip | target.ip | Valeur extraite du champ dest_ip dans le journal brut. |
dest_port | target.port | Valeur extraite du champ dest_port dans le journal brut et convertie en entier. |
dstport | target.port | Valeur extraite du champ dstport dans le journal brut et convertie en 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 ni / . |
file.size | security_result.about.file.size | Valeur extraite du champ file.size dans le journal brut et convertie en entier non signé. |
host.name | principal.hostname | Valeur extraite du champ host.name dans le journal brut. |
nom d'hôte | principal.hostname | Valeur extraite du champ hostname dans le journal brut. |
inter_host | intermediary.hostname | Valeur extraite du champ inter_host dans le journal brut. |
log.file.path | principal.process.file.full_path | Valeur extraite du champ log.file.path dans le journal brut. |
metadata.version | metadata.product_version | Valeur extraite du champ metadata.version dans le journal brut. |
proto | network.ip_protocol | Valeur extraite du champ proto dans le journal brut. S'il s'agit d'un nombre, il est converti en nom de protocole IP correspondant à l'aide d'une table de correspondance. |
rule_name | security_result.rule_name | Valeur extraite du champ rule_name dans le journal brut. |
signature_id | security_result.rule_id | Valeur extraite du champ signature_id dans le journal brut. |
signature_rev | security_result.rule_version | Valeur extraite du champ signature_rev dans le journal brut. |
src_ip | principal.ip | Valeur extraite du champ src_ip dans le journal brut. |
src_port | principal.port | Valeur extraite du champ src_port dans le journal brut et convertie en entier. |
srcport | principal.port | Valeur extraite du champ srcport dans le journal brut et convertie en entier. |
temps | Permet de définir le code temporel de l'événement. | |
is_alert | Défini sur true si alert.severity est défini sur 1, sinon non mappé. |
|
is_significant | Défini sur true si alert.severity est défini sur 1, sinon non mappé. |
|
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éfinissez cette valeur sur ALLOW si alert.action est allowed , sinon sur UNKNOWN_ACTION . |
Modifications
2024-12-04
Amélioration :
- Ajout de modèles Grok pour gérer les journaux au format SYSLOG.
- Si la valeur de
net_proto
estTcp
, définissez la valeur denetwork.ip_protocol
surTCP
.
2024-11-21
Amélioration :
- Ajout d'un modèle Grok pour gérer les journaux au format SYSLOG.
2022-09-22
Amélioration :
- Ajout d'une condition on_error pour le champ "agent.hostname" afin d'analyser les journaux non analysés.
2022-07-05
Amélioration :
- Ajout d'un modèle Grok pour gérer les journaux au format syslog.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.