收集 IBM 大型主机存储日志

支持的平台:

本文档介绍了如何使用 Bindplane 将 IBM Mainframe Storage 日志收集到 Google Security Operations。

IBM 大型机存储包括 IBM DS8000 系列(包括 DS8900F 和 DS8880)和 IBM FlashSystem 系列(包括 FlashSystem 5000、5200、5300、7200、7300、9200 和 9500)。这些企业存储系统可为大型机和开放式系统环境提供高性能块存储,并内置了 syslog 转发功能,可用于转发审核日志、系统事件、身份验证事件和操作消息。

准备工作

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

  • Google SecOps 实例
  • Windows Server 2016 或更高版本,或者具有 systemd 的 Linux 主机
  • Bindplane 代理与 IBM 存储系统管理 IP 地址之间的网络连接
  • 如果在代理后面运行,请确保防火墙端口已根据 Bindplane 代理要求打开
  • 对 IBM DS8000 存储管理 GUI 或 IBM FlashSystem 管理 GUI 的管理员级访问权限
  • 对于 IBM FlashSystem,对 CLI 的 SSH 访问权限(可选,用于基于 CLI 的配置)

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

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

获取 Google SecOps 客户 ID

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

安装 Bindplane 代理

按照以下说明在 Windows 或 Linux 操作系统上安装 Bindplane 代理。

Windows 安装

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

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. 等待安装完成。

  4. 运行以下命令,验证安装是否成功:

    sc query observiq-otel-collector
    

该服务应显示为 正在运行

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
    
  3. 等待安装完成。

  4. 运行以下命令,验证安装是否成功:

    sudo systemctl status observiq-otel-collector
    

    该服务应显示为有效(正在运行)

其他安装资源

如需了解其他安装选项和问题排查信息,请参阅 Bindplane 代理安装指南

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

找到配置文件

  • Linux

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

修改配置文件

  • config.yaml 的全部内容替换为以下配置:

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/ibm_storage:
            compression: gzip
            creds_file_path: '<CREDS_FILE_PATH>'
            customer_id: '<CUSTOMER_ID>'
            endpoint: <REGION_ENDPOINT>
            log_type: IBM_MAINFRAME_STORAGE
            raw_log_field: body
            ingestion_labels:
                log_source: ibm_storage
    
    service:
        pipelines:
            logs/ibm_storage_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/ibm_storage
    

配置参数

替换以下占位符。

导出器配置

  • <CREDS_FILE_PATH>:提取身份验证文件的完整路径: - Linux/etc/bindplane-agent/ingestion-auth.json - WindowsC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
  • <CUSTOMER_ID>:从 Google SecOps 控制台复制的客户 ID
  • <REGION_ENDPOINT>:区域端点网址: - 美国malachiteingestion-pa.googleapis.com - 欧洲europe-malachiteingestion-pa.googleapis.com - 亚洲asia-southeast1-malachiteingestion-pa.googleapis.com - 如需查看完整列表,请参阅区域端点

  • 配置示例(通过 UDP syslog 的 IBM FlashSystem)

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/ibm_storage:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: 'a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: IBM_MAINFRAME_STORAGE
            raw_log_field: body
            ingestion_labels:
                log_source: ibm_storage
    
    service:
        pipelines:
            logs/ibm_storage_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/ibm_storage
    
  • 配置示例(通过 TCP syslog 的 IBM DS8000)

    receivers:
        tcplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/ibm_storage:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: 'a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: IBM_MAINFRAME_STORAGE
            raw_log_field: body
            ingestion_labels:
                log_source: ibm_ds8000
    
    service:
        pipelines:
            logs/ibm_storage_to_chronicle:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/ibm_storage
    

保存配置文件

修改后,保存文件:

  • Linux:依次按 Ctrl+OEnterCtrl+X
  • Windows:依次点击文件 > 保存

重启 Bindplane 代理以应用更改

如需在 Linux 中重启 Bindplane 代理,请执行以下操作:

  1. 运行以下命令:

    sudo systemctl restart observiq-otel-collector
    
  2. 验证服务是否正在运行:

    sudo systemctl status observiq-otel-collector
    
  3. 检查日志是否存在错误:

    sudo journalctl -u observiq-otel-collector -f
    

如需在 Windows 中重启 Bindplane 代理,请执行以下操作:

  1. 请从下列选项中选择一项:

    • 以管理员身份运行命令提示符或 PowerShell:

      net stop observiq-otel-collector && net start observiq-otel-collector

    • 服务控制台:

      1. Win+R,输入 services.msc,然后按 Enter 键。
      2. 找到 observIQ OpenTelemetry 收集器
      3. 右键点击并选择重新启动
  2. 验证服务是否正在运行:

    sc query observiq-otel-collector

  3. 检查日志是否存在错误:

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"

配置 IBM Mainframe Storage syslog 转发

在特定的 IBM 存储系统上配置 syslog 转发。请按照适用于您产品系列的说明操作。

选项 A:在 IBM DS8000 系列(DS8900F、DS8880)上配置 syslog

IBM DS8000 存储管理 GUI 支持将审核日志、GUI 事件信息、登录/退出事件和命令审核轨迹转发到远程 Syslog 服务器。DS8000 最多支持 8 个 syslog 目标服务器。默认情况下,DS8000 syslog 使用端口 514 上的 TCP 协议。

  1. 使用具有管理员角色的账号登录 DS8000 存储管理 GUI
  2. 依次前往设置 > 通知
  3. Syslog 页面上,点击添加 Syslog 服务器
  4. 添加 Syslog 服务器窗口中,提供以下配置详细信息:
    • IP 地址:输入 Bindplane 代理主机(例如 192.168.1.100)的 IP 地址。
    • 端口:输入 514
  5. 点击确定

选项 B:在 IBM FlashSystem(5000、5200、5300、7200、7300、9200、9500)上配置 syslog

基于 IBM Storage Virtualize 的 IBM FlashSystem 系统支持通过管理 GUI 和 CLI 进行 syslog 转发。系统最多支持 6 个 syslog 服务器,并且可以使用 UDP、TCP 或 TLS 协议传输消息。

使用管理 GUI

  1. 登录 IBM FlashSystem 管理 GUI
  2. 依次前往设置 > 通知 > Syslog
  3. 点击添加 Syslog 服务器,打开添加 Syslog 服务器窗口。
  4. 选择协议:
    • UDP:减少系统和网络开销。默认端口为 514
    • TCP:提供可靠的传送。默认端口为 6514
    • TLS:使用 TLS 发送加密的 syslog 消息。
  5. 输入 Bindplane 代理主机和端口号的 IP 地址。
  6. 点击 Add(添加)。

使用 CLI (SSH)

  1. 使用管理员账号通过 SSH 连接到 IBM FlashSystem 系统。
  2. 运行以下命令以创建启用了所有日志类型的 syslog 服务器:

    mksyslogserver -name chronicle -ip <BINDPLANE_IP> -protocol udp -port 514 -facility 4 -error on -warning on -info on -audit on -login on
    

    <BINDPLANE_IP> 替换为 Bindplane 代理主机 IP 地址。

  3. 运行以下命令,验证 syslog 服务器是否已创建:

    lssyslogserver
    
  4. 输出会显示已配置的 syslog 服务器及其 ID、名称、IP 地址、端口、协议和通知设置。

常见配置的 CLI 示例

  • 创建具有以下功能的 Syslog 服务器:使用 UDP 协议、端口 514、扩展格式、审核和身份验证日志记录:

    mksyslogserver -name chronicle -ip 192.168.1.100 -facility 4 -protocol udp -port 514 -error on -warning on -info on -audit on -login on
    
  • 创建使用 TCP 端口 6514 的 Syslog 服务器:

    mksyslogserver -name chronicle -ip 192.168.1.100 -facility 4 -protocol tcp -port 6514 -error on -warning on -info on -audit on -login on
    
  • 修改现有 syslog 服务器以启用审核日志记录:

    chsyslogserver -audit on <syslog_server_id>
    
  • 移除 syslog 服务器:

    rmsyslogserver <syslog_server_id>
    

FlashSystem syslog 通知类型

下表介绍了 IBM FlashSystem 上可用的 syslog 通知类型:

通知类型 CLI 参数 默认 说明
错误 -error on|off 开启 系统存在严重问题
警告 -warning on|off 开启 问题或意外情况
信息 -info on|off 开启 预期操作已完成
审核日志 -audit on|off 关闭 CLI 或管理 GUI 操作
身份验证日志 -login on|off 关闭 成功和失败的身份验证尝试

UDM 映射表

日志字段 UDM 映射 逻辑
device_vendor about.asset.asset_id 由 device_vendor、device_product 和 deviceExternalId 连接而成,格式为“%{device_vendor}.%{device_product}:%{deviceExternalId}”
device_product about.asset.asset_id
deviceExternalId about.asset.asset_id
IPv6_Address about.ip 直接复制值
dvcmac about.mac 如果 dvcmac 中的 MAC 有效,则为 dvcmac 中的值;否则,如果已提取,则为 mac_address 中的值
mac_address about.mac
fname about.file.full_path 如果不是“N/A”,则直接复制值
fileHash about.file.full_path 如果不是哈希,则直接复制值
fileHash about.file.sha256 如果匹配哈希模式,则直接复制值
_hash about.file.sha256 直接复制值
fsize about.file.size 已转换为 uinteger
File_name about.file.full_path 如果 File_name 不为空,则使用 File_name 中的值;否则,如果 Object 不为空,则使用 Object 中的值;否则,如果 Objekt 不为空,则使用 Objekt 中的值;否则,使用 Infected_Resource 中的值
对象 about.file.full_path
Objekt about.file.full_path
Infected_Resource about.file.full_path
关于 关于 合并自“关于”页面
additional_cs1 additional.fields 从各种 additional_* 字段(例如 additional_cs1、additional_cs2 等)合并而来。
additional_cs2 additional.fields
cs1 additional.fields 来自 cs1Label 的键,来自 cs1 的值
cs1Label additional.fields
cs2 additional.fields 来自 cs2Label 的键,来自 cs2 的值
cs2Label additional.fields
cs3 additional.fields 来自 cs3Label 的键,来自 cs3 的值(如果不为空)
cs3Label additional.fields
cs4 additional.fields 来自 cs4Label 的键,来自 gsub 后的 cs4 的值
cs4Label additional.fields
cs5 additional.fields 如果不是“NA”,则键来自 cs5Label,值来自 cs5
cs5Label additional.fields
cs6 additional.fields 来自 cs6Label 的键,来自 cs6 的值(如果不为空)
cs6Label additional.fields
cs7 additional.fields 来自 cs7Label 的键,来自 cs7 的值(如果不为空)
cs7Label additional.fields
flexString1 additional.fields 键来自 flexString1Label,值来自 flexString1
flexString1Label additional.fields
cn1 additional.fields 键来自 cn1Label,值来自 cn1
cn1Label additional.fields
cn2 additional.fields 键来自 cn2Label,值来自 cn2
cn2Label additional.fields
cn3 additional.fields 来自 cn3Label 的键,来自 cn3 的值(如果不为空)
cn3Label additional.fields
cfp1 additional.fields 键来自 cfp1Label,值来自 cfp1
cfp1Label additional.fields
cfp2 additional.fields 键来自 cfp2Label,值来自 cfp2
cfp2Label additional.fields
cfp3 additional.fields 键来自 cfp3Label,值来自 cfp3
cfp3Label additional.fields
cfp4 additional.fields 来自 cfp4Label 的键,来自 cfp4 的值
cfp4Label additional.fields
eventId additional.fields 键“eventId”,值来自 eventId
devicePayloadId additional.fields 键“devicePayloadId”,来自 devicePayloadId 的值
fname additional.fields 键“fname”,如果 fname 不是“N/A”,则值为 fname
cs3Label additional.fields 键“cs3Label”,如果 cs3 为空,则使用 cs3Label 中的值
cs4Label additional.fields 键“cs4Label”,如果 cs4 为空,则使用 cs4Label 中的值
cs5 additional.fields 键“cs5 Label”,如果 cs5Label 为空,则取自 cs5 的值
principal_asset_hostname additional.fields 键“asset_host_name”,如果与 principal_asset_hostname 不同,则取自该值
target_asset_hostname additional.fields 键“device_host_name”,如果不同,则为 target_asset_hostname 中的值
ssh_key additional.fields 键“ssh_key”,如果不是哈希值,则为 ssh_key 中的值
评论 additional.fields 键“Comment”,来自 try_message 的值
操作名称 additional.fields 键“操作名称”,值来自 action_name
错误代码 additional.fields 键“错误代码”,值来自 error_code
rsyslog 模块 additional.fields 键“rsyslog Module”,值来自模块或 module_name
更多信息 additional.fields 键“更多信息”,值来自 try_message
操作类型 additional.fields 键“Action Type”,值来自 action_type
已收到 metadata.collected_timestamp 使用日期匹配功能从 Received 或 Mottatt 中解析
Mottatt metadata.collected_timestamp
rt metadata.event_timestamp 通过日期匹配(带时区)从 rt 解析
file_full_path metadata.event_type 如果 file_full_path 不为空,则设置为“PROCESS_UNCATEGORIZED”;如果 event_name 位于特定值中,则设置为“SCAN_UNCATEGORIZED”;如果 duser 不为空,则设置为“USER_UNCATEGORIZED”;如果 principal_hostname_found 和 target_ip_found 为 true,则设置为“NETWORK_CONNECTION”;如果 principal_hostname_found 或 src 不为空,则设置为“STATUS_UPDATE”;否则设置为“GENERIC_EVENT”
event_name metadata.event_type
duser metadata.event_type
principal_hostname_found metadata.event_type
device_product metadata.product_name 直接复制值
device_vendor metadata.vendor_name 直接复制值
device_version metadata.product_version 直接复制值
externalId metadata.product_log_id 直接复制值
event_name metadata.product_event_type 如果两者都存在,则串联为“[%{device_event_class_id}] - %{event_name}”,否则为 device_event_class_id 或 event_name
device_event_class_id metadata.product_event_type
app_protocol_src network.application_protocol 根据 app_protocol_src 匹配预定义的值(例如“22”到“SSH”、“25”到“SMTP”等)进行设置。
deviceDirection network.direction 如果 deviceDirection 为“0”,则设置为“INBOUND”;如果为“1”,则设置为“OUTBOUND”
英寸 network.received_bytes 如果大于 0,则转换为 uinteger
out network.sent_bytes 如果大于 0,则转换为 uinteger
proto network.ip_protocol 根据 protocol_number_src 匹配的数字进行设置,例如 1 对应“ICMP”,6 对应“TCP”,等等。
destinationTranslatedPort network.target.nat_port 如果不是 0,则转换为整数
sourceTranslatedPort network.principal.nat_port 如果不是 0,则转换为整数
dpt network.target.port 如果不是 0 且有效,则转换为整数
spt network.principal.port 如果不是 0 且不是“{srcPort}”,则转换为整数
请求 network.target.url 直接复制值
requestMethod network.http.method 大写
requestClientApplication network.http.user_agent 直接复制值
principal_hostname principal.asset.hostname 如果 principal_hostname 中的值不为空且与 principal_asset_hostname 不同,则使用该值;否则,设置为 principal_hostname
principal_asset_hostname principal.asset.hostname
Device_name principal.hostname 如果 Device_name 不为空,则为 Device_name 中的值,否则为 Enhetsnavn
Enhetsnavn principal.hostname
shost principal.hostname 如果不是 IP,则直接复制值
shost principal.ip 如果与 IP 模式匹配,则提取为 IP
sourceTranslatedAddress principal.nat_ip 如果以数字开头,则直接复制值
smac principal.mac 在 gsub 后提取为 MAC
spid principal.process.pid 直接复制值
sproc principal.process.command_line 直接复制值
suser principal.user.user_display_name 如果值不以“{”开头,则直接复制
suid principal.user.userid 直接复制值
spriv principal.user.attribute.roles.name 直接复制值
sntdom principal.administrative_domain 直接复制值
sourceServiceName principal.application 直接复制值
Group_name principal.group.group_display_name 如果 Group_name 不为空,则使用 Group_name 中的值,否则使用 Gruppenavn
Gruppenavn principal.group.group_display_name
操作 principal.user.user_authentication_status 如果操作在接受的值范围内,则设置为“ACTIVE”;如果断开连接,则设置为“NO_ACTIVE_CREDENTIALS”;如果已断开连接,则设置为“SUSPENDED”
act security_result.action 如果操作在允许条件或结果匹配的情况下进行,则设置为“ALLOW”;如果操作被拒绝或阻止,则设置为“BLOCK”;如果结果失败,则设置为“FAIL”
outcome security_result.action
act security_result.action_details 直接复制值
Action_Taken security_result.action_details 直接复制值
categoryOutcome security_result.category_details 直接复制值
和程度上减少 security_result.severity 如果值为 [0,1,2,3,"LOW"],则设置为“LOW”;如果值为 [4,5,6,"MEDIUM","SUBSTANTIAL","INFO"],则设置为“MEDIUM”;如果值为 [7,8,"HIGH","SEVERE"],则设置为“HIGH”;如果值为 [9,10,"VERY-HIGH","CRITICAL"],则设置为“CRITICAL”
间谍软件 security_result.threat_name 如果间谍软件的值不为空,则为该值;否则为 Virus_Malware_Name;否则为 Unknown_Threat
Virus_Malware_Name security_result.threat_name
Unknown_Threat security_result.threat_name
类型 security_result.description 如果 Type 不为空,则为 Type 中的值;否则为 Scan_Type
Scan_Type security_result.description
msg_data_2 security_result.description 如果 msg_data_2 不为空,则为 msg_data_2 中的值,否则为 msg
msg security_result.description
reason security_result.summary 如果值不为空或不包含空格,则直接复制该值
appcategory security_result.summary 直接复制值
结果 security_result.summary 直接复制值
mwProfile security_result.rule_name 直接复制值
操作 security_result.detection_fields 键“Operation”,值来自 Operation 或 Operasjon
Operasjon security_result.detection_fields
权限 security_result.detection_fields 键“Permission”,值来自 Permission 或 Tillatelse
Tillatelse security_result.detection_fields
Infection_Channel security_result.detection_fields 键“Infection Channel”,值来自 Infection_Channel
Spyware_Grayware_Type security_result.detection_fields 键“Spyware/Grayware_Type”,值来自 Spyware_Grayware_Type
Threat_Probability security_result.detection_fields 键“Threat_Probability”,值来自 Threat_Probability
Resource_Type security_result.detection_fields 键“Resource_Type”,值来自 Resource_Type
security_result security_result 从 security_result 合并
target_hostname target.asset.hostname 如果 target_hostname 中的值不为空且与 target_asset_hostname 不同,则使用 target_hostname 中的值;否则,设置为 target_hostname
target_asset_hostname target.asset.hostname
temp_dhost target.hostname 如果不是 IP,则直接复制值
temp_dhost_ip target.hostname 如果已提取 IP,则设置为空
temp_dhost_ip target.ip 如果已提取,则直接复制值
temp_dhost_ip target.ip 来自 temp_dhost_ip 或 IPv6_Address 的值
IPv6_Address target.ip
temp_dhost_ip target.asset.ip 如果已提取,则直接复制值
destinationTranslatedAddress target.nat_ip 提取为 IP
dmac target.mac 在 gsub 后提取为 MAC
dpid target.process.pid 直接复制值
dproc target.process.command_line 直接复制值
temp_duser target.user.user_display_name 直接复制值
temp_duid target.user.userid 使用 grok 提取,值已复制
用户 target.user.userid 如果 User 中的值不为空,则返回该值,否则返回 Bruker
Bruker target.user.userid
CustomerName target.user.user_display_name 直接在 gsub 之后复制的值
dpriv target.user.attribute.roles.name 直接复制值
dntdom target.administrative_domain 直接复制值
destinationServiceName target.application 直接复制值
File_name target.process.file.full_path 如果 File_name 不为空,则使用 File_name 中的值;否则,如果 Object 不为空,则使用 Object 中的值;否则,如果 Objekt 不为空,则使用 Objekt 中的值;否则,使用 Infected_Resource 中的值
对象 target.process.file.full_path
Objekt target.process.file.full_path
Infected_Resource target.process.file.full_path
oldFileSize target.src.file.size 如果不是 0,则转换为无符号整数
oldFilePath target.src.file.full_path 直接复制值
oldFilePermission target.src.resource.attribute.permissions.name 直接复制值
filePermission target.resource.attribute.permissions.name 直接复制值
resource_Type_label target.resource.attribute.labels 与键“Resource_Type”合并,值来自 Resource_Type
metadata.vendor_name metadata.vendor_name 设置为“IBM”
metadata.product_name metadata.product_name 设置为“大型机存储空间”
cs3Label", and "cs4Label additional.fields 从变更日志映射

更新日志

查看相应解析器的更改日志

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