Collecter les journaux Symantec CloudSOC CASB

Compatible avec :

Ce document explique comment ingérer des journaux Symantec CloudSOC CASB dans Google Security Operations à l'aide de l'agent Bindplane.

Symantec CloudSOC est un agent de sécurité des accès au cloud (CASB) qui génère des messages syslog pour l'activité des applications cloud, les cas de non-respect des règles DLP, les détections de menaces, les résultats d'inspection du contenu et les événements d'accès des utilisateurs. L'analyseur extrait les champs des journaux au format JSON et syslog, puis les mappe au modèle de données unifié (UDM).

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 l'hôte Symantec CloudSOC
  • Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent BindPlane.
  • Accès administrateur à l'hôte Symantec CloudSOC

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).
  • Anciens déploiements : continuez à utiliser le fichier d'authentification d'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 configurer 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 > Gestion des données > Agents de collecte. Si vous utilisez une plate-forme SIEM uniquement, accédez à Paramètres > 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 où l'agent BindPlane sera installé.

Obtenir le numéro client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres > Administration > Profil. Si vous utilisez une plate-forme SIEM uniquement, accédez à Paramètres > Profil.
  3. Copiez et enregistrez le numéro client de 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 droits d'accès racine 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 en savoir plus sur les options d'installation et le dépannage, 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/symantec_casb:
        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: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: SYMANTEC_CASB
        raw_log_field: body
    
    service:
      pipelines:
        logs/symantec_casb_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/symantec_casb
    

Paramètres de configuration

Remplacez les espaces réservés suivants :

  • Configuration du récepteur :

    • listen_address : adresse IP et port d'écoute :
      • 0.0.0.0 pour écouter sur toutes les interfaces (recommandé)
      • Le port 514 est le port syslog standard (nécessite un accès racine sous Linux ; utilisez 1514 pour un accès non racine).
  • 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 copié depuis la console Google SecOps
    • 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 indiqué dans IAM et administration > Paramètres.
    • endpoint : laissez la valeur définie sur chronicle.googleapis.com.

Ancien exportateur d'API d'ingestion

  • Si vous utilisez le fichier d'authentification d'ingestion de l'option 2, remplacez le bloc exporters par le code suivant. 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/symantec_casb:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: SYMANTEC_CASB
        raw_log_field: body
    

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, exécutez la commande suivante :

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

      sudo systemctl status observiq-otel-collector
      
    2. Vérifiez les journaux pour détecter d'éventuelles erreurs :

      sudo journalctl -u observiq-otel-collector -f
      
  • Pour redémarrer l'agent BindPlane sous Windows, 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. Recherchez 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. Vérifiez les journaux pour détecter d'éventuelles erreurs :

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

Configurer syslog dans Symantec CloudSOC CASB

  1. Connectez-vous à votre hôte Symantec CloudSOC.
  2. Exécutez la commande suivante pour identifier l'enregistreur utilisé par le système :

    ls -d /etc/*syslog*
    
  3. Accédez à la section correspondante, en fonction de la réponse :

    • syslog.conf : ancien Syslog.
    • syslog-ng.conf : Syslog-ng.

Ancienne configuration de Syslog

  1. Ouvrez le fichier syslogd, généralement situé dans le répertoire /etc/default :

    vi /etc/default/syslogd
    
  2. Assurez-vous que la valeur SYSLOGD contient l'option -r :

    SYSLOGD="-r"
    
  3. Enregistrez le fichier et quittez l'éditeur.

  4. Ouvrez le fichier services, généralement situé dans le répertoire /etc :

    vi /etc/services
    
  5. Modifiez la valeur du port pour le service syslog :

    syslog          514/udp
    
  6. Enregistrez le fichier et quittez l'éditeur.

  7. Ouvrez le fichier syslog.conf, généralement situé dans le répertoire /etc :

    vi /etc/syslog.conf
    
  8. Mettez à jour la configuration pour transférer tous les journaux vers l'agent Bindplane :

    *.* @<BINDPLANE_IP>
    
    • Remplacez <BINDPLANE_IP> par l'adresse IP de l'agent BindPlane.
  9. Ouvrez le fichier hosts, généralement situé dans le répertoire /etc :

    vi /etc/hosts
    
  10. Créez une entrée DNS locale pour l'agent Bindplane :

    <BINDPLANE_IP>    bindplane_agent_host
    
  11. Enregistrez le fichier et quittez l'éditeur.

  12. Redémarrez le service du daemon syslog.

Configuration de Syslog-ng

  1. Ouvrez le fichier syslog-ng.conf, généralement situé dans le répertoire /etc :

    vi /etc/syslog-ng.conf
    
  2. Ajoutez le code suivant à la fin du fichier :

    destination d_bindplane { udp("<BINDPLANE_IP>" port(514)); };
    log { source(s_src); destination(d_bindplane); };
    
    • Remplacez <BINDPLANE_IP> par l'adresse IP de l'agent BindPlane.
  3. Ouvrez le fichier hosts, généralement situé dans le répertoire /etc :

    vi /etc/hosts
    
  4. Créez une entrée DNS locale pour l'agent Bindplane :

    <BINDPLANE_IP>    bindplane_agent_host
    
  5. Enregistrez le fichier et quittez l'éditeur.

  6. Redémarrez le service du daemon syslog-ng.

Table de mappage UDM

Champ du journal Mappage UDM Logique
_domain target.hostname Valeur du champ _domain
_domain target.asset.hostname Valeur du champ _domain
_id metadata.product_log_id Valeur du champ _id
actions_taken security_result.detection_fields[].value Valeur du champ actions_taken. La clé est générée dynamiquement sous la forme Action_ + index.
activity_type metadata.product_event_type La valeur du champ activity_type si product_data.activity_type est vide, ou la valeur de product_data.activity_type si ce champ n'est pas vide.
collector_device_ip principal.ip La valeur du champ collector_device_ip, si elle n'est pas Unknown IP.
collector_device_ip principal.asset.ip La valeur du champ collector_device_ip, si elle n'est pas Unknown IP.
collector_device_name principal.hostname Valeur du champ collector_device_name.
collector_device_name principal.asset.hostname Valeur du champ collector_device_name.
content_checks.dlp.raw_response.contentdetails[].contentBlockId security_result.detection_fields[].value La valeur de content_checks.dlp.raw_response.contentdetails[].contentBlockId. La clé est générée dynamiquement sous la forme contentBlockId_ + index.
content_checks.dlp.raw_response.contentdetails[].topLevelFileType security_result.detection_fields[].value La valeur de content_checks.dlp.raw_response.contentdetails[].topLevelFileType. La clé est générée dynamiquement sous la forme topLevelFileType_ + index.
content_checks.dlp.raw_response.requestid security_result.detection_fields[].value La valeur de content_checks.dlp.raw_response.requestid. La clé est Request ID.
content_checks.dlp.raw_response.responseaction security_result.detection_fields[].value La valeur de content_checks.dlp.raw_response.responseaction. La clé est Response Action.
content_checks.dlp.raw_response.violation[].name security_result.detection_fields[].value La valeur de content_checks.dlp.raw_response.violation[].name. La clé est générée dynamiquement sous la forme Violation_Policy_Name_ + index.
content_checks.dlp.raw_response.violation[].policyId security_result.detection_fields[].value La valeur de content_checks.dlp.raw_response.violation[].policyId. La clé est générée dynamiquement sous la forme Violation_Policy_ID_ + index.
content_checks.dlp.updated_timestamp additional.fields[].value.string_value La valeur de content_checks.dlp.updated_timestamp. La clé est Updated TimeStamp.
content_checks.filename target.file.full_path La valeur de content_checks.filename.
content_checks.mimetype target.file.mime_type La valeur de content_checks.mimetype.
content_checks.risktype_list[] security_result.detection_fields[].value La valeur de content_checks.risktype_list[]. La clé est générée dynamiquement sous la forme RiskType_ + index.
content_checks.vba_macros.expressions[].values[].key security_result.detection_fields[].key La valeur de content_checks.vba_macros.expressions[].values[].key concaténée avec les index.
content_checks.vba_macros.expressions[].values[].value security_result.detection_fields[].value La valeur de content_checks.vba_macros.expressions[].values[].value.
content_checks.vk_content_iq_violations[] security_result.detection_fields[].value La valeur de content_checks.vk_content_iq_violations[]. La clé est générée dynamiquement sous la forme content_violation_ + index.
content_checks.vk_dlp_policy_violations[] security_result.detection_fields[].value La valeur de content_checks.vk_dlp_policy_violations[]. La clé est générée dynamiquement sous la forme dlp_policy_violation_ + index.
content_checks.vk_encryption security_result.detection_fields[].value La valeur de content_checks.vk_encryption. La clé est vk_encryption.
content_checks.vk_glba security_result.detection_fields[].value La valeur de content_checks.vk_glba. La clé est vk_glba.
content_checks.vk_hipaa security_result.detection_fields[].value La valeur de content_checks.vk_hipaa. La clé est vk_hipaa.
content_checks.vk_pci security_result.detection_fields[].value La valeur de content_checks.vk_pci. La clé est vk_pci.
content_checks.vk_pii security_result.detection_fields[].value La valeur de content_checks.vk_pii. La clé est vk_pii.
content_checks.vk_source_code security_result.detection_fields[].value La valeur de content_checks.vk_source_code. La clé est vk_source_code.
content_checks.vk_vba_macros security_result.detection_fields[].value La valeur de content_checks.vk_vba_macros. La clé est vk_vba_macros.
content_checks.vk_virus security_result.detection_fields[].value La valeur de content_checks.vk_virus. La clé est vk_virus.
content_checks.violations security_result.detection_fields[].value La valeur de content_checks.violations. La clé est violations.
created_timestamp additional.fields[].value.string_value La valeur de created_timestamp. La clé est Created TimeStamp.
date metadata.event_timestamp.seconds Secondes d'epoch extraites du champ date.
device_ip target.ip La valeur du champ device_ip, si elle n'est pas Unknown IP.
device_ip target.asset.ip La valeur du champ device_ip, si elle n'est pas Unknown IP.
file_size target.file.size Valeur de file_size ou de product_data.file_size si la première est vide. Converti en entier non signé.
file_url target.file.full_path La valeur de product_data.file_url.
group_name target.group.group_display_name Nom à afficher extrait du champ group_name.
hosts[] principal.ip Valeurs du champ hosts, séparées par une virgule.
inserted_timestamp additional.fields[].value.string_value La valeur de inserted_timestamp. La clé est Inserted TimeStamp.
instance principal.hostname La première valeur du champ instance s'il s'agit d'un tableau, ou la valeur du champ instance s'il s'agit d'une chaîne.
instance principal.asset.hostname La première valeur du champ instance s'il s'agit d'un tableau, ou la valeur du champ instance s'il s'agit d'une chaîne.
ioi_code security_result.summary Valeur du champ ioi_code.
_latency security_result.detection_fields[].value Valeur du champ _latency. La clé est Latency.
locations security_result.detection_fields[].value Valeur du champ locations. La clé est Locations.
log_name intermediary.asset.asset_id ID de journal extrait du champ log_name, précédé du préfixe logid:.
mailbox_owner target.user.userid La valeur de product_data.mailbox owner.
metadata.log_type metadata.log_type Codé en dur sur SYMANTEC_CASB.
metadata.product_name metadata.product_name Codé en dur sur SYMANTEC_CASB.
metadata.vendor_name metadata.vendor_name Codé en dur sur SYMANTEC.
msg metadata.description La valeur du champ msg ou du champ message si msg n'est pas présent.
name security_result.detection_fields[].value Valeur du champ name. La clé est Name.
object_name security_result.detection_fields[].value Valeur du champ object_name. La clé est Object Name.
object_type target.resource.name Valeur du champ object_type.
org_unit security_result.detection_fields[].value Valeur du champ org_unit. La clé est org_unit ID.
policy_action security_result.action_details Valeur du champ policy_action.
policy_type security_result.detection_fields[].value Valeur du champ policy_type. La clé est policy_type.
policy_violated security_result.detection_fields[].value Valeur du champ policy_violated. La clé est policy_violated.
product_data._domain target.hostname La valeur de product_data._domain.
product_data._domain target.asset.hostname La valeur de product_data._domain.
product_data.activity_type metadata.product_event_type La valeur de product_data.activity_type.
product_data.file url target.file.full_path La valeur de product_data.file url.
product_data.file_size target.file.size La valeur de product_data.file_size.
product_data.group target.group.group_display_name La valeur de product_data.group.
product_data.location principal.location.country_or_region La valeur de product_data.location.
product_data.logon error security_result.summary La valeur de product_data.logon error.
product_data.mailbox owner target.user.userid La valeur de product_data.mailbox owner.
product_data.name target.file.full_path La valeur de product_data.name.
product_data.object_name target.file.full_path La valeur de product_data.object_name.
product_data.originatingserver product_data.service target.application La valeur de product_data.service.
product_data.site url target.url La valeur de product_data.site url.
product_data.target target.user.userid La valeur de product_data.target.
product_data.useragent network.http.user_agent La valeur de product_data.useragent.
product_name intermediary.application Valeur du champ product_name.
product_uid metadata.product_name Valeur du champ product_uid.
responsible_logs additional.fields[].value.string_value Valeur du champ responsible_logs. La clé est responsible_logs.
resource_id target.resource.product_object_id Valeur du champ resource_id.
risks security_result.detection_fields[].value Valeur du champ risks. La clé est Risks.
security_result.action security_result.action Dérivé de product_data.logon error. Définie sur BLOCK, si product_data.logon error est BlockedByConditionalAccess.
security_result.severity security_result.severity La valeur en majuscules du champ severity, s'il s'agit de l'un des niveaux de gravité acceptés.
security_result.severity_details security_result.severity_details La valeur du champ severity, s'il ne s'agit pas de l'un des niveaux de gravité acceptés.
security_result.summary security_result.summary Valeur du champ ioi_code ou product_data.logon error si ioi_code n'est pas présent.
service target.application Valeur du champ service si product_data.service est vide.
site_url target.url La valeur de product_data.site url.
source principal.resource.attribute.labels[].value Valeur du champ source. La clé est Source.
sub_feature additional.fields[].value.string_value Valeur du champ sub_feature. La clé est Sub Feature.
target.application target.application Dérivé en fonction de product_data.activity_type et de la présence du compte principal et de la cible.
target.resource.name target.resource.name Dérivé en fonction de product_data.activity_type et de la présence du compte principal et de la cible.
threat_score security_result.detection_fields[].value Valeur du champ threat_score. La clé est Threat Score.
transaction_id security_result.detection_fields[].value Valeur du champ transaction_id. La clé est Transaction ID.
updated_timestamp additional.fields[].value.string_value Valeur de updated_timestamp ou de content_checks.dlp.updated_timestamp si la première est vide. La clé est Updated TimeStamp.
user principal.user.userid Valeur du champ user.
user_email target.user.userid Valeur du champ user_email.
user_mail target.user.userid Valeur du champ user_mail extraite du champ msg.
user_name principal.user.user_display_name Valeur du champ user_name.
user_uid principal.user.userid ou target.user.userid Valeur du champ user_uid. Mappé sur principal.user.userid si product_data.activity_type n'est pas InvalidLogin ou Login, sinon mappé sur target.user.userid.
uuid intermediary.asset.product_object_id Valeur du champ uuid.
version metadata.product_version Valeur du champ version.
user", "user_mail", and "user_uid principal.user.email_addresses Mappé à partir du journal des modifications
user_email", "mailbox_owner", "product_data.target", and "user_uid target.user.email_addresses Mappé à partir du journal des modifications
__event_timestamp metadata.event_timestamp Mappé à partir du journal des modifications
_elastic_timestamp", "created_timestamp", "inserted_timestamp", "updated_timestamp", "responsible_logs" and "sub_feature additional.fields Mappé à partir du journal des modifications
threat_score", "locations", "transaction_id", "content_checks.dlp.raw_response.requestid", "content_checks.dlp.raw_response.responseaction", "org_unit", "policy_type", "content_checks.vk_pci", "content_checks.vk_vba_macros", "content_checks.vk_glba", "content_checks.vk_source_code", "content_checks.vk_pii", "content_checks.vk_virus", "content_checks.vk_hipaa", "content_checks.violations", "object_name", "multi_user", "risks", "name", "_latency", "content_checks.dlp.raw_response.warning", "content_checks.dlp.raw_response.violation", "content_checks.dlp.raw_response.contentdetails", "content_checks.vk_dlp_policy_violations", "content_checks.risktype_list", "content_checks.vk_content_iq_violations", "actions_taken", "__detect_source", "multi_facility", "content_checks.vba_macros.expressions" and "policy_violated security_result.detection_fields Mappé à partir du journal des modifications
resource_id target.resource.id 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.