Collecter les journaux Forescout NAC
Ce document explique comment ingérer les journaux Forescout Network Access Control (NAC) dans Google Security Operations à l'aide de Bindplane. L'analyseur gère les journaux au format syslog et CEF de Forescout NAC. Il extrait les champs à l'aide de modèles Grok, les mappe au modèle de données unifié (UDM) et catégorise les événements en fonction des mots clés et des champs extraits, en gérant les connexions/déconnexions, les connexions réseau, les événements de messagerie et les mises à jour de l'état du système. Une logique spécifique est implémentée pour gérer les événements "CounterACT" et "Virtual Firewall", y compris le mappage de la gravité et l'enrichissement du contexte utilisateur.
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.
- ForeScout CounterAct v8.0 ou version ultérieure doit être installé.
- Le module d'extension principal ForeScout CounterAct et le plug-in Syslog v3.5 doivent être installés.
- Accès privilégié à l'appliance Forescout et au plug-in CounterACT
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
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
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: 'FORESCOUT_NAC' 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
avec 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
Installer le plug-in Syslog CounterACT
- Accédez à la page Forescount Base Plugins (Plug-ins de base Forescount) et téléchargez le fichier .fpi du plug-in.
- Enregistrez le fichier sur l'ordinateur sur lequel la console CounterACT est installée.
- Connectez-vous à la console CounterACT.
- Sélectionnez Options> Plug-ins> Installer.
- Accédez au fichier FPI du plug-in enregistré et sélectionnez-le.
- Cliquez sur Installer.
- Acceptez le contrat de licence pour continuer.
- Une fois l'installation terminée, cliquez sur Fermer.
- Sélectionnez le plug-in dans le volet Plug-in, puis cliquez sur Démarrer.
- Sélectionnez les appliances CounterACT sur lesquelles démarrer le plug-in (il est recommandé d'exécuter le plug-in sur toutes les appliances de l'environnement).
- Cliquez sur OK.
- Cliquez sur Fermer.
Configurer Syslog sur le plug-in Syslog Forescout CounterACT
- Dans le volet Plug-ins, cliquez sur Syslog > Configurer.
- Sélectionnez un appareil ou Enterprise Manager dans la boîte de dialogue, puis cliquez sur OK.
- Dans Envoyer les événements à, cliquez sur Ajouter.
- Fournissez les informations de configuration suivantes :
- Adresse du serveur : saisissez l'adresse IP de l'agent Bindplane.
- Port du serveur : saisissez le numéro de port de l'agent Bindplane (par exemple,
514
pour UDP). - Protocole du serveur : sélectionnez UDP.
- Identité : champ de texte libre permettant d'identifier le message syslog.
- Facultatif : Établissement : établissement du message Syslog transmis dans le champ "Priorité" du message. Si la valeur de l'établissement n'est pas mentionnée, elle est définie sur
local5
. - Gravité : sélectionnez Info.
- Accédez à l'onglet Déclencheur Syslog.
- Ne cochez pas la case N'envoyer que les messages générés par l'action "Envoyer un message à Syslog".
- Cochez uniquement la case Inclure l'identifiant de l'appareil CounterACT et le code temporel dans tous les messages.
- Cliquez sur Options pour définir les types d'événements qui déclenchent les messages syslog :
- Incluez les journaux des règles NAC.
- Incluez les événements de correspondance et de non-correspondance des règles NAC.
- Sélectionnez d'autres événements, le cas échéant.
- Accédez à l'onglet Configuration de l'action par défaut.
- Fournissez les informations de configuration suivantes :
- Adresse du serveur : saisissez l'adresse IP de l'agent Bindplane.
- Port du serveur : saisissez le numéro de port de l'agent Bindplane (par exemple,
514
pour UDP). - Protocole du serveur : sélectionnez UDP.
- Identité du message : champ de texte libre permettant d'identifier le message Syslog.
- Facultatif : Établissement : établissement du message Syslog transmis dans le champ "Priorité" du message. Si la valeur de l'établissement n'est pas mentionnée, elle est définie sur
local5
. - Gravité : sélectionnez Info.
- Cliquez sur OK.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
act |
security_result.action_details |
Mappé directement à partir du champ act dans les journaux CEF. |
app |
network.application_protocol |
Mappé directement à partir du champ app dans les journaux CEF. |
Available_memory |
additional.fields |
Extrait de kv_data lorsque event_type est défini sur "Statistiques système". La clé est "Available memory" (Mémoire disponible) et la valeur est la chaîne extraite. |
Available_swap |
additional.fields |
Extrait de kv_data lorsque event_type est défini sur "Statistiques système". La clé est "Available swap" (Swap disponible) et la valeur est la chaîne extraite. |
application_status |
additional.fields |
Extrait de kv_data lorsque event_type est "État de la demande". La clé est "État de la demande" et la valeur est la chaîne extraite. |
Assigned_hosts |
additional.fields |
Extrait de kv_log_data lorsque event_type est "État de la demande". La clé est "Assigned hosts" (Hôtes attribués) et la valeur est la chaîne extraite. |
Category |
security_result.description |
Partie de security_result.description lorsque et_lower est "journal des règles NAC". concaténé avec d'autres détails. |
command |
principal.process.command_line |
Extrait du champ rnmsg des journaux CEF lorsqu'il commence par "command:". |
Connected_clients |
additional.fields |
Extrait de kv_log_data lorsque event_type est "État de la demande". La clé est "Connected clients" (Clients connectés) et la valeur est la chaîne extraite. |
CPU_usage |
additional.fields |
Extrait de kv_data lorsque event_type est défini sur "Statistiques système". La clé est "Utilisation du processeur" et la valeur est la chaîne extraite. |
cs1 |
additional.fields |
Mappé directement à partir du champ cs1 dans les journaux CEF. La clé est "Nom de la règle de conformité". |
cs2 |
additional.fields |
Mappé directement à partir du champ cs2 dans les journaux CEF. La clé est "Compliancy Policy Subrule Name". |
cs3 |
additional.fields |
Mappé directement à partir du champ cs3 dans les journaux CEF. La clé est "Host Compliancy Status" (État de conformité de l'hôte). |
cs4 |
additional.fields |
Mappé directement à partir du champ cs4 dans les journaux CEF. La clé est "Compliancy Event Trigger". |
data |
security_result.description |
Utilisé dans différentes parties de l'analyseur pour extraire des informations et contribuer aux champs UDM finaux. Non directement mappé sur un seul champ UDM. |
details |
security_result.description |
Utilisé pour remplir security_result.description dans plusieurs cas, y compris lors de l'analyse des événements "Log" et des modifications de session utilisateur. Peut être analysé plus en détail pour obtenir des informations spécifiques. |
Destination |
target.ip , target.hostname |
Analysé à partir de kv_data ou data . Si elle peut être convertie en adresse IP, elle est mappée sur target.ip . Sinon, il est mappé sur target.hostname . |
deviceExternalId |
about.asset.asset_id |
Mappé directement à partir du champ deviceExternalId dans les journaux CEF, avec le préfixe "Forescout.CommandCenter:". |
dhost |
target.hostname |
Mappé directement à partir du champ dhost dans les journaux CEF. |
dmac |
target.mac |
Mappé directement à partir du champ dmac dans les journaux CEF. |
dntdom |
target.administrative_domain |
Mappé directement à partir du champ dntdom dans les journaux CEF. |
dst |
target.ip |
Mappé directement à partir du champ dst dans les journaux CEF. |
dpt |
target.port |
Mappé directement à partir du champ dpt dans les journaux CEF. |
duser |
target.user.user_display_name |
Mappé directement à partir du champ duser dans les journaux CEF. |
dvc |
about.ip |
Mappé directement à partir du champ dvc dans les journaux CEF. |
dvchost |
about.hostname |
Mappé directement à partir du champ dvchost dans les journaux CEF. |
EM_connection_status |
additional.fields |
Extrait de kv_log_data lorsque event_type est "État de la demande". La clé est "État de la connexion EM" et la valeur est la chaîne extraite. |
Engine_status |
additional.fields |
Extrait de kv_log_data lorsque event_type est "État de la demande". La clé est "État du moteur" et la valeur est la chaîne extraite. |
event_type |
metadata.description , security_result.summary |
Analysé à partir du message de journal. Permet de déterminer le type d'événement UDM et d'autres champs. Si l'événement est un"GENERIC_EVENT", il est également utilisé pour la description. |
eventtype |
additional.fields |
Mappé directement à partir du champ eventtype dans les journaux CEF. La clé est "eventtype". |
externalId |
metadata.product_log_id |
Mappé directement à partir du champ externalId dans les journaux CEF. |
from\[...\] to\[...\] |
principal.ip , target.ip |
Extrait les adresses IP source et de destination du modèle "from[...] to[...]". |
Host |
principal.ip , principal.hostname |
Analysé à partir de kv_data lorsque et_lower est "block event". Si elle peut être convertie en adresse IP, elle est mappée sur principal.ip . Sinon, elle est mappée sur principal.hostname . |
Hostname |
principal.hostname , principal.asset.hostname |
Mappé sur principal.hostname et principal.asset.hostname lorsqu'il est présent dans les événements de modification de propriété détectés. |
Installed_Plugins |
additional.fields |
Extrait de kv_log_data lorsque event_type est "État de la demande". La clé est "Installed Plugins" (Plug-ins installés) et la valeur est la chaîne extraite. |
iporhost |
intermediary.ip , intermediary.hostname |
Analysé à partir de header_data . Si elle peut être convertie en adresse IP, elle est mappée sur intermediary.ip . Sinon, elle est mappée sur intermediary.hostname . |
Is Virtual Firewall blocking rule |
security_result.action , security_result.rule_name |
Si la valeur est "true", security_result.action est défini sur "BLOCK" et security_result.rule_name sur "Virtual Firewall blocking". |
log_description |
security_result.summary |
Mappé directement sur security_result.summary lorsqu'il est présent. |
log_type |
metadata.log_type |
Définissez-le sur la valeur constante "FORESCOUT_NAC". |
MAC |
principal.mac |
Analysé à partir de kv_data dans les événements de modification de propriété détectés et mis en forme en tant qu'adresse MAC. |
mail_from |
network.email.from |
Mappé directement à partir du champ mail_from extrait de mail_details . |
mail_subject |
network.email.subject |
Mappé directement à partir du champ mail_subject extrait de mail_details . |
mail_to |
network.email.to |
Mappé directement à partir du champ mail_to extrait de mail_details . |
Match |
security_result.rule_name |
Mappé directement à partir du champ Match lorsque et_lower est défini sur "nac policy log". |
metadata.event_type |
metadata.event_type |
Déterminé par diverses conditions dans l'analyseur, y compris la présence de champs et de mots clés spécifiques dans le message du journal. La valeur par défaut est GENERIC_EVENT et est mise à jour en fonction des données analysées. Il peut par exemple s'agir de USER_LOGIN , USER_LOGOUT , NETWORK_CONNECTION , SCAN_NETWORK , STATUS_UPDATE , EMAIL_TRANSACTION et USER_UNCATEGORIZED . |
metadata.product_name |
metadata.product_name |
Définissez la valeur sur "FORESCOUT NAC" pour la plupart des événements, ou sur la valeur du champ product s'il existe. Pour les événements CEF, il est défini sur "CounterAct". |
metadata.vendor_name |
metadata.vendor_name |
Définissez sa valeur sur "FORESCOUT" pour la plupart des événements. Pour les événements CEF, il est extrait du champ cs1Label s'il existe ou défini sur "ForeScout Technologies". |
msg |
metadata.description |
Mappé directement à partir du champ msg dans les journaux CEF. |
pid |
intermediary.process.pid |
Mappé directement à partir du champ pid extrait de header_data . |
policy_details |
security_result.description |
Partie de security_result.description lorsque et_lower est "journal des règles NAC". concaténé avec d'autres détails. |
product |
metadata.product_name |
Mappé directement sur metadata.product_name lorsqu'il est présent. |
proto |
network.ip_protocol |
Mappé directement à partir du champ proto dans les journaux CEF. |
Reason |
security_result.description |
Mappé directement à partir du champ Reason lorsque et_lower est défini sur "block event" (bloquer l'événement). |
resource |
principal.resource.name |
Mappé directement à partir du champ resource dans les journaux CEF. |
rnmsg |
security_result.description , principal.process.command_line |
Si elle commence par "command:", la partie après "command:" est mappée sur principal.process.command_line . Sinon, il est mappé sur security_result.description . |
rt |
metadata.event_timestamp |
Mappé directement à partir du champ rt des journaux CEF, converti en code temporel. |
Rule |
security_result.rule_id |
Mappé directement à partir du champ Rule lorsque et_lower est défini sur "nac policy log". |
security_result.severity |
security_result.severity |
Dérivé du champ severity_level . 0 à 3 correspond à FAIBLE, 4 à 6 à MOYENNE, 7 à 8 à ÉLEVÉE et 9 à 10 à CRITIQUE. |
security_result.severity_details |
security_result.severity_details |
Mappé directement à partir du champ severity dans les journaux CEF. |
Service |
target.port , network.ip_protocol |
Analysé pour extraire le port et le protocole. Le port est mappé sur target.port et le protocole sur network.ip_protocol . |
session_id |
network.session_id |
Mappé directement à partir du champ session_id . |
severity |
security_result.severity_details |
Mappé directement à partir du champ severity dans les journaux CEF. |
severity_level |
security_result.severity |
Utilisé pour déterminer le security_result.severity . |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.