收集 Synology 日志

支持的平台:

概览

此解析器使用 Grok 模式从 Synology SYSLOG 消息中提取字段,并将其映射到 UDM。它可以处理各种日志格式,识别用户登录和资源访问,并根据关键字对事件进行分类,还可以使用供应商和产品信息丰富数据。

准备工作

  • 确保您拥有 Google SecOps 实例。
  • 确保您拥有对 Synology DSM 的超级用户访问权限。

在 Google SecOps 中配置 Feed 以注入 Synology 日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击新增
  3. Feed 名称字段中,输入 Feed 的名称(例如 Synology 日志)。
  4. 选择 Webhook 作为来源类型
  5. 选择 Synology 作为日志类型
  6. 点击下一步
  7. 可选:为以下输入参数指定值:
    • 分隔符:用于分隔日志行(例如 \n)的分隔符。
    • 资源命名空间资源命名空间
    • 提取标签:应用于此 Feed 中的事件的标签。
  8. 点击下一步
  9. 最终确定界面中查看 Feed 配置,然后点击提交
  10. 点击生成 Secret 密钥,生成用于对此 Feed 进行身份验证的 Secret 密钥。
  11. 复制并存储密钥。您将无法再查看此密钥。如有必要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥过时。
  12. 详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
  13. 点击完成

为该网站钩子 Feed 创建 API 密钥

  1. 依次前往 Google Cloud 控制台 > 凭据

    转到“凭据”页面

  2. 点击创建凭据,然后选择 API 密钥

  3. 限制 API 密钥对 Google Security Operations API 的访问权限。

指定端点网址

  1. 在客户端应用中,指定 webhook Feed 中提供的 HTTPS 端点网址。
  2. 通过在自定义标头中指定 API 密钥和密钥(格式如下)来启用身份验证:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    建议:将 API 密钥作为标头指定,而不是在网址中指定。

  3. 如果您的 webhook 客户端不支持自定义标头,您可以使用以下格式的查询参数指定 API 密钥和密钥:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    替换以下内容:

    • ENDPOINT_URL:Feed 端点网址。
    • API_KEY:用于对 Google Security Operations 进行身份验证的 API 密钥。
    • SECRET:您为对 Feed 进行身份验证而生成的密钥。

在 Synology 中为 Google SecOps 创建 Webhook

  1. 在 Synology NAS 上登录 DiskStation Manager (DSM)。
  2. 依次前往控制面板 > 通知 > Webhook
  3. 点击添加
  4. 为以下参数指定值:

    • 提供方:选择自定义
    • 规则:选择您要在网络钩子中发送的消息类型。

    • 点击下一步

    • 提供商名称:为该 webhook 指定一个独特的名称(例如 Google SecOps)。

    • 主题:将作为通知消息的前缀添加。

    • Webhook 网址:输入 ENDPOINT_网址

    • 选择以英语发送通知消息

    • 点击下一步

    • HTTP 方法:选择 POST

    • 添加标头 X-Webhook-Access-Key,并为其指定 SECRET 值。

    • 添加标头 X-goog-api-key,并设置 API_KEY 值。

    • 点击应用

  5. 点击应用以保存该 webhook。

UDM 映射表

日志字段 UDM 映射 逻辑
app target.application 由 grok 过滤器提取的 app 字段的值会分配给 target.application
desc metadata.description 由 grok 过滤器提取的 desc 字段的值会分配给 metadata.description
desc target.file.names 如果 desc 字段包含“Closed)”,系统会提取括号内的文件路径并将其分配给 target.file.names。如果 desc 字段包含“访问了共享文件夹”,系统会提取括号内的文件夹路径并将其分配给 target.file.names
host principal.hostname grok 过滤器从 host_and_ip 字段中提取的 host 字段的值会分配给 principal.hostname
host_and_ip principal.ip 系统会解析 host_and_ip 字段。如果找到 IP 地址 (ip1),系统会将其分配给 principal.ip。如果找到第二个 IP 地址 (ip2),系统也会将其添加到 principal.ip
intermediary_host intermediary.hostname 由 grok 过滤器提取的 intermediary_host 字段的值会分配给 intermediary.hostname。如果消息包含“已登录”或“登录”,extensions 中会创建一个空的 auth 对象。系统会使用原始日志的 collection_time 字段中的时间戳。如果消息包含“已登录”或“登录”,则将值设置为 USER_LOGIN。如果消息包含“访问了共享文件夹”,则将值设置为 USER_RESOURCE_ACCESS。否则,默认为 GENERIC_EVENT。由 grok 过滤器提取的 type 字段的值会分配给 metadata.product_event_type。该值会静态设置为“SYNOLOGY”。该值会静态设置为“SYNOLOGY”。如果消息包含“签名失败”字样,则将值设为 BLOCK。如果消息包含“success”,则将该值设置为 ALLOW。如果 severity 字段(由 grok 提取)为“INFO”,则值设置为 INFORMATIONAL
severity security_result.severity grok 过滤器提取的 severity 字段的值用于确定 security_result.severity。如果值为“INFO”,则会映射到“INFORMATIONAL”。
time metadata.event_timestamp 由 grok 过滤器提取的 time 字段会被解析并转换为时间戳。然后,此时间戳会分配给 metadata.event_timestamp
type metadata.product_event_type 由 grok 过滤器提取的 type 字段的值会分配给 metadata.product_event_type
user target.administrative_domain 如果从 user 字段中提取网域,则会将其分配给 target.administrative_domain
user target.user.userid 系统会提取 user 字段的用户名部分(在“\&”之前,如果存在),并将其分配给 target.user.userid。系统会使用原始日志的 collection_time 字段中的时间戳。

变化

2024-01-16

  • 新创建的解析器。