Raccogliere i log di Microsoft Network Policy Server (NPS)
Questo documento spiega come importare i log di Microsoft Network Policy Server (NPS) in Google Security Operations utilizzando Google Cloud Storage V2.
Microsoft Network Policy Server (NPS) è un ruolo di Windows Server che fornisce autenticazione, autorizzazione e contabilità RADIUS. NPS consente la gestione centralizzata dei criteri di accesso alla rete per dispositivi wireless, connessioni VPN, switch e accesso remoto. NPS non dispone di API o funzionalità di esportazione nel cloud native, pertanto i log devono essere raccolti utilizzando un inoltro di terze parti.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Un progetto GCP con l'API Cloud Storage abilitata
- Autorizzazioni per creare e gestire bucket GCS
- Autorizzazioni per gestire le policy IAM nei bucket GCS
- Accesso con privilegi a Windows Server che esegue NPS
- Accesso amministratore per installare NXLog sul server NPS
Configura il logging NPS
Abilita i log di contabilità NPS
- Sul server Windows che esegue NPS, apri Server Manager.
- Vai a Strumenti > Network Policy Server.
- Nella console NPS, espandi Contabilità nel riquadro di navigazione a sinistra.
- Fai clic con il tasto destro del mouse su Contabilità e seleziona Configura contabilità.
- Nella procedura guidata Configurazione contabilità, fai clic su Avanti.
- Seleziona Registra in un file di testo sul computer locale e fai clic su Avanti.
- Nella pagina Configura proprietà file di log, configura quanto segue:
- Directory: lascia il valore predefinito (
%systemroot%\System32\LogFiles) o specifica un percorso personalizzato - Formato: seleziona Conforme a DTS (consigliato da Microsoft per il formato XML strutturato)
- Crea un nuovo file di log: seleziona Giornaliero o Settimanale in base al volume dei log.
- Directory: lascia il valore predefinito (
- Fai clic su Avanti.
- Controlla il riepilogo e fai clic su Fine.
Abilitare l'audit logging NPS
- Apri il prompt dei comandi come amministratore sul server NPS.
Esegui il comando seguente per abilitare la registrazione degli audit NPS:
auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enableVerifica che il criterio di controllo sia attivato:
auditpol /get /subcategory:"Network Policy Server"
Installa e configura NXLog sul server NPS
Scaricare e installare NXLog
- Sul server NPS, scarica NXLog Enterprise Edition dal sito web di NXLog.
- Esegui il programma di installazione e segui la procedura guidata di installazione.
- Accetta il percorso di installazione predefinito (
C:\Program Files\nxlog) o specifica un percorso personalizzato. - Completa l'installazione.
Configura NXLog per raccogliere i log NPS
- Sul server NPS, vai alla directory di configurazione di NXLog:
- Percorso predefinito:
C:\Program Files\nxlog\conf
- Percorso predefinito:
- Apri il file
nxlog.confin un editor di testo (ad esempio, Blocco note) con privilegi di amministratore. Sostituisci l'intero contenuto di
nxlog.confcon la seguente configurazione:## 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>Nel file di configurazione, sostituisci i seguenti segnaposto:
your-gcs-bucket-name: il nome del bucket GCS (creato nella sezione successiva)- Verifica che il percorso
LOGDIRcorrisponda alla posizione del file di log NPS
Salva il file.
Creazione di un bucket Google Cloud Storage
- Vai alla console Google Cloud.
- Seleziona il tuo progetto o creane uno nuovo.
- Nel menu di navigazione, vai a Cloud Storage > Bucket.
- Fai clic su Crea bucket.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Assegna un nome al bucket Inserisci un nome univoco globale (ad esempio nps-logs-chronicle).Tipo di località Scegli in base alle tue esigenze (regione singola, due regioni, più regioni) Località Seleziona la posizione (ad esempio, us-central1).Classe di archiviazione Standard (consigliato per i log a cui si accede di frequente) Controllo dell'accesso Uniforme (consigliato) Strumenti di protezione (Facoltativo) Attiva il controllo delle versioni degli oggetti o la policy di conservazione Fai clic su Crea.
Crea un account di servizio GCS per NXLog
Crea service account
- Nella console Google Cloud, vai a IAM e amministrazione > Service Accounts.
- Fai clic su Crea account di servizio.
- Fornisci i seguenti dettagli di configurazione:
- Nome service account: inserisci
nxlog-nps-uploader(ad esempio) - Descrizione service account: inserisci
Service account for NXLog to upload NPS logs to GCS
- Nome service account: inserisci
- Fai clic su Crea e continua.
- Nella sezione Concedi a questo account di servizio l'accesso al progetto, aggiungi il seguente ruolo:
- Fai clic su Seleziona un ruolo.
- Cerca e seleziona Creatore oggetti Storage.
- Fai clic su Continua.
- Fai clic su Fine.
Scarica la chiave del service account
- Nella pagina Service Accounts (Account di servizio), fai clic sull'account di servizio che hai appena creato (
nxlog-nps-uploader). - Vai alla scheda Chiavi.
- Fai clic su Aggiungi chiave > Crea nuova chiave.
- Seleziona JSON come tipo di chiave.
- Fai clic su Crea.
- Il file della chiave JSON verrà scaricato sul computer.
- Copia il file della chiave JSON nel server NPS nella seguente posizione:
C:\nxlog-credentials\gcs-service-account.json
- Crea la directory
C:\nxlog-credentialsse non esiste.
Configurare il caricamento automatico di GCS
Crea lo script di caricamento di PowerShell
- Sul server NPS, crea una nuova directory:
C:\nxlog-scripts
- Crea un nuovo file denominato
upload-to-gcs.ps1nella directory. Apri il file in un editor di testo e incolla il seguente script PowerShell:
# 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"Nello script, sostituisci i seguenti valori:
$GcsBucket: l'URI del bucket GCS (ad esempio,gs://nps-logs-chronicle/nps-logs/)
Salva il file.
Installa Google Cloud SDK
- Sul server NPS, scarica il programma di installazione di Google Cloud SDK da Google Cloud SDK.
- Esegui il programma di installazione e segui la procedura guidata di installazione.
- Durante l'installazione, seleziona Installa Python in bundle se Python non è già installato.
- Completa l'installazione.
Apri un nuovo prompt dei comandi e verifica l'installazione:
gsutil version
Crea un'attività pianificata per il caricamento automatico
- Sul server NPS, apri Utilità di pianificazione.
- Nel riquadro a destra, fai clic su Crea attività.
- Nella scheda Generali, configura quanto segue:
- Nome: inserisci
NXLog GCS Upload - Descrizione: inserisci
Upload NPS logs to Google Cloud Storage - Opzioni di sicurezza: seleziona Esegui indipendentemente dall'accesso dell'utente.
- Opzioni di sicurezza: seleziona Esegui con i privilegi più elevati
- Configura per: seleziona Windows Server 2016 o la versione del server
- Nome: inserisci
- Nella scheda Trigger:
- Fai clic su New (Nuovo).
- Avvia l'attività: seleziona In base a una pianificazione.
- Impostazioni: seleziona Giornaliero.
- Ricorrenza ogni: inserisci
1giorni. - Ripeti attività ogni: seleziona 15 minuti.
- per una durata di: seleziona Sempre.
- Fai clic su OK.
- Nella scheda Azioni:
- Fai clic su New (Nuovo).
- Azione: seleziona Avvia un programma.
- Programma/script: inserisci
powershell.exe. - Aggiungi argomenti: inserisci
-ExecutionPolicy Bypass -File "C:\nxlog-scripts\upload-to-gcs.ps1". - Fai clic su OK.
- Nella scheda Condizioni:
- Deseleziona Avvia l'attività solo se il computer è alimentato a corrente alternata.
- Nella scheda Impostazioni:
- Seleziona Esegui l'attività il prima possibile dopo che l'inizio pianificato è stato mancato.
- Seleziona Se l'attività non va a buon fine, riavvia ogni: inserisci
5 minutes.
- Fai clic su OK.
- Inserisci le credenziali dell'account che eseguirà l'attività (deve disporre dei privilegi di amministratore).
- Fai clic su OK.
Testare la procedura di caricamento
- Sul server NPS, apri Utilità di pianificazione.
- Nel riquadro a sinistra, espandi Libreria Utilità di pianificazione.
- Fai clic con il tasto destro del mouse sull'attività NXLog GCS Upload e seleziona Esegui.
- Attendi qualche secondo affinché l'attività venga completata.
- Apri il file di log all'indirizzo
C:\nxlog-scripts\upload.logper verificare che il caricamento sia andato a buon fine. - Vai alla console GCP > Cloud Storage > Bucket.
- Fai clic sul nome del bucket (
nps-logs-chronicle). - Vai alla cartella
nps-logs/. - Verifica che siano presenti file JSON con i log NPS.
Avvia il servizio NXLog
- Sul server NPS, apri Servizi (esegui
services.msc). - Individua il servizio nxlog nell'elenco.
- Fai clic con il tasto destro del mouse sul servizio nxlog e seleziona Start (Avvia).
- Verifica che lo stato del servizio sia In esecuzione.
- Per verificare che NXLog stia raccogliendo i log, controlla il file di log NXLog:
C:\Program Files\nxlog\data\nxlog.log
Cerca i messaggi che indicano la raccolta riuscita dei log:
INFO im_file: monitoring file 'C:\Windows\System32\LogFiles\IN250315.log'
Recuperare il account di servizio Google SecOps
Google SecOps utilizza un account di servizio univoco per leggere i dati dal tuo bucket GCS. Devi concedere a questo account di servizio l'accesso al tuo bucket.
Recupera l'email del account di servizio
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Microsoft NPS Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona MICROSOFT_NPS come tipo di log.
Fai clic su Ottieni service account. Verrà visualizzata un'email univoca del account di servizio, ad esempio:
```none chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com ```Copia questo indirizzo email per utilizzarlo nel passaggio successivo.
Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
URL bucket di archiviazione: inserisci l'URI del bucket GCS con il percorso del prefisso:
gs://nps-logs-chronicle/nps-logs/- Sostituisci:
nps-logs-chronicle: il nome del bucket GCS.nps-logs/: il percorso del prefisso/della cartella in cui sono archiviati i log.
- Sostituisci:
- Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:
- Mai: non elimina mai i file dopo i trasferimenti (opzione consigliata per i test).
- Elimina file trasferiti: elimina i file dopo il trasferimento riuscito.
- Elimina file trasferiti e directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.
- Età massima del file: includi i file modificati nell'ultimo numero di giorni (il valore predefinito è 180 giorni)
- Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset
- Etichette di importazione: l'etichetta da applicare agli eventi di questo feed
Fai clic su Avanti.
Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Concedi le autorizzazioni IAM al account di servizio Google SecOps
- Il account di servizio Google SecOps deve avere il ruolo Visualizzatore oggetti Storage nel bucket GCS.
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (
nps-logs-chronicle). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'email del account di servizio Google SecOps
- Assegna i ruoli: seleziona Visualizzatore oggetti Storage.
Fai clic su Salva.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| Versione | additional.fields | Unito agli oggetti corrispondenti, se non è vuoto |
| Canale | additional.fields | |
| Parole chiave | additional.fields | |
| Opcode | additional.fields | |
| Attività | additional.fields | |
| ThreadID | additional.fields | |
| EventData.%1 | additional.fields | |
| EventData.%2 | additional.fields | |
| Canale | channel.value.string_value | Valore copiato direttamente |
| EventData.%1 | event_data_p1.value.string_value | Valore copiato direttamente |
| EventData.%2 | event_data_p2.value.string_value | Valore copiato direttamente |
| Parole chiave | keywords.value.string_value | Valore copiato direttamente |
| TimeCreated | metadata.event_timestamp | Convertito da UNIX_MS a timestamp |
| EventId | metadata.event_type | Imposta STATUS_UNCATEGORIZED se EventId == '4400', STATUS_UPDATE se EventId == '13', altrimenti GENERIC_EVENT |
| EventId | metadata.product_event_type | Valore copiato direttamente |
| Opcode | opcode.value.string_value | Valore copiato direttamente |
| Computer | principal.asset.hostname | Valore copiato da principal.hostname |
| Computer | principal.hostname | Valore copiato direttamente |
| ProcessID | principal.process.pid | Valore copiato se non è vuoto |
| ID utente | principal.user.windows_sid | Estratto utilizzando regex per ottenere l'SID di Windows |
| EventId | security_result.rule_name | Impostato su "EventID: " + EventId |
| Livello | security_result.severity | Trasformati: INFO/Informational/Information/Normal/NOTICE in INFORMATIONAL, ERROR/Error in ERROR, WARNING/Warning in INFORMATIONAL, DEBUG in INFORMATIONAL, Critical in CRITICAL |
| Attività | task.value.string_value | Valore copiato direttamente |
| ThreadID | thread_id.value.string_value | Valore copiato direttamente |
| Versione | version.value.string_value | Valore copiato direttamente |
| metadata.vendor_name | metadata.vendor_name | Impostato su "Microsoft" |
| ProviderName | metadata.product_name | Valore copiato direttamente |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.