收集 Atlassian Jira 日志

支持的平台:

概览

此解析器可处理 SYSLOG 和 JSON 格式的 Atlassian Jira 日志。它会先尝试将消息解析为 JSON。如果失败,它会使用 Grok 模式解析 SYSLOG 格式的消息,提取 IP 地址、用户名、HTTP 方法和响应代码等各种字段,然后将其映射到 UDM。该解析器还会处理特定的 Jira 审核事件,包括登录成功和失败,并将相关字段映射到 UDM 中的安全结果属性。

准备工作

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

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

  1. 依次前往 SIEM 设置 > Feed
  2. 点击新增
  3. Feed 名称字段中,输入 Feed 的名称(例如 Atlassian Jira 日志)。
  4. 选择 Webhook 作为来源类型
  5. 选择 Atlassian Jira 作为日志类型
  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 密钥,而不是在网址中指定。如果您的 webhook 客户端不支持自定义标头,您可以使用以下格式的查询参数指定 API 密钥和密钥:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

替换以下内容:

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

在 Atlassian Jira 中为 Google SecOps 创建 webhook

  1. 以管理员身份访问您的 Jira 实例。
  2. 依次前往设置 设置 > 系统 > Webhook
  3. 点击创建 WebHook
  4. 配置以下 webhook 详细信息:
    • 名称:为该 webhook 提供一个描述性名称(例如“Google SecOps 集成”)。
    • 网址:输入 Google SecOps API 端点网址。
    • 事件:选择应触发 Webhook 的 Jira 事件。选择与您的安全监控需求相关的事件(例如,问题创建、问题更新、添加评论)。如有需要,您可以选择所有事件
    • 可选:JQL 过滤器:使用 JQL 过滤器进一步指定哪些事件会触发 Webhook。这对于专注于特定项目、问题类型或其他条件非常有用。
    • 排除正文:请勿选中此复选框。该网络钩子需要将事件数据以 JSON 格式发送给 Google SecOps。
  5. 点击创建以保存网络钩子配置。

UDM 映射表

日志字段 UDM 映射 逻辑
affectedObjects.id target.resource.attribute.labels.value affectedObjects 数组的每个对象中的 id 字段都会映射到键为“ID_[index]”的标签,其中 [index] 是对象在数组中的位置。
affectedObjects.name target.resource.attribute.labels.value affectedObjects 数组的每个对象中的 name 字段都会映射到键为“Name_[index]”的标签,其中 [index] 是对象在数组中的位置。
affectedObjects.type target.resource.attribute.labels.value affectedObjects 数组的每个对象中的 type 字段都会映射到键为“Type_[index]”的标签,其中 [index] 是对象在数组中的位置。
associatedItems.0.id target.user.userid 如果 associatedItems.0.typeName 为“USER”,此字段会映射到 target.user.userid。否则,它会映射到 security_result.detection_fields 中键值为“associatedItems Id”的标签。
associatedItems.0.name target.user.user_display_name 如果 associatedItems.0.typeName 为“USER”,此字段会映射到 target.user.user_display_name。否则,它会映射到 security_result.detection_fields 中键值为“associatedItems Name”的标签。
associatedItems.0.parentId target.process.parent_process.pid 如果 associatedItems.0.typeName 为“USER”,此字段会映射到 target.process.parent_process.pid
associatedItems.0.parentName target.resource.parent 如果 associatedItems.0.typeName 为“USER”,此字段会映射到 target.resource.parent
associatedItems.0.typeName security_result.detection_fields.value 映射到 security_result.detection_fields 中键值为“associatedItems TypeName”的标签。
author.id principal.user.userid 映射到 principal.user.userid
author.name principal.user.user_display_name 映射到 principal.user.user_display_name
author.type principal.resource.attribute.labels.value 映射到 principal.resource.attribute.labels 中键值为“Author Type”的标签。
author.uri principal.url 映射到 principal.url
authorAccountId principal.user.userid 映射到 principal.user.userid
authorKey target.resource.attribute.labels.value target.resource.attribute.labels 中映射到键为“Author Key”的标签。
auditType.action security_result.summary 映射到 security_result.summary。也用于派生 security_result.actionmetadata.event_type(如果操作包含“login”,则为 USER_LOGIN;如果为“successful”,则为 ALLOW;如果为“failed”,则为 BLOCK)。
auditType.area metadata.product_event_type 映射到 metadata.product_event_type
auditType.category security_result.category_details 映射到 security_result.category_details
category metadata.product_event_type 映射到 metadata.product_event_type
changedValues.changedFrom security_result.about.resource.attribute.labels.value 映射到 security_result.about.resource.attribute.labels 中键值为“Changed From”的标签。
changedValues.changedTo security_result.about.resource.attribute.labels.value security_result.about.resource.attribute.labels 中映射到键为“Changed To”的标签。
changedValues.fieldName security_result.about.resource.attribute.labels.value 映射到 security_result.about.resource.attribute.labels 中键值为“FieldName”的标签。
changedValues.i18nKey security_result.about.resource.attribute.labels.value 映射到 security_result.about.resource.attribute.labels 中键值为“FieldName”的标签。
changedValues.key security_result.about.resource.attribute.labels.value 映射到 security_result.about.resource.attribute.labels 中键值为“Changed From”的标签。
changedValues.to security_result.about.resource.attribute.labels.value security_result.about.resource.attribute.labels 中映射到键为“Changed To”的标签。
created metadata.event_timestamp 已解析并映射到 metadata.event_timestamp
dst_ip target.ip 映射到 target.ip
extraAttributes.name principal.resource.attribute.labels.value 映射到 principal.resource.attribute.labels 中键值为“Name”的标签。
extraAttributes.value principal.resource.attribute.labels.value 映射到 principal.resource.attribute.labels 中键值为“Value”的标签。
http_method network.http.method 映射到 network.http.method
http_referral_url network.http.referral_url 映射到 network.http.referral_url
id metadata.product_log_id 映射到 metadata.product_log_id
objectItem.id security_result.detection_fields.value 映射到 security_result.detection_fields 中键值为“objectItem Id”的标签。
objectItem.name security_result.detection_fields.value 映射到 security_result.detection_fields 中键值为“objectItem Name”的标签。
objectItem.typeName security_result.detection_fields.value security_result.detection_fields 中映射到键为“objectItem TypeName”的标签。
path principal.url 如果不是“-”或“/status”,则映射到 principal.url
protocol network.ip_protocol 如果为“HTTP”,则映射到 network.ip_protocol
remoteAddress principal.ip 映射到 principal.ip
response_code network.http.response_code 映射到 network.http.response_code
sent_bytes network.sent_bytes 映射到 network.sent_bytes
source principal.ip 已解析以提取 IP 地址,并合并到 principal.ip
src_ip1src_ip2src_ip3 principal.ip 映射到 principal.ip
summary metadata.description 映射到 metadata.description
user_agent network.http.user_agent 映射到 network.http.user_agent
user_name principal.user.userid 映射到 principal.user.userid。如果 auditType.action 包含“login”,则设置为“MACHINE”。如果解析 syslog,则派生自 date_time;如果解析 JSON,则派生自 created。如果 JSON 中提供了 timestamp,则系统会使用 timestamp 而非 created。如果没有任何这些值,则使用批处理中的 create_time。根据其他字段的存在情况派生:如果存在 dst_ip,则为 NETWORK_HTTP;如果存在 user_name 或 (associatedItems.0.typeName 为“USER”且存在 associatedItems.0.id),则为 USER_UNCATEGORIZED;如果存在 src_ip1src_ip2src_ip3remoteAddress,则为 STATUS_UPDATE;否则为 GENERIC_EVENT。如果 auditType.action 包含“login”,则替换为 USER_LOGIN。始终设置为“ATLASSIAN_JIRA”。始终设置为“ATLASSIAN_JIRA”。如果 auditType.action 包含“login successful”,则设置为“ALLOW”;如果 auditType.action 包含“login failed”,则设置为“BLOCK”。

变化

2023-12-12

  • 添加了对将多个 IP 地址从“source”映射到“principal.ip”的支持。

2023-11-10

  • 添加了新的 Grok 模式,用于解析失败的 JSON 日志。
  • 将“affectedObjects”映射到“target.resource.attribute.labels”。
  • 将“changedValues”映射到“security_result.about.resource.attribute.labels”。
  • 将“extraAttributes”映射到“principal.resource.attribute.labels”。
  • 将“source”映射到“principal.ip”。
  • 将“author.id”“author.name”“author.uri”“author.type”“auditType.area”“auditType.category”和“auditType.action”分别映射到“principal.user.userid”“principal.user.user_display_name”“principal.url”“principal.resource.attribute.labels”“metadata.product_event_type”“security_result.category_details”和“security_result.summary”。

2023-02-09

  • 添加了“json”块以检索 JSON 数据。

2023-01-10

  • 增强功能 - 添加了对 JSON 格式日志的支持。
  • 将“authorAccountId”映射到“principal.user.userid”。
  • 将“id”映射到“metadata.product_log_id”。
  • 将“remoteAddress”映射到“principal.ip”。
  • 将“summary”映射到“metadata.description”。
  • 将“category”映射到“metadata.product_event_type”。
  • 将“authorKey”映射到“target.resource.attribute.labels”。
  • 将“objectItem.id”“objectItem.name”“objectItem.typeName”映射到“security_result.detection_fields”。
  • 当“associatedItems.0.typeName”为“USER”时,将“associatedItems.0.id”映射到“target.user.userid”。
  • 当“associatedItems.0.typeName”为“USER”时,将“associatedItems.0.name”映射到“target.user.user_display_name”。
  • 当“associatedItems.0.typeName”为“USER”时,将“associatedItems.0.parentId”映射到“target.process.parent_process.pid”。
  • 当“associatedItems.0.typeName”为“USER”时,将“associatedItems.0.parentName”映射到“target.resource.parent”。
  • 当“associatedItems.0.typeName”不为“USER”时,将“associatedItems.0.id”和“associatedItems.0.name”映射到“security_result.detection_fields”。
  • 将“associatedItems.0.typeName”映射到“security_result.detection_fields”。
  • 将“changedValues.fieldName”“changedValues.changedFrom”“changedValues.changedTo”映射到“security_result.about.resource.attribute.labels”。
  • 如果存在“remoteAddress”,则将“STATUS_UPDATE”映射到“metadata.event_type”。
  • 如果存在“authorAccountId”,或者“associatedItems.0.typeName”为“USER”且存在“associatedItems.0.id”,则将“USER_UNCATEGORIZED”映射到“metadata.event_type”。

2022-05-31

  • bug 修复 - 添加了条件,用于检查日志中的网址值是否为“/status”,以便检查 principal.url 的映射是否不正确。