Recoger registros de bases de datos Oracle

Disponible en:

En este documento se explica cómo ingerir registros de bases de datos de Oracle en Google Security Operations mediante Bindplane. El analizador extrae campos de mensajes SYSLOG y gestiona varios formatos mediante patrones grok y análisis de pares clave-valor. A continuación, asigna estos campos extraídos al modelo de datos unificado (UDM), enriquece los datos con metadatos estáticos, como los nombres de proveedor y de producto, y define dinámicamente los tipos de eventos en función de valores de campo específicos, como ACTION y USERID. El analizador también gestiona varias operaciones de limpieza de datos, como la sustitución de caracteres y la conversión de tipos de datos.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

  • Instancia de Google SecOps
  • Windows 2016 o versiones posteriores, o un host Linux con systemd
  • Si se ejecuta a través de un proxy, los puertos del cortafuegos están abiertos
  • Acceso con privilegios (rol AUDIT_SYSTEM) a la base de datos de Oracle

Obtener el archivo de autenticación de ingestión de Google SecOps

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recogida.
  3. Descarga el archivo de autenticación de ingestión. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.

Obtener el ID de cliente de Google SecOps

  1. Inicia sesión en 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.

Instalar el agente de Bindplane

Instalación de ventanas

  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 de Linux

  1. Abre un terminal con privilegios de superusuario 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

Para ver más opciones de instalación, consulta la guía de instalación.

Configurar el agente de BindPlane para ingerir Syslog y enviarlo a Google SecOps

  1. Accede al archivo de configuración:
    • Busca el archivo config.yaml. Normalmente, se encuentra en el directorio /etc/bindplane-agent/ en Linux o en el directorio de instalación en Windows.
    • 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
            ingestion_labels:
                log_type: 'ORACLE_DB'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Sustituye el puerto y la dirección IP según sea necesario en tu infraestructura.

  4. Sustituye <customer_id> por el ID de cliente real.

  5. Actualiza /path/to/ingestion-authentication-file.json a la ruta en la que se guardó el archivo de autenticación en la sección Obtener el archivo de autenticación de ingestión de Google SecOps.

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 Servicios o introducir el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Habilitar la auditoría en Oracle Database

  1. Conéctate a la base de datos de Oracle con SQL*Plus.
  2. Cierra la base de datos con el siguiente comando:

    shutdown immediate
    
  3. Detén el servicio de escucha de Oracle escribiendo el siguiente comando:

    lsnrctl stop
    
  4. Opcional: Solo si procede, detén Enterprise Manager con los siguientes comandos:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl stop oms
    
  5. Vincula la base de datos de Oracle con la opción uniaud mediante los siguientes comandos:

    cd $ORACLE_HOME/rdbms/lib
    
    make -f ins_rdbms.mk uniaud_on ioracle
    
  6. Conéctate a la base de datos de Oracle con SQL*Plus.

  7. Reinicia la base de datos con el siguiente comando:

    startup
    
  8. Reinicia el servicio de escucha de Oracle con el siguiente comando:

    lsnrctl start
    
  9. Opcional: Solo si procede, reinicia Enterprise Manager con los siguientes comandos:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl start oms
    
  10. Verifica que la auditoría unificada esté habilitada, conéctate a la base de datos de Oracle con SQLplus y, a continuación, escribe el siguiente comando:

    select * from v$option where PARAMETER = 'Unified Auditing';
    
  11. Verifica que el comando devuelva una fila con el valor "TRUE".

Configurar Syslog para Oracle Database

  1. Inicia sesión en la instancia de Oracle.
  2. Abre el siguiente archivo con vi:

    vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
    
  3. Introduce los siguientes comandos para configurar syslog:

    *.audit_trail='os'
    *.audit_syslog_level='local0.info'
    
  4. Asegúrate de que el daemon syslog del host de Oracle esté configurado para reenviar el registro de auditoría.

  5. En Red Hat Enterprise, abre el archivo /etc/syslog.conf con vi e introduce la siguiente línea:

    local0.info @ <bindplane-ip>:514
    
  6. Guarda el archivo y sal:

    :wq
    
  7. En Red Hat Enterprise, escribe el siguiente comando para volver a cargar la configuración de syslog:

    kill -HUP /var/run/syslogd.pid
    
  8. Conéctate a SQLplus e inicia sesión como sysdba para reiniciar:

    sys as sysdba
    
  9. Cierra la base de datos con el siguiente comando:

    shutdown immediate
    
  10. Reinicia la base de datos con el siguiente comando:

    startup
    

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
ACTION security_result.action_details El valor de ACTION del registro sin procesar se asigna directamente a este campo de UDM. Se aplica una lógica adicional para determinar security_result.action y security_result.description en función del valor de ACTION (por ejemplo, 100 se asigna a PERMITIR y Éxito).
ACTION_NAME metadata.product_event_type Asignación directa.
ACTION_NUMBER additional.fields[action_number].value.string_value Se asigna directamente a la tecla Source Event. También se usa junto con otros campos para obtener metadata.event_type y metadata.product_event_type.
APPLICATION_CONTEXTS additional.fields[application_contexts_label].value.string_value Se asigna directamente a la tecla APPLICATION_CONTEXTS.
AUDIT_POLICY additional.fields[audit_policy_label].value.string_value o additional.fields[AUDIT_POLICY_#].value.string_value Si AUDIT_POLICY contiene una coma, se divide en varias etiquetas con claves como AUDIT_POLICY_0, AUDIT_POLICY_1, etc. De lo contrario, se asigna directamente con la clave AUDIT_POLICY.
AUDIT_TYPE additional.fields[audit_type_label].value.string_value Se asigna directamente a la tecla AUDIT_TYPE.
AUTHENTICATION_TYPE metadata.event_type, extensions.auth.type Se usa para obtener metadata.event_type como USER_LOGIN si auth_type (extraído de AUTHENTICATION_TYPE) no está vacío y se cumplen otras condiciones. extensions.auth.type se ha definido como AUTHTYPE_UNSPECIFIED.
CLIENT_ADDRESS principal.ip, principal.port, network.ip_protocol, intermediary[host].user.userid La IP, el puerto y el protocolo se extraen mediante patrones grok. Si hay un nombre de usuario en el campo CLIENT_ADDRESS, se asigna a intermediary[host].user.userid.
CLIENT_ID target.user.userid Asignación directa.
CLIENT_PROGRAM_NAME additional.fields[client_program_name_label].value.string_value Se asigna directamente a la tecla CLIENT_PROGRAM_NAME.
CLIENT_TERMINAL additional.fields[CLIENT_TERMINAL_label].value Se asigna directamente a la tecla CLIENT_TERMINAL.
CLIENT_USER target.user.user_display_name Asignación directa.
COMMENT$TEXT additional.fields[comment_text_label].value.string_value Asignado directamente con la clave comment_text después de sustituir "+" por ":".
CURRENT_USER additional.fields[current_user_label].value.string_value Se asigna directamente a la tecla current_user.
CURUSER additional.fields[current_user_label].value.string_value Se asigna directamente a la tecla current_user.
DATABASE_USER principal.user.user_display_name Se asigna directamente si no está vacío o es /.
DBID metadata.product_log_id Se asigna directamente después de quitar las comillas simples.
DBNAME target.resource.resource_type, target.resource.resource_subtype, target.resource.name Asigna el valor DATABASE a resource_type, Oracle Database a resource_subtype y name a DBNAME.
DBPROXY_USERRNAME intermediary[dbproxy].user.userid Asignación directa.
DBUSERNAME target.user.user_display_name Asignación directa.
ENTRYID target.resource.attribute.labels[entry_id_label].value Se asigna directamente a la tecla Entry Id.
EXTERNAL_USERID additional.fields[external_userid_label].value.string_value Se asigna directamente a la tecla EXTERNAL_USERID.
LENGTH additional.fields[length_label].value.string_value Se asigna directamente a la tecla length.
LOGOFF$DEAD target.resource.attribute.labels[LOGOFFDEAD_label].value Se asigna directamente a la tecla LOGOFFDEAD.
LOGOFF$LREAD target.resource.attribute.labels[LOGOFFLREAD_label].value Se asigna directamente a la tecla LOGOFFLREAD.
LOGOFF$LWRITE target.resource.attribute.labels[LOGOFFLWRITE_label].value Se asigna directamente a la tecla LOGOFFLWRITE.
LOGOFF$PREAD target.resource.attribute.labels[LOGOFFPREAD_label].value Se asigna directamente a la tecla LOGOFFPREAD.
NTIMESTAMP# metadata.event_timestamp Analizada y convertida al formato RFC 3339 o ISO 8601.
OBJCREATOR target.resource.attribute.labels[obj_creator_label].value Se asigna directamente a la tecla OBJ Creator.
OBJNAME target.resource.attribute.labels[obj_name_label].value Se asigna directamente a la tecla OBJ Name.
OS_USERNAME principal.user.user_display_name Asignación directa.
OSUSERID target.user.userid Asignación directa.
PDB_GUID principal.resource.product_object_id Asignación directa.
PRIV$USED additional.fields[privused_label].value.string_value Se asigna directamente a la tecla privused.
PRIVILEGE principal.user.attribute.permissions.name Asignación directa.
RETURN_CODE security_result.summary Asignación directa. Se aplica una lógica para obtener security_result.action y security_result.description.
RETURNCODE security_result.summary Asignación directa. Se aplica una lógica para obtener security_result.action y security_result.description.
RLS_INFO additional.fields[rls_info_label].value.string_value Se asigna directamente a la tecla RLS_INFO.
SCHEMA additional.fields[schema_label].value.string_value Se asigna directamente a la tecla schema.
SESSIONCPU target.resource.attribute.labels[SESSIONCPU_label].value Se asigna directamente a la tecla SESSIONCPU.
SESSIONID network.session_id Asignación directa.
SESID network.session_id Asignación directa.
SQL_TEXT target.process.command_line Asignación directa.
SQLTEXT target.process.command_line Asignación directa.
STATEMENT target.resource.attribute.labels[statement_label].value Se asigna directamente a la tecla STATEMENT.
STATUS security_result.summary Asignación directa. Se aplica una lógica para obtener security_result.action y security_result.description.
SYSTEM_PRIVILEGE_USED additional.fields[system_privilege_used_label].value.string_value Se asigna directamente a la tecla SYSTEM_PRIVILEGE_USED.
TARGET_USER additional.fields[target_user_label].value.string_value Se asigna directamente a la tecla TARGET_USER.
TERMINAL additional.fields[CLIENT_TERMINAL_label].value Se asigna directamente a la tecla CLIENT_TERMINAL.
TYPE additional.fields[type_label].value.string_value Se asigna directamente a la tecla type.
USERHOST principal.hostname, principal.administrative_domain El nombre de host y el dominio se extraen mediante patrones grok.
USERID principal.user.userid Asignación directa.
device_host_name target.hostname Asignación directa.
event_name metadata.product_event_type Se asigna directamente después de convertirlo a mayúsculas.
file_name target.file.full_path Asignación directa.
hostname principal.hostname Asignación directa.
length additional.fields[length_label].value.string_value Se asigna directamente a la tecla length.
log_source_name principal.application Asignación directa.
message Varias Se usa para el análisis grok con el fin de extraer varios campos.
returncode RETURNCODE Asignación directa.
src_ip principal.ip Asignación directa.
t_hostname target.hostname Asignación directa.
(Lógica del analizador) metadata.vendor_name Valor fijo establecido en el código fuente Oracle.
(Lógica del analizador) metadata.product_name Valor fijo establecido en el código fuente Oracle DB.
(Lógica del analizador) metadata.event_type Se determina en función de los valores de ACTION, ACTION_NUMBER, source_event, OSUSERID, USERID, SQLTEXT, AUTHENTICATION_TYPE, DBUSERNAME, device_host_name y database_name. El valor predeterminado es USER_RESOURCE_ACCESS si no se cumple ninguna condición específica.
(Lógica del analizador) metadata.product_event_type Se determina en función de los valores de ACTION, ACTION_NUMBER, source_event, p_event_type y ACTION_NAME.
(Lógica del analizador) metadata.log_type Valor fijo establecido en el código fuente ORACLE_DB.
(Lógica del analizador) extensions.auth.mechanism Se asigna el valor USERNAME_PASSWORD en determinadas condiciones en función de ACTION, ACTION_NUMBER, source_event y OSUSERID.
(Lógica del analizador) extensions.auth.type Se define como AUTHTYPE_UNSPECIFIED en determinadas condiciones en función de ACTION, ACTION_NUMBER y AUTHENTICATION_TYPE.
(Lógica del analizador) security_result.description Derivado de RETURNCODE o STATUS.
(Lógica del analizador) security_result.action Derivado de RETURNCODE o STATUS.
(Lógica del analizador) target.resource.attribute.labels Se añaden varias etiquetas en función de la presencia y los valores de varios campos de registro.
(Lógica del analizador) additional.fields Se añaden varios campos como pares clave-valor en función de la presencia y los valores de varios campos de registro.
(Lógica del analizador) intermediary Se crea y se rellena en función de la presencia y los valores de DBPROXY_USERRNAME y CLIENT_ADDRESS.
(Lógica del analizador) network.ip_protocol Derivado de protocol extraído de CLIENT_ADDRESS mediante un archivo de inclusión parse_ip_protocol.include.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.