Collecter les journaux F5 ASM
Ce document explique comment ingérer les journaux F5 Application Security Manager (ASM) dans Google Security Operations à l'aide de Bindplane. L'analyseur gère différents formats de journaux F5 ASM (tels que syslog, CSV, CEF et Splunk) et les normalise dans l'Unified Data Model (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 remplir les conditions suivantes :
- Instance Google SecOps
- Windows 2016 ou version ultérieure, ou un hôte Linux avec
systemd
- Si vous exécutez le programme derrière un proxy, les ports du pare-feu sont ouverts.
- Accès privilégié à F5 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 le 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_file_path: '/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 Syslog dans F5 ASM
Connectez-vous à l'instance tmsh en saisissant la commande suivante :
tmsh
Modifiez la configuration syslog à l'aide de la commande suivante :
edit /sys syslog all-properties
La configuration Syslog s'ouvre dans l'éditeur de texte
vi
et ressemble à l'exemple suivant :modify syslog { auth-priv-from notice auth-priv-to emerg cron-from warning cron-to emerg daemon-from notice daemon-to emerg description none include none iso-date disabled kern-from notice kern-to emerg mail-from notice mail-to emerg messages-from notice messages-to warning remote-servers none user-log-from notice user-log-to emerg }
Remplacez la ligne
include none
par le filtre syslog suivant :include ` filter f_audit{ match(AUDIT); }; destination d_syslog_server { udp(\`<bindplane-ip>\` port (<bindplane-port>)); }; log { source(s_syslog_pipe); filter(f_audit); destination(d_syslog_server); }; `
Remplacez
<bindplane-ip>
et<bindplane-port>
par l'adresse IP et le numéro de port réels configurés pour votre agent Bindplane.Quittez
vi
en saisissant la séquence de touches suivante ::wq!
À l'invite suivante, saisissez
y
pour enregistrer les modifications apportées au fichier :Save changes? (y/n/e)
Enregistrez la configuration en saisissant la commande suivante :
save /sys config
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.