Raccogliere i dati di Microsoft Windows AD
Questo documento include le seguenti informazioni:
- Architettura di deployment e passaggi di installazione, oltre a eventuali che producono log supportati dall'analizzatore sintattico di Google Security Operations per gli eventi di Microsoft Windows Active Directory. Per una panoramica dell'importazione dei dati di Google Security Operations, consulta Importazione dei dati in Google Security Operations.
- Informazioni su come l'analizzatore sintattico mappa i campi nel log originale ai campi del modello di dati unificato di Google Security Operations.
In base all'architettura di deployment, configura l'agente BindPlane o Agente NXLog per importare i log di Microsoft Windows Active Directory in Google Security Operations. Ti consigliamo di utilizzare l'agente BindPlane per inoltrare i log di Windows Active Directory a Google Security Operations.
Le informazioni contenute in questo documento si applicano al parser con l'etichetta di importazione WINDOWS_AD. L'etichetta di importazione identifica il parser che normalizza i dati di log non elaborati nel formato UDM strutturato.
Prima di iniziare
Prima di configurare l'agente BindPlane o l'agente NXLog, completa le seguenti attività:
- Configura tutti i sistemi in modo che utilizzino il fuso orario UTC.
- Configura i server Microsoft Windows AD.
- Esamina i dispositivi e le versioni supportati.
- Esamina i tipi di log supportati.
Configurare i server AD Microsoft Windows
Su ogni server Microsoft Windows Active Directory, crea e configura un Script PowerShell per salvare i dati di log in un file di output. L'agente BindPlane o NXLog legge il file di output.
# 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 }
Sostituisci quanto segue:
- Sostituisci il valore di
$OUTPUT_FILENAME
con la posizione del file di output. - Archivia i dati in formato JSON.
- Imposta la codifica su UTF-8.
- Utilizza il parametro
-Filter
anziché-LDAPFilter
quando chiami i cmdletGet-ADUser
eGet-ADComputer
.
- Sostituisci il valore di
Crea un'attività ricorrente che esegua lo script per recuperare e scrivere i dati nel file di output.
- Apri l'applicazione Pianificazione attività.
- Fai clic su Crea attività.
- Inserisci un nome e una descrizione per l'attività.
- Seleziona la casella di controllo Esegui con i privilegi più elevati per assicurarti che tutti i dati vengano recuperati.
- Nella scheda Trigger, definisci quando vuoi ripetere l'attività.
- Nella scheda Azione, aggiungi una nuova azione e specifica il percorso del file in cui è memorizzato lo script.
Esamina i dispositivi e le versioni supportati
Microsoft Windows Server viene rilasciato con le seguenti versioni: Foundation, Essentials, Standard e Datacenter. Lo schema di eventi dei log generati da ogni versione non cambia.
Il Parser di Google Security Operations supporta i log delle seguenti versioni dei server Microsoft Windows:
- Microsoft Windows Server 2019
- Microsoft Windows Server 2016
- Microsoft Windows Server 2012
Il parser di Google Security Operations supporta i log raccolti da NXLog Community Edition o Enterprise Edition.
Esamina i tipi di log supportati
L'analizzatore sintattico di Google Security Operations analizzerà e normalizzerà i dati recuperati dal Contesto utente e ai Contesto asset. Supporta i log generati con testo in lingua inglese e non i log generati in lingue diverse dall'inglese.
Configura l'agente BindPlane
Ti consigliamo di utilizzare l'agente BindPlane per inoltrare i log di Windows Active Directory a Google Security Operations.
Dopo l'installazione, il servizio dell'agente BindPlane viene visualizzato come servizio observIQ
nell'elenco dei servizi di Windows.
- Installa l'agente BindPlane su ciascun server Windows Active Directory. Per ulteriori informazioni sull'installazione dell'agente BindPlane, consulta le istruzioni di installazione dell'agente BindPlane.
Crea un file di configurazione per l'agente BindPlane con i seguenti contenuti.
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]
Sostituisci quanto segue :
FILE_PATH
con il percorso del file in cui è stato archiviato l'output dello script PowerShell menzionato nella sezione Configurare i server Microsoft Windows AD.PRIVATE_KEY_ID
,PRIVATE_KEY
SERVICSERVICE_ACCOUNT_NAME
,PROJECT_ID
,CLIENT_ID
eCUSTOMER_ID
con i rispettivi valori dal file JSON dell'account di servizio che puoi scaricare da Google Cloud. Per ulteriori informazioni sulle chiavi degli account di servizio, vedi Creare ed eliminare le chiavi degli account di servizio.
Per avviare il servizio dell'agente observIQ, seleziona Servizi > Avanzati > il servizio observIQ > Avvia.
Configura NXLog
Il seguente diagramma mostra un'architettura in cui sono installati agenti NXLog per raccogliere e inviare eventi di Microsoft Windows a Google Security Operations. Confronta queste informazioni con il tuo ambiente per assicurarti che questi componenti siano installato. Il tuo deployment potrebbe essere diverso da questa architettura e potrebbe essere più complesso.
Se utilizzi l'agente NXLog anziché l'agente BindPlane, verifica quanto segue:
- Uno script PowerShell viene creato e configurato su ciascun server Microsoft Windows che esegue Active Directory per
raccolgono i dati di
USER_CONTEXT
eASSET_CONTEXT
. Per ulteriori informazioni, consulta la sezione Configurare i server Microsoft Windows AD. - NXLog è installato su ogni server AD Microsoft Windows per inviare i dati al server Linux o Microsoft Windows Server centrale.
- Il forwarding di Google Security Operations è installato sul server centrale Microsoft Windows Server o Linux per inoltrare i dati di log a Google Security Operations.
Configura NXLog
- Installa l'agente NXLog su ciascun raccoglitore in esecuzione sul server Windows Active Directory. Questa applicazione inoltra i log al server Microsoft Windows o Linux centrale. Per ulteriori informazioni, consulta Documentazione di NXLog.
Crea un file di configurazione per ogni istanza NXLog. Usare NXLog
im_file
per leggere dal file e analizzare le linee nei campi. Usaom_tcp
per inoltrare i dati al server centrale Microsoft Windows o Linux.Di seguito è riportato un esempio di configurazione di NXLog. Sostituisci
<hostname>
e<port>
con informazioni sulla centrale di destinazione Microsoft Windows o Linux Server. Nella sezione<Input in_adcontext>
e nella proprietàFile
, aggiungi il percorso del file di log di output scritto dallo script PowerShell. Imposta sempreDirCheckInterval
ePollInterval
. Se non vengono definiti, NXLog eseguire il polling dei file ogni secondo.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>
Avvia il servizio NXLog in ogni sistema.
Configura il forwarding su un server centrale
Per informazioni sull'installazione e sulla configurazione del forwarder su Linux, consulta Installare e configurare il forwarder su Linux. Per informazioni sull'installazione e la configurazione del server di inoltro su Microsoft Windows, consulta Installazione e configurazione del server di inoltro su Microsoft Windows.
- Configura il sistema con il fuso orario UTC.
- Installa il forwarding di Google Security Operations sul server Microsoft Windows o Linux centrale.
Configura il forwarder di Google Security Operations per inviare i log a Google Security Operations. Di seguito è riportato un esempio di configurazione del forwarder:
- 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
Riferimento per la mappatura dei campi: campi del log del dispositivo in campi UDM
Questa sezione descrive in che modo l'analizzatore sintattico mappa i campi dei log originali ai campi del modello di dati unificato.
Log contesto utente
Campo NXLog | Campo UDM |
---|---|
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 |
Log contesto asset
Campo NXLog | Campo UDM |
---|---|
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 |