Collecter les journaux Carbon Black EDR

Compatible avec:

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

  1. Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur: Créer un bucket.
  2. Enregistrez le nom et la région du bucket pour une utilisation ultérieure.
  3. Créez un utilisateur en suivant le guide de l'utilisateur Créer un utilisateur IAM.
  4. Sélectionnez l'utilisateur créé.
  5. Sélectionnez l'onglet Informations d'identification de sécurité.
  6. Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
  7. Sélectionnez Service tiers comme Cas d'utilisation.
  8. Cliquez sur Suivant.
  9. Facultatif: ajoutez une balise de description.
  10. Cliquez sur Créer une clé d'accès.
  11. 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.
  12. Cliquez sur OK.
  13. Sélectionnez l'onglet Autorisations.
  14. Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
  15. Sélectionnez Ajouter des autorisations.
  16. Sélectionnez Joindre directement des règles.
  17. Recherchez et sélectionnez la règle AmazonS3FullAccess.
  18. Cliquez sur Suivant.
  19. Cliquez sur Ajouter des autorisations.

Installer cb-event-forwarder sur le serveur EDR sur site

  1. 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
    
  2. Installez le RPM à l'aide de YUM:

    yum install cb-event-forwarder
    
  3. 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

  1. Ouvrez le fichier de configuration:

    sudo nano /etc/cb/integrations/event-forwarder/cb-event-forwarder.conf
    
  2. 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
    
  3. Enregistrez et quittez à l'aide du clavier:

    • Ctrl+X, puis Y et Entrée.
  4. 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

  1. Connectez-vous à l'AWS Management Console.
  2. Assurez-vous que la région AWS correspond à celle du transpondeur d'événements :
    1. Sur la page Console AWS, recherchez la région.
    2. Utilisez le menu déroulant pour sélectionner la région de votre redirecteur d'événements.
    3. 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)
  3. Sélectionnez Services.
  4. Accédez à la console S3.
  5. Cliquez sur Créer un bucket pour ouvrir l'assistant Créer un bucket.
    1. Dans Nom du bucket, saisissez un nom unique pour votre bucket (par exemple, CB-EDR).
    2. 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.
    3. 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).
    4. Sélectionnez Créer un bucket.

Configurer le bucket S3 pour autoriser le redirecteur d'événements à écrire des événements

  1. Créez un utilisateur en suivant ce guide de l'utilisateur: Créer un utilisateur IAM.
  2. Sélectionnez l'utilisateur créé.
  3. Sélectionnez l'onglet Informations d'identification de sécurité.
  4. Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
  5. Sélectionnez Service tiers comme Cas d'utilisation.
  6. Cliquez sur Suivant.
  7. Facultatif: ajoutez une balise de description.
  8. Cliquez sur Créer une clé d'accès.
  9. 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.
  10. Cliquez sur OK.
  11. Sélectionnez l'onglet Autorisations.
  12. Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
  13. Sélectionnez Ajouter des autorisations.
  14. Sélectionnez Joindre directement des règles.
  15. Recherchez la règle AmazonS3FullAccess.
  16. Sélectionnez la règle.
  17. Cliquez sur Suivant.
  18. Cliquez sur Ajouter des autorisations.

Configurer le transfert d'événements dans la console EDR

  1. Connectez-vous à VMware Carbon Black Cloud.
  2. Accédez à l'onglet Transmetteur d'événements.
  3. Activez les événements que vous souhaitez que le produit importe dans S3.
  4. Accédez à Sortie et type, puis définissez la valeur sur S3.
  5. Indiquez le nom du bucket S3 au format <region>:<bucket-name> (par exemple, us-east-1:cb-edr).
  6. Sélectionnez le fichier importer les identifiants AWS au format INI.
  7. 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
    
  8. 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

  1. Accédez à Paramètres du SIEM > Flux.
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Carbon Black EDR Logs).
  4. Sélectionnez Amazon S3 comme Type de source.
  5. Sélectionnez Carbon Black EDR comme Type de journal.
  6. Cliquez sur Suivant.
  7. 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.
    • 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.
  8. Cliquez sur Suivant.

  9. 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.