Collecter les journaux Uptycs EDR
Ce document explique comment ingérer des journaux Uptycs EDR dans Google Security Operations à l'aide d'Amazon S3. L'analyseur transforme les journaux JSON bruts en modèle de données unifié (UDM). Il extrait d'abord les champs du fichier JSON, nettoie et enrichit les données, puis mappe les informations pertinentes aux champs UDM correspondants. Il gère différents types de données et cas extrêmes pour garantir une représentation précise et cohérente dans le schéma UDM.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Accès privilégié à Uptycs
- Accès privilégié à AWS (S3, IAM)
Obtenir les prérequis Uptycs
- Connectez-vous à la console d'administration Uptycs.
- Accédez à Configuration > Utilisateurs.
- Sélectionnez votre utilisateur ou créez un utilisateur de compte de service.
- Cliquez sur Clé API utilisateur.
- Copiez et enregistrez les informations suivantes dans un emplacement sécurisé :
- Clé API
- SID de clé API (Code secret de l'API)
- Numéro client
- Domaine de l'API (dérivé de votre URL Uptycs, par exemple,
mystack.uptycs.io)
Configurer un bucket AWS S3 et IAM pour Google SecOps
- 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 référence ultérieure (par exemple,
uptycs-telemetry-export). - 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 un tag de description.
- Cliquez sur Créer une clé d'accès.
- Cliquez sur Télécharger le fichier CSV pour enregistrer la clé d'accès et la clé d'accès secrète pour référence ultérieure.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles relatives aux autorisations.
- 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 la stratégie et le rôle IAM pour les importations S3
- Dans la console AWS, accédez à IAM > Stratégies.
- Cliquez sur Créer une règle> onglet "JSON".
Saisissez la règle suivante :
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::uptycs-telemetry-export/*" }, { "Sid": "AllowListBucket", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::uptycs-telemetry-export" } ] }- Remplacez
uptycs-telemetry-exportsi vous avez saisi un autre nom de bucket.
- Remplacez
Cliquez sur Suivant > Créer une règle.
Nommez la règle
uptycs-s3-write-policy.Accédez à IAM > Utilisateurs.
Sélectionnez l'utilisateur créé pour les exportations Uptycs.
Cliquez sur Ajouter des autorisations> Joindre directement des règles.
Recherchez et sélectionnez
uptycs-s3-write-policy.Cliquez sur Suivant > Ajouter des autorisations.
Configurer l'exportation des données de télémétrie brutes Uptycs
- Connectez-vous à la console Uptycs.
- Accédez à la section de configuration de l'exportation.
- Configurez la destination d'exportation S3.
- Fournissez les informations de configuration suivantes :
- Type d'exportation : sélectionnez Télémétrie brute.
- Destination : sélectionnez Amazon S3.
- Format : sélectionnez JSON.
- Bucket S3 : saisissez
uptycs-telemetry-export. - Préfixe du chemin d'accès S3 : saisissez
telemetry/. - Région AWS : sélectionnez la région de votre bucket.
- ID de clé d'accès AWS : saisissez la clé d'accès de l'utilisateur IAM.
- Clé d'accès secrète AWS : saisissez la clé d'accès secrète.
- Types d'événements : sélectionnez tous les types de télémétrie requis.
- Testez et activez l'exportation.
Créer un utilisateur IAM en lecture seule pour Google SecOps
- Accédez à la console AWS > IAM > Utilisateurs.
- Cliquez sur Add users (Ajouter des utilisateurs).
- Fournissez les informations de configuration suivantes :
- Utilisateur : saisissez
secops-reader. - Type d'accès : sélectionnez Clé d'accès – Accès programmatique.
- Utilisateur : saisissez
- Cliquez sur Créer un utilisateur.
- Associez une stratégie de lecture minimale (personnalisée) : Utilisateurs > secops-reader > Autorisations > Ajouter des autorisations > Associer des stratégies directement > Créer une stratégie.
Dans l'éditeur JSON, saisissez la stratégie suivante :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::uptycs-telemetry-export/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::uptycs-telemetry-export" } ] }Définissez le nom sur
secops-reader-policy.Accédez à Créer une règle > recherchez/sélectionnez > Suivant > Ajouter des autorisations.
Accédez à Identifiants de sécurité> Clés d'accès> Créer une clé d'accès.
Téléchargez le CSV (ces valeurs sont saisies dans le flux).
Configurer un flux dans Google SecOps pour ingérer les journaux Uptycs
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur + Ajouter un flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Uptycs EDR logs). - Sélectionnez Amazon S3 V2 comme type de source.
- Sélectionnez Uptycs EDR comme type de journal.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- URI S3 :
s3://uptycs-telemetry-export/telemetry/ - Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
- Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.
- 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 de l'élément : espace de noms de l'élément.
- Libellés d'ingestion : libellé appliqué aux événements de ce flux.
- URI S3 :
- Cliquez sur Suivant.
- Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Table de mappage UDM
| Champ du journal | Mappage UDM | Logique |
|---|---|---|
| osquery_raw_data.answer | read_only_udm.network.dns.answers.name | Valeur extraite de osquery_raw_data.answer si osquery_raw_data.answer n'est pas vide. |
| osquery_raw_data.container_id | read_only_udm.metadata.product_log_id | Valeur extraite de osquery_raw_data.container_id si osquery_raw_data.container_id n'est pas vide. |
| osquery_raw_data.local_address | read_only_udm.principal.ip | Valeur extraite de osquery_raw_data.local_address si osquery_raw_data.local_address n'est pas vide et est une adresse IP valide. |
| osquery_raw_data.local | read_only_udm.principal.ip | Sinon, la valeur est extraite de osquery_raw_data.local si osquery_raw_data.local n'est pas vide et est une adresse IP valide. |
| osquery_raw_data.local_port | read_only_udm.principal.port | Valeur extraite de osquery_raw_data.local_port et convertie en entier si osquery_raw_data.local_port n'est pas vide. |
| osquery_raw_data.md5 | read_only_udm.target.process.file.md5 | Valeur extraite de osquery_raw_data.md5 si osquery_raw_data.md5 n'est pas vide. |
| osquery_raw_data.port | read_only_udm.target.port | Valeur extraite de osquery_raw_data.port et convertie en entier si osquery_raw_data.port n'est pas vide. |
| osquery_raw_data.question | read_only_udm.network.dns.questions.name | Valeur extraite de osquery_raw_data.question si osquery_raw_data.question n'est pas vide. |
| osquery_raw_data.remote_address | read_only_udm.intermediary.ip | Valeur extraite de osquery_raw_data.remote_address si osquery_raw_data.remote_address n'est pas vide. |
| osquery_raw_data.remote_port | read_only_udm.intermediary.port | Valeur extraite de osquery_raw_data.remote_port et convertie en entier si osquery_raw_data.remote_port n'est pas vide. |
| osquery_raw_data.type | read_only_udm.network.dns.questions.type | Valeur extraite de osquery_raw_data.type et convertie en entier si osquery_raw_data.type n'est pas vide. |
| osquery_raw_data.uid | read_only_udm.principal.user.userid | Valeur extraite de osquery_raw_data.uid si osquery_raw_data.uid n'est pas vide et n'est pas égal à "0". |
| osquery_raw_data.worker_instance_id | read_only_udm.principal.user.userid | Sinon, la valeur est extraite de osquery_raw_data.worker_instance_id si osquery_raw_data.worker_instance_id n'est pas vide. |
| upt_asset_group_id | read_only_udm.principal.user.group_identifiers | Valeur extraite de upt_asset_group_id si upt_asset_group_id n'est pas vide. |
| upt_asset_group_name | read_only_udm.principal.group.group_display_name | Valeur extraite de upt_asset_group_name si upt_asset_group_name n'est pas vide. |
| upt_asset_id | read_only_udm.principal.asset.asset_id | Chaîne concaténée "UPT ASSET ID:" avec la valeur de upt_asset_id si upt_asset_id n'est pas vide. |
| upt_hash | read_only_udm.target.file.md5 | Toutes les occurrences de "-" sont remplacées par "" dans upt_hash. La valeur est ensuite attribuée à read_only_udm.target.file.md5 si upt_hash n'est pas vide. |
| upt_hostname | read_only_udm.principal.hostname | Valeur extraite de upt_hostname si upt_hostname n'est pas vide. |
| upt_resource_type | read_only_udm.target.resource.type | Valeur extraite de upt_resource_type si upt_resource_type n'est pas vide. |
| upt_time | read_only_udm.metadata.event_timestamp.seconds | Valeur extraite de upt_time si upt_time n'est pas vide. |
| read_only_udm.metadata.event_type | La valeur est définie sur "PROCESS_LAUNCH" si osquery_raw_data.pid n'est pas vide. La valeur est définie sur "NETWORK_DNS" si osquery_raw_data.question n'est pas vide. La valeur est définie sur "GENERIC_EVENT" si event_type est vide. | |
| read_only_udm.metadata.log_type | La valeur est définie sur "UPTYCS_EDR". | |
| read_only_udm.metadata.product_name | La valeur est définie sur "UPTYCS_EDR". | |
| read_only_udm.metadata.vendor_name | La valeur est définie sur "UPTYCS". | |
| read_only_udm.network.application_protocol | La valeur est définie sur "DNS" si osquery_raw_data.question n'est pas vide. | |
| read_only_udm.security_result.action | La valeur est définie sur "ALLOW" (AUTORISER) si osquery_raw_data.return_code est égal à "SUCCESS" (SUCCÈS) ou si osquery_raw_data.success est égal à "1". | |
| read_only_udm.target.process.command_line | Valeur extraite de osquery_raw_data.cmdline si osquery_raw_data.cmdline n'est pas vide. | |
| read_only_udm.target.process.file.full_path | Valeur extraite de osquery_raw_data.path si osquery_raw_data.path n'est pas vide. | |
| read_only_udm.target.process.parent_process | La valeur est construite en itérant sur le tableau ancestor_list dans osquery_raw_data.ancestor_list. Pour chaque élément du tableau, la ligne de commande, le chemin d'accès complet au fichier et le PID sont extraits et mis en forme dans une structure JSON représentant la chaîne de processus. | |
| read_only_udm.target.process.pid | Valeur extraite de osquery_raw_data.pid si osquery_raw_data.pid n'est pas vide. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.