Microsoft Network Policy Server-Logs (NPS) erfassen
In diesem Dokument wird beschrieben, wie Sie Microsoft Network Policy Server-Logs (NPS) mit Google Cloud Storage V2 in Google Security Operations aufnehmen.
Der Microsoft Network Policy Server (NPS) ist eine Windows Server-Rolle, die RADIUS-Authentifizierung, ‑Autorisierung und ‑Abrechnung bietet. NPS ermöglicht die zentrale Verwaltung von Richtlinien für den Netzwerkzugriff für WLAN-Geräte, VPN-Verbindungen, Switches und Remote-Zugriff. NPS bietet keine nativen Cloud-Exportfunktionen oder APIs. Daher müssen Logs mit einem Weiterleitungsdienst eines Drittanbieters erfasst werden.
Hinweis
Folgende Voraussetzungen müssen erfüllt sein:
- Eine Google SecOps-Instanz
- Ein GCP-Projekt mit aktivierter Cloud Storage API
- Berechtigungen zum Erstellen und Verwalten von GCS-Buckets
- Berechtigungen zum Verwalten von IAM-Richtlinien für GCS-Buckets
- Privilegierter Zugriff auf den Windows Server, auf dem NPS ausgeführt wird
- Administratorzugriff zum Installieren von NXLog auf dem NPS-Server
NPS-Logging konfigurieren
NPS-Abrechnungslogs aktivieren
- Öffnen Sie auf dem Windows-Server, auf dem NPS ausgeführt wird, den Server-Manager.
- Klicken Sie auf Tools > Network Policy Server.
- Maximieren Sie in der NPS Console im linken Navigationsbereich Abrechnung.
- Klicken Sie mit der rechten Maustaste auf Buchhaltung und wählen Sie Buchhaltung konfigurieren aus.
- Klicken Sie im Assistenten Buchhaltungskonfiguration auf Weiter.
- Wählen Sie In einer Textdatei auf dem lokalen Computer protokollieren aus und klicken Sie auf Weiter.
- Konfigurieren Sie auf der Seite Configure Log File Properties (Protokolldateieigenschaften konfigurieren) Folgendes:
- Verzeichnis: Standardeinstellung (
%systemroot%\System32\LogFiles) beibehalten oder benutzerdefinierten Pfad angeben - Format: Wählen Sie DTS-kompatibel aus (von Microsoft für strukturiertes XML-Format empfohlen).
- Neue Log-Datei erstellen: Wählen Sie je nach Log-Volumen Täglich oder Wöchentlich aus.
- Verzeichnis: Standardeinstellung (
- Klicken Sie auf Weiter.
- Sehen Sie sich die Zusammenfassung an und klicken Sie auf Fertigstellen.
Audit-Logging für NPS aktivieren
- Öffnen Sie die Eingabeaufforderung als Administrator auf dem NPS-Server.
Führen Sie den folgenden Befehl aus, um die NPS-Prüfprotokollierung zu aktivieren:
auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enablePrüfen Sie, ob die Überwachungsrichtlinie aktiviert ist:
auditpol /get /subcategory:"Network Policy Server"
NXLog auf dem NPS-Server installieren und konfigurieren
NXLog herunterladen und installieren
- Laden Sie NXLog Enterprise Edition auf dem NPS-Server von der NXLog-Website herunter.
- Führen Sie das Installationsprogramm aus und folgen Sie dem Installationsassistenten.
- Übernehmen Sie den Standardinstallationspfad (
C:\Program Files\nxlog) oder geben Sie einen benutzerdefinierten Pfad an. - Schließen Sie die Installation ab.
NXLog zum Erfassen von NPS-Logs konfigurieren
- Wechseln Sie auf dem NPS-Server zum NXLog-Konfigurationsverzeichnis:
- Standardpfad:
C:\Program Files\nxlog\conf
- Standardpfad:
- Öffnen Sie die Datei
nxlog.confin einem Texteditor (z. B. Notepad) mit Administratorberechtigungen. Ersetzen Sie den gesamten Inhalt von
nxlog.confdurch die folgende Konfiguration:## 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>Ersetzen Sie in der Konfigurationsdatei die folgenden Platzhalter:
your-gcs-bucket-name: Der Name Ihres GCS-Buckets (wird im nächsten Abschnitt erstellt)- Prüfen Sie, ob der Pfad
LOGDIRmit dem Speicherort Ihrer NPS-Logdatei übereinstimmt.
Speichern Sie die Datei.
Google Cloud Storage-Bucket erstellen
- Gehen Sie zur Google Cloud Console.
- Wählen Sie Ihr Projekt aus oder erstellen Sie ein neues.
- Rufen Sie im Navigationsmenü Cloud Storage > Buckets auf.
- Klicken Sie auf Bucket erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Bucket benennen Geben Sie einen global eindeutigen Namen ein, z. B. nps-logs-chronicle.Standorttyp Wählen Sie die Option aus, die am besten zu Ihren Anforderungen passt (Region, Dual-Region, Multi-Region). Standort Wählen Sie den Speicherort aus, z. B. us-central1.Speicherklasse Standard (empfohlen für Logs, auf die häufig zugegriffen wird) Zugriffskontrolle Einheitlich (empfohlen) Schutztools Optional: Objektversionierung oder Aufbewahrungsrichtlinie aktivieren Klicken Sie auf Erstellen.
GCS-Dienstkonto für NXLog erstellen
Dienstkonto erstellen
- Wechseln Sie in der GCP Console zu IAM und Verwaltung > Dienstkonten.
- Klicken Sie auf Dienstkonto erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name des Dienstkontos: Geben Sie
nxlog-nps-uploaderein (z. B.). - Beschreibung des Dienstkontos: Geben Sie
Service account for NXLog to upload NPS logs to GCSein.
- Name des Dienstkontos: Geben Sie
- Klicken Sie auf Erstellen und fortfahren.
- Fügen Sie im Abschnitt Diesem Dienstkonto Zugriff auf das Projekt erteilen die folgende Rolle hinzu:
- Klicken Sie auf Rolle auswählen.
- Suchen Sie nach Storage Object Creator und wählen Sie die Rolle aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Fertig.
Dienstkontoschlüssel herunterladen
- Klicken Sie auf der Seite Dienstkonten auf das Dienstkonto, das Sie gerade erstellt haben (
nxlog-nps-uploader). - Rufen Sie den Tab Schlüssel auf.
- Klicken Sie auf Schlüssel hinzufügen > Neuen Schlüssel erstellen.
- Wählen Sie JSON als Schlüsseltyp aus.
- Klicken Sie auf Erstellen.
- Die JSON-Schlüsseldatei wird auf Ihren Computer heruntergeladen.
- Kopieren Sie die JSON-Schlüsseldatei auf den NPS-Server an den folgenden Speicherort:
C:\nxlog-credentials\gcs-service-account.json
- Erstellen Sie das Verzeichnis
C:\nxlog-credentials, falls es noch nicht vorhanden ist.
Automatischen GCS-Upload konfigurieren
PowerShell-Upload-Script erstellen
- Erstellen Sie auf dem NPS-Server ein neues Verzeichnis:
C:\nxlog-scripts
- Erstellen Sie im Verzeichnis eine neue Datei mit dem Namen
upload-to-gcs.ps1. Öffnen Sie die Datei in einem Texteditor und fügen Sie das folgende PowerShell-Script ein:
# 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"Ersetzen Sie im Skript die folgenden Werte:
$GcsBucket: Der URI Ihres GCS-Buckets (z. B.gs://nps-logs-chronicle/nps-logs/)
Speichern Sie die Datei.
Google Cloud SDK installieren
- Laden Sie auf dem NPS-Server das Google Cloud SDK-Installationsprogramm von Google Cloud SDK herunter.
- Führen Sie das Installationsprogramm aus und folgen Sie dem Installationsassistenten.
- Wählen Sie während der Installation Gebündeltes Python installieren aus, wenn Python noch nicht installiert ist.
- Schließen Sie die Installation ab.
Öffnen Sie eine neue Eingabeaufforderung und prüfen Sie die Installation:
gsutil version
Geplante Aufgabe für automatisierten Upload erstellen
- Öffnen Sie auf dem NPS-Server den Taskplaner.
- Klicken Sie im rechten Bereich auf Aufgabe erstellen.
- Konfigurieren Sie auf dem Tab Allgemein Folgendes:
- Name: Geben Sie
NXLog GCS Uploadein. - Beschreibung: Geben Sie
Upload NPS logs to Google Cloud Storageein. - Sicherheitsoptionen: Wählen Sie Ausführen, unabhängig davon, ob der Nutzer angemeldet ist aus.
- Sicherheitsoptionen: Setzen Sie ein Häkchen bei Mit höchsten Berechtigungen ausführen.
- Konfigurieren für: Wählen Sie Windows Server 2016 oder Ihre Serverversion aus.
- Name: Geben Sie
- Auf dem Tab Trigger:
- Klicken Sie auf Neu.
- Aufgabe starten: Wählen Sie Nach Zeitplan aus.
- Einstellungen: Wähle Täglich aus.
- Wiederholung: alle: Geben Sie
1Tage ein. - Aufgabe wiederholen alle: Wählen Sie 15 Minuten aus.
- für einen Zeitraum von: Wählen Sie Unbefristet aus.
- Klicken Sie auf OK.
- Auf dem Tab Aktionen:
- Klicken Sie auf Neu.
- Aktion: Wählen Sie Programm starten aus.
- Programm/Script: Geben Sie
powershell.exeein. - Argumente hinzufügen: Geben Sie
-ExecutionPolicy Bypass -File "C:\nxlog-scripts\upload-to-gcs.ps1"ein. - Klicken Sie auf OK.
- Auf dem Tab Bedingungen:
- Deaktivieren Sie Aufgabe nur starten, wenn der Computer an eine Wechselstromquelle angeschlossen ist.
- Auf dem Tab Einstellungen:
- Aktivieren Sie Aufgabe so bald wie möglich nach einem verpassten geplanten Start ausführen.
- Prüfen Sie If the task fails, restart every (Wenn die Aufgabe fehlschlägt, alle): Geben Sie
5 minutesein.
- Klicken Sie auf OK.
- Geben Sie die Anmeldedaten für das Konto ein, mit dem die Aufgabe ausgeführt werden soll (muss Administratorberechtigungen haben).
- Klicken Sie auf OK.
Uploadvorgang testen
- Öffnen Sie auf dem NPS-Server den Taskplaner.
- Maximieren Sie im linken Bereich Task Scheduler Library (Aufgabenplaner-Bibliothek).
- Klicken Sie mit der rechten Maustaste auf die Aufgabe NXLog GCS Upload und wählen Sie Run (Ausführen) aus.
- Warten Sie einige Sekunden, bis die Aufgabe abgeschlossen ist.
- Öffnen Sie die Protokolldatei unter
C:\nxlog-scripts\upload.log, um zu prüfen, ob der Upload erfolgreich war. - Rufen Sie die GCP Console > Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets (
nps-logs-chronicle). - Rufen Sie den Ordner
nps-logs/auf. - Prüfen Sie, ob JSON-Dateien mit NPS-Protokollen vorhanden sind.
NXLog-Dienst starten
- Öffnen Sie auf dem NPS-Server Dienste (führen Sie
services.mscaus). - Suchen Sie in der Liste nach dem Dienst nxlog.
- Klicken Sie mit der rechten Maustaste auf den Dienst nxlog und wählen Sie Start aus.
- Prüfen Sie, ob der Dienststatus Wird ausgeführt lautet.
- So prüfen Sie, ob NXLog Logs erfasst:
C:\Program Files\nxlog\data\nxlog.log
Suchen Sie nach Meldungen, die auf eine erfolgreiche Logerfassung hinweisen:
INFO im_file: monitoring file 'C:\Windows\System32\LogFiles\IN250315.log'
Google SecOps-Dienstkonto abrufen
Google SecOps verwendet ein eindeutiges Dienstkonto, um Daten aus Ihrem GCS-Bucket zu lesen. Sie müssen diesem Dienstkonto Zugriff auf Ihren Bucket gewähren.
E‑Mail-Adresse des Dienstkontos abrufen
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf Einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
Microsoft NPS Logs. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie MICROSOFT_NPS als Log type (Protokolltyp) aus.
Klicken Sie auf Dienstkonto abrufen. Es wird eine eindeutige E-Mail-Adresse für das Dienstkonto angezeigt, z. B.:
```none chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com ```Kopieren Sie diese E‑Mail-Adresse für den nächsten Schritt.
Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
Storage-Bucket-URL: Geben Sie den GCS-Bucket-URI mit dem Präfixpfad ein:
gs://nps-logs-chronicle/nps-logs/- Ersetzen Sie:
nps-logs-chronicle: Der Name Ihres GCS-Buckets.nps-logs/: Das Präfix bzw. der Ordnerpfad, in dem Logs gespeichert werden.
- Ersetzen Sie:
- Option zum Löschen der Quelle: Wählen Sie die gewünschte Option zum Löschen aus:
- Nie: Löscht nach Übertragungen nie Dateien (empfohlen für Tests).
- Übertragene Dateien löschen: Dateien werden nach der erfolgreichen Übertragung gelöscht.
- Übertragene Dateien und leere Verzeichnisse löschen: Löscht Dateien und leere Verzeichnisse nach der erfolgreichen Übertragung.
- Höchstalter der Datei: Dateien einbeziehen, die in den letzten Tagen geändert wurden (Standardwert: 180 Tage)
- Asset-Namespace: Der Asset-Namespace
- Labels für Datenaufnahme: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll
Klicken Sie auf Weiter.
Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
Dem Google SecOps-Dienstkonto IAM-Berechtigungen gewähren
- Das Google SecOps-Dienstkonto benötigt die Rolle Storage Object Viewer für Ihren GCS-Bucket.
- Rufen Sie Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets (
nps-logs-chronicle). - Wechseln Sie zum Tab Berechtigungen.
- Klicken Sie auf Zugriff erlauben.
- Geben Sie die folgenden Konfigurationsdetails an:
- Hauptkonten hinzufügen: Fügen Sie die E‑Mail-Adresse des Google SecOps-Dienstkontos ein.
- Rollen zuweisen: Wählen Sie Storage Object Viewer aus.
Klicken Sie auf Speichern.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
| Version | additional.fields | Mit entsprechenden Objekten zusammengeführt, sofern nicht leer |
| Kanal | additional.fields | |
| Keywords | additional.fields | |
| Opcode | additional.fields | |
| Aufgabe | additional.fields | |
| ThreadID | additional.fields | |
| EventData.%1 | additional.fields | |
| EventData.%2 | additional.fields | |
| Kanal | channel.value.string_value | Wert direkt kopiert |
| EventData.%1 | event_data_p1.value.string_value | Wert direkt kopiert |
| EventData.%2 | event_data_p2.value.string_value | Wert direkt kopiert |
| Keywords | keywords.value.string_value | Wert direkt kopiert |
| TimeCreated | metadata.event_timestamp | Von UNIX_MS in Zeitstempel umgewandelt |
| EventId | metadata.event_type | Wird auf STATUS_UNCATEGORIZED gesetzt, wenn EventId == '4400', auf STATUS_UPDATE, wenn EventId == '13', andernfalls auf GENERIC_EVENT. |
| EventId | metadata.product_event_type | Wert direkt kopiert |
| Opcode | opcode.value.string_value | Wert direkt kopiert |
| Computer | principal.asset.hostname | Wert aus „principal.hostname“ kopiert |
| Computer | principal.hostname | Wert direkt kopiert |
| ProcessID | principal.process.pid | Wert kopiert, wenn er nicht leer ist |
| UserId | principal.user.windows_sid | Mit einem regulären Ausdruck extrahiert, um die Windows-SID abzurufen |
| EventId | security_result.rule_name | Auf „EventID: “ + EventId festlegen |
| Level | security_result.severity | Transformiert: INFO/Informational/Information/Normal/NOTICE zu INFORMATIONAL, ERROR/Error zu ERROR, WARNING/Warning zu INFORMATIONAL, DEBUG zu INFORMATIONAL, Critical zu CRITICAL |
| Aufgabe | task.value.string_value | Wert direkt kopiert |
| ThreadID | thread_id.value.string_value | Wert direkt kopiert |
| Version | version.value.string_value | Wert direkt kopiert |
| metadata.vendor_name | metadata.vendor_name | Auf „Microsoft“ festgelegt |
| ProviderName | metadata.product_name | Wert direkt kopiert |
Änderungsprotokoll
Änderungsprotokoll für diesen Parser ansehen
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten