Recolha registos da base de dados Oracle

Compatível com:

Este documento explica como ingerir registos da base de dados Oracle no Google Security Operations usando o Bindplane. O analisador extrai campos de mensagens SYSLOG, processando vários formatos através de padrões grok e análise de chave/valor. Em seguida, mapeia estes campos extraídos para o modelo de dados unificado (UDM), enriquecendo os dados com metadados estáticos, como nomes de fornecedores e produtos, e definindo dinamicamente os tipos de eventos com base em valores de campos específicos, como ACTION e USERID. O analisador também processa várias operações de limpeza de dados, como a substituição de carateres e a conversão de tipos de dados.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps
  • Windows 2016 ou posterior, ou um anfitrião Linux com systemd
  • Se estiver a ser executado através de um proxy, as portas da firewall estão abertas
  • Acesso privilegiado (função AUDIT_SYSTEM) à base de dados Oracle

Obtenha o ficheiro de autenticação de carregamento do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.

Obtenha o ID de cliente do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane

Instalação do Windows

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte comando:

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

Instalação do Linux

  1. Abra um terminal com privilégios de raiz ou sudo.
  2. Execute o seguinte comando:

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

Recursos de instalação adicionais

Para ver opções de instalação adicionais, consulte o guia de instalação.

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

  1. Aceda ao ficheiro de configuração:
    • Localize o ficheiro config.yaml. Normalmente, encontra-se no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    • Abra o ficheiro com um editor de texto (por exemplo, nano, vi ou Bloco de notas).
  2. Edite o ficheiro config.yaml da seguinte forma:

    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. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  4. Substitua <customer_id> pelo ID de cliente real.

  5. Atualize /path/to/ingestion-authentication-file.json para o caminho onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps.

Reinicie o agente do Bindplane para aplicar as alterações

  • Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, pode usar a consola Services ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Ative a auditoria para a base de dados Oracle

  1. Estabeleça ligação à base de dados Oracle com o SQLplus.
  2. Encerre a base de dados com o seguinte comando:

    shutdown immediate
    
  3. Pare o serviço de escuta do Oracle escrevendo o seguinte comando:

    lsnrctl stop
    
  4. Opcional: apenas se aplicável, pare o Enterprise Manager com os seguintes comandos:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl stop oms
    
  5. Associe a base de dados Oracle com a opção uniaud através dos seguintes comandos:

    cd $ORACLE_HOME/rdbms/lib
    
    make -f ins_rdbms.mk uniaud_on ioracle
    
  6. Estabeleça ligação à base de dados Oracle com o SQLplus.

  7. Reinicie a base de dados com o seguinte comando:

    startup
    
  8. Reinicie o serviço de escuta do Oracle com o seguinte comando:

    lsnrctl start
    
  9. Opcional: apenas se aplicável, reinicie o Enterprise Manager com os seguintes comandos:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl start oms
    
  10. Verifique se a auditoria unificada está ativada, ligue-se à base de dados Oracle com o SQLplus e, em seguida, escreva o seguinte comando:

    select * from v$option where PARAMETER = 'Unified Auditing';
    
  11. Verifique se o comando devolve uma linha com VALUE igual a "TRUE".

Configure o Syslog para a base de dados Oracle

  1. Inicie sessão na instância do Oracle.
  2. Abra o seguinte ficheiro com o vi:

    vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
    
  3. Introduza os seguintes comandos para a configuração do syslog:

    *.audit_trail='os'
    *.audit_syslog_level='local0.info'
    
  4. Certifique-se de que o daemon syslog no anfitrião Oracle está configurado para encaminhar o registo de auditoria.

  5. No Red Hat Enterprise, abra o seguinte ficheiro /etc/syslog.conf com vi e introduza a seguinte linha:

    local0.info @ <bindplane-ip>:514
    
  6. Guarde e saia do ficheiro:

    :wq
    
  7. No Red Hat Enterprise, escreva o seguinte comando para recarregar a configuração do syslog:

    kill -HUP /var/run/syslogd.pid
    
  8. Estabeleça ligação ao SQLplus e inicie sessão como sysdba para reiniciar:

    sys as sysdba
    
  9. Encerre a base de dados com o seguinte comando:

    shutdown immediate
    
  10. Reinicie a base de dados com o seguinte comando:

    startup
    

Tabela de mapeamento do UDM

Campo de registo Mapeamento de UDM Lógica
ACTION security_result.action_details O valor de ACTION do registo não processado é mapeado diretamente para este campo da UDM. É aplicada uma lógica adicional para determinar security_result.action e security_result.description com base no valor de ACTION (por exemplo, 100 é mapeado para ALLOW e Success).
ACTION_NAME metadata.product_event_type Mapeado diretamente.
ACTION_NUMBER additional.fields[action_number].value.string_value Mapeado diretamente com a tecla Source Event. Também é usado em combinação com outros campos para obter metadata.event_type e metadata.product_event_type.
APPLICATION_CONTEXTS additional.fields[application_contexts_label].value.string_value Mapeado diretamente com a tecla APPLICATION_CONTEXTS.
AUDIT_POLICY additional.fields[audit_policy_label].value.string_value ou additional.fields[AUDIT_POLICY_#].value.string_value Se AUDIT_POLICY contiver uma vírgula, é dividido em várias etiquetas com chaves como AUDIT_POLICY_0, AUDIT_POLICY_1, etc. Caso contrário, é mapeado diretamente com a chave AUDIT_POLICY.
AUDIT_TYPE additional.fields[audit_type_label].value.string_value Mapeado diretamente com a tecla AUDIT_TYPE.
AUTHENTICATION_TYPE metadata.event_type, extensions.auth.type Usado para derivar metadata.event_type como USER_LOGIN se auth_type (extraído de AUTHENTICATION_TYPE) não estiver vazio e outras condições forem cumpridas. extensions.auth.type está definido como AUTHTYPE_UNSPECIFIED.
CLIENT_ADDRESS principal.ip, principal.port, network.ip_protocol, intermediary[host].user.userid O IP, a porta e o protocolo são extraídos através de padrões grok. Se um nome de utilizador estiver presente no campo CLIENT_ADDRESS, é mapeado para intermediary[host].user.userid.
CLIENT_ID target.user.userid Mapeado diretamente.
CLIENT_PROGRAM_NAME additional.fields[client_program_name_label].value.string_value Mapeado diretamente com a tecla CLIENT_PROGRAM_NAME.
CLIENT_TERMINAL additional.fields[CLIENT_TERMINAL_label].value Mapeado diretamente com a tecla CLIENT_TERMINAL.
CLIENT_USER target.user.user_display_name Mapeado diretamente.
COMMENT$TEXT additional.fields[comment_text_label].value.string_value Mapeado diretamente com a chave comment_text após substituir "+" por ":".
CURRENT_USER additional.fields[current_user_label].value.string_value Mapeado diretamente com a tecla current_user.
CURUSER additional.fields[current_user_label].value.string_value Mapeado diretamente com a tecla current_user.
DATABASE_USER principal.user.user_display_name Mapeado diretamente se não estiver vazio ou /.
DBID metadata.product_log_id Mapeado diretamente após a remoção das aspas simples.
DBNAME target.resource.resource_type, target.resource.resource_subtype, target.resource.name Define resource_type como DATABASE, resource_subtype como Oracle Database e mapeia DBNAME para name.
DBPROXY_USERRNAME intermediary[dbproxy].user.userid Mapeado diretamente.
DBUSERNAME target.user.user_display_name Mapeado diretamente.
ENTRYID target.resource.attribute.labels[entry_id_label].value Mapeado diretamente com a tecla Entry Id.
EXTERNAL_USERID additional.fields[external_userid_label].value.string_value Mapeado diretamente com a tecla EXTERNAL_USERID.
LENGTH additional.fields[length_label].value.string_value Mapeado diretamente com a tecla length.
LOGOFF$DEAD target.resource.attribute.labels[LOGOFFDEAD_label].value Mapeado diretamente com a tecla LOGOFFDEAD.
LOGOFF$LREAD target.resource.attribute.labels[LOGOFFLREAD_label].value Mapeado diretamente com a tecla LOGOFFLREAD.
LOGOFF$LWRITE target.resource.attribute.labels[LOGOFFLWRITE_label].value Mapeado diretamente com a tecla LOGOFFLWRITE.
LOGOFF$PREAD target.resource.attribute.labels[LOGOFFPREAD_label].value Mapeado diretamente com a tecla LOGOFFPREAD.
NTIMESTAMP# metadata.event_timestamp Analisado e convertido para o formato RFC 3339 ou ISO8601.
OBJCREATOR target.resource.attribute.labels[obj_creator_label].value Mapeado diretamente com a tecla OBJ Creator.
OBJNAME target.resource.attribute.labels[obj_name_label].value Mapeado diretamente com a tecla OBJ Name.
OS_USERNAME principal.user.user_display_name Mapeado diretamente.
OSUSERID target.user.userid Mapeado diretamente.
PDB_GUID principal.resource.product_object_id Mapeado diretamente.
PRIV$USED additional.fields[privused_label].value.string_value Mapeado diretamente com a tecla privused.
PRIVILEGE principal.user.attribute.permissions.name Mapeado diretamente.
RETURN_CODE security_result.summary Mapeado diretamente. A lógica é aplicada para derivar security_result.action e security_result.description.
RETURNCODE security_result.summary Mapeado diretamente. A lógica é aplicada para derivar security_result.action e security_result.description.
RLS_INFO additional.fields[rls_info_label].value.string_value Mapeado diretamente com a tecla RLS_INFO.
SCHEMA additional.fields[schema_label].value.string_value Mapeado diretamente com a tecla schema.
SESSIONCPU target.resource.attribute.labels[SESSIONCPU_label].value Mapeado diretamente com a tecla SESSIONCPU.
SESSIONID network.session_id Mapeado diretamente.
SESID network.session_id Mapeado diretamente.
SQL_TEXT target.process.command_line Mapeado diretamente.
SQLTEXT target.process.command_line Mapeado diretamente.
STATEMENT target.resource.attribute.labels[statement_label].value Mapeado diretamente com a tecla STATEMENT.
STATUS security_result.summary Mapeado diretamente. A lógica é aplicada para derivar security_result.action e security_result.description.
SYSTEM_PRIVILEGE_USED additional.fields[system_privilege_used_label].value.string_value Mapeado diretamente com a tecla SYSTEM_PRIVILEGE_USED.
TARGET_USER additional.fields[target_user_label].value.string_value Mapeado diretamente com a tecla TARGET_USER.
TERMINAL additional.fields[CLIENT_TERMINAL_label].value Mapeado diretamente com a tecla CLIENT_TERMINAL.
TYPE additional.fields[type_label].value.string_value Mapeado diretamente com a tecla type.
USERHOST principal.hostname, principal.administrative_domain O nome de anfitrião e o domínio são extraídos através de padrões grok.
USERID principal.user.userid Mapeado diretamente.
device_host_name target.hostname Mapeado diretamente.
event_name metadata.product_event_type Mapeado diretamente após a conversão para maiúsculas.
file_name target.file.full_path Mapeado diretamente.
hostname principal.hostname Mapeado diretamente.
length additional.fields[length_label].value.string_value Mapeado diretamente com a tecla length.
log_source_name principal.application Mapeado diretamente.
message Vários Usado para a análise grok para extrair vários campos.
returncode RETURNCODE Mapeado diretamente.
src_ip principal.ip Mapeado diretamente.
t_hostname target.hostname Mapeado diretamente.
(Lógica do analisador) metadata.vendor_name Codificado para Oracle.
(Lógica do analisador) metadata.product_name Codificado para Oracle DB.
(Lógica do analisador) metadata.event_type Determinado com base nos valores de ACTION, ACTION_NUMBER, source_event, OSUSERID, USERID, SQLTEXT, AUTHENTICATION_TYPE, DBUSERNAME, device_host_name e database_name. A predefinição é USER_RESOURCE_ACCESS se não for cumprida nenhuma condição específica.
(Lógica do analisador) metadata.product_event_type Determinado com base nos valores de ACTION, ACTION_NUMBER, source_event, p_event_type e ACTION_NAME.
(Lógica do analisador) metadata.log_type Codificado para ORACLE_DB.
(Lógica do analisador) extensions.auth.mechanism Definido como USERNAME_PASSWORD em determinadas condições com base em ACTION, ACTION_NUMBER, source_event e OSUSERID.
(Lógica do analisador) extensions.auth.type Definido como AUTHTYPE_UNSPECIFIED em determinadas condições com base em ACTION, ACTION_NUMBER e AUTHENTICATION_TYPE.
(Lógica do analisador) security_result.description Derivados de RETURNCODE ou STATUS.
(Lógica do analisador) security_result.action Derivados de RETURNCODE ou STATUS.
(Lógica do analisador) target.resource.attribute.labels São adicionadas várias etiquetas com base na presença e nos valores de vários campos de registo.
(Lógica do analisador) additional.fields Vários campos são adicionados como pares de chave-valor com base na presença e nos valores de vários campos de registo.
(Lógica do analisador) intermediary Criado e preenchido com base na presença e nos valores de DBPROXY_USERRNAME e CLIENT_ADDRESS.
(Lógica do analisador) network.ip_protocol Derivado de protocol extraído de CLIENT_ADDRESS através de um ficheiro de inclusão parse_ip_protocol.include.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.