Recopila registros de la base de datos de Oracle
En esta guía, se explica cómo puedes transferir registros de la BD de Oracle a Google Security Operations con el agente de Bindplane.
El analizador extrae campos de los mensajes de SYSLOG y controla varios formatos con patrones de grok y análisis de pares clave-valor. Luego, asigna estos campos extraídos al Modelo de datos unificado (UDM), lo que enriquece los datos con metadatos estáticos, como los nombres de proveedores y productos, y establece de forma dinámica los tipos de eventos según valores de campos específicos, como ACTION y USERID.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
Una instancia de Google SecOps
Windows Server 2016 o versiones posteriores, o host de Linux con
systemdConectividad de red entre el agente de Bindplane y el host de la base de datos de Oracle
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 instancia de Oracle Database (rol de SYSDBA o AUDIT_ADMIN)
Oracle Database 19c o posterior con la auditoría unificada habilitada (o la auditoría de modo mixto en Oracle 12c a 18c)
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 > Agentes de recopilación.
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
- 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 sistema operativo Windows o Linux 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.
Ejecute el siguiente comando para verificar la instalación:
sc query observiq-otel-collector
El servicio debe mostrarse como RUNNING.
Instalación en Linux
- Abre una terminal con privilegios de administrador o sudo.
Ejecuta el comando siguiente:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shEspera a que se complete la instalación.
Ejecute el siguiente comando para verificar la instalación:
sudo systemctl status observiq-otel-collector
El servicio debería mostrarse como activo (en ejecución).
Recursos de instalación adicionales
Para obtener más opciones de instalación y solución de problemas, consulta la guía de instalación del agente de Bindplane.
Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps
Ubica el archivo de configuración
Linux:
```bash
sudo nano /etc/bindplane-agent/config.yaml
```
Windows:
```cmd
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:
```yaml
receivers:
udplog:
listen_address: "0.0.0.0:514"
exporters:
chronicle/oracle_db:
compression: gzip
creds_file_path: '/path/to/ingestion-authentication-file.json'
customer_id: '<customer_id>'
endpoint: malachiteingestion-pa.googleapis.com
log_type: ORACLE_DB
raw_log_field: body
ingestion_labels:
log_type: 'ORACLE_DB'
service:
pipelines:
logs/oracle_to_chronicle:
receivers:
- udplog
exporters:
- chronicle/oracle_db
```
Parámetros de configuración
- Reemplaza los marcadores de posición que se indican más abajo:
Configuración del receptor:
* listen_address: La dirección IP y el puerto en los que se debe escuchar:
- Reemplaza 0.0.0.0 por una dirección IP específica para escuchar en una interfaz o déjalo como 0.0.0.0 para escuchar en todas las interfaces (recomendado).
- Reemplaza 514 por el número de puerto que coincida con la configuración de reenvío de syslog de Oracle.
Configuración del exportador:
* creds_file_path: Ruta de acceso completa al archivo de autenticación de la transferencia:
- Linux: /etc/bindplane-agent/ingestion-auth.json
- Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
* customer_id: ID de cliente copiado en la sección Obtén el ID de cliente de Google SecOps
* endpoint: URL del endpoint regional:
- EE.UU.: malachiteingestion-pa.googleapis.com
- Europa: europe-malachiteingestion-pa.googleapis.com
- Asia: asia-southeast1-malachiteingestion-pa.googleapis.com
- Consulta Endpoints regionales para obtener la lista completa
Guarda el archivo de configuración
- Después de editarlo, guarda el archivo:
- Linux: Presiona
Ctrl+O, luegoEntery, después,Ctrl+X. - Windows: Haz clic en Archivo > Guardar
- Linux: Presiona
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:
sudo systemctl restart observiq-otel-collector- Verifica que el servicio esté en ejecución:
sudo systemctl status observiq-otel-collector- Revisa los registros en busca de errores:
sudo journalctl -u observiq-otel-collector -fPara reiniciar el agente de Bindplane en Windows, elige una de las siguientes opciones:
- Símbolo del sistema o PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collector- Consola de Services:
- Presiona
Win+R, escribeservices.mscy presiona Intro. - Busca observIQ OpenTelemetry Collector.
- Haz clic con el botón derecho y selecciona Reiniciar.
- Presiona
- Verifica que el servicio esté en ejecución:
sc query observiq-otel-collector- Revisa los registros en busca de errores:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Configura la auditoría unificada de la base de datos de Oracle y el reenvío de syslog
Habilita la auditoría unificada
Si la auditoría unificada aún no está habilitada, vuelve a vincular los archivos binarios de Oracle con la opción uniaud_on. Esto requiere cerrar todos los procesos de Oracle que se ejecutan desde Oracle Home (instancia de base de datos y listener).
- Conéctate al host de la base de datos de Oracle como el usuario del sistema operativo
oracle. Cierra la instancia y el objeto de escucha de Oracle:
sqlplus / as sysdba <<EOF shutdown immediate; exit EOF lsnrctl stopVuelve a vincular los archivos binarios de Oracle con la auditoría unificada habilitada:
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk uniaud_on ioracleInicia el objeto de escucha y la instancia de Oracle:
lsnrctl start sqlplus / as sysdba <<EOF startup; exit EOFSi Oracle Enterprise Manager Cloud Control se ejecuta en el mismo host, reinícialo:
cd /u01/app/oracle/product/middleware/oms export OMS_HOME=/u01/app/oracle/product/middleware/oms $OMS_HOME/bin/emctl start omsVerifica que la auditoría unificada esté habilitada. Conéctate a la base de datos de Oracle con SQL*Plus:
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
Verifica que el comando devuelva una fila con VALUE igual a TRUE.
Configura el resultado de syslog de la auditoría unificada
Establece el parámetro de inicialización UNIFIED_AUDIT_SYSTEMLOG para escribir registros de auditoría unificados en syslog. Este parámetro se introdujo en Oracle 19c y reemplaza al parámetro AUDIT_SYSLOG_LEVEL obsoleto (que solo se aplica a la auditoría tradicional).
- Conéctate a la base de datos de Oracle con SQL*Plus como SYSDBA.
Establece el parámetro
UNIFIED_AUDIT_SYSTEMLOG:- En los sistemas UNIX/Linux, establece el parámetro en un valor
facility.priority:
ALTER SYSTEM SET UNIFIED_AUDIT_SYSTEMLOG = 'LOCAL7.INFO' SCOPE=SPFILE;- En los sistemas Windows, configura el parámetro en
TRUEpara escribir en el Visor de eventos de Windows:
ALTER SYSTEM SET UNIFIED_AUDIT_SYSTEMLOG = TRUE SCOPE=SPFILE;- En los sistemas UNIX/Linux, establece el parámetro en un valor
Opcional: Para escribir registros de políticas de auditoría unificadas comunes desde un contenedor raíz de CDB en syslog en sistemas UNIX/Linux, establece el parámetro
UNIFIED_AUDIT_COMMON_SYSTEMLOG:ALTER SYSTEM SET UNIFIED_AUDIT_COMMON_SYSTEMLOG = TRUE SCOPE=SPFILE;Reinicia la instancia de la base de datos de Oracle para que se apliquen los cambios de parámetros:
SHUTDOWN IMMEDIATE; STARTUP;
Configura el daemon de syslog en el host de Oracle
En el host de la base de datos de Oracle, configura el daemon syslog para que reenvíe las entradas del registro de auditoría al agente de BindPlane.
- Accede al host de Oracle Database como
root. Abre el archivo de configuración de syslog:
- En RHEL/CentOS/Oracle Linux con rsyslog, haz lo siguiente:
sudo vi /etc/rsyslog.conf- En sistemas más antiguos con syslog:
sudo vi /etc/syslog.confAgrega una regla de reenvío que coincida con la instalación y la prioridad que configuraste en
UNIFIED_AUDIT_SYSTEMLOG. Por ejemplo, si configurasLOCAL7.INFO:- Para reenviar a través de UDP (coincide con el receptor de BindPlane
udplog):
local7.info @<BINDPLANE_HOST_IP>:514- Para reenviar a través de TCP (si Bindplane usa el receptor
tcplog), haz lo siguiente:
local7.info @@<BINDPLANE_HOST_IP>:514- Para reenviar a través de UDP (coincide con el receptor de BindPlane
Reemplaza <BINDPLANE_HOST_IP> por la dirección IP o el nombre de host del sistema que ejecuta el agente de Bindplane.
Note: A single `@` prefix indicates UDP forwarding. A double `@@` prefix indicates TCP forwarding. Ensure this matches the receiver type in the Bindplane `config.yaml`.
Opcional: Para conservar también una copia local de los registros de auditoría, agrega la siguiente línea:
local7.info /var/log/oracle_audit.logGuarda el archivo y reinicia el daemon de syslog:
- En RHEL/CentOS/Oracle Linux con rsyslog, haz lo siguiente:
sudo systemctl restart rsyslog- En sistemas más antiguos con syslog:
sudo service syslog restart
Verifica el reenvío del registro de auditoría
Genera un evento de auditoría de prueba realizando una acción auditable en la base de datos de Oracle. Por ejemplo, conéctate como usuario y ejecuta lo siguiente:
SELECT * FROM DBA_USERS WHERE ROWNUM = 1;Verifica los registros del agente de BindPlane para ver los mensajes de syslog entrantes:
sudo journalctl -u observiq-otel-collector -fVerifica que el mensaje de syslog contenga la etiqueta
Oracle Unified Auditcon pares clave-valor, comoTYPE,DBID,SESID,DBUSER,ACTIONyRETCODE.
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 lógica adicional para determinar security_result.action y security_result.description según el valor de ACTION (por ejemplo, 100 se asigna a ALLOW y Success). |
ACTION_NAME |
metadata.product_event_type |
Se asigna directamente. |
ACTION_NUMBER |
additional.fields[action_number].value.string_value |
Se asigna directamente con la clave Source Event. También se usa en combinación con otros campos para derivar metadata.event_type y metadata.product_event_type. |
APPLICATION_CONTEXTS |
additional.fields[application_contexts_label].value.string_value |
Se asigna directamente con la clave 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étera. De lo contrario, se asigna directamente con la clave AUDIT_POLICY. |
AUDIT_TYPE |
additional.fields[audit_type_label].value.string_value |
Se asigna directamente con la clave AUDIT_TYPE. |
AUTHENTICATION_TYPE |
metadata.event_type, extensions.auth.type |
Se usa para derivar 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 establece en AUTHTYPE_UNSPECIFIED. |
CLIENT_ADDRESS |
principal.ip, principal.port, network.ip_protocol, intermediary[host].user.userid |
La IP, el puerto y el protocolo se extraen con patrones de grok. Si hay un nombre de usuario en el campo CLIENT_ADDRESS, se asigna a intermediary[host].user.userid. |
CLIENT_ID |
target.user.userid |
Se asigna directamente. |
CLIENT_PROGRAM_NAME |
additional.fields[client_program_name_label].value.string_value |
Se asigna directamente con la clave CLIENT_PROGRAM_NAME. |
CLIENT_TERMINAL |
additional.fields[CLIENT_TERMINAL_label].value |
Se asigna directamente con la clave CLIENT_TERMINAL. |
CLIENT_USER |
target.user.user_display_name |
Se asigna directamente. |
COMMENT$TEXT |
additional.fields[comment_text_label].value.string_value |
Se asigna directamente con la clave comment_text después de reemplazar + por :. |
CURRENT_USER |
additional.fields[current_user_label].value.string_value |
Se asigna directamente con la clave current_user. |
CURUSER |
additional.fields[current_user_label].value.string_value |
Se asigna directamente con la clave 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 |
Establece resource_type en DATABASE, resource_subtype en Oracle Database y asigna DBNAME a name. |
DBPROXY_USERRNAME |
intermediary[dbproxy].user.userid |
Se asigna directamente. |
DBUSERNAME |
target.user.user_display_name |
Se asigna directamente. |
ENTRYID |
target.resource.attribute.labels[entry_id_label].value |
Se asigna directamente con la clave Entry Id. |
EXTERNAL_USERID |
additional.fields[external_userid_label].value.string_value |
Se asigna directamente con la clave EXTERNAL_USERID. |
LENGTH |
additional.fields[length_label].value.string_value |
Se asigna directamente con la clave length. |
LOGOFF$DEAD |
target.resource.attribute.labels[LOGOFFDEAD_label].value |
Se asigna directamente con la clave LOGOFFDEAD. |
LOGOFF$LREAD |
target.resource.attribute.labels[LOGOFFLREAD_label].value |
Se asigna directamente con la clave LOGOFFLREAD. |
LOGOFF$LWRITE |
target.resource.attribute.labels[LOGOFFLWRITE_label].value |
Se asigna directamente con la clave LOGOFFLWRITE. |
LOGOFF$PREAD |
target.resource.attribute.labels[LOGOFFPREAD_label].value |
Se asigna directamente con la clave LOGOFFPREAD. |
NTIMESTAMP# |
metadata.event_timestamp |
Se analiza y convierte al formato RFC 3339 o ISO8601. |
OBJCREATOR |
target.resource.attribute.labels[obj_creator_label].value |
Se asigna directamente con la clave OBJ Creator. |
OBJNAME |
target.resource.attribute.labels[obj_name_label].value |
Se asigna directamente con la clave OBJ Name. |
OS_USERNAME |
principal.user.user_display_name |
Se asigna directamente. |
OSUSERID |
target.user.userid |
Se asigna directamente. |
PDB_GUID |
principal.resource.product_object_id |
Se asigna directamente. |
PRIV$USED |
additional.fields[privused_label].value.string_value |
Se asigna directamente con la clave privused. |
PRIVILEGE |
principal.user.attribute.permissions.name |
Se asigna directamente. |
RETURN_CODE |
security_result.summary |
Se asigna directamente. Se aplica la lógica para derivar security_result.action y security_result.description. |
RETURNCODE |
security_result.summary |
Se asigna directamente. Se aplica la lógica para derivar security_result.action y security_result.description. |
RLS_INFO |
additional.fields[rls_info_label].value.string_value |
Se asigna directamente con la clave RLS_INFO. |
SCHEMA |
additional.fields[schema_label].value.string_value |
Se asigna directamente con la clave schema. |
SESSIONCPU |
target.resource.attribute.labels[SESSIONCPU_label].value |
Se asigna directamente con la clave SESSIONCPU. |
SESSIONID |
network.session_id |
Se asigna directamente. |
SESID |
network.session_id |
Se asigna directamente. |
SQL_TEXT |
target.process.command_line |
Se asigna directamente. |
SQLTEXT |
target.process.command_line |
Se asigna directamente. |
STATEMENT |
target.resource.attribute.labels[statement_label].value |
Se asigna directamente con la clave STATEMENT. |
STATUS |
security_result.summary |
Se asigna directamente. Se aplica la lógica para derivar security_result.action y security_result.description. |
SYSTEM_PRIVILEGE_USED |
additional.fields[system_privilege_used_label].value.string_value |
Se asigna directamente con la clave SYSTEM_PRIVILEGE_USED. |
TARGET_USER |
additional.fields[target_user_label].value.string_value |
Se asigna directamente con la clave TARGET_USER. |
TERMINAL |
additional.fields[CLIENT_TERMINAL_label].value |
Se asigna directamente con la clave CLIENT_TERMINAL. |
TYPE |
additional.fields[type_label].value.string_value |
Se asigna directamente con la clave type. |
USERHOST |
principal.hostname, principal.administrative_domain |
El nombre de host y el dominio se extraen con patrones de grok. |
USERID |
principal.user.userid |
Se asigna directamente. |
device_host_name |
target.hostname |
Se asigna directamente. |
event_name |
metadata.product_event_type |
Se asigna directamente después de convertirla a mayúsculas. |
file_name |
target.file.full_path |
Se asigna directamente. |
hostname |
principal.hostname |
Se asigna directamente. |
length |
additional.fields[length_label].value.string_value |
Se asigna directamente con la clave length. |
log_source_name |
principal.application |
Se asigna directamente. |
message |
Varios | Se usa para el análisis de Grok para extraer varios campos. |
returncode |
RETURNCODE |
Se asigna directamente. |
src_ip |
principal.ip |
Se asigna directamente. |
t_hostname |
target.hostname |
Se asigna directamente. |
| (Lógica del analizador) | metadata.vendor_name |
Se codificó como Oracle. |
| (Lógica del analizador) | metadata.product_name |
Se codificó como Oracle DB. |
| (Lógica del analizador) | metadata.event_type |
Se determina según 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 según los valores de ACTION, ACTION_NUMBER, source_event, p_event_type y ACTION_NAME. |
| (Lógica del analizador) | metadata.log_type |
Se codificó como ORACLE_DB. |
| (Lógica del analizador) | extensions.auth.mechanism |
Se establece en USERNAME_PASSWORD en ciertas condiciones según ACTION, ACTION_NUMBER, source_event y OSUSERID. |
| (Lógica del analizador) | extensions.auth.type |
Se establece en AUTHTYPE_UNSPECIFIED en ciertas condiciones según ACTION, ACTION_NUMBER y AUTHENTICATION_TYPE. |
| (Lógica del analizador) | security_result.description |
Se deriva de RETURNCODE o STATUS. |
| (Lógica del analizador) | security_result.action |
Se deriva de RETURNCODE o STATUS. |
| (Lógica del analizador) | target.resource.attribute.labels |
Se agregan varias etiquetas según la presencia y los valores de varios campos de registro. |
| (Lógica del analizador) | additional.fields |
Se agregan varios campos como pares clave-valor según la presencia y los valores de varios campos de registro. |
| (Lógica del analizador) | intermediary |
Se crea y se completa en función de la presencia y los valores de DBPROXY_USERRNAME y CLIENT_ADDRESS. |
| (Lógica del analizador) | network.ip_protocol |
Se deriva del protocolo extraído de CLIENT_ADDRESS con un archivo de inclusión parse_ip_protocol.include. |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.