Recopila registros de Microsoft PowerShell

Compatible con:

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

  1. Ejecuta gpedit.msc como administrador para abrir el Editor de directivas de grupo local.
  2. Ve a Configuración del equipo > Plantillas administrativas > Componentes de Windows > Windows PowerShell.
  3. Haz doble clic en Activar el registro de bloques de secuencias de comandos de PowerShell.
  4. Selecciona Habilitada.
  5. 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.
  6. Haz clic en Aceptar.
  7. Abre Símbolo del sistema como administrador y ejecuta gpupdate /force para 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:

  1. Ejecuta regedit como administrador para abrir el Editor del Registro.
  2. Navega hacia HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging.
  3. Si la clave no existe, créala.
  4. Crea un nuevo Valor DWORD (32 bits) llamado EnableScriptBlockLogging y establece su valor en 1.
  5. 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:

  1. En el Editor de directivas de grupo local, ve a Configuración del equipo > Plantillas administrativas > Componentes de Windows > Windows PowerShell.
  2. Haz doble clic en Turn on Module Logging.
  3. Selecciona Habilitada.
  4. Haz clic en Mostrar junto a Nombres de módulos.
  5. Ingresa * para registrar todos los módulos.
  6. Haz clic en Aceptar en la ventana Module Names.
  7. Haz clic en Aceptar en la ventana Module Logging.
  8. Ejecuta gpupdate /force para 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:

  1. En el Editor de directivas de grupo local, ve a Configuración del equipo > Plantillas administrativas > Componentes de Windows > Windows PowerShell.
  2. Haz doble clic en Activar la transcripción de PowerShell.
  3. Selecciona Habilitada.
  4. 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.
  5. Marca Incluir encabezados de invocación para incluir marcas de tiempo y metadatos.
  6. Haz clic en Aceptar.
  7. Ejecuta gpupdate /force para 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

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agente de recopilación.
  3. Haz clic en Descargar para descargar el archivo de autenticación de la transferencia.
  4. 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

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. 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

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el comando siguiente:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Espera a que se complete la instalación.

  4. Ejecuta el siguiente comando para verificar la instalación:

    sc query observiq-otel-collector
    

    El 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.yaml por 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, usa Microsoft-Windows-PowerShell/Operational. Para el registro de módulos, usa Windows PowerShell.
    • raw: Configúralo como true para enviar XML sin procesar del registro de eventos de Windows a Google SecOps.
    • start_at: Se establece en end para recopilar solo eventos nuevos después de que se inicie el agente. Se establece en beginning para 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.
    • log_type: Se establece en POWERSHELL para 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-collector
    
  • O bien, usa la consola de Services:

    1. Presiona Win+R, escribe services.msc y presiona Intro.
    2. Busca observIQ OpenTelemetry Collector.
    3. Haz clic con el botón derecho y selecciona Reiniciar.
    4. Verifica que el servicio esté en ejecución:

      sc query observiq-otel-collector
      
    5. Revisa los registros en busca de errores:

      type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
      

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.

  1. Accede a la consola de Google SecOps.
  2. Ve a Investigar > Búsqueda.
  3. Ejecuta la siguiente búsqueda para verificar que se transfieran los registros de PowerShell:

    metadata.log_type = "POWERSHELL"
    
  4. 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.