Recopila datos de Microsoft Windows AD
Este documento incluye la siguiente información:
- Arquitectura de implementación y pasos de instalación, además de cualquier configuración necesaria que genere registros compatibles con el analizador de Google Security Operations para eventos de Microsoft Windows Active Directory Para obtener una descripción general de Google Security Operations consulta Transferencia de datos a Google Security Operations.
- Información sobre cómo el analizador asigna campos del registro original a los campos del modelo de datos unificado de Google Security Operations.
Según tu arquitectura de implementación, configura el agente de BindPlane o Agente de NXLog para transferir los registros de Active Directory de Microsoft Windows a Google Security Operations. Te recomendamos que uses el agente de BindPlane para reenviar los registros del Active Directory de Windows a Google Security Operations.
La información de este documento se aplica al analizador con la etiqueta de transferencia WINDOWS_AD. La etiqueta de transferencia identifica qué analizador normaliza los datos de registro sin procesar al formato estructurado del UDM.
Antes de comenzar
Antes de configurar el agente de BindPlane o el agente de NXLog, completa las siguientes tareas:
- Configurar todos los sistemas para usar la zona horaria UTC.
- Configurar servidores de Microsoft Windows AD
- Revisa los dispositivos y las versiones compatibles.
- Revisa los tipos de registros admitidos.
Configura servidores de Microsoft Windows AD
Crea y configura en cada servidor de Microsoft Windows Active Directory un Secuencia de comandos de PowerShell para guardar los datos de registro en un archivo de salida. El agente de BindPlane o NXLog lee el archivo de salida.
# 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 }
Reemplaza lo siguiente :
- Reemplaza el valor de
$OUTPUT_FILENAME
por la ubicación del archivo de salida. - Almacena los datos en formato JSON.
- Configura la codificación en UTF-8.
- Usa el parámetro
-Filter
, en lugar del parámetro-LDAPFilter
, cuando llames a los cmdletsGet-ADUser
yGet-ADComputer
.
- Reemplaza el valor de
Crea una tarea recurrente que ejecute la secuencia de comandos para recuperar y escribir datos en el archivo de salida.
- Abre la aplicación Programador de tareas.
- Haz clic en Crear tarea.
- Ingresa un nombre y una descripción para la tarea.
- Selecciona la casilla de verificación Run with highest privileges para asegurarte de que se recuperen todos los datos.
- En la pestaña Activadores, define cuándo quieres repetir la tarea.
- En la pestaña Action, agrega una acción nueva y proporciona la ruta del archivo en el que se almacena la secuencia de comandos.
Revisa las versiones y los dispositivos compatibles
Microsoft Windows Server se lanza con las siguientes ediciones: Foundation, Essentials, Standard y Datacenter. El esquema de eventos de los registros que genera cada edición no difiere.
El analizador de operaciones de seguridad de Google admite registros de las siguientes versiones del servidor Microsoft Windows:
- Microsoft Windows Server 2019
- Microsoft Windows Server 2016
- Microsoft Windows Server 2012
El analizador de Google Security Operations admite registros que recopilan NXLog Community Edition o Enterprise Edition.
Revisa los tipos de registros admitidos
El analizador de Operaciones de seguridad de Google analizará y normalizará los datos recuperados del Contexto del usuario y del Contexto del activo. Admite registros generados con texto en inglés y no admite registros generados en idiomas distintos del inglés.
Configura el agente de BindPlane
Te recomendamos que utilices el agente de BindPlane para reenviar los registros de Active Directory de Windows a las operaciones de seguridad de Google.
Después de la instalación, el servicio del agente de BindPlane aparece como el servicio observIQ
en la lista de servicios de Windows.
- Instalar el agente de BindPlane en cada servidor de Active Directory de Windows Para obtener más información sobre la instalación del agente de BindPlane, consulta las instrucciones de instalación del agente de BindPlane.
Crea un archivo de configuración para el agente de BindPlane con el siguiente contenido.
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]
Reemplaza lo siguiente :
FILE_PATH
con la ruta de acceso del archivo en el que se almacenó el resultado de la secuencia de comandos de PowerShell mencionada en Cómo configurar servidores de AD de Microsoft Windows.PRIVATE_KEY_ID
,PRIVATE_KEY
SERVICSERVICE_ACCOUNT_NAME
,PROJECT_ID
,CLIENT_ID
yCUSTOMER_ID
con los valores respectivos del archivo JSON de la cuenta de servicio que puedes descargar desde Google Cloud. Para obtener más información sobre las claves de cuentas de servicio, consulta Crea y borra claves de cuentas de servicio.
Para iniciar el servicio del agente de observIQ, selecciona Servicios > Extended > el servicio de observIQ > iniciar.
Configura NXLog
En el siguiente diagrama, se muestra una arquitectura en la que se instalan los agentes de NXLog para recopilar y enviar eventos de Microsoft Windows a Google Security Operations. Compara esta información con tu entorno para asegurarte de que estos componentes estén instalados. Es posible que tu implementación sea diferente de esta arquitectura y sea más compleja.
Si usas el agente NXLog en lugar del agente de BindPlane, verifica lo siguiente:
- Se crea y configura una secuencia de comandos de PowerShell en cada Microsoft Windows Server que ejecuta Active Directory para recopilar datos de
USER_CONTEXT
yASSET_CONTEXT
. Para obtener más información, consulta Configura servidores de AD de Microsoft Windows. - NXLog se instala en cada servidor de Microsoft Windows AD para enviar datos a la Servidor Microsoft Windows Server o Linux.
- El reenviador de Google Security Operations se instala en el servidor central de Microsoft Windows o Linux para reenviar los datos de registro a Google Security Operations.
Configurar NXLog
- Instalar el agente NXLog en cada colector que se ejecuta en el servidor de Windows Active Directory. Esta aplicación reenvía los registros al servidor central de Microsoft Windows o Linux. Para obtener más información, consulta la Documentación de NXLog.
Crea un archivo de configuración para cada instancia de NXLog. Usar el NXLog
im_file
para leer desde el archivo y analizar las líneas en campos. Usaom_tcp
para reenviar datos al servidor central de Microsoft Windows o Linux.El siguiente es un ejemplo de la configuración de NXLog. Reemplaza los valores
<hostname>
y<port>
por información sobre el servidor central de Microsoft Windows o Linux de destino. En la sección<Input in_adcontext>
y la propiedadFile
, agrega lo siguiente: la ruta de acceso del archivo de registro de salida que escribió la secuencia de comandos de PowerShell. Siempre establecidaDirCheckInterval
yPollInterval
. Si no están definidos, NXLog sondea los archivos 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>
Inicia el servicio NXLog en cada sistema.
Configura el reenviador en un servidor central
Para obtener información sobre cómo instalar y configurar el objeto Forwarder en Linux, consulta consulta Cómo instalar y configurar el objeto Forwarder en Linux. Para obtener información sobre cómo instalar y configurar el servidor de reenvío en Microsoft Windows, consulta Instala y configura el servidor de reenvío en Microsoft Windows.
- Configura el sistema con la zona horaria UTC.
- Instala el servidor de reenvío de Google Security Operations en el servidor central de Microsoft Windows o Linux.
Configura el reenviador de Google Security Operations para enviar registros a Google Security Operations. El siguiente es un ejemplo de configuración de reenvío:
- 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
Referencia de la asignación de campos: campos de registro de dispositivos a campos UDM
En esta sección, se describe cómo el analizador asigna los campos de registro originales a Campos del modelo de datos unificados
Registros de contexto del usuario
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 de recursos
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 |