收集 Oracle DB 日志

支持的语言:

本文档介绍了如何使用 Bindplane 将 Oracle 数据库日志注入到 Google Security Operations。解析器使用 grok 模式和键值对解析从 SYSLOG 消息中提取字段,从而处理多种格式。然后,它会将这些提取的字段映射到统一数据模型 (UDM),通过供应商和产品名称等静态元数据来丰富数据,并根据 ACTIONUSERID 等特定字段值动态设置事件类型。解析器还会处理各种数据清理操作,例如替换字符和转换数据类型。

准备工作

确保您满足以下前提条件:

  • Google SecOps 实例
  • Windows 2016 或更高版本,或者具有 systemd 的 Linux 主机
  • 如果在代理后运行,防火墙端口处于开放状态
  • 对 Oracle 数据库的特权访问权限 (AUDIT_SYSTEM 角色)

获取 Google SecOps 注入身份验证文件

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 收集代理
  3. 下载注入身份验证文件。将该文件安全地保存在将要安装 Bindplane 的系统上。

获取 Google SecOps 客户 ID

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 配置文件
  3. 复制并保存组织详细信息部分中的客户 ID

安装 Bindplane 代理

Windows 安装

  1. 以管理员身份打开命令提示符PowerShell
  2. 运行以下命令:

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

Linux 安装

  1. 打开具有 root 或 sudo 权限的终端。
  2. 运行以下命令:

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

其他安装资源

如需了解其他安装选项,请参阅安装指南

配置 Bindplane 代理以注入 Syslog 并将其发送到 Google SecOps

  1. 访问配置文件:
    • 找到 config.yaml 文件。通常,它位于 Linux 上的 /etc/bindplane-agent/ 目录中或 Windows 上的安装目录中。
    • 使用文本编辑器(例如 nanovi 或记事本)打开该文件。
  2. 按如下方式修改 config.yaml 文件:

    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. 根据基础架构的需要替换端口和 IP 地址。

  4. <customer_id> 替换为实际的客户 ID。

  5. /path/to/ingestion-authentication-file.json 更新为获取 Google SecOps 提取身份验证文件部分中保存身份验证文件的路径。

重启 Bindplane 代理以应用更改

  • 如需在 Linux 中重启 Bindplane 代理,请运行以下命令:

    sudo systemctl restart bindplane-agent
    
  • 如需在 Windows 中重启 Bindplane 代理,您可以使用服务控制台,也可以输入以下命令:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

为 Oracle 数据库启用审核

  1. 使用 SQLplus 连接到 Oracle 数据库。
  2. 使用以下命令关闭数据库:

    shutdown immediate
    
  3. 输入以下命令,停止 Oracle 监听器服务:

    lsnrctl stop
    
  4. 可选:仅在适用情况下,使用以下命令停止 Enterprise Manager:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl stop oms
    
  5. 使用以下命令,通过 uniaud 选项关联 Oracle 数据库:

    cd $ORACLE_HOME/rdbms/lib
    
    make -f ins_rdbms.mk uniaud_on ioracle
    
  6. 使用 SQLplus 连接到 Oracle 数据库。

  7. 使用以下命令重启数据库:

    startup
    
  8. 使用以下命令重启 Oracle 监听器服务:

    lsnrctl start
    
  9. 可选:仅在适用时,使用以下命令重启 Enterprise Manager:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl start oms
    
  10. 验证是否已启用统一审核,使用 SQLplus 连接到 Oracle 数据库,然后输入以下命令:

    select * from v$option where PARAMETER = 'Unified Auditing';
    
  11. 验证该命令是否返回一行,且 VALUE 等于“TRUE”

为 Oracle 数据库配置 Syslog

  1. 登录 Oracle 实例。
  2. 使用 vi 打开以下文件:

    vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
    
  3. 输入以下命令以进行 syslog 配置:

    *.audit_trail='os'
    *.audit_syslog_level='local0.info'
    
  4. 确保 Oracle 主机上的 syslog 守护程序已配置为转发审核日志。

  5. 在 Red Hat Enterprise 上,使用 vi 打开以下文件 /etc/syslog.conf,然后输入以下行:

    local0.info @ <bindplane-ip>:514
    
  6. 保存并退出文件:

    :wq
    
  7. 在 Red Hat Enterprise 上,输入以下命令以重新加载 syslog 配置:

    kill -HUP /var/run/syslogd.pid
    
  8. 连接到 SQLplus 并以 sysdba 身份登录以重新启动:

    sys as sysdba
    
  9. 使用以下命令关闭数据库:

    shutdown immediate
    
  10. 使用以下命令重启数据库:

    startup
    

UDM 映射表

日志字段 UDM 映射 逻辑
ACTION security_result.action_details 原始日志中的 ACTION 值直接映射到此 UDM 字段。应用其他逻辑来根据 ACTION 的值确定 security_result.actionsecurity_result.description(例如,100 映射到 ALLOW 和 Success)。
ACTION_NAME metadata.product_event_type 直接映射。
ACTION_NUMBER additional.fields[action_number].value.string_value 直接映射到键 Source Event。还可与其他字段结合使用,以派生 metadata.event_typemetadata.product_event_type
APPLICATION_CONTEXTS additional.fields[application_contexts_label].value.string_value 直接映射到键 APPLICATION_CONTEXTS
AUDIT_POLICY additional.fields[audit_policy_label].value.string_valueadditional.fields[AUDIT_POLICY_#].value.string_value 如果 AUDIT_POLICY 包含英文逗号,则会拆分为多个标签,键分别为 AUDIT_POLICY_0AUDIT_POLICY_1 等。否则,它会直接映射到键 AUDIT_POLICY
AUDIT_TYPE additional.fields[audit_type_label].value.string_value 直接映射到键 AUDIT_TYPE
AUTHENTICATION_TYPE metadata.event_typeextensions.auth.type 如果 auth_type(从 AUTHENTICATION_TYPE 中提取)不为空且满足其他条件,则用于将 metadata.event_type 派生为 USER_LOGIN。extensions.auth.type 设置为 AUTHTYPE_UNSPECIFIED。
CLIENT_ADDRESS principal.ipprincipal.portnetwork.ip_protocolintermediary[host].user.userid 使用 Grok 模式提取 IP、端口和协议。如果 CLIENT_ADDRESS 字段中存在用户名,则该用户名会映射到 intermediary[host].user.userid
CLIENT_ID target.user.userid 直接映射。
CLIENT_PROGRAM_NAME additional.fields[client_program_name_label].value.string_value 直接映射到键 CLIENT_PROGRAM_NAME
CLIENT_TERMINAL additional.fields[CLIENT_TERMINAL_label].value 直接映射到键 CLIENT_TERMINAL
CLIENT_USER target.user.user_display_name 直接映射。
COMMENT$TEXT additional.fields[comment_text_label].value.string_value 在将“+”替换为“:”后,直接与键 comment_text 相关联。
CURRENT_USER additional.fields[current_user_label].value.string_value 直接映射到键 current_user
CURUSER additional.fields[current_user_label].value.string_value 直接映射到键 current_user
DATABASE_USER principal.user.user_display_name 如果不为空或不为 /,则直接映射。
DBID metadata.product_log_id 移除单引号后直接映射。
DBNAME target.resource.resource_typetarget.resource.resource_subtypetarget.resource.name resource_type 设置为 DATABASE,将 resource_subtype 设置为 Oracle Database,并将 DBNAME 映射到 name
DBPROXY_USERRNAME intermediary[dbproxy].user.userid 直接映射。
DBUSERNAME target.user.user_display_name 直接映射。
ENTRYID target.resource.attribute.labels[entry_id_label].value 直接映射到键 Entry Id
EXTERNAL_USERID additional.fields[external_userid_label].value.string_value 直接映射到键 EXTERNAL_USERID
LENGTH additional.fields[length_label].value.string_value 直接映射到键 length
LOGOFF$DEAD target.resource.attribute.labels[LOGOFFDEAD_label].value 直接映射到键 LOGOFFDEAD
LOGOFF$LREAD target.resource.attribute.labels[LOGOFFLREAD_label].value 直接映射到键 LOGOFFLREAD
LOGOFF$LWRITE target.resource.attribute.labels[LOGOFFLWRITE_label].value 直接映射到键 LOGOFFLWRITE
LOGOFF$PREAD target.resource.attribute.labels[LOGOFFPREAD_label].value 直接映射到键 LOGOFFPREAD
NTIMESTAMP# metadata.event_timestamp 已解析并转换为 RFC 3339 或 ISO8601 格式。
OBJCREATOR target.resource.attribute.labels[obj_creator_label].value 直接映射到键 OBJ Creator
OBJNAME target.resource.attribute.labels[obj_name_label].value 直接映射到键 OBJ Name
OS_USERNAME principal.user.user_display_name 直接映射。
OSUSERID target.user.userid 直接映射。
PDB_GUID principal.resource.product_object_id 直接映射。
PRIV$USED additional.fields[privused_label].value.string_value 直接映射到键 privused
PRIVILEGE principal.user.attribute.permissions.name 直接映射。
RETURN_CODE security_result.summary 直接映射。应用逻辑来推导 security_result.actionsecurity_result.description
RETURNCODE security_result.summary 直接映射。应用逻辑来推导 security_result.actionsecurity_result.description
RLS_INFO additional.fields[rls_info_label].value.string_value 直接映射到键 RLS_INFO
SCHEMA additional.fields[schema_label].value.string_value 直接映射到键 schema
SESSIONCPU target.resource.attribute.labels[SESSIONCPU_label].value 直接映射到键 SESSIONCPU
SESSIONID network.session_id 直接映射。
SESID network.session_id 直接映射。
SQL_TEXT target.process.command_line 直接映射。
SQLTEXT target.process.command_line 直接映射。
STATEMENT target.resource.attribute.labels[statement_label].value 直接映射到键 STATEMENT
STATUS security_result.summary 直接映射。应用逻辑来推导 security_result.actionsecurity_result.description
SYSTEM_PRIVILEGE_USED additional.fields[system_privilege_used_label].value.string_value 直接映射到键 SYSTEM_PRIVILEGE_USED
TARGET_USER additional.fields[target_user_label].value.string_value 直接映射到键 TARGET_USER
TERMINAL additional.fields[CLIENT_TERMINAL_label].value 直接映射到键 CLIENT_TERMINAL
TYPE additional.fields[type_label].value.string_value 直接映射到键 type
USERHOST principal.hostnameprincipal.administrative_domain 使用 Grok 模式提取主机名和网域。
USERID principal.user.userid 直接映射。
device_host_name target.hostname 直接映射。
event_name metadata.product_event_type 转换为大写后直接映射。
file_name target.file.full_path 直接映射。
hostname principal.hostname 直接映射。
length additional.fields[length_label].value.string_value 直接映射到键 length
log_source_name principal.application 直接映射。
message 多项 用于 Grok 解析以提取多个字段。
returncode RETURNCODE 直接映射。
src_ip principal.ip 直接映射。
t_hostname target.hostname 直接映射。
(解析器逻辑) metadata.vendor_name 硬编码为 Oracle
(解析器逻辑) metadata.product_name 硬编码为 Oracle DB
(解析器逻辑) metadata.event_type 根据 ACTIONACTION_NUMBERsource_eventOSUSERIDUSERIDSQLTEXTAUTHENTICATION_TYPEDBUSERNAMEdevice_host_namedatabase_name 的值确定。如果未满足任何特定条件,则默认为 USER_RESOURCE_ACCESS。
(解析器逻辑) metadata.product_event_type 根据 ACTIONACTION_NUMBERsource_eventp_event_typeACTION_NAME 的值确定。
(解析器逻辑) metadata.log_type 硬编码为 ORACLE_DB
(解析器逻辑) extensions.auth.mechanism 在某些条件下,根据 ACTIONACTION_NUMBERsource_eventOSUSERID 设置为 USERNAME_PASSWORD。
(解析器逻辑) extensions.auth.type 在某些条件下,根据 ACTIONACTION_NUMBERAUTHENTICATION_TYPE 设置为 AUTHTYPE_UNSPECIFIED。
(解析器逻辑) security_result.description 派生自 RETURNCODESTATUS
(解析器逻辑) security_result.action 派生自 RETURNCODESTATUS
(解析器逻辑) target.resource.attribute.labels 系统会根据各种日志字段的存在情况和值添加多个标签。
(解析器逻辑) additional.fields 系统会根据各种日志字段的存在情况和值,以键值对的形式添加多个字段。
(解析器逻辑) intermediary 根据 DBPROXY_USERRNAMECLIENT_ADDRESS 的存在情况和值创建并填充。
(解析器逻辑) network.ip_protocol 派生自使用包含文件 parse_ip_protocol.includeCLIENT_ADDRESS 中提取的 protocol

需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。