收集 Ivanti Connect Secure (Pulse Secure) 日志

支持:

本文档介绍了如何使用 Bindplane 代理将 Ivanti Connect Secure (Pulse Secure) 日志注入 Google Security Operations。

Ivanti Connect Secure(前身为 Pulse Secure)是一种 SSL VPN 解决方案,可提供对企业应用、资源和网络的安全远程访问。它支持多重身份验证、端点合规性检查,以及针对远程工作者和合作伙伴的精细访问权限政策。

准备工作

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

  • Google SecOps 实例
  • Windows Server 2016 或更高版本,或者具有 systemd 的 Linux 主机
  • 如果通过代理运行,请确保防火墙端口根据 Bindplane 代理要求处于开放状态
  • 对 Ivanti Connect Secure (Pulse Secure) 管理控制台的特权访问权限

获取 Bindplane 代理的 Google SecOps 凭证

如需向 Google SecOps 验证 Bindplane 代理的身份,请选择以下方法之一:

  • 新部署:使用 Chronicle API(选项 1)。
  • 旧版部署:继续使用数据注入身份验证文件(方法 2),直到 Ingestion API 于 2027 年 7 月 20 日停用。
  1. 登录 Google Cloud 控制台,然后选择与您的 Google SecOps 实例关联的 Google Cloud 项目。
  2. 前往 IAM 和管理 > 服务账号。
  3. 点击创建服务账号。
  4. 提供以下配置详细信息:
    • 服务账号名称:输入账号的名称(例如 bindplane-ingest)。
    • 服务账号说明:输入说明(例如 Bindplane agent log ingestion)。
  5. 点击创建并继续。
  6. 在向此服务账号授予对项目的访问权限部分,点击选择角色,然后选择 Chronicle Editor。
  7. 点击继续,然后点击完成。
  8. 点击您创建的服务账号,然后前往密钥标签页。
  9. 依次点击添加密钥 > 创建新密钥。
  10. 选择 JSON,然后点击创建。密钥文件会下载到您的计算机上。
  11. 将密钥文件另存为 Bindplane 收集器目录(在 Linux 上为 /opt/observiq-otel-collector/ingestion-auth.json,在 Windows 上为 C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json)中的 ingestion-auth.json,或更新 config.yaml 中的 creds_file_path 以与您保存密钥文件的路径相匹配。
  12. 前往 IAM 和管理 > 设置,然后复制项目编号。您在配置导出器时需要用到该名称。

方法 2:下载数据注入身份验证文件(旧版)

  1. 登录 Google SecOps 控制台。
  2. 前往 SIEM 设置> 收集代理。
  3. 下载数据注入身份验证文件。
  4. 将文件安全地保存在将安装 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
    

    该服务应显示为 RUNNING。

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 /opt/observiq-otel-collector/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/chronicle_w_labels:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        customer_id: 'YOUR_CUSTOMER_ID'
        endpoint: chronicle.googleapis.com
        log_type: 'PULSE_SECURE_VPN'
        raw_log_field: body
        ingestion_labels:
    
    service:
      pipelines:
        logs/source0__chronicle_w_labels-0:
          receivers:
            - udplog
          exporters:
            - chronicle/chronicle_w_labels
    

配置参数

替换以下占位符:

  • 接收器配置:

    • udplog:使用 udplog 表示 UDP syslog,使用 tcplog 表示 TCP syslog
    • 0.0.0.0:要监听的 IP 地址(0.0.0.0 表示监听所有接口)
    • 514:要监听的端口号(标准 syslog 端口)
  • 导出器配置:

    • creds_file_path:服务账号 JSON 密钥文件的完整路径(选项 1):
      • Linux:/opt/observiq-otel-collector/ingestion-auth.json
      • Windows:C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • YOUR_CUSTOMER_ID:从“获取客户 ID”部分获取的客户 ID
    • location:将 <LOCATION> 替换为 Google SecOps 实例所在的区域(例如 us、europe 或 asia-southeast1)。导出工具会在此值前面加上 chronicle.googleapis.com。如需查看完整列表,请参阅区域级端点。
    • project:将 <PROJECT_NUMBER> 替换为“IAM 和管理”>“设置”中的项目编号。
    • endpoint:保持设置为 chronicle.googleapis.com。
    • log_type:日志类型,与 Chronicle (PULSE_SECURE_VPN) 中显示的完全一致

旧版提取 API

  • 如果您使用选项 2 中的数据注入身份验证文件,请将 exporters 代码块替换为以下内容。将 creds_file_path 设置为提取身份验证文件的路径,如果您的实例位于美国境外,请将 malachiteingestion-pa.googleapis.com 替换为您的区域端点(例如 europe-malachiteingestion-pa.googleapis.com)。

    exporters:
      chronicle/chronicle_w_labels:
        compression: gzip
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        customer_id: 'YOUR_CUSTOMER_ID'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: 'PULSE_SECURE_VPN'
        raw_log_field: body
        ingestion_labels:
    

保存配置文件

  • 修改后,保存文件:
    • Linux:依次按 Ctrl+O、Enter 和 Ctrl+X
    • Windows:依次点击文件 > 保存

重启 Bindplane 代理以应用更改

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

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

      sudo systemctl status observiq-otel-collector
      
    2. 检查日志中的错误:

      sudo journalctl -u observiq-otel-collector -f
      
  • 如需在 Windows 中重启 Bindplane 代理,请选择以下选项之一:

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

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • 服务控制台:

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

        sc query observiq-otel-collector
        
      5. 检查日志中的错误:

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

在 Ivanti Connect Secure (Pulse Secure) 上配置 syslog 转发

  1. 登录 Ivanti Connect Secure(以前称为 Pulse Secure)管理控制台。
  2. 依次前往系统 > 日志/监控。
  3. 点击设置标签。
  4. 在 syslog 服务器配置部分,提供以下详细信息:
    • 服务器名称/IP:输入 Bindplane 代理主机的 IP 地址或 FQDN。
    • Facility(设施):选择 LOCAL0(或您偏好的设施,从 LOCAL0 到 LOCAL7)。
    • 类型:选择 UDP。
    • 过滤条件:选择标准。
    • Source Interface:选择 Global(或可访问 Bindplane 代理的特定接口)。
  5. 点击 Add(添加)。
  6. 点击保存更改。
  7. 在每个本地日志标签页上执行以下操作,为每个日志类别启用 syslog 报告:

    1. 点击事件标签页,选中 syslog 服务器复选框,然后点击保存更改。
    2. 点击用户访问权限标签页,选中 syslog 服务器复选框,然后点击保存更改。
    3. 点击管理员访问权限标签页,选中 syslog 服务器复选框,然后点击保存更改。
  8. 通过检查 Bindplane 代理日志,验证 syslog 消息是否正在发送。

UDM 映射表

日志字段 UDM 映射 逻辑
操作 security_result.action_details 直接从操作字段映射。
应用 principal.application 直接从应用字段映射。
bytes_read network.received_bytes 直接从 bytes_read 字段映射并转换为无符号整数。
bytes_written network.sent_bytes 直接从 bytes_written 字段映射并转换为无符号整数。
client_host principal.hostname、principal.asset.hostname 直接从 client_host 字段映射。
cmd principal.process.command_line 直接从 cmd 字段映射。
connection_status security_result.detection_fields.value.string_value 直接从 connection_status 字段映射。
data_time metadata.event_timestamp.seconds 使用各种时间戳格式(MM-dd-yyyy HH:mm:ss Z、RFC 3339、ISO8601、MMM d HH:mm:ss、MMM d HH:mm:ss)从 data_time 字段解析。
devname principal.hostname、principal.asset.hostname 直接从 devname 字段映射。
dstip target.ip、target.asset.ip 直接从 dstip 字段映射。
dstport target.port 直接从 dstport 字段映射并转换为整数。
目的国家/地区 target.location.country_or_region 如果 dstcountry 字段不为“Reserved”或空,则直接从该字段映射。
时长 network.session_duration.seconds 直接从 Duration 字段映射并转换为整数。
dvc intermediary.hostname 或 intermediary.ip 如果 dvc 字段可以转换为 IP 地址,则会映射到 intermediary.ip。否则,它会映射到 intermediary.hostname。
dvc_hostname intermediary.hostname、principal.hostname、principal.asset.hostname 或 intermediary.ip、principal.ip、principal.asset.ip 如果 dvc_hostname 字段可以转换为 IP 地址,则会映射到相应的 IP 字段。否则,它会映射到相应的主机名字段。
event_type metadata.product_event_type 直接从 event_type 字段映射。
failure_reason security_result.description 直接从 failure_reason 字段映射。如果消息包含“because host”,则文本“host”会附加到失败原因的前面。
has_principal event.idm.read_only_udm.principal(存在) 如果填充了任何主体字段,则设置为“true”,否则设置为“false”。由解析器逻辑派生。
has_target event.idm.read_only_udm.target(存在) 如果填充了任何目标字段,则设置为“true”,否则设置为“false”。由解析器逻辑派生。
has_target_user event.idm.read_only_udm.target.user.userid(存在) 如果 target.user.userid 已填充,则设置为“true”,否则设置为“false”。由解析器逻辑派生。
host_ip principal.ip、principal.asset.ip 直接从 host_ip 字段映射。
host_mac principal.mac 直接从 host_mac 字段映射,将连字符替换为冒号。
http_method network.http.method 直接从 http_method 字段映射。
http_response network.http.response_code 直接从 http_response 字段映射并转换为整数。
info_desc about.labels.value 直接从 info_desc 字段映射。
ip_new target.ip、target.asset.ip 直接从 ip_new 字段映射。
level security_result.severity、security_result.severity_details security_result.severity 派生自 level 字段(“error”/“warning”-> HIGH,“notice”-> MEDIUM,“information”/“info”-> LOW)。级别的原始值也会映射到 security_result.severity_details。
logid metadata.product_log_id 直接从 logid 字段映射。
locip principal.ip、principal.asset.ip 直接从 locip 字段映射。
消息 metadata.description 用于使用 grok 和 kv 过滤器提取各种字段。如果消息包含“EventID”,则将其作为 Windows 事件日志进行处理。
message_info metadata.description 如果未在更具体的 grok 模式中使用,则直接映射到 metadata.description。
msg metadata.product_event_type、metadata.description 如果 msg 字段存在,则系统会提取商品类型并将其映射到 metadata.product_event_type,并将剩余消息映射到 metadata.description。
msg_hostname principal.hostname、principal.asset.hostname 直接从 msg_hostname 字段映射。
msg_ip principal.ip、principal.asset.ip 直接从 msg_ip 字段映射。
msg_user_agent network.http.user_agent, network.http.parsed_user_agent, metadata.product_version 用户代理字符串会映射到 network.http.user_agent,解析后的用户代理会映射到 network.http.parsed_user_agent,产品版本(如果存在)会映射到 metadata.product_version。
network_duration network.session_duration.seconds 直接从 network_duration 字段映射并转换为整数。
policyid security_result.rule_id 直接从 policyid 字段映射。
policyname security_result.rule_name 直接从 policyname 字段映射。
policytype security_result.rule_type 直接从 policytype 字段映射。
priority_code about.labels.value 直接从 priority_code 字段映射,还用于派生“严重程度”键的 about.labels.value(请参阅逻辑)。
prod_name metadata.product_name 直接从 prod_name 字段映射。
product_type metadata.product_event_type 直接从 product_type 字段映射。
product_version metadata.product_version 直接从 product_version 字段映射。
proto network.ip_protocol 使用查找功能转换为 IP 协议名称后,映射到 network.ip_protocol。
pwd principal.process.file.full_path 直接从 pwd 字段映射。
大区 principal.group.attribute.labels.value 直接从 realm 字段映射。
rcvdbyte network.received_bytes 直接从 rcvdbyte 字段映射并转换为无符号整数。
remip target.ip 直接从 remip 字段映射。
资源名称 target.resource.name 在移除开头/结尾处的空格和连字符后,直接从 resource_name 字段映射。
resource_status security_result.description 直接从 resource_status 字段映射。
resource_user_group principal.user.group_identifiers 直接从 resource_user_group 字段映射。
resource_user_name principal.user.userid 直接从 resource_user_name 字段映射。
角色 principal.user.group_identifiers 直接从 roles 字段映射。
sentbyte network.sent_bytes 直接从 sentbyte 字段映射并转换为无符号整数。
session_id network.session_id 直接从 session_id 字段映射。
sessionid network.session_id 直接从 sessionid 字段映射。
srcip principal.ip、principal.asset.ip 直接从 srcip 字段映射。
srcport principal.port 直接从 srcport 字段映射并转换为整数。
srccountry principal.location.country_or_region 如果 srccountry 字段不为“Reserved”或空,则直接从该字段映射。
subtype metadata.product_event_type 与 type 结合使用,以形成 metadata.product_event_type。
target_file target.file.full_path 直接从 target_file 字段映射。
target_host target.hostname、target.asset.hostname 直接从 target_host 字段映射。
target_ip target.ip、target.asset.ip 直接从 target_ip 字段映射。
target_port target.port 直接从 target_port 字段映射并转换为整数。
target_url target.url 直接从 target_url 字段映射。
时间 metadata.event_timestamp.seconds 使用“yyyy-MM-dd HH:mm:ss”格式从时间字段解析。
类型 metadata.product_event_type 与子类型结合使用,以形成 metadata.product_event_type。
u_event_source_ip principal.ip、principal.asset.ip 或 target.ip 如果存在 target_ip 或 target_host,则 u_event_source_ip 会映射到 principal.ip 和 principal.asset.ip。否则,如果 target_ip、target_host 和 target_url 均为空,则 u_event_source_ip 会映射到 target.ip。
u_observer_ip observer.ip 直接从 u_observer_ip 字段映射。
u_prin_ip principal.ip、principal.asset.ip 直接从 u_prin_ip 字段映射。
用户 target.user.userid 直接从用户字段映射。
user_agent network.http.user_agent、network.http.parsed_user_agent 用户代理字符串会映射到 network.http.user_agent,而解析后的用户代理会映射到 network.http.parsed_user_agent。
user_group_identifier target.user.group_identifiers 或 principal.user.group_identifiers 在大多数情况下,映射到 target.user.group_identifiers。在 IP 变更 (USER_UNCATEGORIZED) 和领域限制事件中映射到 principal.user.group_identifiers。
user_ip principal.ip、principal.asset.ip 直接从 user_ip 字段映射。如果为空,但 u_event_source_ip 不为空,则采用 u_event_source_ip 的值。
用户名 principal.user.userid 或 target.user.userid 在大多数情况下,映射到 principal.user.userid。在某些特定场景(例如,当 detect_user_logout_failed 为 false 且 detect_policy_change_failed 为 false 时)中,映射到 target.user.userid。
username_removed target.user.userid 直接从 username_removed 字段映射。
vd principal.administrative_domain 直接从 vd 字段映射。
client_ip event.idm.read_only_udm.principal.ip 从更新日志映射
client_ip event.idm.read_only_udm.principal.asset.ip 从更新日志映射
req_host event.idm.read_only_udm.target.hostname 从更新日志映射
req_host event.idm.read_only_udm.target.asset.hostname 从更新日志映射
target_url event.idm.read_only_udm.target.url 从更新日志映射
http_method event.idm.read_only_udm.network.http.method 从更新日志映射
referrer_url event.idm.read_only_udm.network.http.referral_url 从更新日志映射
sr_action event.idm.read_only_udm.security_result.action 从更新日志映射
http_version event.idm.read_only_udm.network.application_protocol_version 从更新日志映射
server_name event.idm.read_only_udm.intermediary.hostname 从更新日志映射
server_name event.idm.read_only_udm.intermediary.asset.hostname 从更新日志映射
BLOCK security_result.action 从更新日志映射
Pulse Secure VPN metadatda.product_name 从更新日志映射
observer_hostname observer.hostname 从更新日志映射
priority_code", "Syslog_version", and "info_desc about.labels 从更新日志映射

更新日志

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

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