Collecter les journaux de la base de données Oracle

Compatible avec:

Ce document explique comment ingérer les journaux de la base de données Oracle dans Google Security Operations à l'aide de Bindplane. L'analyseur extrait des champs à partir des messages SYSLOG, en gérant plusieurs formats à l'aide de modèles Grok et d'une analyse clé-valeur. Il mappe ensuite ces champs extraits sur le modèle de données unifié (UDM), enrichit les données avec des métadonnées statiques telles que les noms de fournisseurs et de produits, et définit dynamiquement les types d'événements en fonction de valeurs de champ spécifiques telles que ACTION et USERID. L'analyseur gère également diverses opérations de nettoyage des données, comme le remplacement de caractères et la conversion des types de données.

Avant de commencer

Assurez-vous de remplir les conditions préalables suivantes:

  • Instance Google SecOps
  • Windows 2016 ou version ultérieure, ou un hôte Linux avec systemd
  • Si l'exécution se fait derrière un proxy, les ports du pare-feu sont ouverts.
  • Accès privilégié (rôle AUDIT_SYSTEM) à la base de données Oracle

Obtenir le fichier d'authentification d'ingestion Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion. Enregistrez le fichier de manière sécurisée sur le système sur lequel Bindplane sera installé.

Obtenir le numéro client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Profil.
  3. Copiez et sauvegardez le numéro client dans la section Détails de l'organisation.

Installer l'agent Bindplane

Installation de Windows

  1. Ouvrez l'invite de commande ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

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

Installation de Linux

  1. Ouvrez un terminal avec des droits root ou sudo.
  2. Exécutez la commande suivante :

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

Autres ressources d'installation

Pour plus d'options d'installation, consultez le guide d'installation.

Configurer l'agent Bindplane pour qu'il ingère les journaux Syslog et les envoie à Google SecOps

  1. Accédez au fichier de configuration :
    • Recherchez le fichier config.yaml. En règle générale, il se trouve dans le répertoire /etc/bindplane-agent/ sous Linux ou dans le répertoire d'installation sous Windows.
    • Ouvrez le fichier à l'aide d'un éditeur de texte (nano, vi ou Bloc-notes, par exemple).
  2. Modifiez le fichier config.yaml comme suit :

    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. Remplacez le port et l'adresse IP dans votre infrastructure si nécessaire.

  4. Remplacez <customer_id> par le numéro client réel.

  5. Remplacez /path/to/ingestion-authentication-file.json par le chemin d'accès du fichier d'authentification enregistré dans la section Obtenir le fichier d'authentification d'ingestion Google SecOps.

Redémarrez l'agent Bindplane pour appliquer les modifications

  • Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante:

    sudo systemctl restart bindplane-agent
    
  • Pour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Activer l'audit pour Oracle Database

  1. Connectez-vous à la base de données Oracle avec SQLplus.
  2. Arrêtez la base de données à l'aide de la commande suivante:

    shutdown immediate
    
  3. Arrêtez le service d'écouteur Oracle en saisissant la commande suivante:

    lsnrctl stop
    
  4. Facultatif: Si nécessaire, arrêtez Enterprise Manager à l'aide des commandes suivantes:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl stop oms
    
  5. Associez la base de données Oracle à l'option uniaud à l'aide des commandes suivantes:

    cd $ORACLE_HOME/rdbms/lib
    
    make -f ins_rdbms.mk uniaud_on ioracle
    
  6. Connectez-vous à la base de données Oracle avec SQLplus.

  7. Redémarrez la base de données à l'aide de la commande suivante:

    startup
    
  8. Redémarrez le service d'écouteur Oracle à l'aide de la commande suivante:

    lsnrctl start
    
  9. Facultatif: Si nécessaire, redémarrez Enterprise Manager à l'aide des commandes suivantes:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl start oms
    
  10. Vérifiez que l'audit unifié est activé, connectez-vous à la base de données Oracle avec SQLplus, puis saisissez la commande suivante:

    select * from v$option where PARAMETER = 'Unified Auditing';
    
  11. Vérifiez que la commande renvoie une ligne avec une valeur "TRUE".

Configurer Syslog pour la base de données Oracle

  1. Connectez-vous à l'instance Oracle.
  2. Ouvrez le fichier suivant à l'aide de vi:

    vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
    
  3. Saisissez les commandes suivantes pour configurer le journal syslog:

    *.audit_trail='os'
    *.audit_syslog_level='local0.info'
    
  4. Assurez-vous que le daemon syslog de l'hôte Oracle est configuré pour transférer le journal d'audit.

  5. Sur Red Hat Enterprise, ouvrez le fichier /etc/syslog.conf suivant à l'aide de vi, puis saisissez la ligne suivante:

    local0.info @ <bindplane-ip>:514
    
  6. Enregistrez et quittez le fichier:

    :wq
    
  7. Sous Red Hat Enterprise, saisissez la commande suivante pour actualiser la configuration syslog:

    kill -HUP /var/run/syslogd.pid
    
  8. Connectez-vous à SQLplus et connectez-vous en tant que sysdba pour redémarrer:

    sys as sysdba
    
  9. Arrêtez la base de données à l'aide de la commande suivante:

    shutdown immediate
    
  10. Redémarrez la base de données à l'aide de la commande suivante:

    startup
    

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
ACTION security_result.action_details La valeur de ACTION du journal brut est mappée directement sur ce champ UDM. Une logique supplémentaire est appliquée pour déterminer security_result.action et security_result.description en fonction de la valeur de ACTION (par exemple, 100 est mappé sur ALLOW et Success).
ACTION_NAME metadata.product_event_type Mappage direct.
ACTION_NUMBER additional.fields[action_number].value.string_value Mappé directement avec la clé Source Event. Utilisé également en combinaison avec d'autres champs pour dériver metadata.event_type et metadata.product_event_type.
APPLICATION_CONTEXTS additional.fields[application_contexts_label].value.string_value Mappé directement avec la clé APPLICATION_CONTEXTS.
AUDIT_POLICY additional.fields[audit_policy_label].value.string_value ou additional.fields[AUDIT_POLICY_#].value.string_value Si AUDIT_POLICY contient une virgule, il est divisé en plusieurs libellés avec des clés telles que AUDIT_POLICY_0, AUDIT_POLICY_1, etc. Sinon, il est mappé directement avec la clé AUDIT_POLICY.
AUDIT_TYPE additional.fields[audit_type_label].value.string_value Mappé directement avec la clé AUDIT_TYPE.
AUTHENTICATION_TYPE metadata.event_type, extensions.auth.type Permet de dériver metadata.event_type en tant que USER_LOGIN si auth_type (extrait de AUTHENTICATION_TYPE) n'est pas vide et que d'autres conditions sont remplies. extensions.auth.type est défini sur AUTHTYPE_UNSPECIFIED.
CLIENT_ADDRESS principal.ip, principal.port, network.ip_protocol, intermediary[host].user.userid L'adresse IP, le port et le protocole sont extraits à l'aide de modèles Grok. Si un nom d'utilisateur est présent dans le champ CLIENT_ADDRESS, il est mappé sur intermediary[host].user.userid.
CLIENT_ID target.user.userid Mappage direct.
CLIENT_PROGRAM_NAME additional.fields[client_program_name_label].value.string_value Mappé directement avec la clé CLIENT_PROGRAM_NAME.
CLIENT_TERMINAL additional.fields[CLIENT_TERMINAL_label].value Mappé directement avec la clé CLIENT_TERMINAL.
CLIENT_USER target.user.user_display_name Mappage direct.
COMMENT$TEXT additional.fields[comment_text_label].value.string_value Mappé directement avec la clé comment_text après avoir remplacé "+" par ":".
CURRENT_USER additional.fields[current_user_label].value.string_value Mappé directement avec la clé current_user.
CURUSER additional.fields[current_user_label].value.string_value Mappé directement avec la clé current_user.
DATABASE_USER principal.user.user_display_name Mappage direct s'il n'est pas vide ou /.
DBID metadata.product_log_id Mappage direct après suppression des guillemets simples.
DBNAME target.resource.resource_type, target.resource.resource_subtype, target.resource.name Définit resource_type sur DATABASE, resource_subtype sur Oracle Database et mappe DBNAME sur name.
DBPROXY_USERRNAME intermediary[dbproxy].user.userid Mappage direct.
DBUSERNAME target.user.user_display_name Mappage direct.
ENTRYID target.resource.attribute.labels[entry_id_label].value Mappé directement avec la clé Entry Id.
EXTERNAL_USERID additional.fields[external_userid_label].value.string_value Mappé directement avec la clé EXTERNAL_USERID.
LENGTH additional.fields[length_label].value.string_value Mappé directement avec la clé length.
LOGOFF$DEAD target.resource.attribute.labels[LOGOFFDEAD_label].value Mappé directement avec la clé LOGOFFDEAD.
LOGOFF$LREAD target.resource.attribute.labels[LOGOFFLREAD_label].value Mappé directement avec la clé LOGOFFLREAD.
LOGOFF$LWRITE target.resource.attribute.labels[LOGOFFLWRITE_label].value Mappé directement avec la clé LOGOFFLWRITE.
LOGOFF$PREAD target.resource.attribute.labels[LOGOFFPREAD_label].value Mappé directement avec la clé LOGOFFPREAD.
NTIMESTAMP# metadata.event_timestamp Analysé et converti au format RFC 3339 ou ISO 8601.
OBJCREATOR target.resource.attribute.labels[obj_creator_label].value Mappé directement avec la clé OBJ Creator.
OBJNAME target.resource.attribute.labels[obj_name_label].value Mappé directement avec la clé OBJ Name.
OS_USERNAME principal.user.user_display_name Mappage direct.
OSUSERID target.user.userid Mappage direct.
PDB_GUID principal.resource.product_object_id Mappage direct.
PRIV$USED additional.fields[privused_label].value.string_value Mappé directement avec la clé privused.
PRIVILEGE principal.user.attribute.permissions.name Mappage direct.
RETURN_CODE security_result.summary Mappage direct. Une logique est appliquée pour dériver security_result.action et security_result.description.
RETURNCODE security_result.summary Mappage direct. Une logique est appliquée pour dériver security_result.action et security_result.description.
RLS_INFO additional.fields[rls_info_label].value.string_value Mappé directement avec la clé RLS_INFO.
SCHEMA additional.fields[schema_label].value.string_value Mappé directement avec la clé schema.
SESSIONCPU target.resource.attribute.labels[SESSIONCPU_label].value Mappé directement avec la clé SESSIONCPU.
SESSIONID network.session_id Mappage direct.
SESID network.session_id Mappage direct.
SQL_TEXT target.process.command_line Mappage direct.
SQLTEXT target.process.command_line Mappage direct.
STATEMENT target.resource.attribute.labels[statement_label].value Mappé directement avec la clé STATEMENT.
STATUS security_result.summary Mappage direct. Une logique est appliquée pour dériver security_result.action et security_result.description.
SYSTEM_PRIVILEGE_USED additional.fields[system_privilege_used_label].value.string_value Mappé directement avec la clé SYSTEM_PRIVILEGE_USED.
TARGET_USER additional.fields[target_user_label].value.string_value Mappé directement avec la clé TARGET_USER.
TERMINAL additional.fields[CLIENT_TERMINAL_label].value Mappé directement avec la clé CLIENT_TERMINAL.
TYPE additional.fields[type_label].value.string_value Mappé directement avec la clé type.
USERHOST principal.hostname, principal.administrative_domain Le nom d'hôte et le domaine sont extraits à l'aide de modèles Grok.
USERID principal.user.userid Mappage direct.
device_host_name target.hostname Mappage direct.
event_name metadata.product_event_type Mappé directement après conversion en majuscules.
file_name target.file.full_path Mappage direct.
hostname principal.hostname Mappage direct.
length additional.fields[length_label].value.string_value Mappé directement avec la clé length.
log_source_name principal.application Mappage direct.
message Diverses Utilisé pour l'analyse grok afin d'extraire plusieurs champs.
returncode RETURNCODE Mappage direct.
src_ip principal.ip Mappage direct.
t_hostname target.hostname Mappage direct.
(Logique de l'analyseur) metadata.vendor_name Codé en dur sur Oracle.
(Logique de l'analyseur) metadata.product_name Codé en dur sur Oracle DB.
(Logique de l'analyseur) metadata.event_type Déterminé en fonction des valeurs de ACTION, ACTION_NUMBER, source_event, OSUSERID, USERID, SQLTEXT, AUTHENTICATION_TYPE, DBUSERNAME, device_host_name et database_name. La valeur par défaut est USER_RESOURCE_ACCESS si aucune condition spécifique n'est remplie.
(Logique de l'analyseur) metadata.product_event_type Déterminé en fonction des valeurs de ACTION, ACTION_NUMBER, source_event, p_event_type et ACTION_NAME.
(Logique de l'analyseur) metadata.log_type Codé en dur sur ORACLE_DB.
(Logique de l'analyseur) extensions.auth.mechanism Défini sur USERNAME_PASSWORD dans certaines conditions en fonction de ACTION, ACTION_NUMBER, source_event et OSUSERID.
(Logique de l'analyseur) extensions.auth.type Défini sur AUTHTYPE_UNSPECIFIED dans certaines conditions en fonction de ACTION, ACTION_NUMBER et AUTHENTICATION_TYPE.
(Logique de l'analyseur) security_result.description Dérivé de RETURNCODE ou STATUS.
(Logique de l'analyseur) security_result.action Dérivé de RETURNCODE ou STATUS.
(Logique de l'analyseur) target.resource.attribute.labels Plusieurs libellés sont ajoutés en fonction de la présence et des valeurs de divers champs de journal.
(Logique de l'analyseur) additional.fields Plusieurs champs sont ajoutés sous forme de paires clé-valeur en fonction de la présence et des valeurs de divers champs de journal.
(Logique de l'analyseur) intermediary Créée et renseignée en fonction de la présence et des valeurs de DBPROXY_USERRNAME et CLIENT_ADDRESS.
(Logique de l'analyseur) network.ip_protocol Dérivé de protocol extrait de CLIENT_ADDRESS à l'aide d'un fichier d'inclusion parse_ip_protocol.include.

Modifications

2025-03-18

Amélioration :

  • Ajout d'un modèle Grok pour analyser les journaux SYSLOG.
  • Mappage de org_id et comp_id sur additional.fields.
  • Mappage de host_addr sur principal.ip et principal.asset.ip.
  • Mappage de host_id sur principal.hostname et principal.asset.hostname.
  • Mappage de level sur security_result.severity_details.

2025-02-12

Amélioration :

  • Ajout d'un filtre de date pour prendre en charge le nouveau format des journaux syslog.

2025-01-15

Amélioration :

  • Mappage de ID sur metadata.event_timestamp.

2024-12-19

Amélioration :

  • Prise en charge d'un nouveau format de journaux syslog.

2024-12-12

Amélioration :

  • Ajout du modèle gsub pour gérer le nouveau format des journaux KV.
  • Ajout d'un nouveau format Grok pour gérer le nouveau format des journaux KV.
  • Mappage de ORACLE_DB sur metadata.log_type.

2024-10-25

Amélioration :

  • Si ACTION est GRANT, définissez metadata.event_type sur USER_RESOURCE_UPDATE_PERMISSIONS.
  • Si ACTION est DROP ou DELETE, définissez metadata.event_type sur USER_RESOURCE_DELETION.
  • Si ACTION est CREATE, définissez metadata.event_type sur USER_RESOURCE_CREATION.
  • Si ACTION est ALTER ou INSERT, définissez metadata.event_type sur USER_RESOURCE_UPDATE_CONTENT.

2024-09-25

Amélioration :

  • Ajout de la compatibilité avec un nouveau format de journaux KV.

2024-07-24

Amélioration :

  • AUDIT_POLICY a été mappé en tant que chaîne unique sur additional.fields au lieu d'être divisé en plusieurs valeurs.

2024-06-06

Amélioration :

  • Modification mineure dans principal.user.user_display_name.

2024-05-30

Amélioration :

  • Ajout de la prise en charge des champs Exadata.

2024-04-03

Amélioration :

  • Prise en charge de certains attributs qui n'étaient pas couverts.

2023-10-25

Amélioration :

  • Mappage de LENGTH, LOGOFFDEAD, LOGOFFLREAD, LOGOFFLWRITE, LOGOFFPREAD, SESSIONCPU et CLIENT_TERMINAL sur target.resource.attribute.labels.
  • Mappage de ACTION sur security_result.summary.
  • Définissez security_result.description sur Success lorsque RETURNCODE est égal à 0 ou que STATUS est égal à 0.
  • Définissez security_result.description sur Failure lorsque RETURNCODE est égal à 1 ou -1, ou que STATUS est égal à 1 ou -1.
  • Mappage de principal.ip et de principal.port à partir de CLIENT_ADDRESS.

2022-10-13

Amélioration :

  • Ajout d'un modèle Grok pour gérer les journaux SYSLOG et KV.

2022-08-01

Amélioration :

  • Ajout d'un mappage pour les champs suivants:
  • hostname mappé sur principal.hostname.
  • Si returncode est 0, security_result.action est mappé sur ALLOW. Sinon, s'il s'agit de -1, il est mappé sur BLOCK.
  • ACTION mappé sur metadata.product_event_type.
  • DATABASE USER mappé sur principal.user.user_display_name.
  • PRIVILEGE mappé sur principal.user.attribute.permissions.
  • CLIENT USER mappé sur target.user.user_display_name.
  • file_name mappé sur target.file.full_path.
  • event_name mappé sur metadata.product_event_type.
  • ACTION_NUMBER mappé sur event.idm.read_only_udm.additional.fields.
  • length mappé sur event.idm.read_only_udm.additional.fields.
  • DBID mappé sur metadata.product_log_id.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.