Recopila registros de Microsoft PowerShell
En este documento, se explica cómo transferir registros de Microsoft PowerShell a Google Security Operations con el agente de Bindplane.
Microsoft PowerShell es un framework de administración de parámetros de configuración y automatización de tareas de Microsoft que consta de un shell de línea de comandos y un lenguaje de programación. Los registros de PowerShell capturan la ejecución de secuencias de comandos, la actividad de los módulos y las invocaciones de comandos, lo que proporciona visibilidad de las operaciones de PowerShell para la supervisión de seguridad y el análisis forense.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps
- Windows Server 2016 o versiones posteriores
- Conectividad de red entre el host de Windows y Google SecOps
- Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.
- Acceso de administrador al host de Windows para configurar el registro de PowerShell y, luego, instalar el agente de Bindplane
Configura el registro de PowerShell
El registro de PowerShell debe estar habilitado en los hosts de Windows antes de que se puedan recopilar los registros. De forma predeterminada, el registro de PowerShell es mínimo. Habilita el registro de bloques de secuencias de comandos para capturar la actividad detallada de PowerShell.
Habilita el registro de bloqueo de secuencias de comandos con la política de grupo
- Ejecuta
gpedit.msccomo administrador para abrir el Editor de directivas de grupo local. - Ve a Configuración del equipo > Plantillas administrativas > Componentes de Windows > Windows PowerShell.
- Haz doble clic en Activar el registro de bloques de secuencias de comandos de PowerShell.
- Selecciona Habilitada.
- De manera opcional, marca la casilla de verificación Log script block invocation start / stop events para capturar los eventos de inicio y detención de cada bloque de secuencia de comandos. Ten en cuenta que esta opción genera un gran volumen de registros.
- Haz clic en Aceptar.
- Abre Símbolo del sistema como administrador y ejecuta
gpupdate /forcepara aplicar la política de inmediato.
Habilita el registro de bloqueo de secuencias de comandos con el registro
Como alternativa, puedes habilitar el registro de bloqueo de secuencias de comandos configurando el siguiente valor de registro:
- Ejecuta
regeditcomo administrador para abrir el Editor del Registro. - Navega hacia
HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging. - Si la clave no existe, créala.
- Crea un nuevo Valor DWORD (32 bits) llamado
EnableScriptBlockLoggingy establece su valor en1. - Reinicia las sesiones de PowerShell para que el cambio surta efecto.
El registro de bloques de secuencias de comandos de PowerShell escribe eventos en el canal de registro de eventos Microsoft-Windows-PowerShell/Operational con el ID de evento 4104.
Opcional: Habilita el registro del módulo
El registro de módulos graba los detalles de ejecución de la canalización para los módulos especificados. Para habilitar el registro de módulos para todos los módulos, haz lo siguiente:
- En el Editor de directivas de grupo local, ve a Configuración del equipo > Plantillas administrativas > Componentes de Windows > Windows PowerShell.
- Haz doble clic en Turn on Module Logging.
- Selecciona Habilitada.
- Haz clic en Mostrar junto a Nombres de módulos.
- Ingresa
*para registrar todos los módulos. - Haz clic en Aceptar en la ventana Module Names.
- Haz clic en Aceptar en la ventana Module Logging.
- Ejecuta
gpupdate /forcepara aplicar la política.
Los eventos de registro de módulos se escriben en el registro de eventos de Windows PowerShell con el ID de evento 4103.
Opcional: Habilita la transcripción
La transcripción crea un registro basado en texto de todas las entradas y salidas de la sesión de PowerShell. Para habilitar la transcripción, haz lo siguiente:
- En el Editor de directivas de grupo local, ve a Configuración del equipo > Plantillas administrativas > Componentes de Windows > Windows PowerShell.
- Haz doble clic en Activar la transcripción de PowerShell.
- Selecciona Habilitada.
- De manera opcional, especifica un Directorio de salida de la transcripción. Si se deja en blanco, las transcripciones se guardan en la carpeta Documentos de cada usuario.
- Marca Incluir encabezados de invocación para incluir marcas de tiempo y metadatos.
- Haz clic en Aceptar.
- Ejecuta
gpupdate /forcepara aplicar la política.
Las transcripciones se escriben en archivos de texto con nombres que comienzan con PowerShell_transcript.
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agente de recopilación.
- Haz clic en Descargar para descargar el archivo de autenticación de la transferencia.
Guarda el archivo de forma segura en el host de Windows donde se instalará el agente de Bindplane.
Obtén el ID de cliente de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instala el agente de BindPlane
Instala el agente de BindPlane en tu host de Windows según las siguientes instrucciones.
Instalación en Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el comando siguiente:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietEspera a que se complete la instalación.
Ejecuta el siguiente comando para verificar la instalación:
sc query observiq-otel-collectorEl servicio debe mostrarse como RUNNING.
Recursos de instalación adicionales
Para obtener más opciones de instalación y solucionar problemas, consulta la guía de instalación del agente de Bindplane.
Configura el agente de BindPlane para recopilar registros de PowerShell
Ubica el archivo de configuración de Windows
Ubica el archivo de configuración de Windows de la siguiente manera:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edita el archivo de configuración
Reemplaza todo el contenido de
config.yamlpor la siguiente configuración: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
Parámetros de configuración
Reemplaza los marcadores de posición que se indican más abajo:
Configuración del receptor:
channel: Es el canal de registro de eventos de Windows del que se recopilarán los datos. Para el registro de bloques de secuencias de comandos de PowerShell, usaMicrosoft-Windows-PowerShell/Operational. Para el registro de módulos, usaWindows PowerShell.raw: Configúralo comotruepara enviar XML sin procesar del registro de eventos de Windows a Google SecOps.start_at: Se establece enendpara recopilar solo eventos nuevos después de que se inicie el agente. Se establece enbeginningpara recopilar todos los eventos existentes.
Configuración del exportador:
<CUSTOMER_ID>: Reemplaza este valor por el ID de cliente del paso anterior.creds_file_path: Es la ruta de acceso completa al archivo de autenticación de la transferencia. Copia el archivo de autenticación descargado en esta ubicación.endpoint: URL del extremo regional. Usa el extremo de tu región de Google SecOps:- EE.UU.:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulta Extremos regionales para obtener la lista completa.
- EE.UU.:
log_type: Se establece enPOWERSHELLpara usar el analizador de PowerShell.
Guarda el archivo de configuración
Después de editarlo, haz clic en Archivo > Guardar para guardar el archivo.
Reinicia el agente de Bindplane para aplicar los cambios
Windows
Con el símbolo del sistema o PowerShell como administrador, haz lo siguiente:
net stop observiq-otel-collector && net start observiq-otel-collectorO bien, usa la consola de Services:
- Presiona
Win+R, escribeservices.mscy presiona Intro. - Busca observIQ OpenTelemetry Collector.
- Haz clic con el botón derecho y selecciona Reiniciar.
Verifica que el servicio esté en ejecución:
sc query observiq-otel-collectorRevisa los registros en busca de errores:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Presiona
Verifica la transferencia de registros
Después de configurar el agente de BindPlane y reiniciar el servicio, los registros de PowerShell deberían comenzar a fluir hacia Google SecOps.
- Accede a la consola de Google SecOps.
- Ve a Investigar > Búsqueda.
Ejecuta la siguiente búsqueda para verificar que se transfieran los registros de PowerShell:
metadata.log_type = "POWERSHELL"Verifica que los eventos aparezcan con marcas de tiempo recientes.
Los eventos de registro de bloques de secuencias de comandos de PowerShell (ID de evento 4104) aparecerán con detalles de los bloques de secuencias de comandos ejecutados, incluido el contenido de la secuencia de comandos, el ID del bloque de secuencias de comandos y el contexto de ejecución.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
| HostId | principal.resource.product_object_id | Identificador único del objeto del producto asociado al recurso principal |
| System.Version | metadata.product_version | Versión del producto que generó el evento |
| System.EventId, EventID, winlog.event_id | metadata.product_event_type | Tipo de evento según lo define el producto |
| Computer, System.Computer, computer, winlog.computer_name | principal.hostname | Nombre de host de la entidad principal |
| Computer, System.Computer, computer, winlog.computer_name | principal.asset.hostname | Nombre de host del activo asociado con el principal |
| System.EventRecordID, RecordNumber, winlog.record_id | metadata.product_log_id | Es el identificador único de la entrada de registro dentro del sistema de registro del producto. |
| System.Opcode, opcode, winlog.opcode | metadata.description | Descripción del evento o contexto adicional |
| ProviderGuid, winlog.provider_guid | metadata.product_deployment_id | Identificador único de la implementación del producto |
| System.ProcessID, ProcessID, ExecutionProcessID, execution.process_id, winlog.process.pid | principal.process.pid | ID del proceso principal |
| SourceModuleName | principal.resource.name | Nombre del recurso asociado con el principal |
| SourceModuleType | principal.resource.resource_subtype | Subtipo del recurso asociado con el principal |
| security.user_id, UserID, winlog.user.identifier | principal.user.windows_sid | Identificador de seguridad (SID) de Windows para el usuario principal |
| metadata.event_type | Tipo de evento (p.ej., USER_LOGIN, NETWORK_CONNECTION) | |
| SourceName, winlog.provider_name | metadata.product_name | Nombre del producto que generó el evento |
| AccountName, Username, UserName, winlog.user.name | principal.user.userid | ID de usuario del usuario principal |
| Dominio, winlog.user.domain | principal.administrative_domain | Dominio administrativo de la entidad principal |
| Path, target_file, ScriptName, script_name, ContextInfo_Script Name, file_path | target.process.file.full_path | Ruta de acceso completa al archivo asociado con el proceso de destino |
| HostName, powershell.Host Name, ContextInfo_Host Name | target.hostname | Nombre de host de la entidad de destino |
| HostName, powershell.Host Name, ContextInfo_Host Name | target.asset.hostname | Nombre de host del activo asociado con el objetivo |
| ID de host, HostID, ContextInfo_Host ID | target.asset.asset_id | Es el identificador único del activo de destino. |
| Nombre_de_comando, ContextInfo_Command Name, CommandName | target.application | Nombre de la aplicación asociada con el destino |
| HostApplication, ContextInfo_Host Application | target.process.command_line | Línea de comandos que se usó para iniciar el proceso de destino |
| ScriptBlockText | target.process.command_line | Línea de comandos que se usó para iniciar el proceso de destino |
| MessageSourceAddress | principal.ip | Dirección IP de la entidad principal |
| MessageSourceAddress | principal.asset.ip | Dirección IP del activo asociado con el principal |
| Nombre_de_host | principal.application | Nombre de la aplicación asociada con el principal |
| Version_de_host | principal.platform_version | Versión de la plataforma asociada con la principal |
| Id_de_host | principal.resource.id | Identificador único del recurso principal |
| Application_host | principal.process.file.full_path | Ruta de acceso completa al archivo asociado con el proceso principal |
| HostApplication | principal.process.command_line | Línea de comandos que se usa para iniciar el proceso principal |
| Usuario, admin_domain | principal.user.userid | ID de usuario del usuario principal |
| Usuario, admin_domain | principal.administrative_domain | Dominio administrativo de la entidad principal |
| CommandLine | principal.process.command_line | Línea de comandos que se usa para iniciar el proceso principal |
| Máquina, machine_id | principal.asset.asset_id | Es el identificador único del activo principal. |
| Máquina, software de la plataforma | principal.asset.platform_software.platform | Tipo de plataforma del activo (p.ej., WINDOWS, LINUX) |
| Máquina, software de la plataforma | principal.asset.platform_software.platform_version | Versión del software de la plataforma en el activo |
| MessageSourceAddress | intermediary.ip | Dirección IP de la entidad intermediaria |
| MessageSourceAddress, Hostname | intermediary.hostname | Nombre de host de la entidad intermediaria |
| MessageSourceAddress, Hostname | intermediary.asset.hostname | Nombre de host del activo asociado con el intermediario |
| MessageSourceAddress | intermediary.port | Número de puerto que usa el intermediario |
| HostApplication | target.process.command_line | Línea de comandos que se usó para iniciar el proceso de destino |
| HostId | target.asset.asset_id | Es el identificador único del activo de destino. |
| SequenceNumber, ContextInfo_Sequence Number, Sequence Number | security_result.detection_fields | Pares clave-valor de información de detección adicional |
| ProviderName | principal.resource.attribute.labels | Son las etiquetas o los atributos asociados al recurso principal. |
| NewEngineState | additional.fields | Campos personalizados adicionales no incluidos en el esquema de UDM estándar |
| PreviousEngineState | additional.fields | Campos personalizados adicionales no incluidos en el esquema de UDM estándar |
| ScriptName | additional.fields | Campos personalizados adicionales no incluidos en el esquema de UDM estándar |
| ManagementGroupName | additional.fields | Campos personalizados adicionales no incluidos en el esquema de UDM estándar |
| Fuente | additional.fields | Campos personalizados adicionales no incluidos en el esquema de UDM estándar |
| RenderedDescription | security_result.description | Descripción del resultado de seguridad o la acción tomada |
| TenantId | additional.fields | Campos personalizados adicionales no incluidos en el esquema de UDM estándar |
| UserName | principal.user.userid | ID de usuario del usuario principal |
| ActivityID | security_result.detection_fields | Pares clave-valor de información de detección adicional |
| ExecutionThreadID, execution.thread_id, winlog.process.thread.id | security_result.detection_fields | Pares clave-valor de información de detección adicional |
| Salida | security_result.detection_fields | Pares clave-valor de información de detección adicional |
| Datos | security_result.detection_fields | Pares clave-valor de información de detección adicional |
| Data_1 | additional.fields | Campos personalizados adicionales no incluidos en el esquema de UDM estándar |
| data_1 | security_result.detection_fields | Pares clave-valor de información de detección adicional |
| Data_2 | security_result.detection_fields | Pares clave-valor de información de detección adicional |
| winlog.activity_id | security_result.detection_fields | Pares clave-valor de información de detección adicional |
| winlog.api | additional.fields | Campos personalizados adicionales no incluidos en el esquema de UDM estándar |
| winlog.channel | principal.resource.attribute.labels | Son las etiquetas o los atributos asociados al recurso principal. |
| Desplazamiento | additional.fields | Campos personalizados adicionales no incluidos en el esquema de UDM estándar |
| SeverityValue | security_result.detection_fields | Pares clave-valor de información de detección adicional |
| intermediario | intermediario | Detalles sobre las entidades intermediarias involucradas en el evento |
| security_result | security_result | Resultado general de seguridad, incluidas acciones, niveles de gravedad y detecciones |
| metadata.vendor_name | Nombre del proveedor que produjo el evento | |
| SourceName | metadata.product_name | Nombre del producto que generó el evento |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.