Collecter les journaux d'accès IBM Security Verify
Ce document explique comment collecter les journaux IBM Security Verify Access. L'analyseur extrait des champs courants tels que les codes temporels, les noms d'hôte et les descriptions à l'aide de modèles Grok. Il utilise ensuite l'analyse XML pour obtenir des informations détaillées sur l'événement intégrées dans le champ de description, puis mappe les données extraites sur le modèle de données unifié (UDM) pour représenter les événements de sécurité de manière standardisée.
Avant de commencer
- Assurez-vous de disposer d'une instance Google Security Operations.
- Assurez-vous d'utiliser Windows 2016 ou une version ultérieure, ou un hôte Linux avec
systemd
. - Si vous exécutez l'application derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
- Assurez-vous de disposer d'un accès administrateur à IBM Security Verify Access (ISVA).
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 le numéro client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Profil.
- Copiez et sauvegardez l'ID client dans la section Détails de l'organisation.
Installer l'agent BindPlane
Installation de Windows
- Ouvrez l'invite de commande 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 des 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
Autres ressources d'installation
- Pour plus d'options d'installation, consultez ce 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 (
nano
,vi
ou Bloc-notes, par exemple).
- Recherchez le fichier
Modifiez le fichier
config.yaml
comme suit :receivers: udplog: # Replace the below port <54525> and IP <0.0.0.0> with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: ibm_security_verify 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 dans votre infrastructure si nécessaire.
Remplacez
<customer_id>
par le numéro client réel.Remplacez
/path/to/ingestion-authentication-file.json
par le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification d'ingestion Google SecOps.
Redémarrez l'agent BindPlane pour appliquer les modifications
Sous Linux, pour redémarrer l'agent BindPlane, exécutez la commande suivante:
sudo systemctl restart bindplane-agent
Sous Windows, pour redémarrer l'agent BindPlane, vous pouvez utiliser la console Services ou saisir la commande suivante:
net stop BindPlaneAgent && net start BindPlaneAgent
Personnaliser le format du journal
- Pour modifier le fichier de configuration
WebSEAL
, utilisez l'interface de gestion locale (LMI) de l'appliance. - Dans la LMI, accédez à Gestion du proxy inverse.
- Cliquez sur Manage > Configuration > Edit configuration file (Gérer > Configuration > Modifier le fichier de configuration) (vous pouvez utiliser l'éditeur pour modifier directement le fichier de configuration
WebSEAL
). - Accédez à logging[stanza], recherchez
syntax requests = {yes|no}
, puis cliquez sur Oui. - Accédez au paramètre
gmt-time
et modifiez-le comme suit:gmt-time = yes
. Remplacez le paramètre request-log-format par le suivant:
request-log-format = ibmsva: %h %l "%u" %t "%r" %s %b %T %j %{X-Forwarded-For}i %a %A %H %p %m %U %v %d %q
Vous trouverez ci-dessous une explication de chaque directive:
ibmsva:
Identifie les journaux de l'appareil SVA%h
: hôte distant%l
: nom de journal distant%u
: utilisateur distant%t
: heure et date au format CLF%r
: première ligne de la requête%s
: état de la réponse%b
: octets de la réponse (en-têtes HTTP exclus)%T
: temps d'exécution de la requête (en secondes)%j
: nom de la jonction%X-Forwarded-For
: adresse IP de transfert%a
: adresse IP distante%A
: adresse IP locale%H
: protocole de requête%p
: port%m
: méthode de requête (GET, POST, HEAD)%U
: URL demandée%v
: nom du serveur%d
: identifiant de la transaction%q
: chaîne de requête
Configurer le transfert Syslog dans ISVA
- Connectez-vous à l'interface de gestion locale ISVA.
- Accédez à Surveillance > Journaux > Transfert Syslog à distance.
- Cliquez sur Ajouter.
- Spécifiez les détails du serveur syslog distant.
- Serveur: adresse IP ou nom d'hôte du serveur syslog (Bindplane).
- Port: port sur lequel le serveur syslog écoute les requêtes (Bindplane).
- Protocole: sélectionnez UDP ou TCP (selon votre configuration syslog/Bindplane).
- Format: sélectionnez Syslog.
- Cliquez sur Enregistrer.
Configurer les sources de journaux pour un serveur de journaux distant
- Sélectionnez le serveur syslog distant auquel envoyer les journaux.
- Cliquez sur Sources.
- Cliquez sur Ajouter.
Indiquez les détails de la source de journaux, puis cliquez sur OK.
- Nom: sélectionnez WebSEAL.
- Nom de l'instance: sélectionnez l'instance WebSEAL.
- Fichier journal: nom du fichier journal source.
- Facultatif: Tag (Libellé) : libellé à ajouter aux entrées de journal envoyées.
- Établissement: tous les messages seront envoyés avec le code d'établissement spécifié (liste des codes disponibles).
- Severity (Gravité) : gravité des entrées de journal envoyées.
- Tous les messages seront envoyés avec le niveau de gravité spécifié.
Cliquez sur Enregistrer.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
action | read_only_udm.security_result.action_details | Extrait du champ XML "/event/originator/action" lorsque le champ "description" contient "event". |
application | read_only_udm.target.application | Extrait à l'aide du modèle grok du champ "message". |
auth_details | read_only_udm.security_result.detection_fields.value | Extrait du champ XML "/event/accessor/principal/@auth" lorsque le champ "description" contient "event". La clé est définie sur "Auth". |
authntype | read_only_udm.security_result.detection_fields.value | Extrait du champ XML "/event/authntype" lorsque le champ "description" contient "event". La clé est définie sur "Authntype". |
données | read_only_udm.metadata.description | Si le champ "data" n'est pas vide, sa valeur remplace la valeur existante de "read_only_udm.metadata.description". |
description | read_only_udm.metadata.description | Extrait à l'aide du modèle grok du champ "message". Si le champ "description" contient "event", il est analysé au format XML pour extraire d'autres champs. |
event_id | read_only_udm.metadata.product_log_id | Extrait du champ XML "/event/originator/event_id" lorsque le champ "description" contient "event". |
nom d'hôte | read_only_udm.principal.hostname, read_only_udm.principal.asset.hostname | Extrait à l'aide du modèle grok du champ "message". |
id | read_only_udm.metadata.product_log_id | Extrait à l'aide du modèle grok du champ "message". |
emplacement | read_only_udm.principal.location.name | Extrait du champ XML "/event/originator/location" lorsque le champ "description" contient "event". |
résultat | read_only_udm.security_result.detection_fields.value | Extrait du champ XML "/event/outcome" lorsque le champ "description" contient "event". La clé est définie sur "Résultat". |
outcome_reason | read_only_udm.security_result.summary | Extrait du champ XML "/event/outcome/@reason" lorsque le champ "description" contient "event". Permet également de déterminer la valeur de "read_only_udm.security_result.action". Définissez-la sur "BLOCK" si "outcome_reason" contient "fail" (insensible à la casse), sinon sur "ALLOW". |
outcome_status | read_only_udm.security_result.detection_fields.value | Extrait du champ XML "/event/outcome/@status" lorsque le champ "description" contient "event". La clé est définie sur "État du résultat". |
originator_blade | read_only_udm.security_result.detection_fields.value | Extrait du champ XML "/event/originator/@blade" lorsque le champ "description" contient "event". La clé est définie sur "Originator Blade" (Lame de l'initiateur). |
originator_component | read_only_udm.security_result.detection_fields.value | Extrait du champ XML "/event/originator/component" lorsque le champ "description" contient "event". La clé est définie sur "Composant d'origine". |
originator_instance | read_only_udm.security_result.detection_fields.value | Extrait du champ XML "/event/originator/@instance" lorsque le champ "description" contient "event". La clé est définie sur "Instance d'origine". |
session_id | read_only_udm.network.session_id | Extrait du champ XML "/event/accessor/session_id" lorsque le champ "description" contient "event". |
target_url | read_only_udm.target.url | Extrait du champ XML "/event/target/url" lorsque le champ "description" contient "event". |
thread_id | read_only_udm.security_result.detection_fields.value | Extrait à l'aide du modèle grok du champ "message". La clé est définie sur "Thread id" (ID de thread). |
timestamp | read_only_udm.metadata.event_timestamp | Extrait à l'aide du modèle grok du champ "message". Formaté à l'aide du filtre "date" en fonction de la présence et du format du champ "fuseau horaire". |
time_stamp | read_only_udm.metadata.event_timestamp | Extrait du champ XML "/event/date" lorsque le champ "description" contient "event". Formaté à l'aide du filtre "date". |
timezone | Utilisé avec le champ "timestamp" pour mettre en forme le champ "read_only_udm.metadata.event_timestamp" à l'aide du filtre "date". | |
url | read_only_udm.target.url | Extrait à l'aide du modèle grok du champ "message". |
utilisateur | read_only_udm.principal.user.userid | Extrait du champ XML "/event/accessor/principal" lorsque le champ "description" contient "event". |
user_location | read_only_udm.principal.ip, read_only_udm.principal.asset.ip | Extrait du champ XML "/event/accessor/user_location" lorsque le champ "description" contient "event". Si "user_location_type" contient "ip" (sans distinction entre majuscules et minuscules), il est analysé en tant qu'adresse IP et mappé à la fois sur "read_only_udm.principal.ip" et "read_only_udm.principal.asset.ip". |
user_location_type | Permet de déterminer si "user_location" doit être analysé en tant qu'adresse IP. | |
N/A | read_only_udm.metadata.vendor_name | Défini sur "IBM_SECURITY_VERIFY". |
N/A | read_only_udm.metadata.product_name | Défini sur "IBM_SECURITY_VERIFY". |
N/A | read_only_udm.metadata.event_type | Initialement défini sur "STATUS_UPDATE". Remplacer par "USER_LOGIN" si les champs "user" et "hostname" sont extraits. |
N/A | read_only_udm.extensions.auth.type | Définissez ce paramètre sur "SSO" si les champs "user" et "hostname" sont extraits. |
N/A | read_only_udm.network.application_protocol | Défini sur "HTTP" si le champ "message" contient "HttpServletRequest". |
N/A | read_only_udm.metadata.log_type | Défini sur "IBM_SECURITY_VERIFY", extrait des métadonnées du journal. |
Modifications
2024-05-13
- L'analyseur a été mis à jour pour prendre en charge les journaux au format XML.
2023-01-25
- Analyseur nouvellement créé.