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.
Microsoft Network Policy Server (NPS) ist eine Windows Server-Rolle, die RADIUS-Authentifizierung, -Autorisierung und -Accounting bietet. NPS ermöglicht die zentrale Verwaltung von Netzwerkzugriffsrichtlinien für drahtlose Geräte, VPN-Verbindungen, Switches und Remote-Zugriff. NPS bietet keine nativen Cloud-Exportfunktionen oder APIs. Daher müssen Logs mit einem Drittanbieter-Forwarder 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.
- Gehen Sie zu Tools > Network Policy Server.
- Maximieren Sie in der NPS-Konsole im linken Navigationsbereich die Option Accounting (Abrechnung).
- Rechtsklicken Sie auf Accounting (Abrechnung) und wählen Sie Configure Accounting (Abrechnung konfigurieren) aus.
- Klicken Sie im Assistenten Accounting Configuration (Abrechnungskonfiguration) auf Next (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 (Logdateieigenschaften konfigurieren) Folgendes:
- Verzeichnis: Behalten Sie die Standardeinstellung (
%systemroot%\System32\LogFiles) bei oder geben Sie einen benutzerdefinierten Pfad an. - Format: Wählen Sie DTS-konform aus (von Microsoft für das strukturierte XML-Format empfohlen).
- Neue Logdatei erstellen: Wählen Sie je nach Logvolumen Täglich oder Wöchentlich aus.
- Verzeichnis: Behalten Sie die Standardeinstellung (
- Klicken Sie auf Weiter.
- Sehen Sie sich die Zusammenfassung an und klicken Sie auf Fertigstellen.
NPS-Audit-Logging aktivieren
- Öffnen Sie die Eingabeaufforderung als Administrator auf dem NPS-Server.
Führen Sie den folgenden Befehl aus, um das NPS-Audit-Logging zu aktivieren:
auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enablePrüfen Sie, ob die Audit-Richtlinie aktiviert ist:
auditpol /get /subcategory:"Network Policy Server"
NXLog auf dem NPS-Server installieren und konfigurieren
NXLog herunterladen und installieren
- Laden Sie auf dem NPS-Server die NXLog Enterprise Edition 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 für die Erfassung 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. Editor) 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: Name Ihres GCS-Buckets (wird im nächsten Abschnitt erstellt)- Prüfen Sie, ob der Pfad
LOGDIRmit dem Speicherort Ihrer NPS-Protokolldatei ü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, die am besten zu Ihren Anforderungen passt (Region, Dual-Region, Multi-Region). Standort Wählen Sie den Standort aus (z. B. us-central1).Speicherklasse Standard (empfohlen für Logs, auf die häufig zugegriffen wird) Zugriffssteuerung Einheitlich (empfohlen) Schutztools Optional: Objektversionsverwaltung oder Aufbewahrungsrichtlinie aktivieren Klicken Sie auf Erstellen.
GCS-Dienstkonto für NXLog erstellen
Dienstkonto erstellen
- Rufen Sie in der GCP Console die Seite IAM und Verwaltung > Dienstkonten auf.
- Klicken Sie auf Dienstkonto erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name des Dienstkontos: Geben Sie beispielsweise
nxlog-nps-uploaderein. - Beschreibung des Dienstkontos: Geben Sie
Service account for NXLog to upload NPS logs to GCSein.
- Name des Dienstkontos: Geben Sie beispielsweise
- 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 an den folgenden Speicherort auf dem NPS-Server:
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 Script 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 automatischen Upload erstellen
- Öffnen Sie auf dem NPS-Server die Aufgabenplanung.
- 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 Unabhängig von der Benutzeranmeldung ausführen aus.
- Sicherheitsoptionen: Setzen Sie ein Häkchen bei Mit höchsten Privilegien 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 einem Zeitplan aus.
- Einstellungen: Wählen Sie Täglich aus.
- Wiederholen alle: Geben Sie
1Tage ein. - Aufgabe wiederholen alle: Wählen Sie 15 Minuten aus.
- für die Dauer 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/Skript: 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:
- Entfernen Sie das Häkchen bei Aufgabe nur starten, wenn der Computer im Netzbetrieb ausgeführt wird.
- Auf dem Tab Einstellungen:
- Setzen Sie ein Häkchen bei Aufgabe so schnell wie möglich nach einem verpassten geplanten Start ausführen.
- Setzen Sie ein Häkchen bei Wenn die Aufgabe fehlschlägt, alle… neu starten und geben Sie
5 minutesein.
- Klicken Sie auf OK.
- Geben Sie die Anmeldedaten für das Konto ein, über das die Aufgabe ausgeführt werden soll. Es muss Administratorberechtigungen haben.
- Klicken Sie auf OK.
Uploadvorgang testen
- Öffnen Sie auf dem NPS-Server die Aufgabenplanung.
- Maximieren Sie im linken Bereich die Aufgabenplanungsbibliothek.
- Rechtsklicken Sie auf die Aufgabe NXLog GCS Upload und wählen Sie 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-Logs 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.
- Prüfen Sie die NXLog-Logdatei, um festzustellen, 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 Einstellungen > Datenverwaltung > Feeds auf. Wenn Sie eine reine SIEM-Plattform verwenden, rufen Sie die 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 Logtyp aus.
Klicken Sie auf Dienstkonto abrufen. Eine eindeutige E-Mail-Adresse für das Dienstkonto wird angezeigt, z. B.:
```none chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com ```Kopieren Sie diese E-Mail-Adresse, um sie im nächsten Schritt zu verwenden.
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/: Der Präfix-/Ordnerpfad, in dem Logs gespeichert werden.
- Ersetzen Sie:
- Option zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus:
- Nie: Nach Übertragungen werden keine Dateien gelöscht (empfohlen für Tests).
- Übertragene Dateien löschen: Dateien werden nach erfolgreicher Übertragung gelöscht.
- Übertragene Dateien und leere Verzeichnisse löschen: Dateien und leere Verzeichnisse werden nach erfolgreicher Übertragung gelöscht.
- Maximales Dateialter: Dateien einschließen, 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-Objekt-Betrachter 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 | Zusammengeführt mit entsprechenden Objekten, wenn 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 konvertiert |
| 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 kopiert von principal.hostname |
| Computer | principal.hostname | Wert direkt kopiert |
| ProcessID | principal.process.pid | Wert wird kopiert, wenn er nicht leer ist |
| UserId | principal.user.windows_sid | Mit Regex extrahiert, um die Windows-SID abzurufen |
| EventId | security_result.rule_name | Legen Sie diesen Wert auf „EventID: “ + EventId fest. |
| 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 | Legen Sie diesen Wert auf „Microsoft“ fest. |
| 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