Collecter les journaux Progress MOVEit Transfer

Compatible avec :

Ce document explique comment ingérer des journaux Progress MOVEit Transfer dans Google Security Operations à l'aide de Bindplane.

Progress MOVEit Transfer est une solution de transfert de fichiers gérée (MFT, Managed File Transfer) qui permet de transférer des fichiers de manière sécurisée et chiffrée à l'aide de protocoles tels que HTTPS, FTPS et SFTP. Il offre une journalisation d'audit inviolable, des contrôles d'accès basés sur les rôles et une compatibilité avec les réglementations telles que la loi HIPAA, PCI DSS et le RGPD. MOVEit Transfer enregistre toutes les activités de transfert de fichiers, les événements d'authentification des utilisateurs et les actions administratives dans sa base de données d'audit.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Windows Server 2016 ou version ultérieure, ou hôte Linux avec systemd
  • Connectivité réseau entre l'agent Bindplane et le serveur Progress MOVEit Transfer
  • Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts conformément aux exigences de l'agent BindPlane.
  • Accès de niveau administrateur système à la console d'administration Web Progress MOVEit Transfer
  • Le port UDP 514 (ou le port syslog de votre choix) est ouvert du serveur MOVEit Transfer à l'hôte de l'agent Bindplane.

Obtenir des identifiants Google SecOps pour l'agent BindPlane

Pour authentifier l'agent Bindplane auprès de Google SecOps, choisissez l'une des méthodes suivantes :

  • Nouveaux déploiements : utilisez l'API Chronicle (option 1).
  • Déploiements existants : continuez à utiliser le fichier d'authentification pour l'ingestion (option 2) jusqu'à l'arrêt de l'API Ingestion le 20 juillet 2027.
  1. Connectez-vous à la consoleGoogle Cloud et sélectionnez le projet Google Cloud associé à votre instance Google SecOps.
  2. Accédez à IAM et administration > Comptes de service.
  3. Cliquez sur Créer un compte de service.
  4. Fournissez les informations de configuration suivantes :
    • Nom du compte de service : saisissez un nom pour le compte (par exemple, bindplane-ingest).
    • Description du compte de service : saisissez une description (par exemple, Bindplane agent log ingestion).
  5. Cliquez sur Créer et continuer.
  6. Dans la section Autoriser ce compte de service à accéder au projet, cliquez sur Sélectionner un rôle, puis sélectionnez Éditeur Chronicle.
  7. Cliquez sur Continue (Continuer), puis sur Done (OK).
  8. Cliquez sur le compte de service que vous avez créé, puis accédez à l'onglet Clés.
  9. Cliquez sur Ajouter une clé > Créer une clé.
  10. Sélectionnez JSON, puis cliquez sur Créer. Le fichier de clé est téléchargé sur votre ordinateur.
  11. Enregistrez le fichier de clé sous le nom ingestion-auth.json dans le répertoire du collecteur BindPlane (/opt/observiq-otel-collector/ingestion-auth.json sous Linux ou C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json sous Windows), ou mettez à jour creds_file_path dans config.yaml pour qu'il corresponde au chemin d'accès où vous l'enregistrez.
  12. Accédez à IAM et administration > Paramètres, puis copiez le numéro du projet. Vous en aurez besoin pour la configuration de l'exportateur.

Option 2 : Télécharger le fichier d'authentification d'ingestion (ancien)

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion.
  4. Enregistrez le fichier de manière sécurisée sur le système sur lequel l'agent Bindplane sera installé.

Obtenir l'ID client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Profil.
  3. Copiez et enregistrez le numéro client dans la section Détails de 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 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
    
  3. Attendez que l'installation se termine.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sc query observiq-otel-collector
    

    Le service doit s'afficher comme étant EN COURS D'EXÉCUTION.

Installation sous Linux

  1. Ouvrez un terminal avec des privilèges 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
    
  3. Attendez que l'installation se termine.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sudo systemctl status observiq-otel-collector
    

    Le service doit s'afficher comme actif (en cours d'exécution).

Ressources d'installation supplémentaires

Pour obtenir des options d'installation et de dépannage supplémentaires, consultez le guide d'installation de l'agent Bindplane.

Configurer l'agent Bindplane pour ingérer les journaux syslog et les envoyer à Google SecOps

Localiser le fichier de configuration

  • Linux :

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows :

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Modifiez le fichier de configuration

  • Remplacez l'intégralité du contenu de config.yaml par la configuration suivante :

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/moveit_transfer:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '<CREDS_FILE_PATH>'
        customer_id: '<CUSTOMER_ID>'
        endpoint: chronicle.googleapis.com
        log_type: IPSWITCH_MOVEIT_TRANSFER
        raw_log_field: body
        ingestion_labels:
          log_source: moveit_transfer
    
    service:
      pipelines:
        logs/moveit_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/moveit_transfer
    

Paramètres de configuration

Remplacez les espaces réservés suivants.

Configuration de l'exportateur :

  • <CREDS_FILE_PATH> : chemin d'accès complet au fichier de clé JSON du compte de service (option 1) :
    • Linux : /opt/observiq-otel-collector/ingestion-auth.json
    • Windows : C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
  • <CUSTOMER_ID> : ID client Google SecOps copié précédemment
  • location : remplacez <LOCATION> par la région de votre instance Google SecOps (par exemple, us, europe ou asia-southeast1). L'exportateur ajoute cette valeur en préfixe à chronicle.googleapis.com. Pour obtenir la liste complète, consultez Points de terminaison régionaux.
  • project : remplacez <PROJECT_NUMBER> par le numéro de projet dans IAM et administration > Paramètres.
  • endpoint : laissez la valeur définie sur chronicle.googleapis.com.

  • Exemple de configuration

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/moveit_transfer:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: 'a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6'
        endpoint: chronicle.googleapis.com
        log_type: IPSWITCH_MOVEIT_TRANSFER
        raw_log_field: body
        ingestion_labels:
          log_source: moveit_transfer
    
    service:
      pipelines:
        logs/moveit_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/moveit_transfer
    

Ancien exportateur d'API d'ingestion

  • Si vous utilisez le fichier d'authentification d'ingestion de l'option 2, remplacez le bloc exporters par ce qui suit. Définissez creds_file_path sur le chemin d'accès au fichier d'authentification d'ingestion. Si votre instance se trouve en dehors des États-Unis, remplacez malachiteingestion-pa.googleapis.com par votre point de terminaison régional (par exemple, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/moveit_transfer:
        compression: gzip
        creds_file_path: '<CREDS_FILE_PATH>'
        customer_id: '<CUSTOMER_ID>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: IPSWITCH_MOVEIT_TRANSFER
        raw_log_field: body
        ingestion_labels:
          log_source: moveit_transfer
    

Enregistrez le fichier de configuration.

Après avoir modifié le fichier, enregistrez-le : * Linux : appuyez sur Ctrl+O, puis sur Enter, puis sur Ctrl+X * Windows : cliquez sur Fichier > Enregistrer

Redémarrez l'agent Bindplane pour appliquer les modifications.

Pour redémarrer l'agent Bindplane sous Linux :

  1. Exécutez la commande suivante :

    sudo systemctl restart observiq-otel-collector
    
  2. Vérifiez que le service est en cours d'exécution :

    sudo systemctl status observiq-otel-collector
    
  3. Recherchez les erreurs dans les journaux :

    sudo journalctl -u observiq-otel-collector -f
    

Pour redémarrer l'agent BindPlane sous Windows, procédez comme suit :

  1. Choisissez l'une des options suivantes :

    • Invite de commande ou PowerShell en tant qu'administrateur :

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Console Services :

      1. Appuyez sur Win+R, saisissez services.msc, puis appuyez sur Entrée.
      2. Localisez observIQ OpenTelemetry Collector.
      3. Effectuez un clic droit et sélectionnez Redémarrer.
      4. Vérifiez que le service est en cours d'exécution :

        sc query observiq-otel-collector
        
      5. Recherchez les erreurs dans les journaux :

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configurer le transfert syslog Progress MOVEit Transfer

Pour configurer MOVEit Transfer afin qu'il transfère les entrées du journal d'audit à l'agent Bindplane via syslog :

  1. Connectez-vous à la console d'administration Web MOVEit Transfer en tant qu'utilisateur disposant des autorisations SysAdmin.
  2. Accédez à PARAMÈTRES> Système> Audit> Syslog. La page Configure Syslog Settings (Configurer les paramètres Syslog) s'affiche.
  3. Dans la section Journalisation Syslog, sélectionnez Activé. Lorsqu'elle est activée, chaque entrée de journal d'audit est envoyée à l'hôte syslog spécifié ainsi qu'à la base de données d'audit MOVEit Transfer.
  4. Dans le champ Hôte Syslog, saisissez l'adresse IP ou le nom d'hôte de l'hôte de l'agent Bindplane (par exemple, 192.168.1.100).
  5. Dans le champ Port Syslog, saisissez 514. Si ce champ n'est pas renseigné, il prend par défaut la valeur 514.

  6. Dans le menu déroulant Syslog Facility (Fonctionnalité Syslog), sélectionnez la fonctionnalité sous laquelle les messages Syslog MOVEit Transfer apparaîtront sur l'hôte Syslog distant. La valeur par défaut est FTP. Les installations syslog standards suivantes sont disponibles :

    • KERN
    • UTILISATEUR
    • MAIL
    • DAEMON
    • AUTH
    • SYSLOG
    • LPR
    • ACTUALITÉS
    • UUCP
    • CRON
    • AUTHPRIV
    • FTP (par défaut)
    • LOCAL0 à LOCAL7
  7. Cliquez sur Modifier les paramètres de journalisation pour enregistrer la configuration.

  8. Cliquez sur Envoyer un message Syslog test pour envoyer un message test à l'hôte de l'agent Bindplane spécifié. Étant donné que l'implémentation BSD Syslog est basée sur UDP, vérifiez manuellement que le message de test est arrivé en consultant les journaux de l'agent Bindplane.

  9. Vérifiez que le message de test a été reçu par l'agent Bindplane :

    • Linux :

      sudo journalctl -u observiq-otel-collector -f
      
    • Windows :

      type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
      

Exigences de pare-feu

Assurez-vous que la règle de pare-feu suivante est en place pour autoriser le trafic syslog de MOVEit Transfer vers l'agent BindPlane :

Direction Protocole Source Destination Port
Sortant de MOVEit Transfer UDP Adresse IP du serveur MOVEit Transfer Adresse IP de l'hôte de l'agent BindPlane 514

Table de mappage UDM

Champ du journal mappage UDM Logique
column1 metadata.collected_timestamp Converti à l'aide de modèles de correspondance de date : d/M/yyyy H:mm:ss A, M/d/yyyy H:mm:ss A, MM/dd/yyyy HH:mm:ss A
column1 metadata.event_timestamp Converti à l'aide des modèles de correspondance de date : j/M/aaaa H:mm:ss A, M/j/aaaa H:mm:ss A, MM/jj/aaaa HH:mm:ss A
column2 security_result.action_details Valeur copiée directement
column3 target.hostname, target.asset.hostname Valeur copiée directement à partir de la colonne 3
column4 principal.ip, principal.asset.ip Extrait de la colonne 4 à l'aide du modèle Grok pour l'adresse IP
column6 target.file.full_path Concaténé à partir de folderPath et fileName s'ils sont tous deux présents, sinon à partir de fileName uniquement
column7 target.file.full_path
column15 target.file.full_path
column7 target.user.email_addresses Fusionné si column2 == file_sentemail
column10 metadata.description Valeur copiée directement
column11 metadata.product_event_type Valeur copiée directement si elle n'est pas "None"
column12 target.ip, target.asset.ip Extrait de la colonne 12 à l'aide du modèle Grok pour l'adresse IP
column16 target.file.full_path Concaténé à partir de folderPath et fileName si les deux sont présents, sinon à partir de fileName seul
column23 target.file.full_path
column19 target.user.user_display_name Valeur copiée directement si column2 == file_sentemail et column8 == sender, sinon pour l'utilisateur cible
event_received_time metadata.collected_timestamp Converti à l'aide de modèles de correspondance de date : UNIX_MS, jj/MM/aaaa HH:mm:ss, aaaa-MM-jj HH:mm:ss, MM/jj/aaaa HH:mm:ss A, aaaa/MM/jj HH:mm:ss, RFC 3339, aaaa-MM-jjTHH:mm:ss
code temporel metadata.event_timestamp Converti à l'aide des modèles de correspondance de date : MMM d HH:mm:ss, MMM dd HH:mm:ss, ISO8601, yyyy-MM-dd HH:mm:ss, yyyy-MM-dd HH:mm:ss Z, MM/dd/yyyy HH:mm:ss A, yy-MM-dd HH:mm:ss, RFC 3339, yyyy-MM-ddTHH:mm:ss
prin_ip principal.ip, principal.asset.ip Valeur copiée directement
AgentVersion metadata.product_version Valeur copiée directement
principal_host principal.hostname, principal.asset.hostname Valeur copiée directement
Nom d'utilisateur principal.user.userid Valeur copiée directement
company_name principal.user.company_name Valeur copiée directement
ID target.process.pid Valeur copiée directement
InstID metadata.product_log_id Valeur copiée directement
FileID target.resource.attribute.labels Fusionné en tant que additional_id_2 avec la clé FileID et la valeur de FileID
FolderID target.resource.attribute.labels Fusionné en tant que additional_id_3 avec la clé FolderID et la valeur de FolderID
FolderPath target.file.full_path Concaténation de FolderPath et FileName si les deux sont présents, sinon de FolderPath
FileName target.file.full_path
FileName target.resource.attribute.labels Fusionné en tant que nom de fichier avec la clé FileName et la valeur de FileName
hôte principal.hostname, principal.asset.hostname Valeur copiée directement
log_level security_result.severity Définissez sur INFORMATIONAL si INFO ou DEBUG, ERROR si ERROR
source_module_name observer.resource.attribute.labels Fusionné en tant que source_module_label avec la clé source_module_name et la valeur de source_module_name
source_module_type observer.application Valeur copiée directement
log_msg metadata.description Valeur de log_msg si http_method != GET et file_path vide, sinon log_desc, sinon description, sinon Message
log_desc metadata.description
description metadata.description
Message metadata.description
port principal.port Valeur copiée directement, convertie en entier
tgtport target.port Valeur copiée directement, convertie en entier
package principal.process.command_line Valeur copiée directement
srcip principal.ip, principal.asset.ip Valeur copiée directement
nom d'utilisateur principal.user.userid Valeur copiée directement
version metadata.product_version Valeur copiée directement
http_method network.http.method Valeur copiée directement
action security_result.action_details Valeur copiée directement
résumé security_result.summary Valeur copiée directement
security_result security_result Fusionné directement
tgtip target.ip, target.asset.ip Valeur copiée directement
application_proto network.application_protocol Converti en majuscules et copié directement
url network.http.referral_url Valeur copiée directement
status_code network.http.response_code Valeur copiée directement, convertie en entier
file_path principal.process.file.full_path Valeur copiée directement
file_size principal.process.file.size Converti en uinteger s'il n'est pas égal à 0
process_id principal.process.pid Valeur copiée directement
session_id network.session_id Valeur copiée directement
task_id additional.fields Fusionné en tant que additional_field avec la clé TASK_ID et la valeur string_value de task_id
AgentBrand metadata.product_event_type Valeur copiée directement
Parm1 additional.fields Fusionné en tant que "additional_field_3" avec la clé "Parm1" et la valeur string_value de Parm1
Parm2 additional.fields Fusionné en tant que additional_field_4 avec la clé Parm2 et la valeur string_value de Parm2
Erreur additional.fields Fusionné en tant que additional_field_5 avec la clé "Error" et string_value à partir de "Error"
XFerSize target.resource.attribute.labels Fusionné en tant que additional_field_1 avec la clé XFerSize et la valeur de XFerSize
FolderPath metadata.event_type Définissez sur FILE_DELETION si FolderPath et action_performed correspondent à "Supprimer un fichier", sur NETWORK_HTTP si tgtip ou host et application_proto == HTTP, sur USER_LOGIN si Username ou username, sur STATUS_UPDATE si tgtip ou host ou principal_host ou IPAddress, sinon sur GENERIC_EVENT.
tgtip metadata.event_type
hôte metadata.event_type
principal_host metadata.event_type
IPAddress metadata.event_type
Nom d'utilisateur metadata.event_type
nom d'utilisateur metadata.event_type
tgtip metadata.event_type Définissez sur USER_LOGIN si column2 == sec_signon et tgtip ou tar_host, USER_LOGOUT si sec_signoff et tgtip ou tar_host, FILE_UNCATEGORIZED si folder_add, FILE_CREATION si file_upload ou download et tgtip et is_tgt_file_present, FILE_DELETION si file_delete et srcip et is_tgt_file_present, FILE_MODIFICATION si file_rename, FILE_UNCATEGORIZED si file_dlhashchk, EMAIL_TRANSACTION si file_sentemail et useremail, STATUS_UPDATE si srcip, sinon GENERIC_EVENT
tar_host metadata.event_type
srcip metadata.event_type
is_tgt_file_present metadata.event_type
column2 metadata.event_type
useremail metadata.event_type
security_result metadata.event_type
extensions.auth.type extensions.auth.type Définissez la valeur sur MACHINE pour les événements de connexion/déconnexion.
metadata.vendor_name metadata.vendor_name Défini sur "IPS"
metadata.product_name metadata.product_name Définissez-le sur "IPSWITCH MOVEIT TRANSFER".
target_application event.idm.read_only_udm.target.application Mappé à partir du journal des modifications
product_event event.idm.read_only_udm.metadata.product_event_type Mappé à partir du journal des modifications
dstip event.idm.read_only_udm.target.ip et event.idm.read_only_udm.target.asset.ip Mappé à partir du journal des modifications
AdminTrust event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
Permission event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
log_status event.idm.read_only_udm.security_result.action.details Mappé à partir du journal des modifications
srcip event.idm.read_only_udm.principal.ip et event.idm.read_only_udm.principal.asset.ip Mappé à partir du journal des modifications
EventReceivedTime event.timestamp Mappé à partir du journal des modifications
SourceModuleName observer.resource.attribute.labels Mappé à partir du journal des modifications
SourceModuleType observer.application Mappé à partir du journal des modifications
SourceName metadata.product_event_type Mappé à partir du journal des modifications
Severity security_result. Mappé à partir du journal des modifications
Hostname principal.hostname Mappé à partir du journal des modifications
Channel security_result.about.resource.attribute.labels Mappé à partir du journal des modifications
AgentVersion metadata.version Mappé à partir du journal des modifications

Journal des modifications

Afficher le journal des modifications de cet analyseur

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