Collecter les journaux Citrix StoreFront
Ce document explique comment ingérer des journaux Citrix StoreFront dans Google Security Operations à l'aide de Bindplane. L'analyseur extrait les champs des journaux mis en forme du journal des événements Windows Citrix StoreFront. Il utilise la collecte du journal d'événements Windows pour analyser le message du journal, puis mappe ces valeurs au modèle de données unifié (UDM, Unified Data Model). Il définit également les valeurs de métadonnées par défaut pour la source et le type d'événement. Le parseur extrait les données des journaux JSON Citrix StoreFront en décomposant le champ de message en entités individuelles telles que Session
, User
, AppInstance
, App
, Connection
et Machine
à l'aide d'une série de modèles grok
. Il mappe ensuite les champs extraits à une structure de modèle de données unifié (UDM), en l'enrichissant avec des informations sur le réseau, le principal, l'intermédiaire et la cible en fonction de la logique conditionnelle et des transformations de données.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps.
- Un hôte Windows 2016 ou version ultérieure avec
systemd
sur lequel Bindplane sera installé - Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
- Accès privilégié au serveur Citrix StoreFront et à la console de gestion
- Accès administrateur au serveur Windows hébergeant StoreFront
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres 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
Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.
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
Ressources d'installation supplémentaires
- Pour plus d'options d'installation, consultez ce guide d'installation.
Configurer l'agent Bindplane pour ingérer les journaux d'événements Windows et les envoyer à Google SecOps
Accédez au fichier de configuration :
- Trouvez 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).
- Trouvez le fichier
Modifiez le fichier
config.yaml
comme suit :receivers: windowseventlog/storefront: channel: Application operators: - type: filter expr: 'record["source_name"] matches "^Citrix"' exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: 'C:/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: CUSTOMER_ID_PLACEHOLDER endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'CITRIX_STOREFRONT' raw_log_field: body ingestion_labels: service: pipelines: logs/storefront: receivers: - windowseventlog/storefront exporters: - chronicle/chronicle_w_labels
- Remplacez
CUSTOMER_ID_PLACEHOLDER
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 de l'ingestion Google SecOps.
- Remplacez
Redémarrez l'agent Bindplane pour appliquer les modifications.
Pour redémarrer l'agent BindPlane dans Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :
net stop BindPlaneAgent && net start BindPlaneAgent
Configurer la journalisation des événements StoreFront
- Connectez-vous au serveur StoreFront avec des droits d'administrateur.
- Ouvrez PowerShell en tant qu'administrateur.
Chargez le module PowerShell StoreFront :
Add-PSSnapin Citrix.DeliveryServices.Framework.Commands
Activez la journalisation détaillée pour le dépannage (facultatif) :
Set-STFDiagnostics -All -TraceLevel "Info" -confirm:$False
Vérifiez que la journalisation d'événements Windows est activée :
- Ouvrez l'Observateur d'événements sur le serveur StoreFront.
- Accédez à Journaux des applications et des services > Services de livraison Citrix.
- Vérifiez que les événements sont consignés dans les journaux pour le service d'authentification, les magasins et les sites Receiver pour Web.
Facultatif : Configurer la limitation du journal des événements
- Accédez aux répertoires de configuration StoreFront :
- Service d'authentification :
C:/inetpub/wwwroot/Citrix/Authentication
- Magasin :
C:/inetpub/wwwroot/Citrixstorename
- Récepteur pour le site Web :
C:/inetpub/wwwroot/Citrixstorename/Web
- Service d'authentification :
- Ouvrez le fichier
web.config
dans chaque répertoire à l'aide d'un éditeur de texte. Localisez l'élément du journaliseur et configurez-le si nécessaire :
<logger duplicateInterval="00:01:00" duplicateLimit="10">
duplicateInterval : définissez la période en heures, minutes et secondes pendant laquelle les entrées de journaux en double sont surveillées.
duplicateLimit : définissez le nombre d'entrées en double qui doivent être consignées dans l'intervalle de temps spécifié pour déclencher la limitation du journal.
Enregistrez les fichiers de configuration.
Vérifier la collecte des journaux
- Ouvrez la Visionneuse d'événements Windows sur le serveur StoreFront.
- Accédez à Journaux Windows > Application ou Journaux des applications et services > Citrix Delivery Services.
- Vérifiez que les événements StoreFront sont générés.
- Consultez les journaux de l'agent Bindplane pour confirmer que les journaux sont transférés à Google SecOps.
Table de mappage UDM
Champ du journal | Mappage UDM | Logique |
---|---|---|
App.PublishedName | _principal.application | La valeur est extraite du champ App.PublishedName. |
Connection.ClientAddress | _principal.asset.ip | La valeur est extraite du champ Connection.ClientAddress. |
Connection.ClientName | _principal.asset.hostname | La valeur est extraite du champ Connection.ClientName. |
Connection.ClientPlatform | _principal.asset.platform_software.platform | La valeur est extraite du champ "Connection.ClientPlatform" et convertie en majuscules. Si la valeur est "WINDOWS", "MAC" ou "LINUX", elle est utilisée directement. Sinon, la valeur est définie sur "UNKNOWN_PLATFORM". |
Connection.ConnectedViaHostName | src.hostname | La valeur est extraite du champ "Connection.ConnectedViaHostName". |
Connection.LaunchedViaHostName | _intermediary.hostname | La valeur est extraite du champ "Connection.LaunchedViaHostName". L'espace de noms est défini sur "Serveur StoreFront". |
Connection.LaunchedViaIPAddress | _intermediary.ip | La valeur est extraite du champ "Connection.LaunchedViaIPAddress". |
Connection.Protocol | network.application_protocol | La valeur est extraite du champ "Connection.Protocol". Si la valeur est "HDX", elle est définie sur "UNKNOWN_APPLICATION_PROTOCOL". |
Machine.AgentVersion | metadata.product_version | La valeur est extraite du champ "Machine.AgentVersion". |
Machine.AssociatedUserNames | _intermediary.user.userid | La valeur est extraite du champ Machine.AssociatedUserNames. Chaque nom est extrait et utilisé comme ID utilisateur pour un objet utilisateur intermédiaire. |
Machine.AssociatedUserUPNs | _target.group.email_addresses | La valeur est extraite du champ Machine.AssociatedUserUPNs. Chaque adresse e-mail est extraite et ajoutée au champ "email_addresses" du groupe cible. |
Machine.ControllerDnsName | _intermediary.hostname | La valeur est extraite du champ "Machine.ControllerDnsName". L'espace de noms est défini sur "Controller". |
Machine.CreatedDate | _target.asset.attribute.creation_time | La valeur est extraite du champ "Machine.CreatedDate" et convertie en code temporel. |
Machine.DesktopGroupId | _target.group.product_object_id | La valeur est extraite du champ Machine.DesktopGroupId. |
Machine.DnsName | _target.asset.network_domain | La valeur est extraite du champ Machine.DnsName. |
Machine.HostedMachineName | _target.asset.hostname | La valeur est extraite du champ "Machine.HostedMachineName". |
Machine.HostingServerName | _intermediary.hostname | La valeur est extraite du champ Machine.HostingServerName. L'espace de noms est défini sur "Hypervisor". |
Machine.IPAddress | _target.asset.ip | La valeur est extraite du champ Machine.IPAddress. |
Machine.LastDeregisteredDate | _target.asset.last_discover_time | La valeur est extraite du champ "Machine.LastDeregisteredDate" et convertie en code temporel. |
Machine.ModifiedDate | _target.asset.system_last_update_time | La valeur est extraite du champ "Machine.ModifiedDate" et convertie en code temporel. |
Machine.Name | _target.asset.asset_id, _target.administrative_domain | La valeur est extraite du champ "Machine.Name" et divisée en parties "domaine" et "ressource". La partie domaine est utilisée comme domaine administratif cible, et la partie composant est utilisée pour construire l'ID de composant cible au format "machine: |
Machine.OSType | _target.asset.platform_software.platform_version | La valeur est extraite du champ Machine.OSType. |
Machine.PoweredOnDate | _target.asset.last_boot_time | La valeur est extraite du champ "Machine.PoweredOnDate" et convertie en code temporel. |
Machine.RegistrationStateChangeDate | _target.asset.first_discover_time | La valeur est extraite du champ "Machine.RegistrationStateChangeDate" et convertie en code temporel. |
Session.EndDate | _vulns.last_found | La valeur est extraite du champ "Session.EndDate" et convertie en code temporel. |
Session.LifecycleState | extensions.auth.auth_details | La valeur est extraite du champ Session.LifecycleState. Si la valeur est définie sur 0, elle est définie sur "ACTIVE". Si la valeur est 1, elle est définie sur "DELETED". Si la valeur est 2 ou 3, elle est définie sur "UNKNOWN_AUTHENTICATION_STATUS". |
Session.LogOnDuration | network.session_duration.seconds | La valeur est extraite du champ "Session.LogOnDuration" et convertie en entier. |
Session.SessionKey | network.session_id | La valeur est extraite du champ Session.SessionKey. |
Session.StartDate | _vulns.first_found | La valeur est extraite du champ "Session.StartDate" et convertie en code temporel. |
User.Domain | _principal.user.company_name, _principal.administrative_domain | La valeur est extraite du champ "User.Domain" et utilisée à la fois comme nom de l'entreprise de l'utilisateur principal et comme domaine administratif principal. |
User.FullName | _principal.user.user_display_name | La valeur est extraite du champ "User.FullName". |
User.Sid | _principal.user.windows_sid | La valeur est extraite du champ User.Sid. |
User.Upn | _principal.user.email_addresses | La valeur est extraite du champ User.Upn et ajoutée au champ email_addresses de l'utilisateur principal. |
User.UserName | _principal.user.userid | La valeur est extraite du champ User.UserName. |
metadata.event_type | La valeur est définie sur "USER_LOGIN". | |
metadata.vendor_name | La valeur est définie sur "Citrix". | |
metadata.product_name | La valeur est définie sur "Monitor Service OData". | |
extensions.auth.type | La valeur est définie sur "MACHINE". | |
_intermediary.namespace | La valeur est définie sur "Serveur StoreFront", "Contrôleur" ou "Hyperviseur" en fonction de l'objet intermédiaire. | |
_target.asset.type | La valeur est définie sur "WORKSTATION". |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.