Collecter les journaux de la base de données Oracle
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- 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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Profil.
- Copiez et sauvegardez le numéro client dans la section Détails de l'organisation.
Installer l'agent Bindplane
Installation de Windows
- Ouvrez l'invite de commande ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installation de Linux
- Ouvrez un terminal avec des droits root ou sudo.
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
- 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).
- Recherchez le fichier
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
Remplacez le port et l'adresse IP dans votre infrastructure si nécessaire.
Remplacez
<customer_id>
par le numéro client réel.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
- Connectez-vous à la base de données Oracle avec SQLplus.
Arrêtez la base de données à l'aide de la commande suivante:
shutdown immediate
Arrêtez le service d'écouteur Oracle en saisissant la commande suivante:
lsnrctl stop
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
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
Connectez-vous à la base de données Oracle avec SQLplus.
Redémarrez la base de données à l'aide de la commande suivante:
startup
Redémarrez le service d'écouteur Oracle à l'aide de la commande suivante:
lsnrctl start
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
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';
Vérifiez que la commande renvoie une ligne avec une valeur "TRUE".
Configurer Syslog pour la base de données Oracle
- Connectez-vous à l'instance Oracle.
Ouvrez le fichier suivant à l'aide de
vi
:vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
Saisissez les commandes suivantes pour configurer le journal syslog:
*.audit_trail='os' *.audit_syslog_level='local0.info'
Assurez-vous que le daemon syslog de l'hôte Oracle est configuré pour transférer le journal d'audit.
Sur Red Hat Enterprise, ouvrez le fichier
/etc/syslog.conf
suivant à l'aide devi
, puis saisissez la ligne suivante:local0.info @ <bindplane-ip>:514
Enregistrez et quittez le fichier:
:wq
Sous Red Hat Enterprise, saisissez la commande suivante pour actualiser la configuration syslog:
kill -HUP /var/run/syslogd.pid
Connectez-vous à SQLplus et connectez-vous en tant que sysdba pour redémarrer:
sys as sysdba
Arrêtez la base de données à l'aide de la commande suivante:
shutdown immediate
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
etcomp_id
suradditional.fields
. - Mappage de
host_addr
surprincipal.ip
etprincipal.asset.ip
. - Mappage de
host_id
surprincipal.hostname
etprincipal.asset.hostname
. - Mappage de
level
sursecurity_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
surmetadata.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
surmetadata.log_type
.
2024-10-25
Amélioration :
- Si
ACTION
estGRANT
, définissezmetadata.event_type
surUSER_RESOURCE_UPDATE_PERMISSIONS
. - Si
ACTION
estDROP
ouDELETE
, définissezmetadata.event_type
surUSER_RESOURCE_DELETION
. - Si
ACTION
estCREATE
, définissezmetadata.event_type
surUSER_RESOURCE_CREATION
. - Si
ACTION
estALTER
ouINSERT
, définissezmetadata.event_type
surUSER_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 suradditional.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
etCLIENT_TERMINAL
surtarget.resource.attribute.labels
. - Mappage de
ACTION
sursecurity_result.summary
. - Définissez
security_result.description
surSuccess
lorsqueRETURNCODE
est égal à 0 ou queSTATUS
est égal à 0. - Définissez
security_result.description
surFailure
lorsqueRETURNCODE
est égal à 1 ou -1, ou queSTATUS
est égal à 1 ou -1. - Mappage de
principal.ip
et deprincipal.port
à partir deCLIENT_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é surprincipal.hostname
.- Si
returncode
est0
, security_result.action est mappé surALLOW
. Sinon, s'il s'agit de-1
, il est mappé surBLOCK
. ACTION
mappé surmetadata.product_event_type
.DATABASE USER
mappé surprincipal.user.user_display_name
.PRIVILEGE
mappé surprincipal.user.attribute.permissions
.CLIENT USER
mappé surtarget.user.user_display_name
.file_name
mappé surtarget.file.full_path
.event_name
mappé surmetadata.product_event_type
.ACTION_NUMBER
mappé surevent.idm.read_only_udm.additional.fields
.length
mappé surevent.idm.read_only_udm.additional.fields
.DBID
mappé surmetadata.product_log_id
.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.