Collecter les journaux Cisco Secure ACS
Ce document explique comment collecter les journaux du serveur Cisco Secure Access Control Server (ACS) à l'aide d'un transfert Google Security Operations.
Pour en savoir plus, consultez Ingestion de données dans Google Security Operations.
Un libellé d'ingestion identifie l'analyseur qui normalise les données de journal brutes au format UDM structuré. Les informations présentées dans ce document s'appliquent à l'analyseur avec le libellé d'ingestion CISCO_ACS
.
Configurer Cisco Secure ACS
- Connectez-vous à la console Cisco Secure ACS à l'aide d'identifiants administrateur.
- Dans la console Cisco Secure ACS, sélectionnez System administration (Administration système) > Configuration (Configuration) > Log configuration (Configuration des journaux) > Remote log targets (Cibles de journaux distants).
- Cliquez sur Créer.
Dans la fenêtre Créer, spécifiez les valeurs des champs suivants:
Champ Description Nom Nom du transmettant Google Security Operations. Description Description du transfert Google Security Operations. Adresse IP Adresse IP du transfert Google Security Operations. Utiliser les options avancées de syslog Sélectionnez cette option pour activer les options syslog avancées. Type de cible Sélectionnez le protocole syslog TCP ou UDP. Port Utilisez un port élevé, tel que 10514. Code de l'établissement LOCAL6 (code = 22, par défaut) Longueur maximale La valeur recommandée est 1 024. Cliquez sur Envoyer. La fenêtre Cibles de journalisation distantes s'affiche avec la nouvelle configuration de la cible de journalisation distante.
Dans la console Cisco Secure ACS, sélectionnez System administration (Administration système) > Configuration (Configuration) > Log configuration (Configuration des journaux) > Logging categories (Catégories de journalisation) > Per-Instance (Par instance).
Sélectionnez ACS, puis cliquez sur Configurer.
Dans la fenêtre Par instance, sélectionnez une catégorie de journalisation, puis cliquez sur Modifier.
Dans l'onglet General (Général), pour certaines catégories de journalisation, la gravité de la journalisation doit être définie par défaut ou comme indiqué par le fournisseur.
Pour Cisco Secure ACS, la gravité par défaut est Avertissement pour toutes les catégories de journalisation, à l'exception de celles pour lesquelles la gravité ne peut pas être modifiée, telles que les notifications d'audit AAA, les notifications de comptabilité, les notifications d'audit administratives et opérationnelles, et les notifications de statistiques système.
Cliquez sur l'onglet Cible syslog distante, puis déplacez la cible distante nouvellement créée de Cibles disponibles vers Cibles sélectionnées.
Cliquez sur Envoyer.
Pour configurer des cibles distantes pour d'autres catégories de journalisation, répétez les étapes 8 à 10.
Configurer le forwarder Google Security Operations et le syslog pour ingérer les journaux Cisco Secure ACS
- Accédez à Paramètres du SIEM > Transferts.
- Cliquez sur Ajouter un forwarder.
- Dans le champ Nom du transmettant, saisissez un nom unique pour le transmettant.
- Cliquez sur Envoyer. Le forwarder est ajouté, et la fenêtre Ajouter une configuration de collecteur s'affiche.
- Dans le champ Nom du collecteur, saisissez un nom.
- Sélectionnez Cisco ACS comme type de journal.
- Sélectionnez Syslog comme type de collecteur.
- Configurez les paramètres d'entrée obligatoires suivants :
- Protocole: spécifiez le protocole.
- Adresse: spécifiez l'adresse IP ou le nom d'hôte cible où se trouve le collecteur et les adresses des données syslog.
- Port: spécifiez le port cible sur lequel se trouve le collecteur et qui écoute les données syslog.
- Cliquez sur Envoyer.
Pour en savoir plus sur les transferts Google Security Operations, consultez la documentation sur les transferts Google Security Operations. Pour en savoir plus sur les exigences de chaque type de forwarder, consultez la section Configuration des forwarders par type. Si vous rencontrez des problèmes lors de la création de transmetteurs, contactez l'assistance Google Security Operations.
Référence de mappage de champ
Cet analyseur gère les journaux Cisco ACS, y compris l'authentification, la facturation, les diagnostics et les statistiques système. Il utilise des modèles Grok pour extraire des champs de différents formats de journaux (SYSLOG + KV, LEEF), normalise les codes temporels et les fuseaux horaires, et met en correspondance des champs clés avec l'UDM. Il gère différents types de journaux avec une logique spécifique pour les succès/échecs d'authentification, la comptabilité TACACS+ et les événements RADIUS. Il enrichit également l'UDM avec des champs supplémentaires, tels que des informations sur l'appareil et des informations d'authentification.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
Acct-Authentic |
additional.fields[].value.string_value |
La valeur est extraite du champ Acct-Authentic . |
Acct-Delay-Time |
additional.fields[].value.string_value |
La valeur est extraite du champ Acct-Delay-Time . |
Acct-Input-Octets |
additional.fields[].value.string_value |
La valeur est extraite du champ Acct-Input-Octets . |
Acct-Input-Packets |
additional.fields[].value.string_value |
La valeur est extraite du champ Acct-Input-Packets . |
Acct-Output-Octets |
additional.fields[].value.string_value |
La valeur est extraite du champ Acct-Output-Octets . |
Acct-Output-Packets |
additional.fields[].value.string_value |
La valeur est extraite du champ Acct-Output-Packets . |
Acct-Session-Id |
additional.fields[].value.string_value |
La valeur est extraite du champ Acct-Session-Id . |
Acct-Session-Time |
additional.fields[].value.string_value |
La valeur est extraite du champ Acct-Session-Time . |
Acct-Status-Type |
additional.fields[].value.string_value |
La valeur est extraite du champ Acct-Status-Type . |
Acct-Terminate-Cause |
additional.fields[].value.string_value |
La valeur est extraite du champ Acct-Terminate-Cause . |
ACSVersion |
additional.fields[].value.string_value |
La valeur est extraite du champ ACSVersion . |
AD-Domain |
principal.group.group_display_name |
La valeur est extraite du champ AD-Domain . |
AD-IP-Address |
principal.ip |
La valeur est extraite du champ AD-IP-Address . |
Called-Station-ID |
additional.fields[].value.string_value |
La valeur est extraite du champ Called-Station-ID . |
Calling-Station-ID |
additional.fields[].value.string_value |
La valeur est extraite du champ Calling-Station-ID . |
Class |
additional.fields[].value.string_value |
La valeur est extraite du champ Class . |
CmdSet |
(non mappé) | Non mappé sur l'objet IDM. |
ConfigVersionId |
additional.fields[].value.number_value |
La valeur est extraite du champ ConfigVersionId et convertie en valeur à virgule flottante. |
DestinationIPAddress |
target.ip , intermediary.ip |
La valeur est extraite du champ DestinationIPAddress . intermediary.ip est dérivé de Device IP Address . |
DestinationPort |
target.port |
La valeur est extraite du champ DestinationPort et convertie en entier. |
Device IP Address |
intermediary.ip |
La valeur est extraite du champ Device IP Address . |
Device Port |
intermediary.port |
La valeur est extraite du champ Device Port et convertie en entier. |
DetailedInfo |
security_result.summary , security_result.description , security_result.action |
Si DetailedInfo est "Authentication succeed" (Authentification réussie), security_result.summary est "successful login occurred" (Connexion réussie) et security_result.action est ALLOW. Si DetailedInfo contient "Nom d'utilisateur ou mot de passe incorrect spécifié", security_result.summary indique "Échec de la connexion" et security_result.action est "BLOCAGE". security_result.description est dérivé de log_header . |
Framed-IP-Address |
principal.ip |
La valeur est extraite du champ Framed-IP-Address . |
Framed-Protocol |
additional.fields[].value.string_value |
La valeur est extraite du champ Framed-Protocol . |
NAS-IP-Address |
target.ip |
La valeur est extraite du champ NAS-IP-Address . |
NAS-Port |
additional.fields[].value.string_value |
La valeur est extraite du champ NAS-Port . |
NAS-Port-Id |
target.port |
La valeur est extraite du champ NAS-Port-Id et convertie en entier. |
NAS-Port-Type |
additional.fields[].value.string_value |
La valeur est extraite du champ NAS-Port-Type . |
NetworkDeviceName |
target.hostname |
La valeur est extraite du champ NetworkDeviceName . |
Protocol |
additional.fields[].value.string_value |
La valeur est extraite du champ Protocol . |
RadiusPacketType |
(non mappé) | Non mappé sur l'objet IDM. |
Remote-Address |
principal.ip , target.ip |
La valeur est extraite du champ Remote-Address et analysée en tant qu'adresse IP. Il est mappé sur principal.ip pour les événements d'authentification et sur target.ip pour les événements de comptabilité et de diagnostic. |
RequestLatency |
additional.fields[].value.string_value |
La valeur est extraite du champ RequestLatency . |
Response |
principal.user.userid |
Si Response contient "User-Name", le nom d'utilisateur est extrait et mappé sur principal.user.userid . |
SelectedAccessService |
additional.fields[].value.string_value |
La valeur est extraite du champ SelectedAccessService . |
SelectedAuthenticationIdentityStores |
security_result.detection_fields[].value |
La valeur est extraite du champ SelectedAuthenticationIdentityStores . |
SelectedAuthorizationProfiles |
security_result.detection_fields[].value |
La valeur est extraite du champ SelectedAuthorizationProfiles . |
Service-Type |
additional.fields[].value.string_value |
La valeur est extraite du champ Service-Type . |
Tunnel-Client-Endpoint |
additional.fields[].value.string_value |
La valeur est extraite du champ Tunnel-Client-Endpoint et analysée en tant qu'adresse IP. |
User |
target.user.userid |
La valeur est extraite du champ User . |
UserName |
target.user.userid , principal.mac |
Si UserName est une adresse MAC, elle est analysée et mappée sur principal.mac . Sinon, il est mappé sur target.user.userid . |
ac-user-agent |
network.http.user_agent |
La valeur est extraite du champ ac-user-agent . |
cat |
metadata.description |
La valeur est extraite du champ cat . |
device-mac |
principal.mac |
La valeur est extraite du champ device-mac , des deux-points sont ajoutés et la valeur est convertie en minuscules. Si device-mac est "00", il est remplacé par "00:00:00:00:00:00". |
device-platform |
principal.asset.platform_software.platform |
Si device-platform est "win", la valeur "WINDOWS" est attribuée à principal.asset.platform_software.platform . |
device-platform-version |
principal.asset.platform_software.platform_version |
La valeur est extraite du champ device-platform-version . |
device-public-mac |
principal.mac |
La valeur est extraite du champ device-public-mac , les traits d'union sont remplacés par des deux-points et la valeur est convertie en minuscules. |
device-type |
principal.asset.hardware.model |
La valeur est extraite du champ device-type . |
device-uid |
principal.asset.asset_id |
La valeur est extraite du champ device-uid et précédée de "ASSET ID: ". |
device-uid-global |
principal.asset.product_object_id |
La valeur est extraite du champ device-uid-global . |
hostname |
principal.hostname |
La valeur est extraite du champ hostname . |
ip:source-ip |
principal.ip |
La valeur est extraite du champ ip:source-ip . |
kv.ADDomain |
(non mappé) | Non mappé sur l'objet IDM. |
kv.Airespace-Wlan-Id |
(non mappé) | Non mappé sur l'objet IDM. |
kv.AuthenticationIdentityStore |
(non mappé) | Non mappé sur l'objet IDM. |
kv.AVPair |
(non mappé) | Non mappé sur l'objet IDM. |
kv.CVPN3000/ASA/PIX7.x-DAP-Tunnel-Group-Name |
(non mappé) | Non mappé sur l'objet IDM. |
kv.CVPN3000/ASA/PIX7.x-Group-Based-Address-Pools |
(non mappé) | Non mappé sur l'objet IDM. |
kv.ExternalGroups |
(non mappé) | Non mappé sur l'objet IDM. |
kv.FailureReason |
(non mappé) | Non mappé sur l'objet IDM. |
kv.IdentityAccessRestricted |
(non mappé) | Non mappé sur l'objet IDM. |
kv.IdentityGroup |
(non mappé) | Non mappé sur l'objet IDM. |
kv.NAS-Identifier |
(non mappé) | Non mappé sur l'objet IDM. |
kv.SelectedShellProfile |
(non mappé) | Non mappé sur l'objet IDM. |
kv.ServiceSelectionMatchedRule |
(non mappé) | Non mappé sur l'objet IDM. |
kv.State |
(non mappé) | Non mappé sur l'objet IDM. |
kv.Step |
(non mappé) | Non mappé sur l'objet IDM. |
kv.Tunnel-Medium-Type |
(non mappé) | Non mappé sur l'objet IDM. |
kv.Tunnel-Private-Group-ID |
(non mappé) | Non mappé sur l'objet IDM. |
kv.Tunnel-Type |
(non mappé) | Non mappé sur l'objet IDM. |
kv.UseCase |
(non mappé) | Non mappé sur l'objet IDM. |
kv.UserIdentityGroup |
(non mappé) | Non mappé sur l'objet IDM. |
kv.VendorSpecific |
(non mappé) | Non mappé sur l'objet IDM. |
kv.attribute-131 |
(non mappé) | Non mappé sur l'objet IDM. |
kv.attribute-89 |
(non mappé) | Non mappé sur l'objet IDM. |
kv.cisco-av-pair |
(non mappé) | Non mappé sur l'objet IDM. |
kv.cisco-av-pair:CiscoSecure-Group-Id |
(non mappé) | Non mappé sur l'objet IDM. |
leef_version |
(non mappé) | Non mappé sur l'objet IDM. |
log_header |
metadata.description |
La valeur est extraite du champ log_header . |
log_id |
metadata.product_log_id |
La valeur est extraite du champ log_id . |
log_type |
metadata.product_event_type |
La valeur est extraite du champ log_type . |
message_severity |
(non mappé) | Non mappé sur l'objet IDM. |
product |
metadata.product_name |
La valeur est extraite du champ product . |
product_version |
metadata.product_version |
La valeur est extraite du champ product_version . |
server_host |
target.hostname |
La valeur est extraite du champ server_host . |
timestamp |
metadata.event_timestamp |
La valeur est extraite des champs timestamp et timezone (après suppression du deux-points). La valeur combinée est analysée en tant que code temporel. |
url |
network.dns.questions[].name |
La valeur est extraite du champ url . |
vendor |
metadata.vendor_name |
La valeur est extraite du champ vendor . Initialement défini sur "GENERIC_EVENT", il peut être écrasé en fonction des champs log_type et analysés. Valeurs possibles : "USER_LOGIN", "USER_UNCATEGORIZED", "NETWORK_DNS", "NETWORK_CONNECTION", "STATUS_UPDATE" ou "STATUS_UNCATEGORIZED". Initialement défini sur "Cisco", puis potentiellement écrasé par le champ vendor . Initialement défini sur "ACS", puis potentiellement écrasé par le champ product . Définissez-le sur "CISCO_ACS". Définissez-le sur "USERNAME_PASSWORD". Définissez cette valeur sur "TACACS". Définissez-le sur "UDP" pour les événements de comptabilité et de diagnostic RADIUS. Définissez sa valeur sur "DNS" pour les événements DNS. Dérivé du champ security_action , qui est défini en fonction de la réussite ou non de la connexion. Définissez la valeur sur "Connexion réussie" pour les connexions réussies et sur "Connexion échouée" pour les connexions échouées. Peut également être défini sur "passed" (Passé) pour certains événements de diagnostic du magasin d'identités. Définissez la valeur sur "LOW" (FAIBLE) pour les tentatives de connexion ayant échoué. Il est construit en ajoutant "ASSET ID: " au champ device-uid . |
Modifications
2023-09-26
- Amélioration :
- Initialisation de "hostname" sur "null" et ajout d'une vérification du nom d'hôte non nul avant de définir "metadata.event_type" sur "STATUS_UPDATE".
- Ajout d'une vérification de l'adresse IP valide dans "kv.DeviceIPAddress" et "kv.Remote-Address" avant le mappage sur les champs UDM.
2022-08-19
- Amélioration :
- "User-Name" a été mappé sur "principal.user.userid".
- Renommé "ip:source-ip" en "source_ip" et mappé sur "principal.ip".
- "kv.audit-session-id" a été renommé "kv.audit_session_id" et mappé sur "network.session_id".
- Mappage de "kv.AuthenticationMethod" sur "additional.fields".
- Mappage de "kv.SelectedAccessService" sur "additional.fields".
- Mappage de "kv.SelectedAuthorizationProfiles" sur "security_result.detection_fields".
- Mappage de "kv.SelectedAuthenticationIdentityStores" sur "security_result.detection_fields".
- Mappage de "kv.device-uid-global" sur "principal.asset.product_object_id".
- Mappage de "kv.device-uid" sur "principal.asset.asset_id".
- Mappage de "metadata.event_type" sur "USER_UNCATEGORIZED", où kv.DestinationIPAddress et kv.NAS-IP-Address et kv.NAS-IP-Address et kv.UserName et kv.NetworkDeviceName sont nuls.
- Prise en charge des journaux au format LEEF.
2022-06-14
- Amélioration : modification de grok pour analyser les journaux de log_type = "CSCOacs_Passed_Authentications", qui échouaient en raison de plusieurs espaces.
- Remplacement de la valeur "device-mac" par la valeur fictive "00:00:00:00:00:00" pour le type de journal "CSCOacs_RADIUS_Accounting" en cas de valeur non valide (00).
2022-06-06
- Amélioration : analyse des journaux de type "CSCOacs_Passed_Authentications" qui ne contiennent ni "DestinationIPAddress" ni "NAS-IP-Address".
- Modification de metadata.event_type de "USER_UNCATEGORIZED" à "USER_LOGIN" pour les journaux de type "CSCOacs_Passed_Authentications"
2022-05-05
- Amélioration : les journaux nouvellement ingérés qui ne comportent pas de code de message sont analysés et supprimés.
2022-04-27
- Amélioration : analyse des journaux avec log_type=CISE_TACACS_Accounting.