Recopila registros de la base de datos de Imperva

Compatible con:

En este documento, se explica cómo transferir registros de la base de datos de Imperva a Google Security Operations con Bindplane. Primero, el analizador intenta extraer campos de varios formatos de registro estructurados, como CEF, LEEF y JSON. Si no se encuentran esos formatos, se usan patrones de Grok para extraer campos de mensajes syslog no estructurados y, en última instancia, se asignan los datos extraídos a un modelo de datos unificado (UDM). Imperva Database Security proporciona capacidades integrales de supervisión, auditoría y protección de la actividad de la base de datos.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Windows 2016 o versiones posteriores, o un host de Linux con systemd
  • 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 con privilegios a la consola de administración de Imperva SecureSphere

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 > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará 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

Instalación en Windows

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

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalación en Linux

  1. Abre una terminal con privilegios de raíz o sudo.
  2. Ejecuta el siguiente comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Recursos de instalación adicionales

Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps

  1. Accede al archivo de configuración:

    1. Ubica el archivo config.yaml. Por lo general, se encuentra en el directorio /etc/bindplane-agent/ en Linux o en el directorio de instalación en Windows.
    2. Abre el archivo con un editor de texto (por ejemplo, nano, vi o Bloc de notas).
  2. Edita el archivo config.yaml de la siguiente manera:

    receivers:
      udplog:
        # Replace the port and IP address as required
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/chronicle_w_labels:
        compression: gzip
        # Adjust the path to the credentials file you downloaded in Step 1
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        # Replace with your actual customer ID from Step 2
        customer_id: <CUSTOMER_ID>
        endpoint: malachiteingestion-pa.googleapis.com
        # Add optional ingestion labels for better organization
        log_type: 'IMPERVA_DB'
        raw_log_field: body
        ingestion_labels:
    
    service:
      pipelines:
        logs/source0__chronicle_w_labels-0:
          receivers:
            - udplog
          exporters:
            - chronicle/chronicle_w_labels
    

Reinicia el agente de Bindplane para aplicar los cambios

  • Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar el agente de Bindplane en Windows, puedes usar la consola de Servicios o ingresar el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configura el reenvío de Syslog en la base de datos de Imperva

  1. Accede a la consola de administración de Imperva SecureSphere.
  2. Ve a Configuration > Action Sets.
  3. Haz clic en Agregar para crear un nuevo conjunto de acciones o editar uno existente.
  4. Haz clic en Agregar acción y proporciona los siguientes detalles de configuración:
    • Nombre: Ingresa un nombre descriptivo (por ejemplo, Google SecOps Syslog).
    • Tipo de acción: Selecciona Syslog de GW.
    • Host: Ingresa la dirección IP del agente de BindPlane.
    • Puerto: Ingresa el número de puerto del agente de BindPlane (el valor predeterminado es 514).
    • Protocolo: Selecciona UDP o TCP, según la configuración de tu agente de BindPlane.
    • Nivel de registro de Syslog: Selecciona DEBUG para obtener un registro completo.
    • Syslog Facility: Selecciona LOCAL0 o la instalación adecuada.
    • Action Interface: Selecciona Gateway Log - Security Event - System Log (syslog) - JSON format (Extended) para el formato SYSLOG+JSON, o bien Gateway Log - Security Event - System Log (syslog) para el formato SYSLOG estándar.
  5. Guarda la configuración de la acción.
  6. Ve a Policies > Security Policies o Policies > Database Audit Policies.
  7. Edita las políticas pertinentes y agrega el conjunto de acciones que contiene tu acción de syslog para garantizar que los eventos se reenvíen a SecOps de Google.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
acct principal.user.userid Si acct es "admin", se asigna a target.user.userid; de lo contrario, se asigna a principal.user.userid. Quita las comillas y los espacios de acct antes de la asignación.
acción security_result.action_details Valor del campo action del registro sin procesar
alertSev security_result.severity Si alertSev es "Informativa", asigna el valor "INFORMATIONAL"; de lo contrario, asigna el valor en mayúsculas de alertSev.
aplicación principal.application Si application es "pam_unix(sudo:session)" o description contiene "pam_unix", se asigna como "pam_unix". Si message contiene "run-parts", se asigna como "run-parts". Si message contiene "audispd", se debe asignar como "audispd". Si message contiene "FSS audit", se debe asignar como "FSS audit". De lo contrario, asigna el campo application del registro sin procesar
application-name target.application Valor del campo application-name del registro sin procesar
audit-policy security_result.category_details Valor del campo audit-policy del registro sin procesar
bind-variables additional.fields.bind_variables_label.value.string_value Valor del campo bind-variables del registro sin procesar
category security_result.category_details Valor del campo category del registro sin procesar
COMMAND target.process.command_line Si exe no está vacío, se asigna como el campo exe del registro sin procesar. De lo contrario, asigna el campo COMMAND del registro sin procesar
createTime Sin asignar
db-schema-pair additional.fields.DB Name_{index}.value.string_value, additional.fields.Schema Name_{index}.value.string_value Para cada objeto db-schema-pair en el registro sin procesar, extrae los campos db-name y schema-name, y asígnalos a DB Name_{index} y Schema Name_{index}, respectivamente, en el UDM, donde index es el índice del objeto en el array.
db-user principal.user.userid Si db-user no está vacío, se asigna como el campo db-user del registro sin procesar. De lo contrario, si os-user no está vacío y db-user está vacío, se asigna como el campo os-user del registro sin procesar.
dbName target.resource.name Valor del campo dbName del registro sin procesar
dest-ip target.ip, target.asset.ip Valor del campo dest-ip del registro sin procesar
dest-port target.port Valor del campo dest-port del registro sin procesar
descripción metadata.description Si description contiene "user:", extrae el ID de usuario de description y asígnalo a userid. Si userid no está vacío y description contiene "Invalid" o "invalid", reemplaza "Invalid user" por "Invalid". Si application es "sshd", quita "de" y "por" de description. De lo contrario, asigna el campo description del registro sin procesar
DST target.ip, target.asset.ip Valor del campo dst del registro sin procesar
dstIP target.ip, target.asset.ip Valor del campo dstIP del registro sin procesar
dstPort target.port Valor del campo dstPort del registro sin procesar
event-type metadata.product_event_type Valor del campo event-type del registro sin procesar
eventType metadata.product_event_type, metadata.event_type Si eventType no está vacío y srcIP y dstIP no están vacíos, asigna eventType a metadata.product_event_type y asigna "NETWORK_CONNECTION" a metadata.event_type.
evntDesc security_result.description Valor del campo evntDesc del registro sin procesar
exe target.process.command_line Valor del campo exe del registro sin procesar
de network.email.from Quita "<" y ">" de from y asígnalo a network.email.from
grupo target.user.group_identifiers Valor del campo group del registro sin procesar
gw-ip intermediary.ip, intermediary.asset.ip Valor del campo gw-ip del registro sin procesar
host target.hostname, target.asset.hostname Valor del campo host del registro sin procesar
host-name principal.hostname, principal.asset.hostname Valor del campo host-name del registro sin procesar
Nombre de host principal.hostname, principal.asset.hostname Valor del campo hostname del registro sin procesar
ip target.ip, target.asset.ip Valor del campo ip del registro sin procesar
mx-ip intermediary.ip, intermediary.asset.ip Valor del campo mx-ip del registro sin procesar
objects-list additional.fields.Object_{index}.value.string_value Para cada objeto objects-list en el registro sin procesar, extrae el objeto y asígnalo a Object_{index} en el UDM, donde index es el índice del objeto en el array.
Operación about.labels.Operation.value Valor del campo Operation del registro sin procesar
Operation type about.labels.Operation Type.value Valor del campo Operation type del registro sin procesar
os-user principal.user.userid, additional.fields.OS User.value.string_value Si os-user no está vacío y db-user está vacío, se asigna como el campo os-user del registro sin procesar. De lo contrario, asigna el campo OS User del registro sin procesar
Consulta analizada target.process.command_line Valor del campo Parsed Query del registro sin procesar
parsed-query additional.fields.Parsed Query.value.string_value Valor del campo parsed-query del registro sin procesar
pid target.process.pid Valor del campo pid del registro sin procesar
policy-id security_result.detection_fields.Policy_ID_{index}.value Para cada objeto policy-id en el registro sin procesar, extrae la política y asígnala a Policy_ID_{index} en el UDM, donde index es el índice del objeto en el array.
policyName security_result.detection_fields.policyName_label.value Valor del campo policyName del registro sin procesar
puerto target.port Valor del campo port del registro sin procesar
Con privilegios about.labels.Privileged.value Si Privileged es verdadero, se asigna como "True"; de lo contrario, se asigna como "False".
protocolo network.ip_protocol Valor del campo proto del registro sin procesar
protocolo network.ip_protocol Si protocol es "TCP" o "UDP", se asigna como campo protocol del registro sin procesar.
PWD target.file.full_path Valor del campo PWD del registro sin procesar
Raw Data target.resource.attribute.labels.raw_Data.value Valor del campo Raw Data del registro sin procesar
raw-query additional.fields.Raw Query.value.string_value Valor del campo raw-query del registro sin procesar
ruleName security_result.rule_name Valor del campo ruleName del registro sin procesar
server-group additional.fields.serve_group_label.value.string_value Valor del campo server-group del registro sin procesar
service-name additional.fields.service_name_label.value.string_value Valor del campo service-name del registro sin procesar
Service Type additional.fields.Service Type.value.string_value Valor del campo Service Type del registro sin procesar
tamaño network.received_bytes Valor del campo size del registro sin procesar
Stored Proc about.labels.Stored_Proc.value Si Stored Proc es verdadero, se asigna como "True"; de lo contrario, se asigna como "False".
Table Group target.group.group_display_name Valor del campo Table Group del registro sin procesar
timestamp metadata.event_timestamp Valor del campo timestamp del registro sin procesar
a network.email.to Quita "<" y ">" de to y asígnalo a network.email.to
USUARIO principal.user.userid, target.user.userid Si USER no está vacío y USER es "admin", se asigna como campo USER del registro sin procesar a target.user.userid. De lo contrario, si USER no está vacío, se asigna como el campo USER del registro sin procesar a principal.user.userid.
autenticado por el usuario security_result.detection_fields.user_authenticated.value Valor del campo user-authenticated del registro sin procesar
user-group additional.fields.user_group_label.value.string_value Valor del campo user-group del registro sin procesar
nombre de usuario principal.user.user_display_name Valor del campo username del registro sin procesar
usrName principal.user.userid Valor del campo usrName del registro sin procesar
extensions.auth.mechanism Se codifica como "USERNAME_PASSWORD" si description contiene "authentication failure", "check pass; user unknown", "Invalid user" o "invalid user", o si error no está vacío.
extensions.auth.type Se codifica como "AUTHTYPE_UNSPECIFIED" si has_principal es "verdadero", has_target es "verdadero" y event-type es "Login".
metadata.event_type Se codifica como "PROCESS_OPEN" si PWD no está vacío. Se codifica como "PROCESS_OPEN" si message contiene "starting" o si application es "pman", "CROND" o "run-parts", y event_type está vacío. Se codifica como "NETWORK_CONNECTION" si description es "Syslog connection established", "Syslog connection broken" o "Syslog connection failed". Se codifica como "EMAIL_UNCATEGORIZED" si application es "postfix/qmgr", "postfix/local" o "postfix/pickup". Se codifica como "EMAIL_TRANSACTION" si application es "postfix/local" o "postfix/pickup" y status es "sent (delivered to mailbox)". Se codifica como "NETWORK_HTTP" si application es "sshd" y description no contiene "check pass; user unknown", "authentication failure" ni "invalid".descriptiondescription Se codifica como "USER_LOGIN" si description contiene "authentication failure", "check pass; user unknown", "Invalid user" o "invalid user", o si error no está vacío. Se codifica como "FILE_SYNC" si file_path no está vacío. Se codifica de forma rígida como "PROCESS_UNCATEGORIZED" si message contiene "reconfigure" y application es "pman". Se codifica como "PROCESS_TERMINATION" si message contiene "exit code 1" y application es "pman". Se codifica como "NETWORK_CONNECTION" si eventType no está vacío y srcIP y dstIP no están vacíos. Se codifica como "USER_LOGIN" si has_principal es "true", has_target es "true" y event-type es "Login". Se codifica como "NETWORK_CONNECTION" si has_principal es "true", has_target es "true" y protocol no está vacío. Se codifica como "STATUS_UPDATE" si has_principal es "true". Se codifica de forma rígida como "GENERIC_EVENT" si event_type está vacío o es "GENERIC_EVENT".
metadata.log_type Se codificó como "IMPERVA_DB"
metadata.product_name Se codifica como "IMPERVA DB".
metadata.vendor_name Se codifica como "IMPERVA DB".
security_result.action Se codifica como "ALLOW" si description no contiene "authentication failure", "check pass; user unknown", "Invalid user" o "invalid user", y error está vacío. Se codifica como "BLOCK" si description contiene "authentication failure", "check pass; user unknown", "Invalid user" o "invalid user", o si error no está vacío.
security_result.rule_id Si description contiene "alert_score" o "new_alert_score", extrae el ruleid de description y asígnalo a security_result.rule_id.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.