Microsoft Windows AD-Daten erfassen
Dieses Dokument enthält die folgenden Informationen:
- Bereitstellungsarchitektur und Installationsschritte sowie alle erforderlichen Konfigurationen, die Logs für Microsoft Windows Active Directory-Ereignisse generieren, die vom Google Security Operations-Parser unterstützt werden. Eine Übersicht über die Datenaufnahme in Google Security Operations finden Sie unter Datenaufnahme in Google Security Operations.
- Informationen dazu, wie der Parser Felder im ursprünglichen Protokoll den Feldern des einheitlichen Datenmodells von Google Security Operations zuordnet.
Konfigurieren Sie den BindPlane-Agent oder den NXLog-Agent entsprechend Ihrer Bereitstellungsarchitektur, um Microsoft Windows Active Directory-Logs in Google Security Operations aufzunehmen. Wir empfehlen, den BindPlane-Agent zu verwenden, um die Logs des Windows Active Directory an Google Security Operations weiterzuleiten.
Die Informationen in diesem Dokument beziehen sich auf den Parser mit dem Datenaufnahmelabel WINDOWS_AD. Das Aufnahmelabel gibt an, welcher Parser Roh-Logdaten in das strukturierte UDM-Format normalisiert.
Hinweise
Führen Sie vor dem Konfigurieren des BindPlane-Agents oder des NXLog-Agents die folgenden Aufgaben aus:
- Konfigurieren Sie alle Systeme so, dass die Zeitzone UTC verwendet wird.
- Microsoft Windows AD-Server konfigurieren
- Unterstützte Geräte und Versionen ansehen
- Unterstützte Logtypen ansehen
Microsoft Windows AD-Server konfigurieren
Erstellen und konfigurieren Sie auf jedem Microsoft Windows Active Directory-Server ein PowerShell-Script, um die Protokolldaten in einer Ausgabedatei zu speichern. Der BindPlane-Agent oder NXLog liest die Ausgabedatei.
# Set the location where the log file will be written $OUTPUT_FILENAME="<Path_of_the_output_file>" If (Test-Path -Path $OUTPUT_FILENAME) { Remove-Item -path $OUTPUT_FILENAME -ErrorAction SilentlyContinue} # USER_CONTEXT: Gets all Active Directory users and their properties. Get-ADUser -Filter * -properties samAccountName | % { Get-ADUser $_.SamAccountName -properties * | ConvertTo-JSON -compress | Out-File -encoding utf8 $OUTPUT_FILENAME -Append } # ASSET_CONTEXT: Gets all Active Directory assets and their properties. Get-ADComputer -Filter * -properties samAccountName | % { Get-ADComputer $_.SamAccountName -properties * | ConvertTo-JSON -compress | Out-File -encoding utf8 $OUTPUT_FILENAME -Append }
Ersetzen Sie Folgendes :
- Ersetzen Sie den Wert von
$OUTPUT_FILENAME
durch den Speicherort der Ausgabedatei. - Speichern Sie die Daten im JSON-Format.
- Legen Sie die Codierung auf UTF-8 fest.
- Verwenden Sie beim Aufrufen der Cmdlets
Get-ADUser
undGet-ADComputer
den Parameter-Filter
anstelle des Parameters-LDAPFilter
.
- Ersetzen Sie den Wert von
Erstellen Sie eine wiederkehrende Aufgabe, die das Script ausführt, um Daten abzurufen und in die Ausgabedatei zu schreiben.
- Öffnen Sie den Taskplaner.
- Klicken Sie auf Aufgabe erstellen.
- Geben Sie einen Namen und eine Beschreibung für die Aufgabe ein.
- Klicken Sie das Kästchen Mit höchsten Berechtigungen ausführen an, damit alle Daten abgerufen werden.
- Legen Sie auf dem Tab Trigger fest, wann die Aufgabe wiederholt werden soll.
- Fügen Sie auf dem Tab Aktion eine neue Aktion hinzu und geben Sie den Pfad zur Datei an, in der das Script gespeichert ist.
Unterstützte Geräte und Versionen ansehen
Microsoft Windows Server wird in den folgenden Versionen veröffentlicht: Foundation, Essentials, Standard und Datacenter. Das Ereignisschema der Protokolle, die von den einzelnen Versionen generiert werden, unterscheidet sich nicht.
Der Google Security Operations-Parser unterstützt Protokolle der folgenden Microsoft Windows-Serverversionen:
- Microsoft Windows Server 2019
- Microsoft Windows Server 2016
- Microsoft Windows Server 2012
Der Google Security Operations-Parser unterstützt Logs, die mit der NXLog Community Edition oder Enterprise Edition erfasst werden.
Unterstützte Logtypen ansehen
Der Google Security Operations-Parser analysiert und normalisiert Daten, die aus dem Nutzerkontext und dem Asset-Kontext abgerufen wurden. Es werden nur Protokolle unterstützt, die in englischer Sprache generiert wurden.
BindPlane-Agent konfigurieren
Wir empfehlen, die Logs des Windows Active Directory mit dem BindPlane-Agent an Google Security Operations weiterzuleiten.
Nach der Installation wird der BindPlane-Agentdienst in der Liste der Windows-Dienste als Dienst observIQ
angezeigt.
- Installieren Sie den BindPlane-Agent auf jedem Windows Active Directory-Server. Weitere Informationen zur Installation des BindPlane-Agents finden Sie in der Anleitung zur Installation des BindPlane-Agents.
Erstellen Sie eine Konfigurationsdatei für den BindPlane-Agenten mit folgendem Inhalt:
receivers: filelog: include: [ `FILE_PATH` ] operators: - type: json_parser start_at: beginning windowseventlog/activedirectoryservice: channel: Directory Service raw: true processors: batch: exporters: chronicle/activedirectory: endpoint: https://malachiteingestion-pa.googleapis.com creds: '{ "type": "service_account", "project_id": "malachite-projectname", "private_key_id": `PRIVATE_KEY_ID`, "private_key": `PRIVATE_KEY`, "client_email":"`SERVICE_ACCOUNT_NAME`@malachite-`PROJECT_ID`.iam.gserviceaccount.com", "client_id": `CLIENT_ID`, "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/`SERVICSERVICE_ACCOUNT_NAME`%40malachite-`PROJECT_ID`.iam.gserviceaccount.com", "universe_domain": "googleapis.com" }' log_type: 'WINDOWS_AD' override_log_type: false raw_log_field: body customer_id: `CUSTOMER_ID` service: pipelines: logs/ads: receivers: - filelog - windowseventlog/activedirectoryservice processors: [batch] exporters: [chronicle/activedirectory]
Ersetzen Sie Folgendes :
FILE_PATH
mit dem Pfad zur Datei, in der die Ausgabe des PowerShell-Scripts gespeichert wurde, das unter Microsoft Windows AD-Server konfigurieren erwähnt wurde.PRIVATE_KEY_ID
,PRIVATE_KEY
,SERVICSERVICE_ACCOUNT_NAME
,PROJECT_ID
,CLIENT_ID
undCUSTOMER_ID
mit den entsprechenden Werten aus der JSON-Datei des Dienstkontos, die Sie aus Google Cloud herunterladen können. Weitere Informationen zu Dienstkontoschlüsseln finden Sie unter Dienstkontoschlüssel erstellen und löschen.
Wählen Sie zum Starten des observIQ-Agentendiensts Dienste > Erweitert > observIQ-Dienst > Starten aus.
NXLog konfigurieren
Das folgende Diagramm zeigt eine Architektur, in der NXLog-Agenten installiert sind, um Microsoft Windows-Ereignisse zu erfassen und an Google Security Operations zu senden. Vergleichen Sie diese Informationen mit Ihrer Umgebung, um sicherzustellen, dass diese Komponenten installiert sind. Ihre Bereitstellung kann sich von dieser Architektur unterscheiden und komplexer sein.
Wenn Sie den NXLog-Agent anstelle des BindPlane-Agents verwenden, prüfen Sie Folgendes:
- Auf jedem Microsoft Windows-Server, auf dem Active Directory ausgeführt wird, wird ein PowerShell-Script erstellt und konfiguriert, um
USER_CONTEXT
- undASSET_CONTEXT
-Daten zu erfassen. Weitere Informationen finden Sie unter Microsoft Windows AD-Server konfigurieren. - NXLog wird auf jedem Microsoft Windows AD-Server installiert, um Daten an den zentralen Microsoft Windows-Server oder Linux-Server zu senden.
- Der Google Security Operations-Weiterleiter wird auf dem zentralen Microsoft Windows- oder Linux-Server installiert, um Logdaten an Google Security Operations weiterzuleiten.
NXLog konfigurieren
- Installieren Sie den NXLog-Agent auf jedem Collector, der auf dem Windows Active Directory-Server ausgeführt wird. Diese Anwendung leitet Protokolle an den zentralen Microsoft Windows- oder Linux-Server weiter. Weitere Informationen finden Sie in der NXLog-Dokumentation.
Erstellen Sie eine Konfigurationsdatei für jede NXLog-Instanz. Verwenden Sie das NXLog-
im_file
-Modul, um die Datei zu lesen und die Zeilen in Felder zu parsen. Verwenden Sieom_tcp
, um Daten an den zentralen Microsoft Windows- oder Linux-Server weiterzuleiten.Das folgende Beispiel zeigt eine NXLog-Konfiguration. Ersetzen Sie die Werte
<hostname>
und<port>
durch Informationen zum zentralen Microsoft Windows- oder Linux-Server des Ziels. Fügen Sie im Bereich<Input in_adcontext>
und in der EigenschaftFile
den Pfad zur Ausgabeprotokolldatei hinzu, die vom PowerShell-Script erstellt wurde. Legen Sie immerDirCheckInterval
undPollInterval
fest. Wenn diese nicht definiert sind, sucht NXLog alle 1 Sekunde nach Dateien.define ROOT C:\Program Files\nxlog define ADCONTEXT_OUTPUT_DESTINATION_ADDRESS <hostname> define ADCONTEXT_OUTPUT_DESTINATION_PORT <port> Moduledir %ROOT%\modules CacheDir %ROOT%\data Pidfile %ROOT%\data\nxlog.pid SpoolDir %ROOT%\data LogFile %ROOT%\data\nxlog.log <Input in_adcontext> Module im_file File "<Path_of_the_output_file>" DirCheckInterval 3600 PollInterval 3600 </Input> <Output out_chronicle_adcontext> Module om_tcp Host %ADCONTEXT_OUTPUT_DESTINATION_ADDRESS% Port %ADCONTEXT_OUTPUT_DESTINATION_PORT% </Output> <Route ad_context_to_chronicle> Path in_adcontext => out_chronicle_adcontext </Route>
Starten Sie den NXLog-Dienst auf jedem System.
Weiterleitung auf einem zentralen Server konfigurieren
Informationen zum Installieren und Konfigurieren des Brokers unter Linux finden Sie unter Installation und Konfiguration des Brokers unter Linux. Informationen zum Installieren und Konfigurieren des Brokers unter Microsoft Windows finden Sie unter Installation und Konfiguration des Brokers unter Microsoft Windows.
- Konfigurieren Sie das System mit der Zeitzone UTC.
- Installieren Sie den Google Security Operations-Weiterleitungsdienst auf dem zentralen Microsoft Windows- oder Linux-Server.
Konfigurieren Sie den Google Security Operations-Weiterleiter so, dass Protokolle an Google Security Operations gesendet werden. Im Folgenden finden Sie ein Beispiel für eine Weiterleitungskonfiguration:
- syslog: common: enabled: true data_type: WINDOWS_AD batch_n_seconds: 10 batch_n_bytes: 1048576 tcp_address: 0.0.0.0:10518 connection_timeout_sec: 60
Referenz für die Feldzuordnung: Geräteprotokollfelder zu UDM-Feldern
In diesem Abschnitt wird beschrieben, wie der Parser die ursprünglichen Protokollfelder den Feldern des einheitlichen Datenmodells zuordnet.
Protokolle zum Nutzerkontext
NXLog-Feld | UDM-Feld |
---|---|
GivenName |
entity.entity.user.first_name |
Surname |
entity.entity.user.last_name |
SamAccountName |
entity.entity.user.userid |
SID.Value |
entity.entity.user.windows_sid |
ObjectClass |
If the value is user ,entity.metadata.entity_type is set to USER |
ObjectGuid |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the objectGUID log field value is not empty, then the objectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the
entity.entity.user.product_object_id UDM field.
|
objectGUID |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the objectGUID log field value is not empty, then the objectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
|
ObjectGUID |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the objectGUID log field value is not empty, then the objectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
|
AccountExpirationDate |
entity.entity.user.account_expiration_time |
badPwdCount |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
CanonicalName |
entity.entity.administrative_domain |
City |
entity.entity.user.personal_address.city |
Company |
entity.entity.user.company_name |
Country |
entity.entity.user.personal_address.country_or_region |
Department |
entity.entity.user.department |
Description |
entity.metadata.description |
DisplayName |
entity.entity.user.user_display_name |
EmailAddress |
entity.entity.user.email_addresses |
EmployeeID |
entity.entity.user.employee_id |
HomeDirectory |
entity.entity.file.full_path |
HomePage |
entity.entity.url |
HomePhone |
entity.entity.user.phone_numbers |
LastBadPasswordAttempt |
entity.entity.user.last_bad_password_attempt_time |
lastLogoff |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
lastLogon |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
LastLogonDate |
entity.entity.user.last_login_time |
Manager |
Values for GUID , SAMAccountname , SID all mapped to different UDM fields:- SID is stored in manager.windows_sid- Distinguished name (i.e. value in first CN) is stored in
manager.user_display_name - GUID ,SamAccountName is stored in manager.userid |
MemberOf |
The following fields in the first occurrence of CN are set:entity.relations.entity.group.group_display_name entity.relations.entity_type set to GROUP entity.relations.relationship set t0 MEMBER entity.relations.direction set to UNIDIRECTIONAL |
MobilePhone |
entity.entity.user.phone_numbers |
Office |
entity.entity.user.office_address.name |
PasswordExpired |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
PasswordLastSet |
entity.entity.user.last_password_change_time |
PasswordNeverExpires |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
PasswordNotRequired |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
PrimaryGroup |
Following fields are set: - entity.relations.entity.group.group_display_name - entity.relations.entity_type set to GROUP - entity.relations.relationship set to MEMBER - entity.relations.direction set to UNIDIRECTIONAL |
ServicePrincipalNames |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
State |
entity.entity.user.personal_address.state |
StreetAddress |
entity.entity.user.personal_address.name |
Title |
entity.entity.user.title |
whenCreated |
entity.user.attribute.creation_time |
AccountLockoutTime |
entity.entity.user.account_lockout_time |
Asset-Kontextprotokolle
NXLog-Feld | UDM-Feld |
---|---|
DNSHostName |
entity.entity.asset.hostname |
SamAccountName |
entity.entity.asset.asset_id |
SID.Value |
entity.entity.user.windows_sid |
ObjectClass |
If the value is computer , entity.metadata.entity_type set to ASSET |
ObjectGuid |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.asset.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.asset.product_object_id UDM field. |
ObjectGUID |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.asset.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.asset.product_object_id UDM field. |
AccountExpirationDate |
entity.entity.user.account_expiration_time |
badPwdCount |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
CanonicalName |
entity.entity.administrative_domain |
countryCode |
entity.entity.asset.location.country_or_region |
Description |
entity.entity.metadata.description |
HomePage |
entity.entity.url |
IPv4Address |
entity.entity.asset.ip |
IPv6Address |
entity.entity.asset.ip |
LastBadPasswordAttempt |
entity.entity.user.last_bad_password_attempt_time |
lastLogoff |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
lastLogon |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
LastLogonDate |
entity.entity.user.last_login_time |
Location |
entity.entity.asset.location.name |
ManagedBy |
The following fields are set:entity.entity.user.user_display_name entity.relations.entity_type set to USER entity.relations.relationship set to ADMINISTERS entity.relations.direction set to UNIDIRECTIONAL |
ObjectCategory |
entity.entity.asset.category |
OperatingSystem |
If the name contains Windows ,
entity.entity.asset.platform_software.platform field is set to
WINDOWS . |
OperatingSystemServicePack |
entity.entity.asset.platform_software.platform_patch_level |
OperatingSystemVersion |
The field entity.entity.asset.platform_software.platform_version is set to
%{OperatingSystem} - %{OperatingSystemVersion} |
PasswordExpired |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
PasswordLastSet |
entity.entity.user.last_password_change_time |
PasswordNeverExpires |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
PasswordNotRequired |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
PrimaryGroup |
The following fields are set: - entity.relations.entity.group.group_display_name - entity.relations.entity_type set to GROUP - entity.relations.relationship set to MEMBER - entity.relations.direction set to UNIDIRECTIONAL |
ServicePrincipalNames |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
whenChanged |
entity.entity.asset.attribute.last_update_time |
whenCreated |
entity.entity.asset.attribute.creation_time |
AccountLockoutTime |
entity.entity.user.account_lockout_time |