收集 IBM AS/400 日志

支持的平台:

本文档介绍了如何使用 Bindplane 代理将 IBM AS/400 日志注入到 Google Security Operations 中。

IBM AS/400 是一种企业操作系统,可提供集成式数据库、安全和应用服务。系统通过 QAUDJRN(审核日志)生成安全审核日志,通过 QHST(历史记录日志)生成系统操作日志,通过数据库日志生成应用数据更改日志,并通过退出点日志生成网络访问监控日志。

准备工作

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

  • Google SecOps 实例
  • Windows Server 2016 或更高版本,或者具有 systemd 的 Linux 主机
  • Bindplane 代理与 IBM AS/400 系统之间的网络连接
  • 如果通过代理运行,请确保防火墙端口已根据 Bindplane 代理要求打开
  • IBM AS/400 7.2(带有 PTF 组 19 或更高版本)或 IBM AS/400 7.3(带有 PTF 组 7 或更高版本)(用于生成原生 syslog)
  • 对 QAUDJRN 日志和日志接收器具有 *USE 权限的 IBM AS/400 用户个人资料
  • IBM AS/400 系统上安装的 PASE for i(5770SS1 选项 33)
  • 对 IBM AS/400 命令行 (5250 会话或 SSH) 的访问权限

获取 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"
    

修改配置文件

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

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/ibm_i:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: IBM_AS400
            raw_log_field: body
            ingestion_labels:
                env: production
                source: ibm_i
    
    service:
        pipelines:
            logs/ibm_i_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/ibm_i
    
  2. 替换以下占位符:

    • 接收器配置:

      • listen_address:设置为 0.0.0.0:514 可在 UDP 端口 514 上监听所有接口。对于以非 root 身份运行的 Linux 系统,请使用端口 1514 或更高端口。
    • 导出器配置:

      • creds_file_path:提取身份验证文件的完整路径。请确保将下载的数据注入身份验证文件另存为 ingestion-auth.json,并将其保存在以下某个位置:

        • Linux/etc/bindplane-agent/ingestion-auth.json
        • WindowsC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • customer_id:您在上一步中获得的 Google SecOps 客户 ID

      • endpoint:区域端点网址:

        • 美国malachiteingestion-pa.googleapis.com
        • 欧洲europe-malachiteingestion-pa.googleapis.com
        • 亚洲asia-southeast1-malachiteingestion-pa.googleapis.com
      • log_type:设置为 IBM_AS400

      • ingestion_labels:用于过滤和组织的可选标签

保存配置文件

修改后,保存文件:

  • 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 AS/400 syslog 转发

启用 IBM AS/400 审核

  1. 使用 5250 终端会话或 SSH 登录 IBM AS/400。
  2. 运行以下命令以启用审核:

    CHGSECAUD QAUDCTL(*AUDLVL) QAUDLVL(*AUTFAIL *SECURITY *CREATE *DELETE)
    

创建 syslog 配置文件

  1. 启动 QShell 会话:

    STRQSH
    
  2. 如果 syslog 配置目录不存在,请进行创建:

    mkdir -p /QOpenSys/etc
    
  3. 创建 syslog 配置文件:

    touch /QOpenSys/etc/syslog.conf
    
  4. 使用 edtf 编辑器修改 syslog 配置文件:

    edtf /QOpenSys/etc/syslog.conf
    
  5. 添加以下行,以将所有 syslog 消息转发到 Bindplane 代理:

    *.* @BINDPLANE_AGENT_IP:514
    

    BINDPLANE_AGENT_IP 替换为运行 Bindplane 代理的主机的 IP 地址。

  6. 保存并退出编辑器:

    • F3 即可退出。
    • 在看到系统提示时按 F10 保存。
  7. 退出 QShell:

    exit
    

启动 syslog 守护程序

  1. 提交一个批量作业以启动 syslog 守护程序:

    SBMJOB CMD(STRQSH CMD('/QOpenSys/usr/sbin/syslogd')) JOB(SYSLOGD) JOBQ(QSYSNOMAX)
    
  2. 验证 syslog 守护程序是否正在运行:

    STRQSH
    
    ps -ef | grep syslogd
    

    您应该会看到 /QOpenSys/usr/sbin/syslogd 的进程条目。

  3. 退出 QShell:

    exit
    

创建脚本以将审核日志条目转发到 syslog

  1. 创建一个 shell 脚本,用于提取审核日志条目并将其发送到 syslog:

    STRQSH
    
  2. 创建脚本文件:

    touch /home/syslog_audit.sh
    chmod 755 /home/syslog_audit.sh
    
  3. 修改脚本:

    edtf /home/syslog_audit.sh
    
  4. 将以下内容添加到脚本中:

    #!/QOpenSys/pkgs/bin/bash
    
    # IBM i Audit Journal to Syslog Forwarder
    # Extracts QAUDJRN entries in syslog format and sends to syslog daemon
    
    # Get timestamp from 5 minutes ago
    START_TIME=$(date -u -d '5 minutes ago' '+%Y-%m-%d %H:%M:%S')
    
    # Query audit journal for recent entries in RFC 5424 syslog format
    system "RUNSQL SQL('SELECT syslog_event FROM TABLE(QSYS2.DISPLAY_JOURNAL(''QSYS'',''QAUDJRN'',STARTING_TIMESTAMP => ''$START_TIME'', GENERATE_SYSLOG => ''RFC 5424'')) AS X WHERE syslog_event IS NOT NULL') OUTPUT(*PRINT)" | while read -r line
    do
      if [ ! -z "$line" ]; then
        logger -p local0.info "$line"
      fi
    done
    
  5. 保存并退出编辑器。

  6. 退出 QShell:

    exit
    

安排脚本定期运行

  1. 创建用于调用 shell 脚本的 CL 程序:

    CRTSRCPF FILE(QGPL/QCLSRC) RCDLEN(112)
    
  2. 为 CL 计划添加会员:

    ADDPFM FILE(QGPL/QCLSRC) MBR(SYSLOGAUD)
    
  3. 修改会员:

    STRSEU SRCFILE(QGPL/QCLSRC) SRCMBR(SYSLOGAUD)
    
  4. 添加以下 CL 代码:

    PGM
      STRQSH CMD('/home/syslog_audit.sh')
    ENDPGM
    
  5. 按 F3 保存并退出。

  6. 创建 CL 程序:

    CRTCLPGM PGM(QGPL/SYSLOGAUD) SRCFILE(QGPL/QCLSRC)
    
  7. 创建作业调度条目,以每 5 分钟运行一次程序:

    ADDJOBSCDE JOB(SYSLOGAUD) CMD(CALL PGM(QGPL/SYSLOGAUD)) FRQ(*DAILY) SCDDATE(*NONE) SCDDAY(*ALL) SCDTIME('00:00:00') RELDAYMON(*NONE)
    

将历史记录日志条目转发到 syslog

  1. 为历史记录日志条目创建类似脚本:

    STRQSH
    
  2. 创建脚本文件:

    touch /home/syslog_history.sh
    chmod 755 /home/syslog_history.sh
    
  3. 修改脚本:

    edtf /home/syslog_history.sh
    
  4. 添加以下内容:

    #!/QOpenSys/pkgs/bin/bash
    
    # IBM i History Log to Syslog Forwarder
    
    # Get timestamp from 5 minutes ago
    START_TIME=$(date -u -d '5 minutes ago' '+%Y-%m-%d %H:%M:%S')
    
    # Query history log for recent entries in RFC 3164 syslog format
    system "RUNSQL SQL('SELECT syslog_event FROM TABLE(QSYS2.HISTORY_LOG_INFO(START_TIME => ''$START_TIME'', GENERATE_SYSLOG => ''RFC 3164'')) AS X WHERE syslog_event IS NOT NULL') OUTPUT(*PRINT)" | while read -r line
    do
      if [ ! -z "$line" ]; then
        logger -p local1.info "$line"
      fi
    done
    
  5. 保存并退出编辑器。

  6. 退出 QShell:

    exit
    
  7. 按照与审核日志相同的步骤,为历史记录日志脚本创建类似的 CL 程序和作业调度。

验证 Syslog 转发

  1. 测试记录器命令以验证 syslog 转发:

    STRQSH
    
    logger -p local0.notice "Test message from IBM i"
    
  2. 检查 Bindplane 代理日志,验证是否收到了消息:

    Linux

    sudo journalctl -u observiq-otel-collector -f
    

    Windows

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    
  3. 验证日志是否显示在 Google SecOps 中:

    1. 登录 Google SecOps 控制台。
    2. 依次前往搜索 > UDM 搜索
    3. 搜索 metadata.vendor_name = "IBM" AND metadata.product_name = "AS400"

UDM 映射表

日志字段 UDM 映射 逻辑
device_vendor about.asset.asset_id 串联
device_product about.asset.asset_id 串联
deviceExternalId about.asset.asset_id 串联
filePath about.file.full_path 如果不为空
fileHash about.file.full_path if not hash
about_file_path about.file.full_path 后备
_hash about.file.sha256 如果不为空
fileHash about.file.sha256 如果哈希
fsize about.file.size 已转换为 uinteger
dvchost about.hostname
IP 地址 about.ip 合并的数组,IP 验证
dvcmac about.mac 如果 MAC 有效
deviceTranslatedAddress about.nat_ip
权限 about.resource.attribute.permissions
additional_* additional.fields 合并的标签
关于 关于 已合并
其他 其他 已重命名
元数据 元数据 已重命名
已收到 metadata.collected_timestamp 已使用 yyyy-MM-ddTHH:mm:ss 格式进行转换
job_msg metadata.description 如果不为空
metadata.description metadata.description 后备
metadata_event_type metadata.event_type 如果不为空,则为该值,否则为 GENERIC_EVENT
file_full_path metadata.event_type 如果存在,则设置为 PROCESS_UNCATEGORIZED
event_name metadata.event_type 如果位于 (LogSpyware, LogPredictiveMachineLearning) 中,则设置为 SCAN_UNCATEGORIZED
主机器 ID + 目标机器 ID metadata.event_type 如果两者都存在,则设置为 NETWORK_HTTP
目标机器 ID metadata.event_type 如果存在但没有正文,则设置为 USER_UNCATEGORIZED
主机器 ID metadata.event_type 如果存在,则设置为 STATUS_UPDATE
device_event_class_id metadata.product_event_type 如果两者都存在,则使用“ - ”分隔符进行串联;否则,单独显示
event_name metadata.product_event_type 如果两者都存在,则使用“ - ”分隔符进行串联;否则,单独显示
externalId metadata.product_log_id
device_product metadata.product_name
device_version metadata.product_version
device_vendor metadata.vendor_name 如果不为空,则为“IBM - device_vendor”,否则为“IBM”
app_protocol_output network.application_protocol 如果不为空
deviceDirection network.direction 如果值为 0,则表示入站;如果值为 1,则表示出站
requestMethod network.http.method
requestClientApplication network.http.user_agent
ip_protocol_out network.ip_protocol 如果不为空
英寸 network.received_bytes 已转换为 uinteger
out network.sent_bytes 已转换为 uinteger
观察者 观察者 已重命名
主账号 主账号 已重命名
sntdom principal.administrative_domain
sourceServiceName principal.application 如果不为空
name principal.application 后备
硬件 principal.asset.hardware 已合并
主机名 principal.asset.hostname 如果不为空
hostinfo.name principal.asset.hostname 后备
hostinfo.hostname principal.asset.hostname 后备
主机 principal.asset.ip 已合并
src principal.asset.ip 已合并
principal_ip principal.asset.ip 已合并
hostinfo.ip principal.asset.ip 合并的数组
log.file.path principal.file.full_path
Group_name principal.group.group_display_name 如果不为空
Gruppenavn principal.group.group_display_name 后备
Device_name principal.hostname 如果不为空
Enhetsnavn principal.hostname 后备
principal_ip principal.ip 已合并
src principal.ip 已合并
主机 principal.ip 已合并
hostinfo.ip principal.ip 合并的数组
smac principal.mac 已合并
hostinfo.mac principal.mac 合并的数组
sourceTranslatedAddress principal.nat_ip
hostinfo.os.platform principal.platform 如果不为空
hostinfo.os.name principal.platform 如果匹配 (?i)Window,则为 WINDOWS;如果匹配 (?i)Linux,则为 LINUX
hostinfo.os.kernel principal.platform_patch_level
hostinfo.os.version principal.platform_version
spt principal.port 转换为整数
deviceProcessName principal.process.command_line 如果不为空
sproc principal.process.command_line 后备
主题 principal.process.command_line 后备
Emne principal.process.command_line 后备
路径 principal.process.command_line 后备
File_name principal.process.file.full_path 如果不为空
对象 principal.process.file.full_path 后备
Objekt principal.process.file.full_path 后备
Infected_Resource principal.process.file.full_path 后备
spid principal.process.pid
codename_label principal.resource.attribute.labels 已合并
family_label principal.resource.attribute.labels 已合并
log_offset_label principal.resource.attribute.labels 已合并
version_label principal.resource.attribute.labels 已合并
hostinfo.id principal.resource.product_object_id
principal_role principal.user.attribute.roles
temp_duser principal.user.user_display_name 如果不为空
suser principal.user.user_display_name 后备
CustomerName principal.user.user_display_name 后备
temp_duid principal.user.userid 如果不为空
suid principal.user.userid 后备
user_name principal.user.userid 后备
用户 principal.user.userid 后备
Bruker principal.user.userid 后备
security_result security_result 已合并
act security_result.action 如果状态为“接受”或“已通知”,则为“允许”;如果状态为“拒绝”或“已屏蔽”,则为“禁止”
outcome security_result.action 如果 REDIRECTED_USER_MAY_PROCEED,则为 ALLOW;如果 BLOCKED,则为 BLOCK;如果 Failure,则为 FAIL
categoryOutcome security_result.action 成功时允许;失败时禁止
cs2 security_result.action 如果为“允许”,则为 ALLOW;如果为“拒绝”,则为 BLOCK
act security_result.action_details 如果不为空
Action_Taken security_result.action_details 后备
security_result.category_details
msg_data_2 security_result.description 如果不为空
security_result.description security_result.description 后备
类型 security_result.description 后备
Scan_Type security_result.description 后备
operation_label security_result.detection_fields 已合并
operasjon_label security_result.detection_fields 已合并
permission_label security_result.detection_fields 已合并
tillatelse_label security_result.detection_fields 已合并
infection_channel_label security_result.detection_fields 已合并
spyware_Grayware_Type_label security_result.detection_fields 已合并
threat_probability_label security_result.detection_fields 已合并
mwProfile security_result.rule_name
和程度上减少 security_result.severity 如果为 0-3 或 LOW,则为 LOW;如果为 4-6 或 MEDIUM/INFO/SUBSTANTIAL,则为 MEDIUM;如果为 7-8 或 HIGH/SEVERE,则为 HIGH;如果为 9-10 或 VERY-HIGH/CRITICAL,则为 CRITICAL
appcategory security_result.summary 如果不为空
结果 security_result.summary 后备
reason security_result.summary 后备
间谍软件 security_result.threat_name 如果不为空
Virus_Malware_Name security_result.threat_name 后备
Unknown_Threat security_result.threat_name 后备
oldFilePath src.file.full_path
oldFileSize src.file.size 已转换为 uinteger
old_permissions src.resource.attribute.permissions
目标 目标 已重命名
dntdom target.administrative_domain
destinationServiceName target.application
logcollector_hostname target.asset.hostname
dst target.asset.ip 已合并
dst_ip target.asset.ip 已合并
temp_dhost target.hostname 如果不为空
shost target.hostname if not IP
dst_ip target.ip 已合并
dst target.ip 已合并
IPv6_Address target.ip 已合并
dmac target.mac
destination_translated_address target.nat_ip
destinationTranslatedPort target.nat_port 转换为整数
dpt target.port 转换为整数
dproc target.process.command_line
file_full_path target.process.file.full_path
dpid target.process.pid
resource_Type_label target.resource.attribute.labels 已合并
请求 target.url
target_role target.user.attribute.roles
temp_duser target.user.user_display_name 如果不为空
CustomerName target.user.user_display_name 后备
temp_duid target.user.userid 如果不为空
用户 target.user.userid 后备
Bruker target.user.userid 后备
logcollector_timestamp metadata.collected_timestamp 使用 ISO8601 或 MMM d HH:mm:ss 格式转换
metadata_event_type metadata.event_type 如果不为空,则为该值,否则为 GENERIC_EVENT
event_type metadata.product_event_type 如果不为空
product_event_type metadata.product_event_type 后备
device_vendor metadata.vendor_name 如果不为空,则为“IBM”,否则为“IBM”
device_product metadata.product_name
agent.hostname observer.asset.hostname
agent.type observer.asset_id 串联
agent.id observer.asset_id 串联
agent.version observer.platform_version
sntdom principal.administrative_domain
sourceServiceName principal.application
主机名 principal.asset.hostname
主机 principal.asset.ip 已合并
src principal.asset.ip 已合并
hostinfo.ip principal.asset.ip 合并的数组
log.file.path principal.file.full_path
主机名 principal.hostname
principal_ip principal.ip 已合并
src principal.ip 已合并
主机 principal.ip 已合并
hostinfo.ip principal.ip 合并的数组
smac principal.mac 已合并
hostinfo.mac principal.mac 合并的数组
hostinfo.os.platform principal.platform
hostinfo.os.kernel principal.platform_patch_level
hostinfo.os.version principal.platform_version
spt principal.port 转换为整数
sproc principal.process.command_line
spid principal.process.pid
codename_label principal.resource.attribute.labels 已合并
family_label principal.resource.attribute.labels 已合并
log_offset_label principal.resource.attribute.labels 已合并
version_label principal.resource.attribute.labels 已合并
hostinfo.id principal.resource.product_object_id
suser principal.user.user_display_name
suid principal.user.userid
act security_result.action 如果状态为“接受”或“已通知”,则为“允许”;如果状态为“拒绝”或“已屏蔽”,则为“禁止”
outcome security_result.action 如果 REDIRECTED_USER_MAY_PROCEED,则为 ALLOW;如果 BLOCKED,则为 BLOCK;如果 Failure,则为 FAIL
categoryOutcome security_result.action 成功时允许;失败时禁止
cs2 security_result.action 如果为“允许”,则为 ALLOW;如果为“拒绝”,则为 BLOCK
act security_result.action_details
security_result.category_details
msg_data_2 security_result.description
mwProfile security_result.rule_name
和程度上减少 security_result.severity 0-3 为低;4-6 为中;7-8 为高;9-10 为严重
reason security_result.summary
logcollector_hostname target.asset.hostname
dst target.asset.ip 已合并
temp_dhost target.hostname
dst_ip target.ip 已合并
mac_address target.mac
dpt target.port 转换为整数
dproc target.process.command_line
dpid target.process.pid
temp_duser target.user.user_display_name
temp_duid target.user.userid
target_userid event.idm.read_only_udm.target.user.userid 从变更日志映射
process event.idm.read_only_udm.additional.fields 从变更日志映射
event_info event.idm.read_only_udm.additional.fields 从变更日志映射
log_event event.idm.read_only_udm.additional.fields 从变更日志映射
event_type event.idm.read_only_udm.metadata.product_event_type 从变更日志映射
sev event.idm.read_only_udm.severity 从变更日志映射
access_type event.idm.read_only_udm.additional.fields 从变更日志映射
actual_type event.idm.read_only_udm.additional.fields 从变更日志映射
jrn_seq event.idm.read_only_udm.additional.fields 从变更日志映射
job_name event.idm.read_only_udm.additional.fields 从变更日志映射
user_name event.idm.read_only_udm.principal.user.userid 从变更日志映射
job_number event.idm.read_only_udm.additional.fields 从变更日志映射
eff_user event.idm.read_only_udm.additional.fields 从变更日志映射
logical_partition event.idm.read_only_udm.additional.fields 从变更日志映射
auth_user event.idm.read_only_udm.additional.fields 从变更日志映射
cmd_type event.idm.read_only_udm.additional.fields 从变更日志映射
object event.idm.read_only_udm.additional.fields 从变更日志映射
object_library event.idm.read_only_udm.additional.fields 从变更日志映射
object_type event.idm.read_only_udm.additional.fields 从变更日志映射
ifs_path event.idm.read_only_udm.additional.fields 从变更日志映射
specific_data event.idm.read_only_udm.additional.fields 从变更日志映射
ip_addr event.idm.read_only_udm.principal.ipevent.idm.read_only_udm.principal.asset.ip之间 从变更日志映射
port event.idm.read_only_udm.principal.port 从变更日志映射
action event.idm.read_only_udm.additional.fields 从变更日志映射
val_job event.idm.read_only_udm.additional.fields 从变更日志映射
val_user event.idm.read_only_udm.additional.fields 从变更日志映射
val_jobno event.idm.read_only_udm.additional.fields 从变更日志映射
pgm_name event.idm.read_only_udm.additional.fields 从变更日志映射
pgm_libr event.idm.read_only_udm.additional.fields 从变更日志映射
workstation event.idm.read_only_udm.additional.fields 从变更日志映射
causing_user event.idm.read_only_udm.additional.fields 从变更日志映射
field event.idm.read_only_udm.additional.fields 从变更日志映射
op_violation event.idm.read_only_udm.additional.fields 从变更日志映射

更新日志

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

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