Collecter les journaux VSFTPD

Compatible avec :

Ce document explique comment ingérer des journaux VSFTPD dans Google Security Operations à l'aide de Bindplane. L'analyseur utilise des modèles Grok pour extraire les champs des journaux et les mapper à l'UDM. Il gère différents types de journaux, y compris les connexions, les importations, les téléchargements et les opérations sur les répertoires, en enrichissant les données avec un contexte supplémentaire tel que les informations SSL/TLS et les actions (autoriser/bloquer). Il effectue également des transformations spécifiques pour différents types de messages de journaux, comme l'extraction des codes et des descriptions de réponse, et la conversion des tailles de fichier en nombres entiers.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Instance Google SecOps
  • Windows 2016 ou 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.
  • Accès privilégié à l'hôte avec VSFTPD

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 l'ID client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Profil.
  3. 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

  1. Ouvrez l'invite de commandes 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 les 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
    

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

  1. Accédez au fichier de configuration :
    • Trouvez 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).
  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_file_path: '/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
            log_type: 'VSFTPD'
            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.
    • 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 Syslog sur VSFTPD

  1. Connectez-vous à l'hôte VSFTPD.
  2. Pour installer rsyslog dans Ubuntu/Debian, exécutez la commande suivante :

    sudo apt install rsyslog
    
  3. Pour installer rsyslog dans CentOS/RHEL, exécutez la commande suivante :

    sudo yum install rsyslog
    
  4. Modifiez la configuration vsftpd pour utiliser Syslog :

    sudo vi /etc/vsftpd.conf
    
  5. Assurez-vous que les paramètres suivants sont définis :

    syslog_enable=YES
    xferlog_enable=NO
    log_ftp_protocol=YES
    
  6. Enregistrez la modification et quittez l'éditeur.

  7. Redémarrez vsftpd :

    sudo systemctl restart vsftpd
    
  8. Modifiez la configuration rsyslog pour transférer les journaux vers l'agent Bindplane :

    sudo nano /etc/rsyslog.d/90-vsftpd.conf
    
  9. Ajoutez la ligne suivante pour transférer les journaux à l'aide de UDP (port par défaut : 514) :

    if ($programname == 'vsftpd') then @@BINDPLANE_IP:514
    
  10. Remplacez BINDPLANE_IP par l'adresse IP réelle de l'agent Bindplane.

    • Utilisez @ pour UDP et @@ pour TCP.
  11. Redémarrez rsyslog :

    sudo systemctl restart rsyslog
    

Table de mappage UDM

Champ de journal Mappage UDM Logique
certificate security_result.detection_fields.key : "cert"
security_result.detection_fields.value : valeur de certificate
La valeur du champ certificate est mappée sur un objet security_result.detection_fields avec la clé "cert".
cipher network.tls.cipher La valeur du champ cipher est directement mappée.
client_ip principal.ip La valeur du champ client_ip est directement mappée.
date metadata.event_timestamp Utilisé avec month, year et time pour construire le metadata.event_timestamp. Le format est dérivé du champ timestamp du journal brut, analysé et converti en objet d'horodatage.
day metadata.event_timestamp Utilisé avec month, year et time pour construire le metadata.event_timestamp.
desc metadata.description La valeur du champ desc (extraite du champ type) est directement mappée. Cela s'applique aux opérations "MKDIR", "RMDIR" et "DELETE".
description network.ftp.command
security_result.description
target.file.full_path
Si type est défini sur "FTP command", la valeur est mappée sur network.ftp.command. Si type est défini sur "DEBUG" et ne correspond à aucun modèle SSL spécifique, il est mappé sur security_result.description. Si type commence par "OK" et n'est pas"OK LOGIN", et que le journal décrit une opération sur un fichier (MKDIR, RMDIR, DELETE), il est mappé sur target.file.full_path.
file_name target.file.full_path La valeur du champ file_name est directement mappée.
file_size network.received_bytes
network.sent_bytes
Si type est "OK DOWNLOAD" ou "FAIL DOWNLOAD", la valeur est convertie en entier non signé et mappée sur network.received_bytes. Si type est "OK UPLOAD" ou "FAIL UPLOAD", la valeur est convertie en entier non signé et mappée sur network.sent_bytes. Définissez-le sur "USER_LOGIN" si type est défini sur "OK LOGIN". Définissez sur "FILE_UNCATEGORIZED" si type est lié à des opérations sur les fichiers ("OK UPLOAD", "OK DOWNLOAD", "FAIL DOWNLOAD", "OK MKDIR", "OK RMDIR", "OK DELETE", "FAIL UPLOAD"). Définissez sur "STATUS_UPDATE" pour toutes les autres valeurs type. Toujours défini sur "VSFTPD". Toujours défini sur "VSFTPD". Toujours défini sur "VSFTPD".
month metadata.event_timestamp Utilisé avec day, year et time pour construire le metadata.event_timestamp.
pid principal.process.pid La valeur du champ pid est directement mappée.
response_code network.http.response_code La valeur du champ response_code est convertie en entier et mappée.
reused_status security_result.detection_fields.key : "reused status"
security_result.detection_fields.value : valeur de reused_status
La valeur du champ reused_status est mappée sur un objet security_result.detection_fields avec la clé "reused status" (état de réutilisation).
speed additional.fields.key : "download_speed" ou "upload_speed"
additional.fields.value.string_value : valeur de speed
Si type est "OK DOWNLOAD" ou "FAIL DOWNLOAD", la valeur est mappée à additional.fields avec la clé "download_speed". Si type est "OK UPLOAD" ou "FAIL UPLOAD", la valeur est mappée sur additional.fields avec la clé "upload_speed".
ssl_shutdown_state security_result.detection_fields.key : "État de l'arrêt SSL"
security_result.detection_fields.value : valeur de ssl_shutdown_state
La valeur du champ ssl_shutdown_state est mappée sur un objet security_result.detection_fields avec la clé "SSL Shutdown State" (État d'arrêt SSL).
ssl_version network.tls.version La valeur du champ ssl_version est directement mappée.
time metadata.event_timestamp Utilisé avec day, month et year pour construire le metadata.event_timestamp.
type metadata.description
security_result.action_details
La valeur du champ type est mappée sur metadata.description, sauf lorsqu'elle est définie sur "OK LOGIN". Il est également associé à security_result.action_details lorsqu'il indique une action d'autorisation ou de blocage (commence par "OK" ou "ÉCHEC").
userid principal.user.userid
target.user.userid
Si type est défini sur "OK LOGIN", la valeur est mappée sur target.user.userid. Sinon, il est mappé sur principal.user.userid.
year metadata.event_timestamp Utilisé avec day, month et time pour construire le metadata.event_timestamp. Définissez sur "NETWORK" si type est "OK LOGIN". Définissez sur "MACHINE" si type est "OK LOGIN". Définissez la valeur sur "ALLOW" (AUTORISER) si type commence par "OK". Définissez la valeur sur "BLOCK" (BLOQUER) si type commence par "FAIL" (ÉCHEC).

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.