Collecter les journaux Symantec CloudSOC CASB
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- 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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
- Copiez et enregistrez le numéro client de la section Informations sur l'organisation.
Installer l'agent Bindplane
Installation de fenêtres
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installation de Linux
- Ouvrez un terminal avec les droits root ou sudo.
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
- 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).
- Recherchez le fichier
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
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
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
- Connectez-vous à votre hôte Symantec CloudSOC.
Exécutez la commande suivante pour identifier l'enregistreur utilisé par le système :
ls –d /etc/*syslog*
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
Ouvrez le fichier
syslogd
, qui se trouve généralement dans le répertoire/etc/default
, à l'aide de l'éditeurvi
.vi /etc/default/syslogd
Assurez-vous que la valeur
SYSLOGD
contient l'indicateur-r
.SYSLOGD="-r"
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.
Ouvrez le fichier
services
, qui se trouve généralement dans le répertoire/etc
, à l'aide de l'éditeurvi
.vi /etc/services
Modifiez la valeur du port pour le service syslog :
syslog 514/udp
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.
Ouvrez le fichier
syslog.conf
, qui se trouve généralement dans le répertoire/etc
, à l'aide de l'éditeurvi
.vi /etc/syslog.conf
Mettez à jour la configuration pour transférer tous les journaux vers Google SecOps.
*.* @bindplane_agent_host
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.
Ouvrez le fichier
hosts
, qui se trouve généralement dans le répertoire/etc
, à l'aide de l'éditeurvi
.vi /etc/hosts
Créez une entrée DNS locale pour
bindplane_agent_host
.0.0.0.0 bindplane_agent_host
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.
Redémarrez le service de daemon syslog.
Configuration de Syslog-ng
Ouvrez le fichier
syslog-ng.conf
, qui se trouve généralement dans le répertoire/etc
, à l'aide de l'éditeurvi
.vi /etc/syslog-ng.conf
Ajoutez le code suivant à la fin du fichier :
destination d____ { udp("bindplane_agent_host" port(514));}; log {source(s_src); destination(d____);};
Ouvrez le fichier
hosts
, qui se trouve généralement dans le répertoire/etc
, à l'aide de l'éditeurvi
.vi /etc/hosts
Créez une entrée DNS locale pour
bindplane_agent_host
.0.0.0.0 bindplane_agent_host
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.
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.