Collecter les journaux Carbon Black EDR
Ce document explique comment collecter les journaux EDR Carbon Black à partir d'environnements cloud et sur site à l'aide d'AWS S3. L'analyseur extrait les champs des messages au format JSON, CSV ou syslog, les normalise et les met en correspondance avec l'UDM. Il gère différents types d'événements Carbon Black, y compris les connexions réseau, les événements de processus, les modifications de fichiers, les modifications de Registre et les résultats des indicateurs de compromission, et enrichit les données avec des informations sur les menaces et les appareils, le cas échéant.
Avant de commencer
Assurez-vous d'avoir effectué les opérations suivantes :
- Une instance Google SecOps configurée
- Accès privilégié à AWS IAM et S3
- Accès privilégié à l'EDR Carbon Black Cloud ou sur site
Configurer Carbon Black EDR sur site
Configurer un bucket Amazon S3 pour l'environnement sur site
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur: Créer un bucket.
- Enregistrez le nom et la région du bucket pour une utilisation ultérieure.
- Créez un utilisateur en suivant le guide de l'utilisateur Créer un utilisateur IAM.
- Sélectionnez l'utilisateur créé.
- Sélectionnez l'onglet Informations d'identification de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif: ajoutez une balise de description.
- Cliquez sur Créer une clé d'accès.
- Cliquez sur Download CSV file (Télécharger le fichier CSV) pour enregistrer la clé d'accès et la clé d'accès secrète pour les utiliser ultérieurement.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez et sélectionnez la règle AmazonS3FullAccess.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Installer cb-event-forwarder sur le serveur EDR sur site
Installez le dépôt CbOpenSource s'il n'est pas déjà présent:
cd /etc/yum.repos.d curl -O https://opensource.carbonblack.com/release/x86_64/CbOpenSource.repo
Installez le RPM à l'aide de YUM:
yum install cb-event-forwarder
Si vous utilisez EDR 7.1.0 ou une version ultérieure, exécutez le script suivant pour définir les autorisations appropriées requises par EDR:
/usr/share/cb/integrations/event-forwarder/cb-edr-fix-permissions.sh
Configurer cb-event-forwarder pour générer des journaux JSON
Ouvrez le fichier de configuration:
sudo nano /etc/cb/integrations/event-forwarder/cb-event-forwarder.conf
Modifiez les paramètres suivants:
[event_forwarder] output_format=json # Enable JSON format output_type=s3 # Send logs to AWS S3 s3_bucket_name=YOUR-S3-BUCKET-NAME s3_region=YOUR-S3-BUCKET-NAME s3_access_key_id=YOUR_AWS_ACCESS_KEY s3_secret_access_key=YOUR_AWS_SECRET_KEY s3_prefix=carbonblack/edr/logs
Enregistrez et quittez à l'aide du clavier:
- Ctrl+X, puis Y et Entrée.
Démarrez cb-event-forwarder:
sudo systemctl enable cb-event-forwarder sudo systemctl restart cb-event-forwarder sudo systemctl status cb-event-forwarder
Configurer le transfert d'événements Carbon Black Cloud pour S3
Créer un bucket AWS S3
- Connectez-vous à l'AWS Management Console.
- Assurez-vous que la région AWS correspond à celle du transpondeur d'événements :
- Sur la page Console AWS, recherchez la région.
- Utilisez le menu déroulant pour sélectionner la région de votre redirecteur d'événements.
- La liste suivante indique la région AWS applicable pour chaque URL Carbon Black EDR.
- "instance-alias".my.carbonblack.io : région : US East (N. Virginie) (us-east-1)
- "instance-alias".my.cbcloud.de : région : Europe (Francfort) (eu-central-1)
- "instance-alias".my.cbcloud.sg Région: Asie-Pacifique (Singapour) (ap-southeast-1)
- Sélectionnez Services.
- Accédez à la console S3.
- Cliquez sur Créer un bucket pour ouvrir l'assistant Créer un bucket.
- Dans Nom du bucket, saisissez un nom unique pour votre bucket (par exemple, CB-EDR).
- Assurez-vous que la région Région est définie par défaut sur celle que vous avez sélectionnée précédemment.
- Modifiez la valeur par défaut de Block Public Access (Bloquer l'accès public) pour autoriser l'accès public (cela est nécessaire pour ingérer les journaux dans Google SecOps).
- Sélectionnez Créer un bucket.
Configurer le bucket S3 pour autoriser le redirecteur d'événements à écrire des événements
- Créez un utilisateur en suivant ce guide de l'utilisateur: Créer un utilisateur IAM.
- Sélectionnez l'utilisateur créé.
- Sélectionnez l'onglet Informations d'identification de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif: ajoutez une balise de description.
- Cliquez sur Créer une clé d'accès.
- Cliquez sur Download CSV file (Télécharger le fichier CSV) pour enregistrer la clé d'accès et la clé d'accès secrète pour les utiliser ultérieurement.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez la règle AmazonS3FullAccess.
- Sélectionnez la règle.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Configurer le transfert d'événements dans la console EDR
- Connectez-vous à VMware Carbon Black Cloud.
- Accédez à l'onglet Transmetteur d'événements.
- Activez les événements que vous souhaitez que le produit importe dans S3.
- Accédez à Sortie et type, puis définissez la valeur sur S3.
- Indiquez le nom du bucket S3 au format
<region>:<bucket-name>
(par exemple,us-east-1:cb-edr
). - Sélectionnez le fichier importer les identifiants AWS au format INI.
Voici un exemple de profil:
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-east-1
Cliquez sur Enregistrer, puis redémarrez le service pour que les modifications prennent effet.
Configurer un flux dans Google SecOps pour ingérer les journaux EDR Carbon Black
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Carbon Black EDR Logs).
- Sélectionnez Amazon S3 comme Type de source.
- Sélectionnez Carbon Black EDR comme Type de journal.
- Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants:
- Region (Région) : région dans laquelle se trouve le bucket Amazon S3.
- URI S3: URI du bucket.
s3:/BUCKET_NAME
- Remplacez
BUCKET_NAME
par le nom réel du bucket.
- Remplacez
- L'URI est: sélectionnez URI_TYPE en fonction de la configuration du flux de journaux (Fichier unique | Répertoire | Répertoire incluant des sous-répertoires).
- Options de suppression de la source: sélectionnez l'option de suppression en fonction de vos préférences.
- ID de clé d'accès: clé d'accès utilisateur ayant accès au bucket S3.
- Clé d'accès secrète: clé secrète de l'utilisateur ayant accès au bucket S3.
- Espace de noms des éléments: espace de noms des éléments.
- Libellés d'ingestion: libellé à appliquer aux événements de ce flux.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux dans l'écran Finaliser, puis cliquez sur Envoyer.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
action |
security_result.detection_fields[?key == 'action'].value |
Valeur du champ action du journal brut. |
cb_server |
intermediary.hostname |
Valeur du champ cb_server du journal brut. |
cb_version |
metadata.product_version |
Valeur du champ cb_version du journal brut. |
child_pid |
target.process.pid (pour les événements ingress.event.childproc ) |
Valeur du champ child_pid du journal brut lorsque type est ingress.event.childproc . |
child_process_guid |
target.process.product_specific_process_id (pour les événements ingress.event.childproc ) |
"CB:" concaténé avec la valeur du champ child_process_guid du journal brut lorsque type est ingress.event.childproc . |
child_username |
target.user.userid (pour les événements ingress.event.childproc ) |
Valeur du champ child_username du journal brut lorsque type est ingress.event.childproc . |
childproc_guid |
target.process.product_specific_process_id (pour les événements endpoint.event.procstart ) |
"CB:" concaténé avec la valeur du champ childproc_guid du journal brut lorsque type est endpoint.event.procstart . |
childproc_hash.0 |
target.process.file.md5 (pour les événements endpoint.event.procstart ) |
Premier élément du tableau childproc_hash à partir du journal brut lorsque type est endpoint.event.procstart . |
childproc_hash.1 |
target.process.file.sha256 (pour les événements endpoint.event.procstart ) |
Deuxième élément du tableau childproc_hash à partir du journal brut lorsque type est endpoint.event.procstart . |
childproc_name |
target.process.file.full_path (pour les événements endpoint.event.procstart ) |
Valeur du champ childproc_name du journal brut lorsque type est endpoint.event.procstart . |
childproc_pid |
target.process.pid (pour les événements endpoint.event.procstart ) |
Valeur du champ childproc_pid du journal brut lorsque type est endpoint.event.procstart . |
childproc_publisher.0.name |
security_result.detection_fields[?key == 'childproc_publisher_name'].value (pour les événements endpoint.event.procstart ) |
"childproc_publisher_name:" concaténé avec la valeur de childproc_publisher.0.name du journal brut lorsque type est endpoint.event.procstart . |
childproc_publisher.0.state |
security_result.detection_fields[?key == 'childproc_publisher_state'].value (pour les événements endpoint.event.procstart ) |
"childproc_publisher_state:" concaténé avec la valeur de childproc_publisher.0.state à partir du journal brut lorsque type est endpoint.event.procstart . |
childproc_reputation |
security_result.detection_fields[?key == 'childproc_reputation'].value (pour les événements endpoint.event.procstart ) |
Valeur du champ childproc_reputation du journal brut lorsque type est endpoint.event.procstart . |
childproc_username |
target.user.userid (pour les événements endpoint.event.procstart ) |
Valeur du champ childproc_username du journal brut lorsque type est endpoint.event.procstart . |
clientIp |
principal.ip , principal.asset.ip |
Valeur du champ clientIp du journal brut. |
cmdline |
target.process.command_line (pour les événements feed.query.hit.process et feed.storage.hit.process ), additional.fields[?key == 'cmdline_*'].value.string_value (pour les événements watchlist.storage.hit.process ) |
Valeur du champ cmdline du journal brut lorsque type est feed.query.hit.process ou feed.storage.hit.process . Pour les événements watchlist.storage.hit.process , il est stocké dans additional.fields avec la clé "cmdline_*". |
command_line |
target.process.command_line (pour les événements ingress.event.procstart ) |
Valeur du champ command_line du journal brut lorsque type est ingress.event.procstart . |
comms_ip |
intermediary.ip |
Valeur du champ comms_ip du journal brut. |
computer_name |
principal.hostname , principal.asset.hostname |
Valeur du champ computer_name du journal brut. |
crossproc_api |
additional.fields[?key == 'crossproc_api'].value.string_value (pour les événements endpoint.event.apicall ) |
Valeur du champ crossproc_api du journal brut lorsque type est endpoint.event.apicall . |
crossproc_guid |
additional.fields[?key == 'crossproc_guid'].value.string_value (pour les événements endpoint.event.crossproc ) |
Valeur du champ crossproc_guid du journal brut lorsque type est endpoint.event.crossproc . |
crossproc_hash.0 |
additional.fields[?key == 'crossproc_md5'].value.string_value (pour les événements endpoint.event.crossproc ) |
Premier élément du tableau crossproc_hash à partir du journal brut lorsque type est endpoint.event.crossproc . |
crossproc_hash.1 |
additional.fields[?key == 'crossproc_sha256'].value.string_value (pour les événements endpoint.event.crossproc ) |
Deuxième élément du tableau crossproc_hash à partir du journal brut lorsque type est endpoint.event.crossproc . |
crossproc_name |
target.process.file.full_path (pour les événements endpoint.event.crossproc ) |
Valeur du champ crossproc_name du journal brut lorsque type est endpoint.event.crossproc . |
crossproc_publisher.0.name |
security_result.detection_fields[?key == 'crossproc_publisher_name'].value (pour les événements endpoint.event.crossproc ) |
"crossproc_publisher_name:" concaténé avec la valeur de crossproc_publisher.0.name à partir du journal brut lorsque type est endpoint.event.crossproc . |
crossproc_publisher.0.state |
security_result.detection_fields[?key == 'crossproc_publisher_state'].value (pour les événements endpoint.event.crossproc ) |
"crossproc_publisher_state:" concaténé avec la valeur de crossproc_publisher.0.state à partir du journal brut lorsque type est endpoint.event.crossproc . |
crossproc_reputation |
additional.fields[?key == 'crossproc_reputation'].value.string_value (pour les événements endpoint.event.crossproc ) |
Valeur du champ crossproc_reputation du journal brut lorsque type est endpoint.event.crossproc . |
crossproc_target |
additional.fields[?key == 'crossproc_target'].value.string_value (pour les événements endpoint.event.crossproc ) |
Valeur du champ crossproc_target du journal brut lorsque type est endpoint.event.crossproc . Converti en chaîne "true" ou "false". |
Modifications
2024-05-13
- Mappage du champ "alert_url" sur le champ UDM "metadata.url_back_to_product".
2024-01-19
- Ajout d'une vérification de valeur nulle pour "filemod_hash.0" et "filemod_hash.1" avant le mappage.
2023-12-27
- Initialisation de "filemod_hash.0" et "filemod_hash.1" sur "null" pour analyser les journaux non analysés.
2023-10-26
- Ajout de la fonction "gsub" pour analyser les champs non analysés.
2023-10-13
- Les nouveaux journaux JSON ont été gérés en ajoutant un bloc JSON.
- Suppression du code redondant pour les champs "computer_name", "parent_name", "process_name", "pid", "process_path", "md5", "sha256", "process_guid", "parent_pid", "docs.0.process_pid", "cb_version", "process_hash.0", "process_hash.1", "parent_hash.0" et "parent_hash.1".
2023-07-21
- Ajout de détails sur les tactiques et techniques MITRE ATT&CK à "security_result.attack_details".
24/03/2023
- Mappage du champ "protocol" sur "network.ip_protocol".
- Ajout d'une vérification conditionnelle de valeur nulle pour les champs "child_username", "child_pid" et "child_command_line".
- Modification de "metadata.event_type" de "GENERIC_EVENT" en "STATUS_UPDATE" lorsque "principal.hostname" ou "principal.ip" ne sont pas nuls.
2023-03-14
- Correction de bug:
- Les champs suivants ont été mappés lorsque le champ "type" est nul:
- Mappage du champ "process_guid" sur "principal.process.product_specific_process_id".
- Mappage du champ "device_external_ip" sur "target.ip".
- Mappage du champ "device_os" sur "principal.platform".
- Mappage du champ "device_group" sur "principal.group.group_display_name".
- Mappage du champ "process_pid" sur "principal.process.pid".
- Mappage du champ "process_path" sur "principal.process.file.full_path".
- Mappage du champ "process_cmdline" sur "principal.process.command_line".
- Mappage du champ "process_hash.0" sur "principal.process.file.md5".
- Mappage du champ "principal.1" sur "principal.process.file.sha256".
- Mappage du champ "process_username" sur "principal.user.userid".
- Mappage du champ "clientIp" sur "principal.ip".
- Mappage du champ "description" sur "metadata.description".
- Mappage du champ "orgName" sur "principal.administrative_domain".
- Mappage des champs suivants lorsque le champ "ruleName" contient "CYDERES":
- Mappage du champ "deviceInfo.internalIpAddress" sur "principal.ip".
- Mappage du champ "deviceInfo.externalIpAddress" sur "target.ip".
- Mappage du champ "ruleName" sur "security_result.rule_name".
- Mappage du champ "deviceInfo.deviceType" sur "principal.asset.platform_software.platform".
- Mappage du champ "domain" sur "principal.administrative_domain".
- Mappage du champ "deviceInfo.groupName" sur "principal.group.group_display_name".
- Mappage du champ "deviceInfo.deviceVersion" sur "principal.asset.platform_software.platform_version".
- Mappage du champ "deviceInfo.deviceId" sur "principal.asset.asset_id".
- Mappage du champ "eventId" sur "additional.fields".
- "metadata.event_type" est passé de "GENERIC_EVENT" à "NETWORK_CONNECTION" lorsque "principal.ip" et "target.ip" ne sont pas nuls.
- "metadata.event_type" est passé de "GENERIC_EVENT" à "STATUS_UPDATE" lorsque "principal.ip" n'est pas nul.
2023-02-03
- Correction de bug: mappage de "filemod_hash" sur "target.file" au lieu de "target.process.file".
2023-01-20
- Correction d'un bug: arrêt de la mise en valeur et de la mise en correspondance de l'attribut product_specific_process_id pour les ID de processus vides.
2022-11-25
- Mappage de "remote_ip" sur "principal.ip" et de "local_ip" sur "target.ip" pour les événements TCP/UDP "entrants".
- Mappage de "remote_port" sur "principal.port" et de "local_port" sur "target.port" pour les événements TCP/UDP "entrants".
2022-10-06
- Migration de tous les analyseurs spécifiques au client vers l'analyseur par défaut.
2022-07-10
- Mise à jour du mappage de "event_type" sur "PROCESS_LAUNCH" pour les journaux de type "endpoint.event.'."
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.