Microsoft PowerShell-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Microsoft PowerShell-Logs mit dem Bindplane-Agent in Google Security Operations aufnehmen.
Microsoft PowerShell ist ein Framework von Microsoft zur Aufgabenautomatisierung und Konfigurationsverwaltung, das aus einer Befehlszeile und einer Skriptsprache besteht. PowerShell-Logs erfassen die Ausführung von Skripts, Modulaktivitäten und Befehlsaufrufe und bieten so Einblick in PowerShell-Vorgänge für Sicherheitsmonitoring und forensische Analysen.
Hinweis
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Google SecOps-Instanz
- Windows Server 2016 oder höher
- Netzwerkverbindung zwischen dem Windows-Host und Google SecOps
- Wenn Sie den Agent hinter einem Proxy ausführen, müssen die Firewallports gemäß den Anforderungen des Bindplane-Agents geöffnet sein.
- Administratorzugriff auf den Windows-Host zum Konfigurieren der PowerShell-Protokollierung und zum Installieren des Bindplane-Agents
PowerShell-Logging konfigurieren
Das PowerShell-Logging muss auf Windows-Hosts aktiviert sein, bevor Logs erfasst werden können. Standardmäßig ist das PowerShell-Logging minimal. Aktivieren Sie die Protokollierung von Skriptblöcken, um detaillierte PowerShell-Aktivitäten zu erfassen.
Script Block Logging mithilfe von Gruppenrichtlinien aktivieren
- Öffnen Sie den Editor für lokale Gruppenrichtlinien, indem Sie
gpedit.mscals Administrator ausführen. - Gehen Sie zu Computerkonfiguration> Administrative Vorlagen> Windows-Komponenten> Windows PowerShell.
- Doppelklicken Sie auf PowerShell-Skriptblockprotokollierung aktivieren.
- Wählen Sie Aktiviert aus.
- Optional können Sie Start-/Stoppereignisse für den Aufruf von Skriptblöcken protokollieren aktivieren, um Start- und Stoppereignisse für jeden Skriptblock zu erfassen. Beachten Sie, dass bei dieser Option eine große Menge an Protokollen generiert wird.
- Klicken Sie auf OK.
- Öffnen Sie die Eingabeaufforderung als Administrator und führen Sie
gpupdate /forceaus, um die Richtlinie sofort anzuwenden.
Script Block Logging über die Registrierung aktivieren
Alternativ können Sie die Protokollierung von Script-Blöcken aktivieren, indem Sie den folgenden Registrierungswert festlegen:
- Öffnen Sie den Registrierungs-Editor, indem Sie
regeditals Administrator ausführen. - Rufen Sie
HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLoggingauf. - Wenn der Schlüssel nicht vorhanden ist, erstellen Sie ihn.
- Erstellen Sie einen neuen DWORD-Wert (32-Bit) mit dem Namen
EnableScriptBlockLoggingund legen Sie seinen Wert auf1fest. - Starten Sie PowerShell-Sitzungen neu, damit die Änderung wirksam wird.
Bei der PowerShell-Skriptblockprotokollierung werden Ereignisse mit der Ereignis-ID 4104 in den Ereignisprotokollkanal Microsoft-Windows-PowerShell/Operational geschrieben.
Optional: Modul-Logging aktivieren
Mit der Modulprotokollierung werden Details zur Pipelineausführung für die angegebenen Module aufgezeichnet. So aktivieren Sie das Modul-Logging für alle Module:
- Gehen Sie im Editor für lokale Gruppenrichtlinien zu Computerkonfiguration > Administrative Vorlagen > Windows-Komponenten > Windows PowerShell.
- Doppelklicken Sie auf Modul-Logging aktivieren.
- Wählen Sie Aktiviert aus.
- Klicken Sie neben Modulnamen auf Einblenden.
- Geben Sie
*ein, um alle Module zu protokollieren. - Klicken Sie im Fenster Modulnamen auf OK.
- Klicken Sie im Fenster Modulprotokollierung auf OK.
- Führen Sie
gpupdate /forceaus, um die Richtlinie anzuwenden.
Modulprotokollierungsereignisse werden mit der Ereignis-ID 4103 in das Ereignisprotokoll Windows PowerShell geschrieben.
Optional: Transkription aktivieren
Bei der Transkription wird eine textbasierte Aufzeichnung aller Ein- und Ausgaben der PowerShell-Sitzung erstellt. So aktivieren Sie die Transkription:
- Gehen Sie im Editor für lokale Gruppenrichtlinien zu Computerkonfiguration > Administrative Vorlagen > Windows-Komponenten > Windows PowerShell.
- Doppelklicken Sie auf PowerShell-Transkription aktivieren.
- Wählen Sie Aktiviert aus.
- Geben Sie optional ein Ausgabeverzeichnis für Transkripte an. Wenn dieses Feld leer bleibt, werden Transkripte im Ordner „Dokumente“ jedes Nutzers gespeichert.
- Klicken Sie auf Include invocation headers (Aufrufheader einfügen), um Zeitstempel und Metadaten einzufügen.
- Klicken Sie auf OK.
- Führen Sie
gpupdate /forceaus, um die Richtlinie anzuwenden.
Transkripte werden in Textdateien mit Namen geschrieben, die mit PowerShell_transcript beginnen.
Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Collection Agent auf.
- Klicken Sie auf Herunterladen, um die Datei zur Authentifizierung der Aufnahme herunterzuladen.
Speichern Sie die Datei sicher auf dem Windows-Host, auf dem der Bindplane-Agent installiert wird.
Google SecOps-Kundennummer abrufen
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Profile auf.
Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.
BindPlane-Agent installieren
Installieren Sie den BindPlane-Agent auf Ihrem Windows-Host gemäß der folgenden Anleitung.
Fenstereinbau
- Öffnen Sie die Eingabeaufforderung oder PowerShell als Administrator.
Führen Sie dazu diesen Befehl aus:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietWarten Sie, bis die Installation abgeschlossen ist.
Überprüfen Sie die Installation mit folgendem Befehl:
sc query observiq-otel-collectorDer Dienst sollte als RUNNING (Wird ausgeführt) angezeigt werden.
Zusätzliche Installationsressourcen
Weitere Installationsoptionen und Informationen zur Fehlerbehebung finden Sie in der Installationsanleitung für den Bindplane-Agent.
BindPlane-Agent zum Erfassen von PowerShell-Logs konfigurieren
Windows-Konfigurationsdatei suchen
So finden Sie die Windows-Konfigurationsdatei:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Konfigurationsdatei bearbeiten
Ersetzen Sie den gesamten Inhalt von
config.yamldurch die folgende Konfiguration:receivers: windowseventlog/powershell: channel: Microsoft-Windows-PowerShell/Operational max_reads: 100 poll_interval: 5s raw: true start_at: end processors: batch: exporters: chronicle/powershell: compression: gzip creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json' customer_id: '<CUSTOMER_ID>' endpoint: malachiteingestion-pa.googleapis.com log_type: 'POWERSHELL' raw_log_field: body override_log_type: false service: pipelines: logs/powershell: receivers: - windowseventlog/powershell processors: - batch exporters: - chronicle/powershell
Konfigurationsparameter
Ersetzen Sie die folgenden Platzhalter:
Empfängerkonfiguration:
channel: Der Windows-Ereignislog-Channel, aus dem Daten erfasst werden sollen. Verwenden Sie für die PowerShell-SkriptblockprotokollierungMicrosoft-Windows-PowerShell/Operational. Verwenden Sie für das Modul-LoggingWindows PowerShell.raw: Legen Sietruefest, um rohes Windows-Ereignislog-XML an Google SecOps zu senden.start_at: Aufendfestgelegt, um nur neue Ereignisse nach dem Start des Agents zu erfassen. Aufbeginningsetzen, um alle vorhandenen Ereignisse zu erfassen.
Exporter-Konfiguration:
<CUSTOMER_ID>: Ersetzen Sie diesen Platzhalter durch die Kunden-ID aus dem vorherigen Schritt.creds_file_path: Vollständiger Pfad zur Datei für die Authentifizierung bei der Aufnahme. Kopieren Sie die heruntergeladene Authentifizierungsdatei an diesen Speicherort.endpoint: Regionale Endpunkt-URL. Verwenden Sie den Endpunkt für Ihre Google SecOps-Region:- USA:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asien:
asia-southeast1-malachiteingestion-pa.googleapis.com - Eine vollständige Liste finden Sie unter Regionale Endpunkte.
- USA:
log_type: Legen SiePOWERSHELLfest, um den PowerShell-Parser zu verwenden.
Konfigurationsdatei speichern
Speichern Sie die Datei nach der Bearbeitung, indem Sie auf Datei > Speichern klicken.
Bindplane-Agent neu starten, um die Änderungen zu übernehmen
Windows
So verwenden Sie die Eingabeaufforderung oder PowerShell als Administrator:
net stop observiq-otel-collector && net start observiq-otel-collectorOder über die Services-Konsole:
- Drücken Sie
Win+R, geben Sieservices.mscein und drücken Sie die Eingabetaste. - Suchen Sie nach observIQ OpenTelemetry Collector.
- Klicken Sie mit der rechten Maustaste und wählen Sie Neu starten aus.
Prüfen Sie, ob der Dienst ausgeführt wird:
sc query observiq-otel-collectorLogs auf Fehler prüfen:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Drücken Sie
Logaufnahme prüfen
Nachdem Sie den BindPlane-Agent konfiguriert und den Dienst neu gestartet haben, sollten PowerShell-Logs an Google SecOps gesendet werden.
- Melden Sie sich in der Google SecOps-Konsole an.
- Klicken Sie auf Untersuchen > Suche.
Führen Sie die folgende Suche aus, um zu prüfen, ob PowerShell-Logs aufgenommen werden:
metadata.log_type = "POWERSHELL"Prüfen Sie, ob Ereignisse mit aktuellen Zeitstempeln angezeigt werden.
PowerShell-Ereignisse für die Protokollierung von Skriptblöcken (Ereignis-ID 4104) werden mit Details zu ausgeführten Skriptblöcken angezeigt, einschließlich des Skriptinhalts, der Skriptblock-ID und des Ausführungskontexts.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
| HostId | principal.resource.product_object_id | Eindeutige Kennung für das Produktobjekt, das der Hauptressource zugeordnet ist |
| System.Version | metadata.product_version | Version des Produkts, durch das das Ereignis hervorgerufen wurde |
| System.EventId, EventID, winlog.event_id | metadata.product_event_type | Vom Produkt definierter Ereignistyp |
| Computer, System.Computer, computer, winlog.computer_name | principal.hostname | Hostname der primären Entität |
| Computer, System.Computer, computer, winlog.computer_name | principal.asset.hostname | Hostname des Assets, das mit dem Rechtssubjekt verknüpft ist |
| System.EventRecordID, RecordNumber, winlog.record_id | metadata.product_log_id | Eindeutige Kennung für den Logeintrag im Protokollierungssystem des Produkts |
| System.Opcode, opcode, winlog.opcode | metadata.description | Beschreibung des Ereignisses oder zusätzlicher Kontext |
| ProviderGuid, winlog.provider_guid | metadata.product_deployment_id | Eindeutige Kennung für die Bereitstellung des Produkts |
| System.ProcessID, ProcessID, ExecutionProcessID, execution.process_id, winlog.process.pid | principal.process.pid | Prozess-ID des Hauptprozesses |
| SourceModuleName | principal.resource.name | Name der Ressource, die dem Prinzipal zugeordnet ist |
| SourceModuleType | principal.resource.resource_subtype | Untertyp der Ressource, die dem Prinzipal zugeordnet ist |
| security.user_id, UserID, winlog.user.identifier | principal.user.windows_sid | Windows-Sicherheits-ID (SID) für den Hauptnutzer |
| metadata.event_type | Ereignistyp (z.B. USER_LOGIN, NETWORK_CONNECTION) | |
| SourceName, winlog.provider_name | metadata.product_name | Name des Produkts, das das Ereignis ausgelöst hat |
| AccountName, Username, UserName, winlog.user.name | principal.user.userid | Nutzer-ID des Hauptnutzers |
| Domain, winlog.user.domain | principal.administrative_domain | Verwaltungsdomain des Auftraggebers |
| Path, target_file, ScriptName, script_name, ContextInfo_Script Name, file_path | target.process.file.full_path | Vollständiger Pfad zur Datei, die mit dem Zielprozess verknüpft ist |
| Hostname, powershell.Host Name, ContextInfo_Host Name | target.hostname | Hostname der Zielentität |
| Hostname, powershell.Host Name, ContextInfo_Host Name | target.asset.hostname | Hostname des mit dem Ziel verknüpften Assets |
| Host-ID, HostID, ContextInfo_Host ID | target.asset.asset_id | Eindeutige Kennung für das Ziel-Asset. |
| Nombre_de_comando, ContextInfo_Command Name, CommandName | target.application | Name der Anwendung, die mit dem Ziel verknüpft ist |
| HostApplication, ContextInfo_Host Application | target.process.command_line | Befehlszeile zum Starten des Zielprozesses |
| ScriptBlockText | target.process.command_line | Befehlszeile zum Starten des Zielprozesses |
| MessageSourceAddress | principal.ip | IP-Adresse des Auftraggebers |
| MessageSourceAddress | principal.asset.ip | IP-Adresse des Assets, das mit dem Rechtssubjekt verknüpft ist |
| Nombre_de_host | principal.application | Name der Anwendung, die dem Prinzipal zugeordnet ist |
| Version_de_host | principal.platform_version | Version der Plattform, die mit dem Prinzipal verknüpft ist |
| Id_de_host | principal.resource.id | Eindeutige Kennung für die Hauptressource |
| Application_host | principal.process.file.full_path | Vollständiger Pfad zur Datei, die mit dem Hauptprozess verknüpft ist |
| HostApplication | principal.process.command_line | Befehlszeile zum Starten des Hauptprozesses |
| Usuario, admin_domain | principal.user.userid | Nutzer-ID des Hauptnutzers |
| Usuario, admin_domain | principal.administrative_domain | Verwaltungsdomain des Auftraggebers |
| CommandLine | principal.process.command_line | Befehlszeile zum Starten des Hauptprozesses |
| Machine, machine_id | principal.asset.asset_id | Eindeutige Kennung für das primäre Asset. |
| Maschine, Plattformsoftware | principal.asset.platform_software.platform | Plattformtyp des Assets (z.B. WINDOWS, LINUX) |
| Maschine, Plattformsoftware | principal.asset.platform_software.platform_version | Version der Plattformsoftware auf dem Asset |
| MessageSourceAddress | intermediary.ip | IP-Adresse des Vermittlers |
| MessageSourceAddress, Hostname | intermediary.hostname | Hostname der Vermittlerentität |
| MessageSourceAddress, Hostname | intermediary.asset.hostname | Hostname des Assets, das mit dem Vermittler verknüpft ist |
| MessageSourceAddress | intermediary.port | Vom Vermittler verwendete Portnummer |
| HostApplication | target.process.command_line | Befehlszeile zum Starten des Zielprozesses |
| HostId | target.asset.asset_id | Eindeutige Kennung für das Ziel-Asset. |
| SequenceNumber, ContextInfo_Sequence Number, Sequence Number | security_result.detection_fields | Schlüssel/Wert-Paare mit zusätzlichen Informationen zur Erkennung |
| ProviderName | principal.resource.attribute.labels | Labels oder Attribute, die mit der Hauptressource verknüpft sind |
| NewEngineState | additional.fields | Zusätzliche benutzerdefinierte Felder, die nicht vom Standard-UDM-Schema abgedeckt werden |
| PreviousEngineState | additional.fields | Zusätzliche benutzerdefinierte Felder, die nicht vom Standard-UDM-Schema abgedeckt werden |
| ScriptName | additional.fields | Zusätzliche benutzerdefinierte Felder, die nicht vom Standard-UDM-Schema abgedeckt werden |
| ManagementGroupName | additional.fields | Zusätzliche benutzerdefinierte Felder, die nicht vom Standard-UDM-Schema abgedeckt werden |
| Quelle | additional.fields | Zusätzliche benutzerdefinierte Felder, die nicht vom Standard-UDM-Schema abgedeckt werden |
| RenderedDescription | security_result.description | Beschreibung des Sicherheitsergebnisses oder der ergriffenen Maßnahme |
| TenantId | additional.fields | Zusätzliche benutzerdefinierte Felder, die nicht vom Standard-UDM-Schema abgedeckt werden |
| Nutzername | principal.user.userid | Nutzer-ID des Hauptnutzers |
| ActivityID | security_result.detection_fields | Schlüssel/Wert-Paare mit zusätzlichen Informationen zur Erkennung |
| ExecutionThreadID, execution.thread_id, winlog.process.thread.id | security_result.detection_fields | Schlüssel/Wert-Paare mit zusätzlichen Informationen zur Erkennung |
| Ausgabe | security_result.detection_fields | Schlüssel/Wert-Paare mit zusätzlichen Informationen zur Erkennung |
| Daten | security_result.detection_fields | Schlüssel/Wert-Paare mit zusätzlichen Informationen zur Erkennung |
| Data_1 | additional.fields | Zusätzliche benutzerdefinierte Felder, die nicht vom Standard-UDM-Schema abgedeckt werden |
| data_1 | security_result.detection_fields | Schlüssel/Wert-Paare mit zusätzlichen Informationen zur Erkennung |
| Data_2 | security_result.detection_fields | Schlüssel/Wert-Paare mit zusätzlichen Informationen zur Erkennung |
| winlog.activity_id | security_result.detection_fields | Schlüssel/Wert-Paare mit zusätzlichen Informationen zur Erkennung |
| winlog.api | additional.fields | Zusätzliche benutzerdefinierte Felder, die nicht vom Standard-UDM-Schema abgedeckt werden |
| winlog.channel | principal.resource.attribute.labels | Labels oder Attribute, die mit der Hauptressource verknüpft sind |
| Offset | additional.fields | Zusätzliche benutzerdefinierte Felder, die nicht vom Standard-UDM-Schema abgedeckt werden |
| SeverityValue | security_result.detection_fields | Schlüssel/Wert-Paare mit zusätzlichen Informationen zur Erkennung |
| Vermittler | Vermittler | Details zu Vermittlerunternehmen, die an dem Ereignis beteiligt sind |
| security_result | security_result | Allgemeines Sicherheitsergebnis mit Aktionen, Schweregraden und Erkennungen |
| metadata.vendor_name | Name des Anbieters, der das Ereignis erstellt hat | |
| SourceName | metadata.product_name | Name des Produkts, das das Ereignis ausgelöst hat |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten