Collecter les journaux F5 BIG-IP ASM
Ce document explique comment ingérer les journaux F5 BIG-IP Application Security Manager (ASM) dans Google Security Operations à l'aide de Bindplane. L'analyseur gère différents formats de journaux (syslog, CSV, CEF, etc.) et les normalise au format UDM. Il utilise des modèles grok et des extractions de paires clé/valeur pour analyser les champs, le filtrage XML pour les détails sur les cas de non-respect, la logique conditionnelle pour la catégorisation des événements et le mappage de la gravité, et fusionne les champs extraits dans le schéma UDM.
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 le programme derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
- Assurez-vous de disposer d'un accès privilégié à F5 BIG-IP ASM.
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 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
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
Installation de Linux
- Ouvrez un terminal avec les 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
Ressources d'installation supplémentaires
- 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 (par exemple,
nano
,vi
ou le Bloc-notes).
- Recherchez le fichier
Modifiez le fichier
config.yaml
comme suit :receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: F5_ASM 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 selon les besoins de votre infrastructure.
Remplacez
<customer_id>
par le numéro client réel.Mettez à jour
/path/to/ingestion-authentication-file.json
en indiquant le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.
Redémarrez l'agent Bindplane pour appliquer les modifications.
Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :
sudo systemctl restart bindplane-agent
Pour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :
net stop BindPlaneAgent && net start BindPlaneAgent
Configurer la journalisation à distance sur F5 BIG-IP ASM
- Connectez-vous à l'UI Web de la console ASM.
- Accédez à Sécurité > Journaux d'événements > Profils de journalisation.
- Cliquez sur Créer.
Fournissez les informations de configuration suivantes :
- Nom du profil : saisissez un nom unique pour le profil.
- Sélectionnez Sécurité des applications.
- Dans l'onglet "Sécurité des applications", sélectionnez Avancé (si des configurations supplémentaires sont requises).
- Destination de stockage : sélectionnez Stockage à distance.
- Format de journalisation : sélectionnez Common Event Format (CEF).
- Videz le stockage local.
- Protocole : sélectionnez UDP ou TCP (selon la configuration de votre agent Bindplane).
- Adresses du serveur : saisissez l'adresse IP de l'agent Bindplane.
- Port : sélectionné par défaut
514
. Mettez à jour le paramètre de port en fonction de la configuration de votre agent Bindplane. - Cliquez sur Ajouter.
- Sélectionnez Journalisation des garanties.
- Sélectionnez Signaler les anomalies détectées.
- Facility : sélectionnez
LOG_LOCAL6
(vous pouvez éventuellement sélectionner la catégorie de l'établissement du trafic enregistré. Les valeurs possibles sont comprises entreLOG_LOCAL0
etLOG_LOCAL7
).
Cliquez sur Terminé.
Associer un profil de journalisation à une stratégie de sécurité
- Cliquez sur Trafic local > Serveurs virtuels.
- Cliquez sur le nom du serveur virtuel utilisé par la stratégie de sécurité.
- Dans le menu Sécurité, sélectionnez Règles.
- Assurez-vous que le paramètre Règle de sécurité des applications est activé et que Règle est défini sur la règle de sécurité de votre choix.
- Assurez-vous que le paramètre Profil de journal est défini sur Activé.
- Dans la liste Disponible, sélectionnez le profil à utiliser pour la stratégie de sécurité, puis déplacez-le dans la liste Sélectionné.
- Cliquez sur Mettre à jour.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
act |
security_result.action |
Si act est blocked , correspond à BLOCK. Si act est passed ou legal , la valeur est définie sur ALLOW. Si act contient alerted , il est mappé sur QUARANTAINE. Sinon, la valeur par défaut est ALLOW pour le format Splunk. |
app |
network.application_protocol |
Correspond directement à HTTPS s'il est présent dans le journal brut. |
attack_type |
security_result.category_details , metadata.description |
Utilisé conjointement avec d'autres champs pour déterminer security_result.category . Si aucune autre description n'est disponible, elle devient la description de l'événement. Pour les journaux au format Splunk, il est utilisé pour déterminer la catégorie et le récapitulatif si violations est vide. |
client_ip |
principal.ip , principal.asset.ip |
Mappé directement à l'adresse IP principale. |
cn1 |
network.http.response_code |
Correspond directement au code de réponse HTTP. |
cn2 |
security_result.severity_details |
Mappe directement les détails de gravité des résultats de sécurité. Utilisé avec response_code pour déterminer si un événement est une alerte. |
column1 |
principal.ip , principal.asset.ip |
Correspond à l'adresse IP principale pour certains journaux au format CSV. |
column2 |
target.port |
Mappe le port cible pour certains journaux au format CSV. |
column3 |
target.ip , target.asset.ip |
Mappe l'adresse IP cible pour certains journaux au format CSV. |
column4 |
security_result.severity |
Correspond à la gravité des résultats de sécurité pour certains journaux au format CSV. Les valeurs Information , Informational , 0 et 4 correspondent à INFORMATIONAL. Warning , 1 et 3 correspondent à "MOYEN". Error et 2 correspondent à "ERROR". Critical , CRITICAL et critical correspondent à CRITIQUE. |
column7 |
security_result.detection_fields , network.http.response_code |
Contient des données XML. viol_name dans request-violations est extrait et ajouté en tant que champs de détection avec la clé Request Violation Name_index . viol_name dans response_violations est extrait et ajouté en tant que champs de détection avec la clé Response Violation Name_index . response_code dans response_violations correspond à network.http.response_code . |
column8 |
security_result.rule_name |
Correspond au nom de la règle de résultat de sécurité pour certains journaux au format CSV. |
cs1 |
security_result.rule_name |
Correspond directement au nom de la règle du résultat de sécurité. |
cs2 |
security_result.summary |
Mappé directement au récapitulatif des résultats de sécurité. |
cs5 |
principal.ip , principal.asset.ip , additional.fields |
Si cs5 contient une URL LDAP JNDI, elle est ajoutée en tant que champ supplémentaire avec la clé JNDI_LDAP_URL . Sinon, s'il contient des adresses IP séparées par des virgules, toute adresse IP différente de principal_ip est ajoutée en tant qu'adresse IP principale supplémentaire. |
cs6 |
principal.location.country_or_region |
Correspond directement au pays ou à la région de l'adresse principale. |
data |
network.session_id , network.sent_bytes , network.tls.version |
Si elle est présente, elle est analysée au format JSON pour extraire sessionid , bits (mappé à sent_bytes ) et version . |
date_time |
metadata.event_timestamp |
Correspond directement au code temporel de l'événement après l'analyse et la conversion au format approprié. |
dest_ip |
target.ip , target.asset.ip |
Mappé directement à l'adresse IP cible. |
dest_port |
target.port |
Mappé directement au port cible. |
dhost |
target.hostname |
Mappé directement au nom d'hôte cible. |
dpt |
target.port |
Mappé directement au port cible. |
dst |
target.ip |
Mappé directement à l'adresse IP cible. |
dvc |
intermediary.ip |
Mappé directement à l'adresse IP intermédiaire. |
dvchost |
target.hostname , intermediary.hostname |
Mappe directement le nom d'hôte cible et le nom d'hôte intermédiaire. |
errdefs_msgno |
additional.fields |
Ajouté en tant que champ supplémentaire avec la clé errdefs_msgno . |
externalId |
additional.fields |
Ajouté en tant que champ supplémentaire avec la clé Support_Id . |
f5_host |
target.hostname , intermediary.hostname |
Mappe directement le nom d'hôte cible et le nom d'hôte intermédiaire. |
geo_info |
principal.location.country_or_region , security_result.detection_fields |
Correspond au pays ou à la région de l'établissement principal. Également ajouté en tant que champ de détection avec la clé geo_info . |
host |
target.hostname |
Mappé directement au nom d'hôte cible. |
ids |
additional.fields |
Analysé comme une liste d'ID d'assistance séparés par une virgule. Chaque ID est ajouté à un champ supplémentaire à valeur de liste avec la clé supportid . |
ip_addr_intelli |
security_result.detection_fields |
Ajouté en tant que champ de détection avec la clé ip_addr_intelli . |
ip_client |
principal.ip |
Mappé directement à l'adresse IP principale. |
ip_route_domain |
principal.ip , principal.asset.ip |
La partie IP est extraite et mappée à l'adresse IP principale. |
irule |
security_result.rule_name |
Correspond directement au nom de la règle du résultat de sécurité. |
irule-version |
security_result.rule_version |
Correspond directement à la version de la règle de résultat de sécurité. |
level |
security_result.severity , security_result.severity_details |
Permet de déterminer la gravité du résultat de sécurité. error ou warning correspondent à "HIGH". notice correspond à "MOYENNE". information ou info correspond à "BASSE". La valeur brute est également mappée sur severity_details . |
logtime |
metadata.event_timestamp |
Mappe directement le code temporel de l'événement après l'analyse. |
management_ip_address , management_ip_address_2 |
intermediary.ip |
Mappé directement à l'adresse IP intermédiaire. |
method |
network.http.method |
Mappé directement à la méthode HTTP. |
msg |
security_result.summary , metadata.description |
Correspond directement au récapitulatif des résultats de sécurité pour certains formats de journaux. Si aucune autre description n'est disponible, elle devient la description de l'événement. |
policy_name |
security_result.about.resource.name , security_result.rule_name |
Correspond directement au nom de ressource ou au nom de règle du résultat de sécurité. |
process |
target.application |
Mappé directement à l'application cible. |
process_id |
principal.process.pid |
Mappe directement l'ID de processus principal. |
protocol |
network.application_protocol , network.ip_protocol , app_protocol |
Mappé directement au protocole d'application ou au protocole IP, selon le format du journal. |
proxy_id |
security_result.rule_id |
Correspond directement à l'ID de règle du résultat de sécurité. |
query_string |
additional.fields |
Ajouté en tant que champ supplémentaire avec la clé query_string . |
referrer |
network.http.referral_url |
Correspond directement à l'URL de provenance HTTP. |
req_method |
network.http.method |
Mappé directement à la méthode HTTP. |
req_status |
security_result.action , security_result.action_details , security_result.detection_fields |
Si la valeur est blocked , mappe security_result.action sur BLOCK. Si passed ou legal , la valeur est définie sur ALLOW. Si la valeur contient alerted , elle est mappée sur QUARANTAINE. La valeur brute est également mappée sur action_details et ajoutée en tant que champ de détection avec la clé req_status . |
request |
target.url |
Mappé directement à l'URL cible. |
requestMethod |
network.http.method |
Mappé directement à la méthode HTTP. |
resp |
security_result.detection_fields |
Ajouté en tant que champ de détection avec la clé resp . |
resp_code |
network.http.response_code |
Correspond directement au code de réponse HTTP. |
response |
security_result.summary |
Mappé directement au récapitulatif des résultats de sécurité. |
response_code |
network.http.response_code |
Correspond directement au code de réponse HTTP. |
route_domain |
additional.fields |
Ajouté en tant que champ supplémentaire avec la clé route_domain . |
rt |
metadata.event_timestamp |
Mappe directement le code temporel de l'événement après l'analyse. |
sev |
security_result.severity , security_result.severity_details |
Permet de déterminer la gravité du résultat de sécurité. ERROR correspond à ERROR. La valeur brute est également mappée sur severity_details . |
severity |
security_result.severity , security_result.severity_details |
Permet de déterminer la gravité du résultat de sécurité. Informational correspond à "FAIBLE", Error ou warning correspondent à "ÉLEVÉE", critical correspond à "CRITIQUE", notice correspond à "MOYENNE", information ou info correspondent à "FAIBLE". La valeur brute est également mappée sur severity_details . |
sig_ids |
security_result.rule_id |
Correspond directement à l'ID de règle du résultat de sécurité. |
sig_names |
security_result.rule_name |
Correspond directement au nom de la règle du résultat de sécurité. |
snat_ip |
principal.nat_ip |
Mappé directement à l'adresse IP NAT principale. |
snat_port |
principal.nat_port |
Mappe directement le port NAT principal. |
src |
principal.ip , principal.asset.ip |
Mappé directement à l'adresse IP principale. |
spt |
principal.port |
Mappé directement au port principal. |
sub_violates |
security_result.about.resource.attribute.labels |
Ajouté en tant que libellé avec la clé Sub Violations aux attributs de ressources de résultats de sécurité. |
sub_violations |
security_result.about.resource.attribute.labels |
Ajouté en tant que libellé avec la clé Sub Violations aux attributs de ressources de résultats de sécurité. |
summary |
security_result.summary |
Mappé directement au récapitulatif des résultats de sécurité. |
support_id |
metadata.product_log_id |
Préfixé par support_id - et associé à l'ID du journal des produits. |
suid |
network.session_id |
Mappé directement à l'ID de session réseau. |
suser |
principal.user.userid |
Mappé directement sur l'ID utilisateur principal. |
timestamp |
metadata.event_timestamp |
Correspond directement au code temporel de l'événement après l'analyse et la conversion au format approprié. |
unit_host |
principal.hostname , principal.asset.hostname |
Mappé directement au nom d'hôte principal. |
uri |
principal.url |
Mappé directement à l'URL principale. |
user_id |
principal.user.userid |
Mappé directement sur l'ID utilisateur principal. |
user_name |
principal.user.user_display_name |
Correspond directement au nom à afficher de l'utilisateur principal. |
username |
principal.user.userid |
Mappé directement sur l'ID utilisateur principal. |
useragent |
network.http.user_agent , network.http.parsed_user_agent |
Correspond directement à l'user-agent HTTP. Également analysé et mappé à l'user-agent analysé. |
virtualserver |
network.tls.client.server_name |
Correspond directement au nom du serveur client TLS. |
violate_details |
security_result.detection_fields , network.http.response_code |
Contient des données XML. viol_name dans request-violations est extrait et ajouté en tant que champs de détection avec la clé Request Violation Name_index . viol_name dans response_violations est extrait et ajouté en tant que champs de détection avec la clé Response Violation Name_index . response_code dans response_violations correspond à network.http.response_code . |
violate_rate |
security_result.detection_fields |
Ajouté en tant que champ de détection avec la clé violate_rate . |
violation_rating |
security_result.about.resource.attribute.labels |
Ajouté en tant que libellé avec la clé Violations Rating aux attributs de ressources de résultats de sécurité. |
violations |
security_result.description |
Correspond directement à la description du résultat de sécurité. Pour les journaux au format Splunk, il est utilisé pour déterminer le récapitulatif, le cas échéant. |
virus_name |
security_result.threat_name |
Mappe directement le nom de la menace du résultat de sécurité. |
vs_name |
network.tls.client.server_name |
Correspond directement au nom du serveur client TLS. |
websocket_direction |
network.direction |
Si la valeur est clientToServer , elle est mappée sur INBOUND. Si la valeur est ServerToclient , elle correspond à OUTBOUND. |
websocket_message_type |
security_result.detection_fields |
Ajouté en tant que champ de détection avec la clé WebsocketMessageType . |
x_fwd_hdr_val |
principal.ip , principal.asset.ip |
Mappé directement à l'adresse IP principale. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.