Collecter les journaux Snort

Compatible avec:

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

  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 le numéro client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Profil.
  3. Copiez et sauvegardez le numéro client dans la section Détails de l'organisation.

Installer l'agent Bindplane

Installation de Windows

  1. Ouvrez l'invite de commande 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 des 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
    

Autres ressources d'installation

Configurer l'agent Bindplane pour qu'il ingère les journaux Syslog et les envoie à Google SecOps

  1. Accédez au fichier de configuration:

    1. 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.
    2. Ouvrez le fichier à l'aide d'un éditeur de texte (nano, vi ou Bloc-notes, par exemple).
  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: '/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
    
  3. Remplacez le port et l'adresse IP dans votre infrastructure si nécessaire.

  4. Remplacez <customer_id> par le numéro client réel.

  5. 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

  1. Connectez-vous à l'appareil Snort à l'aide d'un terminal.
  2. Modifiez le fichier suivant: /etc/snort/snort.conf.
  3. Accédez à 6) Configure output plugins.
  4. Ajoutez l'entrée suivante:

    # syslog
    output alert_syslog: host=BINDPLANE_IP_ADDRESS:PORT_NUMBER, LOG_AUTH LOG_ALERT
    
  5. Remplacez les éléments suivants :

    • BINDPLANE_IP_ADDRESS: Bindplane Agent IP address.
    • PORT_NUMBER: Bindplane Agent port number.
  6. Enregistrez le fichier.

  7. Démarrez le service snort.

  8. Arrêtez le service rsyslog.

  9. Modifiez le fichier suivant: /etc/rsyslogd.conf.

    # remote host is: name/ip:port
    *.* @@BINDPLANE_IP_ADDRESS:PORT_NUMBER
    
  10. Remplacez les éléments suivants :

    • BINDPLANE_IP_ADDRESS: Bindplane Agent IP address.
    • PORT_NUMBER: Bindplane Agent port number.
  11. Démarrez le service rsyslog.

Configurer l'exportation syslog sur Snort v3.1.53

  1. Connectez-vous à l'appareil Snort à l'aide d'un terminal.
  2. Arrêtez les services rsyslog et snort.
  3. Accédez au répertoire d'installation Snort suivant: /usr/local/etc/snort/
  4. Modifiez le fichier de configuration Snort suivant: snort.lua

  5. 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',
      }
    
  6. Enregistrez le fichier de configuration Snort.

  7. Accédez au répertoire des fichiers de configuration par défaut du service rsyslog: /etc/rsyslog.d

  8. Créez un fichier: 3-snort.conf:

    # cd /etc/rsyslog.d
    # vi 3-snort.conf
    
  9. Pour envoyer des journaux via TCP ou UDP, ajoutez la configuration suivante: local3.* @@BINDPLANE_IP_ADDRESS:PORT_NUMBER

  10. Remplacez les éléments suivants :

    • BINDPLANE_IP_ADDRESS: Bindplane agent IP address.
    • PORT_NUMBER: Bindplane agent port number.
  11. Enregistrez le fichier.

  12. 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 est Tcp, définissez la valeur de network.ip_protocol sur TCP.

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.