Collecter les journaux du serveur NPS (Microsoft Network Policy Server)

Compatible avec :

Ce document explique comment ingérer des journaux Microsoft Network Policy Server (NPS) dans Google Security Operations à l'aide de Google Cloud Storage V2.

Le serveur NPS (Network Policy Server) de Microsoft est un rôle Windows Server qui fournit l'authentification, l'autorisation et la comptabilisation RADIUS. NPS permet de gérer de manière centralisée les règles d'accès au réseau pour les appareils sans fil, les connexions VPN, les commutateurs et l'accès à distance. NPS ne dispose pas de fonctionnalités d'exportation vers le cloud ni d'API natives. Les journaux doivent donc être collectés à l'aide d'un transmetteur tiers.

Avant de commencer

Assurez-vous de remplir les conditions préalables suivantes :

  • Une instance Google SecOps
  • Un projet GCP avec l'API Cloud Storage activée
  • Autorisations permettant de créer et de gérer des buckets GCS
  • Autorisations permettant de gérer les stratégies IAM sur les buckets GCS
  • Accès privilégié au serveur Windows Server exécutant NPS
  • Un accès administrateur pour installer NXLog sur le serveur NPS

Configurer la journalisation du NPS

Activer les journaux de comptabilité NPS

  1. Sur le serveur Windows exécutant NPS, ouvrez le Gestionnaire de serveur.
  2. Accédez à Outils > Serveur NPS (Network Policy Server).
  3. Dans la console NPS, développez Comptabilité dans le panneau de navigation de gauche.
  4. Effectuez un clic droit sur Comptabilité, puis sélectionnez Configurer la comptabilité.
  5. Dans l'assistant Configuration de la comptabilité, cliquez sur Suivant.
  6. Sélectionnez Enregistrer dans un fichier texte sur l'ordinateur local, puis cliquez sur Suivant.
  7. Sur la page Configurer les propriétés du fichier journal, configurez les éléments suivants :
    • Répertoire : conservez la valeur par défaut (%systemroot%\System32\LogFiles) ou spécifiez un chemin d'accès personnalisé.
    • Format : sélectionnez Conforme à DTS (recommandé par Microsoft pour le format XML structuré).
    • Créer un fichier journal : sélectionnez Quotidien ou Hebdomadaire en fonction du volume de vos journaux.
  8. Cliquez sur Suivant.
  9. Vérifiez les éléments indiqués dans le récapitulatif, puis cliquez sur Finish (Terminer).

Activer la journalisation d'audit du NPS

  1. Ouvrez l'invite de commandes en tant qu'administrateur sur le serveur NPS.
  2. Exécutez la commande suivante pour activer la journalisation d'audit du NPS :

    auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enable
    
  3. Vérifiez que la stratégie d'audit est activée :

    auditpol /get /subcategory:"Network Policy Server"
    

Installer et configurer NXLog sur le serveur NPS

Télécharger et installer NXLog

  1. Sur le serveur NPS, téléchargez NXLog Enterprise Edition depuis le site Web de NXLog.
  2. Exécutez le programme d'installation et suivez l'assistant d'installation.
  3. Acceptez le chemin d'installation par défaut (C:\Program Files\nxlog) ou spécifiez un chemin personnalisé.
  4. Terminez l'installation.

Configurer NXLog pour collecter les journaux NPS

  1. Sur le serveur NPS, accédez au répertoire de configuration NXLog :
    • Chemin par défaut : C:\Program Files\nxlog\conf
  2. Ouvrez le fichier nxlog.conf dans un éditeur de texte (par exemple, le Bloc-notes) avec des droits d'administrateur.
  3. Remplacez l'intégralité du contenu de nxlog.conf par la configuration suivante :

    ## NXLog configuration for Microsoft NPS log collection
    ## Collects NPS logs and forwards to Google Cloud Storage
    
    define ROOT C:\Program Files\nxlog
    define LOGDIR C:\Windows\System32\LogFiles
    define GCS_BUCKET your-gcs-bucket-name
    define GCS_PREFIX nps-logs
    define GCS_CREDENTIALS C:\nxlog-credentials\gcs-service-account.json
    
    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    Pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    LogFile %ROOT%\data\nxlog.log
    LogLevel INFO
    
    <Extension nps>
        Module xm_nps
    </Extension>
    
    <Extension json>
        Module xm_json
    </Extension>
    
    <Input nps_logs>
        Module im_file
        File '%LOGDIR%\IN*.log'
        SavePos TRUE
        ReadFromLast TRUE
        Recursive FALSE
        InputType nps
        <Exec>
            # Parse NPS logs (DTS Compliant format)
            # Add hostname for tracking
            $Hostname = hostname();
    
            # Convert to JSON
            to_json();
        </Exec>
    </Input>
    
    <Output gcs>
        Module om_file
        File '%ROOT%\data\gcs-upload\nps-' + strftime(now(), '%Y%m%d-%H%M%S') + '.json'
        <Exec>
            # Rotate output file every hour
            if (file_size(file_name()) > 100000000) file_cycle();
        </Exec>
    </Output>
    
    <Route nps_to_gcs>
        Path nps_logs => gcs
    </Route>
    
  4. Dans le fichier de configuration, remplacez les espaces réservés suivants :

    • your-gcs-bucket-name : nom de votre bucket GCS (créé dans la section suivante)
    • Vérifiez que le chemin d'accès à LOGDIR correspond à l'emplacement de votre fichier journal NPS.
  5. Enregistrez le fichier.

Créer un bucket Google Cloud Storage

  1. Accédez à la console Google Cloud.
  2. Sélectionnez votre projet ou créez-en un.
  3. Dans le menu de navigation, accédez à Cloud Storage > Buckets.
  4. Cliquez sur Créer un bucket.
  5. Fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Attribuez un nom au bucket Saisissez un nom unique (par exemple, nps-logs-chronicle).
    Type d'emplacement Choisissez en fonction de vos besoins (région, birégion, multirégion).
    Emplacement Sélectionnez l'emplacement (par exemple, us-central1).
    Classe de stockage Standard (recommandé pour les journaux auxquels vous accédez fréquemment)
    Access control (Contrôle des accès) Uniforme (recommandé)
    Outils de protection Facultatif : Activez la gestion des versions des objets ou la règle de conservation.
  6. Cliquez sur Créer.

Créer un compte de service GCS pour NXLog

Créer un compte de service

  1. Dans la console GCP, accédez à IAM et administration > Comptes de service.
  2. Cliquez sur Créer un compte de service.
  3. Fournissez les informations de configuration suivantes :
    • Nom du compte de service : saisissez nxlog-nps-uploader (par exemple).
    • Description du compte de service : saisissez Service account for NXLog to upload NPS logs to GCS.
  4. Cliquez sur Créer et continuer.
  5. Dans la section Autoriser ce compte de service à accéder au projet, ajoutez le rôle suivant :
    1. Cliquez sur Sélectionner un rôle.
    2. Recherchez et sélectionnez Créateur d'objets Storage.
  6. Cliquez sur Continuer.
  7. Cliquez sur OK.

Télécharger la clé de compte de service

  1. Sur la page Comptes de service, cliquez sur le compte de service que vous venez de créer (nxlog-nps-uploader).
  2. Accédez à l'onglet Clés.
  3. Cliquez sur Ajouter une clé > Créer une clé.
  4. Sélectionnez JSON comme type de clé.
  5. Cliquez sur Créer.
  6. Le fichier de clé JSON est téléchargé sur votre ordinateur.
  7. Copiez le fichier de clé JSON sur le serveur NPS à l'emplacement suivant :
    • C:\nxlog-credentials\gcs-service-account.json
  8. Créez le répertoire C:\nxlog-credentials s'il n'existe pas.

Configurer l'importation automatique GCS

Créer un script d'importation PowerShell

  1. Sur le serveur NPS, créez un répertoire :
    • C:\nxlog-scripts
  2. Créez un fichier nommé upload-to-gcs.ps1 dans le répertoire.
  3. Ouvrez le fichier dans un éditeur de texte et collez le script PowerShell suivant :

    # PowerShell script to upload NXLog output files to Google Cloud Storage
    # Uses gsutil command-line tool
    
    $ErrorActionPreference = "Stop"
    
    # Configuration
    $LocalLogDir = "C:\Program Files\nxlog\data\gcs-upload"
    $GcsBucket = "gs://nps-logs-chronicle/nps-logs/"
    $ArchiveDir = "C:\Program Files\nxlog\data\archive"
    $LogFile = "C:\nxlog-scripts\upload.log"
    
    # Function to write log messages
    function Write-Log {
        param([string]$Message)
        $Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
        "$Timestamp - $Message" | Out-File -FilePath $LogFile -Append
    }
    
    Write-Log "Starting GCS upload process"
    
    # Check if gsutil is available
    try {
        $null = gsutil version
    } catch {
        Write-Log "ERROR: gsutil not found. Please install Google Cloud SDK."
        exit 1
    }
    
    # Activate service account
    $ServiceAccountKey = "C:\nxlog-credentials\gcs-service-account.json"
    if (-not (Test-Path $ServiceAccountKey)) {
        Write-Log "ERROR: Service account key not found at $ServiceAccountKey"
        exit 1
    }
    
    try {
        gcloud auth activate-service-account --key-file=$ServiceAccountKey 2>&1 | Out-Null
        Write-Log "Service account activated successfully"
    } catch {
        Write-Log "ERROR: Failed to activate service account: $_"
        exit 1
    }
    
    # Create archive directory if it doesn't exist
    if (-not (Test-Path $ArchiveDir)) {
        New-Item -ItemType Directory -Path $ArchiveDir | Out-Null
        Write-Log "Created archive directory: $ArchiveDir"
    }
    
    # Get all JSON files in the local log directory
    $Files = Get-ChildItem -Path $LocalLogDir -Filter "*.json" -File
    
    if ($Files.Count -eq 0) {
        Write-Log "No files to upload"
        exit 0
    }
    
    Write-Log "Found $($Files.Count) file(s) to upload"
    
    # Upload each file to GCS
    $SuccessCount = 0
    $FailCount = 0
    
    foreach ($File in $Files) {
        try {
            # Upload to GCS
            gsutil cp $File.FullName $GcsBucket 2>&1 | Out-Null
    
            # Move to archive on success
            Move-Item -Path $File.FullName -Destination $ArchiveDir -Force
    
            Write-Log "Uploaded and archived: $($File.Name)"
            $SuccessCount++
        } catch {
            Write-Log "ERROR uploading $($File.Name): $_"
            $FailCount++
        }
    }
    
    Write-Log "Upload complete. Success: $SuccessCount, Failed: $FailCount"
    
  4. Dans le script, remplacez les valeurs suivantes :

    • $GcsBucket : URI de votre bucket GCS (par exemple, gs://nps-logs-chronicle/nps-logs/)
  5. Enregistrez le fichier.

Installez le SDK Google Cloud

  1. Sur le serveur NPS, téléchargez le programme d'installation du Google Cloud SDK depuis Google Cloud SDK.
  2. Exécutez le programme d'installation et suivez l'assistant d'installation.
  3. Pendant l'installation, sélectionnez Installer la version incluse de Python si Python n'est pas déjà installé.
  4. Terminez l'installation.
  5. Ouvrez une nouvelle invite de commandes et vérifiez l'installation :

    gsutil version
    

Créer une tâche programmée pour l'importation automatique

  1. Sur le serveur NPS, ouvrez le Planificateur de tâches.
  2. Dans le panneau de droite, cliquez sur Créer une tâche.
  3. Dans l'onglet Général, configurez les éléments suivants :
    • Nom : saisissez NXLog GCS Upload.
    • Description : saisissez Upload NPS logs to Google Cloud Storage.
    • Options de sécurité : sélectionnez Exécuter que l'utilisateur soit connecté ou non.
    • Options de sécurité : cochez Exécuter avec les privilèges les plus élevés.
    • Configurer pour : sélectionnez Windows Server 2016 ou la version de votre serveur.
  4. Dans l'onglet Déclencheurs :
    1. Cliquez sur New (Nouveau).
    2. Commencer la tâche : sélectionnez Selon une planification.
    3. Paramètres : sélectionnez Tous les jours.
    4. A lieu tous les : saisissez 1 jours.
    5. Répéter la tâche toutes les : sélectionnez 15 minutes.
    6. pendant : sélectionnez Indéfiniment.
    7. Cliquez sur OK.
  5. Dans l'onglet Actions :
    1. Cliquez sur New (Nouveau).
    2. Action : sélectionnez Démarrer un programme.
    3. Programme/script : saisissez powershell.exe.
    4. Ajouter des arguments : saisissez -ExecutionPolicy Bypass -File "C:\nxlog-scripts\upload-to-gcs.ps1".
    5. Cliquez sur OK.
  6. Dans l'onglet Conditions :
    • Décochez Démarrer la tâche uniquement si l'ordinateur est branché sur le secteur.
  7. Dans l'onglet Paramètres :
    • Cochez Exécuter la tâche dès que possible si le démarrage planifié est manqué.
    • Cochez Si la tâche échoue, redémarrer toutes les, puis saisissez 5 minutes.
  8. Cliquez sur OK.
  9. Saisissez les identifiants du compte qui exécutera la tâche (il doit disposer de droits d'administrateur).
  10. Cliquez sur OK.

Tester le processus d'importation

  1. Sur le serveur NPS, ouvrez le Planificateur de tâches.
  2. Dans le panneau de gauche, développez Bibliothèque du Planificateur de tâches.
  3. Effectuez un clic droit sur la tâche NXLog GCS Upload (Importation NXLog GCS), puis sélectionnez Run (Exécuter).
  4. Attendez quelques secondes que la tâche se termine.
  5. Ouvrez le fichier journal à l'adresse C:\nxlog-scripts\upload.log pour vérifier que l'importation a réussi.
  6. Accédez à la console GCP> Cloud Storage> Buckets.
  7. Cliquez sur le nom de votre bucket (nps-logs-chronicle).
  8. Accédez au dossier nps-logs/.
  9. Vérifiez que des fichiers JSON contenant des journaux NPS sont présents.

Démarrer le service NXLog

  1. Sur le serveur NPS, ouvrez Services (exécutez services.msc).
  2. Recherchez le service nxlog dans la liste.
  3. Effectuez un clic droit sur le service nxlog, puis sélectionnez Démarrer.
  4. Vérifiez que l'état du service est En cours d'exécution.
  5. Pour vérifier que NXLog collecte les journaux, consultez le fichier journal NXLog :
    • C:\Program Files\nxlog\data\nxlog.log
  6. Recherchez les messages indiquant que la collecte de journaux a réussi :

    INFO im_file: monitoring file 'C:\Windows\System32\LogFiles\IN250315.log'
    

Récupérer le compte de service Google SecOps

Google SecOps utilise un compte de service unique pour lire les données de votre bucket GCS. Vous devez accorder à ce compte de service l'accès à votre bucket.

Obtenir l'adresse e-mail du compte de service

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Ajouter un flux.
  3. Cliquez sur Configurer un flux unique.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Microsoft NPS Logs).
  5. Sélectionnez Google Cloud Storage V2 comme Type de source.
  6. Sélectionnez MICROSOFT_NPS comme type de journal.
  7. Cliquez sur Obtenir un compte de service. Une adresse e-mail de compte de service unique s'affiche, par exemple :

    ```none
    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    ```
    
  8. Copiez cette adresse e-mail pour l'utiliser à l'étape suivante.

  9. Cliquez sur Suivant.

  10. Spécifiez les valeurs des paramètres d'entrée suivants :

    • URL du bucket de stockage : saisissez l'URI du bucket GCS avec le chemin d'accès au préfixe :

      gs://nps-logs-chronicle/nps-logs/
      
      • Remplacez :
        • nps-logs-chronicle : nom de votre bucket GCS.
        • nps-logs/ : préfixe/chemin d'accès au dossier dans lequel les journaux sont stockés.
    • Option de suppression de la source : sélectionnez l'option de suppression de votre choix :
      • Jamais : ne supprime jamais aucun fichier après les transferts (recommandé pour les tests).
      • Supprimer les fichiers transférés : supprime les fichiers une fois le transfert réussi.
      • Supprimer les fichiers transférés et les répertoires vides : supprime les fichiers et les répertoires vides une fois le transfert réussi.
    • Âge maximal du fichier : incluez les fichiers modifiés au cours des derniers jours (180 jours par défaut).
    • Espace de noms de l'élément : espace de noms de l'élément
    • Libellés d'ingestion : libellé à appliquer aux événements de ce flux
  11. Cliquez sur Suivant.

  12. Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Accorder des autorisations IAM au compte de service Google SecOps

  • Le compte de service Google SecOps a besoin du rôle Lecteur des objets Storage sur votre bucket GCS.
  1. Accédez à Cloud Storage > Buckets.
  2. Cliquez sur le nom de votre bucket (nps-logs-chronicle).
  3. Accédez à l'onglet Autorisations.
  4. Cliquez sur Accorder l'accès.
  5. Fournissez les informations de configuration suivantes :
    • Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps.
    • Attribuer des rôles : sélectionnez Lecteur d'objets Storage.
  6. Cliquez sur Enregistrer.

Table de mappage UDM

Champ de journal Mappage UDM Logique
Version additional.fields Fusionné avec les objets correspondants s'il n'est pas vide
Canal additional.fields
Mots clés additional.fields
Code d'opération additional.fields
Tâche additional.fields
ThreadID additional.fields
EventData.%1 additional.fields
EventData.%2 additional.fields
Canal channel.value.string_value Valeur copiée directement
EventData.%1 event_data_p1.value.string_value Valeur copiée directement
EventData.%2 event_data_p2.value.string_value Valeur copiée directement
Mots clés keywords.value.string_value Valeur copiée directement
TimeCreated metadata.event_timestamp Converti de UNIX_MS en code temporel
EventId metadata.event_type Définissez sur STATUS_UNCATEGORIZED si EventId == '4400', sur STATUS_UPDATE si EventId == '13', sinon sur GENERIC_EVENT.
EventId metadata.product_event_type Valeur copiée directement
Code d'opération opcode.value.string_value Valeur copiée directement
Ordinateur principal.asset.hostname Valeur copiée à partir de principal.hostname
Ordinateur principal.hostname Valeur copiée directement
ProcessID principal.process.pid Valeur copiée si elle n'est pas vide
UserId principal.user.windows_sid Extrait à l'aide d'une expression régulière pour obtenir le SID Windows
EventId security_result.rule_name Défini sur "EventID: " + EventId
Niveau security_result.severity INFO/Informational/Information/Normal/NOTICE transformé en INFORMATIONAL, ERROR/Error transformé en ERROR, WARNING/Warning transformé en INFORMATIONAL, DEBUG transformé en INFORMATIONAL, Critical transformé en CRITICAL
Tâche task.value.string_value Valeur copiée directement
ThreadID thread_id.value.string_value Valeur copiée directement
Version version.value.string_value Valeur copiée directement
metadata.vendor_name metadata.vendor_name Défini sur "Microsoft"
ProviderName metadata.product_name Valeur copiée directement

Journal des modifications

Afficher le journal des modifications pour ce parseur

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.