Collecter les journaux Symantec CloudSOC CASB

Compatible avec :

Ce document explique comment ingérer des journaux Symantec CloudSOC dans Google Security Operations à l'aide de Bindplane. L'analyseur extrait les journaux de syslog ou des messages au format JSON. Il effectue plusieurs opérations clés : analyse du champ de message, conversion du message au format JSON si nécessaire, extraction des champs, mappage au modèle de données unifié (UDM) et enrichissement de l'événement avec un contexte supplémentaire tel que des codes temporels et des détails sur les résultats de sécurité. L'analyseur gère également différents formats de journaux et effectue des actions spécifiques en fonction du champ activity_type pour catégoriser correctement l'événement.

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, les ports du pare-feu sont ouverts.
  • Accès privilégié à Symantec CloudSOC

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

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 :
    • 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 (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: '/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: 'SYMANTEC_CASB'
                    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 selon les besoins de votre infrastructure.

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

  5. Mettez à jour /path/to/ingestion-authentication-file.json avec 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 dans Symantec 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 à la commande précédente :

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

Ancienne configuration Syslog

  1. Ouvrez le fichier syslogd, qui se trouve généralement dans le répertoire /etc/default, à l'aide de l'éditeur vi.

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

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

    • Passez en mode commande en appuyant sur la touche Échap.
    • Appuyez sur : (deux-points) pour ouvrir la barre d'invite.
    • Saisissez wq après le deux-points, puis appuyez sur Entrée.
  4. Ouvrez le fichier services, qui se trouve généralement dans le répertoire /etc, à l'aide de l'éditeur vi.

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

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

    • Passez en mode commande en appuyant sur la touche Échap.
    • Appuyez sur : (deux-points) pour ouvrir la barre d'invite.
    • Saisissez wq après le deux-points, puis appuyez sur Entrée.
  7. Ouvrez le fichier syslog.conf, qui se trouve généralement dans le répertoire /etc, à l'aide de l'éditeur vi.

    vi /etc/syslog.conf
    
  8. Mettez à jour la configuration pour transférer tous les journaux vers Google SecOps.

    *.* @bindplane_agent_host
    
  9. Enregistrez le fichier et quittez l'éditeur :

    • Passez en mode commande en appuyant sur la touche Échap.
    • Appuyez sur : (deux-points) pour ouvrir la barre d'invite.
    • Saisissez wq après le deux-points, puis appuyez sur Entrée.
  10. Ouvrez le fichier hosts, qui se trouve généralement dans le répertoire /etc, à l'aide de l'éditeur vi.

    vi /etc/hosts
    
  11. Créez une entrée DNS locale pour bindplane_agent_host.

    0.0.0.0 bindplane_agent_host
    
  12. Enregistrez le fichier et quittez l'éditeur :

    • Passez en mode commande en appuyant sur la touche Échap.
    • Appuyez sur : (deux-points) pour ouvrir la barre d'invite.
    • Saisissez wq après le deux-points, puis appuyez sur Entrée.
  13. Redémarrez le service de daemon syslog.

Configuration de Syslog-ng

  1. Ouvrez le fichier syslog-ng.conf, qui se trouve généralement dans le répertoire /etc, à l'aide de l'éditeur vi.

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

    destination d____ { udp("bindplane_agent_host" port(514));}; log {source(s_src);
    destination(d____);};
    
  3. Ouvrez le fichier hosts, qui se trouve généralement dans le répertoire /etc, à l'aide de l'éditeur vi.

    vi /etc/hosts
    
  4. Créez une entrée DNS locale pour bindplane_agent_host.

    0.0.0.0 bindplane_agent_host
    
  5. Enregistrez le fichier et quittez l'éditeur :

    • Passez en mode commande en appuyant sur la touche Échap.
    • Appuyez sur : (deux-points) pour ouvrir la barre d'invite.
    • Saisissez wq après le deux-points, puis appuyez sur Entrée.
  6. Redémarrez le service de daemon syslog-ng.

Table de mappage UDM

Champ de 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 de manière dynamique sous la forme Action_ + index.
activity_type metadata.product_event_type Valeur du champ activity_type si product_data.activity_type est vide, ou valeur de product_data.activity_type si elle n'est pas vide.
collector_device_ip principal.ip Valeur du champ collector_device_ip, si elle n'est pas Unknown IP.
collector_device_ip principal.asset.ip 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 Valeur de content_checks.dlp.raw_response.contentdetails[].contentBlockId. La clé est générée de manière dynamique sous la forme contentBlockId_ + index.
content_checks.dlp.raw_response.contentdetails[].topLevelFileType security_result.detection_fields[].value Valeur de content_checks.dlp.raw_response.contentdetails[].topLevelFileType. La clé est générée de manière dynamique sous la forme topLevelFileType_ + index.
content_checks.dlp.raw_response.requestid security_result.detection_fields[].value Valeur de content_checks.dlp.raw_response.requestid. La clé est Request ID.
content_checks.dlp.raw_response.responseaction security_result.detection_fields[].value 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 Valeur de content_checks.dlp.raw_response.violation[].name. La clé est générée de manière dynamique sous la forme Violation_Policy_Name_ + index.
content_checks.dlp.raw_response.violation[].policyId security_result.detection_fields[].value Valeur de content_checks.dlp.raw_response.violation[].policyId. La clé est générée de manière dynamique sous la forme Violation_Policy_ID_ + index.
content_checks.dlp.updated_timestamp additional.fields[].value.string_value Valeur de content_checks.dlp.updated_timestamp. La clé est Updated TimeStamp.
content_checks.filename target.file.full_path Valeur de content_checks.filename.
content_checks.mimetype target.file.mime_type Valeur de content_checks.mimetype.
content_checks.risktype_list[] security_result.detection_fields[].value Valeur de content_checks.risktype_list[]. La clé est générée de manière dynamique sous la forme RiskType_ + index.
content_checks.vba_macros.expressions[].values[].key security_result.detection_fields[].key 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 Valeur de content_checks.vba_macros.expressions[].values[].value.
content_checks.vk_content_iq_violations[] security_result.detection_fields[].value Valeur de content_checks.vk_content_iq_violations[]. La clé est générée de manière dynamique sous la forme content_violation_ + index.
content_checks.vk_dlp_policy_violations[] security_result.detection_fields[].value Valeur de content_checks.vk_dlp_policy_violations[]. La clé est générée de manière dynamique sous la forme dlp_policy_violation_ + index.
content_checks.vk_encryption security_result.detection_fields[].value Valeur de content_checks.vk_encryption. La clé est vk_encryption.
content_checks.vk_glba security_result.detection_fields[].value Valeur de content_checks.vk_glba. La clé est vk_glba.
content_checks.vk_hipaa security_result.detection_fields[].value Valeur de content_checks.vk_hipaa. La clé est vk_hipaa.
content_checks.vk_pci security_result.detection_fields[].value Valeur de content_checks.vk_pci. La clé est vk_pci.
content_checks.vk_pii security_result.detection_fields[].value Valeur de content_checks.vk_pii. La clé est vk_pii.
content_checks.vk_source_code security_result.detection_fields[].value Valeur de content_checks.vk_source_code. La clé est vk_source_code.
content_checks.vk_vba_macros security_result.detection_fields[].value Valeur de content_checks.vk_vba_macros. La clé est vk_vba_macros.
content_checks.vk_virus security_result.detection_fields[].value Valeur de content_checks.vk_virus. La clé est vk_virus.
content_checks.violations security_result.detection_fields[].value Valeur de content_checks.violations. La clé est violations.
created_timestamp additional.fields[].value.string_value Valeur de created_timestamp. La clé est Created TimeStamp.
date metadata.event_timestamp.seconds Secondes epoch extraites du champ date.
device_ip target.ip Valeur du champ device_ip, si elle n'est pas Unknown IP.
device_ip target.asset.ip Valeur du champ device_ip, si elle n'est pas Unknown IP.
file_size target.file.size La 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 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 Valeur de inserted_timestamp. La clé est Inserted TimeStamp.
instance principal.hostname Première valeur du champ instance s'il s'agit d'un tableau, ou valeur du champ instance s'il s'agit d'une chaîne.
instance principal.asset.hostname Première valeur du champ instance s'il s'agit d'un tableau, ou 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, avec le préfixe logid:.
mailbox_owner target.user.userid 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 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 Valeur de product_data._domain.
product_data._domain target.asset.hostname Valeur de product_data._domain.
product_data.activity_type metadata.product_event_type Valeur de product_data.activity_type.
product_data.file url target.file.full_path Valeur de product_data.file url.
product_data.file_size target.file.size Valeur de product_data.file_size.
product_data.group target.group.group_display_name Valeur de product_data.group.
product_data.location principal.location.country_or_region Valeur de product_data.location.
product_data.logon error security_result.summary Valeur de product_data.logon error.
product_data.mailbox owner target.user.userid Valeur de product_data.mailbox owner.
product_data.name target.file.full_path Valeur de product_data.name.
product_data.object_name target.file.full_path Valeur de product_data.object_name.
product_data.originatingserver product_data.service target.application Valeur de product_data.service.
product_data.site url target.url Valeur de product_data.site url.
product_data.target target.user.userid Valeur de product_data.target.
product_data.useragent network.http.user_agent 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 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 Valeur du champ severity, si elle ne correspond pas à 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 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 La 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 ni 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.

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