Help us learn about your current experience with the documentation. Take the survey.

安全指标和 KPI

  • Tier: Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

本文档描述了 GitLab 安全指标和 KPI 解决方案组件的安装、配置和使用指南。该安全解决方案组件提供了可按业务部门、时间范围、漏洞严重性和安全类型查看的指标和 KPI。它可以通过 PDF 文档每月或每季度提供安全态势的快照。数据使用 Splunk 中的仪表板进行可视化。

Security Metrics and KPIs

该解决方案使用 GraphQL API 从 GitLab 项目或组导出漏洞数据,通过 HTTP 事件收集器 (HEC) 将其发送到 Splunk,并包含一个开箱即用的安全指标可视化仪表板。导出过程设计为作为 GitLab CI/CD 管道按计划运行。

入门指南

下载解决方案组件

  1. 从您的账户团队获取邀请码。
  2. 使用邀请码从 解决方案组件网络商店 下载解决方案组件。

设置解决方案组件项目

  1. 创建一个新的 GitLab 项目来托管此导出器。
  2. 将提供的文件复制到您的项目中:
    • export_vulns.py
    • send_to_splunk.py
    • requirements.txt
    • .gitlab-ci.yml
  3. 在您的项目设置中配置所需的 CI/CD 变量。
  4. 设置管道计划(例如,每日或每周)。

工作原理

该解决方案包含两个主要组件:

  1. 从 GitLab 安全仪表板获取数据的漏洞导出器

  2. 处理导出的数据并将其发送到 Splunk HEC 的 Splunk 接收器

管道运行分为两个阶段:

  1. extract:获取漏洞并保存为 CSV

  2. ingest:将漏洞数据发送到 Splunk

配置

必需的 CI/CD 变量

变量 描述 示例值
SCOPE 漏洞扫描的目标范围 group:security/appsecsecurity/my-project
GRAPHQL_API_TOKEN 具有API访问权限的 GitLab 个人访问令牌 glpat-XXXXXXXXXXXXXXXX
GRAPHQL_API_URL GitLab GraphQL API URL https://gitlab.com/api/graphql
SPLUNK_HEC_TOKEN Splunk HTTP 事件收集器令牌 11111111-2222-3333-4444-555555555555
SPLUNK_HEC_URL Splunk HEC 端点 URL https://splunk.company.com:8088/services/collector

可选的 CI/CD 变量

变量 描述 示例值 默认值
SEVERITY_FILTER 严重性级别(逗号分隔)的列表 CRITICAL,HIGH,MEDIUM 所有严重性级别
VULN_TIME_WINDOW 漏洞收集的时间窗口 24h, 7d, 或 all 24h

范围配置

SCOPE 变量确定要扫描的项目或组:

  • 对于项目:mygroup/myproject
  • 对于组:group:mygroup/subgroup
  • 对于整个实例:instance

严重性筛选器示例

有效的严重性级别:

  • CRITICAL(严重)
  • HIGH(高)
  • MEDIUM(中)
  • LOW(低)
  • UNKNOWN(未知)

示例组合:

  • CRITICAL,HIGH
  • CRITICAL,HIGH,MEDIUM
  • 留空以包含所有严重性级别

时间窗口配置

VULN_TIME_WINDOW 变量控制查找漏洞的时间范围:

  • 格式:<数字><单位>,其中:
    • 数字:任何正整数
    • 单位h 表示小时,d 表示天数
  • 示例:
    • 24h:过去 24 小时
    • 7h:过去 7 小时
    • 15d:过去 15 天
    • 30d:过去 30 天
    • all:所有漏洞(首次运行时有用)

默认值:24h

示例管道配置:

# 12 小时窗口
variables:
  VULN_TIME_WINDOW: "12h"

# 3 天窗口
variables:
  VULN_TIME_WINDOW: "3d"

# 所有漏洞
variables:
  VULN_TIME_WINDOW: "all"

根据您选择的时间窗口安排管道计划。例如:

  • 对于 12h:每天安排两次
  • 对于 3d:每 3 天安排一次
  • 在计划中添加一些重叠,以确保不会遗漏任何漏洞

管道设置

  1. 首次运行

    • 设置 VULN_TIME_WINDOW: "all" 以收集所有历史漏洞
    • 运行管道一次
  2. 持续收集

    • VULN_TIME_WINDOW 设置为您想要的时间窗口(24h7d
    • 设置管道计划:
      • 对于 24h:每日安排
      • 对于 7d:每周安排

Splunk 集成

脚本将漏洞作为事件发送到 Splunk。

索引配置

  1. 在 Splunk 中创建一个名为 gitlab_vulns 的新索引

  2. 创建 HEC 令牌时:

    • 将默认 索引 设置为 gitlab_vulns(此索引在提供的 Splunk 仪表板的基础搜索中被引用)
    • 确保该令牌具有写入此索引的权限
    • 确保该令牌具有一个 sourcetype,允许将事件数据正确解析为 JSON

每个事件包括:

  • 检测时间
  • 漏洞标题和描述
  • 严重性级别
  • 扫描器信息
  • 项目详情
  • 项目和漏洞的 URL

仪表板设置

提供的仪表板为您提供对 GitLab 漏洞数据的全面可见性,包含以下可视化:

  • 严重和高危漏洞的 P95 年龄指标(径向仪表)
  • 老化分析,显示严重和高危漏洞在不同年龄桶中的分布(0-30 天、31-90 天、91-180 天、180+ 天)
  • 前 10 个最常见的 CVE 及其出现次数
  • 按项目路径和严重性分布的漏洞
  • 所有指标都可以按业务部门和时间段进行筛选

要设置仪表板:

  1. 业务部门映射

    1. 创建一个包含两列的 CSV 文件:
    project_url,business_unit
    1. 将每个 GitLab 项目 URL 映射到其对应的业务部门。
    2. 将文件上传到 Splunk 作为查找表:
      1. 转到 设置 > 查找 > 查找表文件
      2. 选择 新建查找表文件
      3. 上传您的 CSV 文件。
      4. 目标文件名 设置为 business_unit_mapping.csv
      5. 配置权限:
        1. 找到标记为 <splunk_dir>/etc/apps/search/lookups/business_unit_mapping.csv 的行。
        2. 选择 权限
        3. 将权限设置为:
          • 设置为 全局 以实现实例级访问。
          • 根据需要与特定应用程序或角色共享。
        4. 选择 保存
  2. 仪表板安装

    1. 保存提供的 vuln_metrics_dashboard.xml 文件。
    2. 在 Splunk 中:
      1. 转到 Search 应用程序。
      2. 点击 仪表板 > 创建新仪表板
      3. 在编辑视图中选择
      4. 将默认 XML 替换为 vuln_metrics_dashboard.xml 的内容。
      5. 保存仪表板。

输出格式

中间的 CSV 文件包含:

  • detectedAt:检测时间戳
  • title:漏洞标题
  • severity:严重性级别
  • primaryIdentifier:漏洞标识符
  • exporter:扫描器名称
  • projectPath:GitLab 项目路径
  • projectUrl:项目 URL
  • description:漏洞描述
  • webUrl:漏洞详情 URL

错误处理

该解决方案包括:

  • 带有指数退避的速率限制处理
  • Splunk 接收的批处理
  • 适当的错误报告
  • 超时处理
  • UTF-8 编码支持

最佳实践

  1. 令牌权限

    • GRAPHQL_API_TOKEN 需要:
      • 对目标组/项目的读取权限
      • 安全仪表板访问权限
    • SPLUNK_HEC_TOKEN 需要:
      • 向目标索引提交事件的权限
  2. 计划频率

    • 使计划与您的 VULN_TIME_WINDOW 匹配
    • 包含重叠以防止遗漏漏洞
    • 考虑您组织的 SLA
  3. 监控

    • 监控管道的成功/失败
    • 跟踪导出的漏洞数量
    • 监控 Splunk 接收的成功

故障排除

常见问题和解决方案:

  1. 没有导出漏洞

    • 验证 SCOPE 设置
    • 检查令牌权限
    • 验证安全仪表板访问权限
  2. Splunk 接收失败

    • 验证 HEC URL 和令牌
    • 检查网络连接
    • 验证索引权限