Coletar dados do Microsoft Windows AD
Este documento inclui as seguintes informações:
- Arquitetura de implantação e etapas de instalação, além de qualquer configuração necessária que produza registros com suporte do analisador do Google Security Operations para eventos do Microsoft Windows Active Directory. Para uma visão geral da ingestão de dados do Google Security Operations, consulte Ingestão de dados para o Google Security Operations.
- Informações sobre como o analisador mapeia campos no registro original para os campos do modelo de dados unificado do Google Security Operations.
Com base na arquitetura de implantação, configure o agente BindPlane ou o NXLog para ingerir registros do Microsoft Windows Active Directory nas Operações de segurança do Google. Recomendamos o uso do agente do BindPlane para encaminhar os registros do Active Directory do Windows para o Google Security Operations.
As informações neste documento se aplicam ao analisador com o rótulo de transferência WINDOWS_AD. O rótulo de transferência identifica qual analisador normaliza os dados de registro brutos para o formato estruturado do UDM.
Antes de começar
Antes de configurar o agente BindPlane ou o agente NXLog, conclua as seguintes tarefas:
- Configure todos os sistemas para usar o fuso horário UTC.
- Configure os servidores do Microsoft Windows AD.
- Confira os dispositivos e as versões compatíveis.
- Confira os tipos de registro compatíveis.
Configurar servidores do Microsoft Windows AD
Em cada servidor do Microsoft Windows Active Directory, crie e configure um script do PowerShell para salvar os dados de registro em um arquivo de saída. O agente BindPlane ou o NXLog lê o arquivo de saída.
# 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 }
Substitua o seguinte :
- Substitua o valor de
$OUTPUT_FILENAME
pelo local do arquivo de saída. - Armazene os dados no formato JSON.
- Defina a codificação como UTF-8.
- Use o parâmetro
-Filter
em vez de-LDAPFilter
ao chamar os cmdletsGet-ADUser
eGet-ADComputer
.
- Substitua o valor de
Crie uma tarefa recorrente que execute o script para buscar e gravar dados no arquivo de saída.
- Abra o aplicativo Agendador de tarefas.
- Clique em Criar tarefa.
- Digite um nome e uma descrição para a tarefa.
- Marque a caixa de seleção Run with highest privileges para garantir que todos os dados sejam recuperados.
- Na guia Gatilhos, defina quando você quer repetir a tarefa.
- Na guia Ação, adicione uma nova ação e informe o caminho do arquivo em que o script está armazenado.
Analisar os dispositivos e as versões compatíveis
O Microsoft Windows Server é lançado com as seguintes edições: Foundation, Essentials, Standard e Datacenter. O esquema de eventos dos registros gerados por cada edição não é diferente.
O Analisador de operações de segurança do Google é compatível com os registros das seguintes versões do servidor Microsoft Windows:
- Microsoft Windows Server 2019
- Microsoft Windows Server 2016
- Microsoft Windows Server 2012
O analisador do Google Security Operations oferece suporte a registros coletados pelo NXLog Community Edition ou Enterprise Edition.
Analisar os tipos de registro aceitos
O analisador de operações de segurança do Google analisa e normaliza os dados extraídos do Contexto do usuário e do Contexto do recurso. Ele aceita registros gerados com texto em inglês, mas não registros gerados em outros idiomas.
Configurar o agente do BindPlane
Recomendamos que você use o agente BindPlane para encaminhar os registros do Active Directory do Windows para o Google Security Operations.
Após a instalação, o serviço do agente do BindPlane aparece como o serviço observIQ
na lista de serviços do Windows.
- Instale o agente do BindPlane em cada servidor do Windows Active Directory. Para mais informações sobre a instalação do agente do BindPlane, consulte as instruções de instalação do agente do BindPlane.
Crie um arquivo de configuração para o agente do BindPlane com o seguinte conteúdo.
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]
Substitua o seguinte :
FILE_PATH
com o caminho do arquivo em que a saída do script do PowerShell mencionado em Configurar servidores do Microsoft Windows AD foi armazenada.PRIVATE_KEY_ID
,PRIVATE_KEY
SERVICSERVICE_ACCOUNT_NAME
,PROJECT_ID
,CLIENT_ID
eCUSTOMER_ID
com os respectivos valores do arquivo JSON da conta de serviço, que pode ser feito o download no Google Cloud. Para mais informações sobre chaves de conta de serviço, consulte Criar e excluir chaves de conta de serviço.
Para iniciar o serviço de agente do observIQ, selecione Services > Extended > o serviço observIQ > start.
Configurar o NXLog
O diagrama a seguir mostra uma arquitetura em que os agentes do NXLog são instalados para coletar e enviar eventos do Microsoft Windows ao Google Security Operations. Compare essas informações com seu ambiente para garantir que esses componentes estejam instalados. Sua implantação pode ser diferente dessa arquitetura e mais complexa.
Se você usa o agente NXLog em vez do agente BindPlane, verifique o seguinte:
- Um script do PowerShell é criado e configurado em cada Microsoft Windows Server que executa o Active Directory para
coletar dados de
USER_CONTEXT
eASSET_CONTEXT
. Para mais informações, consulte Configurar servidores Microsoft Windows AD. - O NXLog é instalado em cada servidor Microsoft Windows AD para enviar dados ao servidor central Microsoft Windows Server ou Linux.
- O encaminhador das Operações de segurança do Google é instalado no servidor central do Microsoft Windows ou Linux para encaminhar dados de registro para as Operações de segurança do Google.
Configurar o NXLog
- Instale o agente NXLog em cada coletor executado no servidor do Windows Active Directory. Esse aplicativo encaminha registros para o servidor central do Microsoft Windows ou Linux. Para mais informações, consulte a documentação do NXLog.
Crie um arquivo de configuração para cada instância do NXLog. Use o módulo
im_file
do NXLog para ler o arquivo e analisar as linhas em campos. Useom_tcp
para encaminhar dados ao servidor central do Microsoft Windows ou Linux.Confira a seguir um exemplo de configuração do NXLog. Substitua os valores
<hostname>
e<port>
por informações sobre o servidor central Microsoft Windows ou Linux de destino. Na seção<Input in_adcontext>
e na propriedadeFile
, adicione o caminho do arquivo de registro de saída gravado pelo script do PowerShell. Sempre definaDirCheckInterval
ePollInterval
. Se eles não forem definidos, o NXLog vai verificar arquivos a cada 1 segundo.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>
Inicie o serviço NXLog em cada sistema.
Configurar o encaminhador em um servidor central
Para informações sobre como instalar e configurar o encaminhador no Linux, consulte Instalar e configurar o encaminhador no Linux. Para informações sobre como instalar e configurar o forwarder no Microsoft Windows, consulte Instalar e configurar o forwarder no Microsoft Windows.
- Configure o sistema com o fuso horário UTC.
- Instale o encaminhador de operações de segurança do Google no servidor central do Microsoft Windows ou Linux.
Configure o encaminhador do Google Security Operations para enviar registros a ele. Confira a seguir um exemplo de configuração do encaminhador:
- 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
Referência de mapeamento de campo: campos de registro do dispositivo para campos do UDM
Esta seção descreve como o analisador mapeia campos de registro originais para campos do modelo de dados unificado.
Registros de contexto do usuário
Campo NXLog | Campo de 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 |
Registros de contexto do recurso
Campo NXLog | Campo de 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 |