# 安全事件调查工具

可用于调查安全事件的核心 GitHub 工具、最适合每个工具的工具，以及影响可用数据的常见注意事项。

使用此参考来确定 GitHub 在安全调查期间要使用的工具、每个工具可以回答哪些问题，以及哪些因素可能会影响你看到的数据。

> \[!NOTE]
> 每个工具（及其提供的数据）的可用性因 GitHub 计划、角色和权限、功能启用和预事件配置而异（例如，审核日志流式处理和 IP 地址泄露需要事先设置）。

## 活动视图

### 使用

* 大致了解特定存储库中的 **活动** ，包括合并、推送、强制推送、分支创建和删除，这些活动归因于定义期间的特定执行组件。
* 将可疑代码外观与 \*\* 相关推送或合并\*\*相关联。
* 回答有关 **何时** 进行更改、**谁** 进行了更改、**在哪个分支**的问题，并浏览差异或提交历史记录。

#### Permissions

对存储库的读取访问权限。

### 关键资源

* [使用活动视图查看存储库更改](/zh/enterprise-server@3.22/repositories/viewing-activity-and-data-for-your-repository/using-the-activity-view-to-see-changes-to-a-repository)

### 说明和限制

* 活动视图最好用作初始导航和关联图面;它与原始审核日志导出没有相同的完整性或查询能力。
* 某些事件需要跨存储库或组织关联，这在审核日志中可能更容易。

## 审核日志

### 使用

* 回答有关企业或组织中的**更改内容**、**更改时间**和**更改人员**的问题。
* 调查可能已导致安全漏洞的事件，或可能指示漏洞的事件，例如成员身份、角色、权限的更改，或访问令牌的生成或使用等。
* 将安全相关操作归因于执行组件（用户或集成），并生成调查时间线。
* 按执行组件、操作、IP 地址（如果已启用）或令牌进行筛选，以识别可疑活动或跟踪令牌使用情况。
* 跨多个存储库或组织关联活动。

#### Permissions

* 若要查看组织审核日志，需要是组织所有者。
* 若要查看企业审核日志，需要是企业管理员。
* 若要查看安全日志（个人帐户），需要是帐户所有者。
* 若要查看导出到外部安全信息和事件管理（SIEM）系统、日志管理系统或其他工具和服务的审核日志数据，需要访问该系统。

### 关键资源

* [企业的审核日志事件](/zh/enterprise-server@3.22/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/audit-log-events-for-your-enterprise)
* [组织的审核日志事件](/zh/enterprise-server@3.22/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/audit-log-events-for-your-organization)
* [安全日志事件](/zh/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/security-log-events)

### 说明和限制

* GitHub 提供三个审核日志： **企业**、 **组织和**用户 **安全日志**。
* GitHub审核日志 UI 的**筛选和搜索功能有限**。 因此，我们建议企业将企业审核日志 **流式传输到** 外部 SIEM 或日志管理系统，以便进行更高级的查询。
  * 将审核日志流式传输到外部 SIEM 或日志管理系统需要事先配置。 请参阅“[流式处理企业审核日志](/zh/enterprise-server@3.22/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/streaming-the-audit-log-for-your-enterprise)”。
  * 如果没有审核日志流式处理，将无法运行更复杂的查询，例如跨组织或存储库关联事件，或从特定令牌透视到所有相关事件。
  * 流中包含 Git 事件数据。
* 建议流式处理 **API 请求事件**;这需要以前的配置。 请参阅“[流式处理企业审核日志](/zh/enterprise-server@3.22/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/streaming-the-audit-log-for-your-enterprise#enabling-audit-log-streaming-of-api-requests)”。
* 对于 GitHub Enterprise Cloud 上的企业，我们建议在审核日志中显示 **IP 地址**；这需要事先配置。 请参阅“[在企业审核日志中显示 IP 地址](/zh/enterprise-cloud@latest/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/displaying-ip-addresses-in-the-audit-log-for-your-enterprise)”。
* 不同的 GitHub 计划具有不同的数据可用性和数据保留产品/服务：
  * GitHub Free 和 GitHub Team 计划根本无法查看 API 活动或 Git 事件。
  * 独立组织（不属于企业的组织）无法进行流传输审核日志、无法查看 API 请求的事件，并且 Git 事件数据仅限于 7 天。
  * 对于企业：GitHub Enterprise Cloud
    * 如果企业使用 **Enterprise Managed Users**，则审核日志还包括用户 **安全日志** （与用户帐户相关的事件，例如登录活动和令牌使用情况）。
    * 如果企业 \_不使用\_Enterprise Managed Users，则 GitHub 审核日志仅包含与企业帐户及其内部组织相关的事件。
* 审核日志**不**包括页面视图或存储库浏览遥测。

## 依赖项关系图

### 使用

* 检查存储库是否依赖于 **易受攻击或泄露的包** （或版本）。
* 查看可能在事件期间引入的**新依赖项或可疑依赖项**。
* 根据生态系统或关系（直接或传递）筛选和浏览依赖项。
* 导出用于审核目的的软件材料清单（SBOM），或保留证据。

#### Permissions

* 写入或维护对存储库的访问权限。

### 关键资源

* [探索仓库的依赖项](/zh/enterprise-server@3.22/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/explore-dependencies)
* [依赖项关系图支持的包生态系统](/zh/enterprise-server@3.22/code-security/reference/supply-chain-security/dependency-graph-supported-package-ecosystems)
* [导出存储库的软件物料清单](/zh/enterprise-server@3.22/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/export-dependencies-as-sbom)

### 说明和限制

* 依赖项图是从受支持的清单/锁文件（以及可选的生成时提交）生成的，因此它可能不完整或不同于实际生成和部署的内容。 若要获取最准确的视图，尤其是对于 CI/构建期间解析的依赖项，应使用构建时依赖项提交（或 SBOM 等其他构建来源）来补充依赖项关系图。

## GitHub 代码搜索

### 使用

* 跨存储库搜索入侵指标 (IoC)，例如已知的恶意工作流或包名称。
* 通过检查可疑代码模式（例如泄露的机密或恶意代码片段）是否出现在整个组织或企业的其他存储库中，从而快速确定潜在爆炸半径的范围。
* 按各种不同限定符限定搜索范围，这些限定符在事件期间可能很有用，例如：
  * 在特定存储库、组织或企业中搜索（使用`repo:`、`org:``enterprise:`限定符）。
  * 在特定文件路径（`path:.github/workflows repo:ORG-NAME/REPO-NAME`）内搜索。

#### 所需权限

* 若要跨公共存储库进行搜索，必须登录到帐户 GitHub 。
* 若要跨专用存储库进行搜索，必须具有对这些存储库的读取访问权限。

### 关键资源

* [搜索代码](/zh/enterprise-server@3.22/search-github/searching-on-github/searching-code)

### 说明和限制

* 支持正则表达式搜索。
* 仅搜索存储库的默认分支。 如果可疑代码是在非默认分支中引入的，并且尚未合并，则代码搜索不会找到该代码。
* 可以使用代码搜索来确定某种模式或 IoC 是否存在，但它不提供上下文信息，例如代码何时添加以及由谁添加。 应将代码搜索与其他工具结合使用，例如审核日志、活动视图或检查责任视图、提交历史记录和存储库的拉取请求历史记录。

## 安全概述和安全警报

### 使用

* 查看跨组织或企业存储库的所有安全警报（secret scanning和code scanningDependabot警报）的高级视图。
* 分类GitHub 已检测到的内容并识别哪些代码库受到影响。
* 跟踪在事件过程中生成的新警报（这可能指示活动利用或传播）。

#### 所需权限

* 若要查看企业级组织的数据，企业管理员必须在相关组织中具有组织所有者或安全经理角色。
* 若要查看组织级别的存储库数据，需要组织所有者或安全管理员角色。

### 关键资源

* [安全性概述](/zh/enterprise-server@3.22/code-security/concepts/security-at-scale/security-overview)
* [查看安全洞察](/zh/enterprise-server@3.22/code-security/how-tos/view-and-interpret-data/analyze-organization-data/viewing-security-insights)

### 说明和限制

* 仅当事件之前启用了和配置相关功能时，才会显示泄露机密、易受攻击的代码、易受攻击的依赖项和恶意软件的警报。

## 工作流运行和日志

### 使用

* 确认在给定时间在 CI/CD 中执行的内容（例如执行的命令或安装的依赖项）。
* 调查可疑的工作流运行（例如，由不熟悉的用户触发或异常时间触发的工作流运行），以查看执行了哪些操作、访问了哪些机密以及执行了哪些代码。
* 查看工作流作业有权访问哪些凭据，包括默认`GITHUB_TOKEN`凭据、任何personal access tokensGitHub App凭据、令牌、存储为机密的其他凭据，以及工作流运行期间获取的访问令牌。
* 通过 REST API 以编程方式检索日志，以实现存档、取证或自动化目的。

#### 所需权限

* 对存储库的读取访问权限。

### 关键资源

* [查看工作流程运行历史记录](/zh/enterprise-server@3.22/actions/how-tos/monitor-workflows/view-workflow-run-history)
* [使用工作流运行日志](/zh/enterprise-server@3.22/actions/how-tos/monitor-workflows/use-workflow-run-logs)
* [下载工作流程构件](/zh/enterprise-server@3.22/actions/how-tos/manage-workflow-runs/download-workflow-artifacts)
* [GITHUB\_TOKEN](/zh/enterprise-server@3.22/actions/concepts/security/github_token)
* [在 GitHub Actions 中使用机密](/zh/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)
* [安全使用指南](/zh/enterprise-server@3.22/actions/reference/security/secure-use)
* [工作流运行的 REST API 终结点](/zh/enterprise-server@3.22/rest/actions/workflow-runs)
* [工作流作业的 REST API 终结点](/zh/enterprise-server@3.22/rest/actions/workflow-jobs)
* [保护生成系统的最佳做法](/zh/enterprise-server@3.22/code-security/tutorials/implement-supply-chain-best-practices/securing-builds)

### 说明和限制

* GitHub 自动从工作流日志中去除机密信息。
* 默认情况下，工作流日志默认由 GitHub 保留 90 天，但您可以配置此保留期限。
  最大保留期为 400 天。 可以在企业、组织或存储库级别配置保留。 如果工作流运行发生在配置的保留时段之外，则日志可能不再可用。 有关详细信息，请参阅“[管理存储库的GitHub Actions设置](/zh/enterprise-server@3.22/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository)”、“[为组织中的 GitHub Actions 构件和日志配置保留期](/zh/enterprise-server@3.22/organizations/managing-organization-settings/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization)”或“[在企业中强制实施GitHub Actions策略](/zh/enterprise-server@3.22/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise)”。
* 工作流运行（包括日志）也可以通过 REST API 删除。 若要检查某次运行是否已被删除，请在审计日志中查询 `workflows.delete_workflow_run` 事件。
* 颁发给每个作业的默认 `GITHUB_TOKEN` 的作用域限定为该作业，并在作业完成或其最长有效生存期结束时过期（在自托管运行器上最长可达 24 小时）。 即使某个步骤捕获了令牌，作业完成后也无法重复使用该步骤。 有关详细信息，请参阅“[GITHUB\_TOKEN](/zh/enterprise-server@3.22/actions/concepts/security/github_token)”。
* 工作流中引用的其他凭据（例如 personal access tokens， GitHub App 安装令牌或存储为机密的第三方 API 密钥）具有自己的生命周期，并且作业结束时不会过期。 如果某个工作流步骤泄露了其中一个凭据，该令牌仍然有效，直到其被吊销或根据其自身策略过期。 可能已公开的任何凭据都应被视为已泄露并立即轮换或替换。 查看工作流文件和存储库、组织和环境机密，以确定可访问哪些凭据。 有关详细信息，请参阅“[在 GitHub Actions 中使用机密](/zh/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)”。
* 可以使用 REST API 以编程方式下载整个工作流运行的日志或特定作业的日志。 这两个终结点都返回一个有效期为一分钟的重定向 URL。 有关详细信息，请参阅 [工作流运行的 REST API 终结点](/zh/enterprise-server@3.22/rest/actions/workflow-runs) 和 [工作流作业的 REST API 终结点](/zh/enterprise-server@3.22/rest/actions/workflow-jobs)。
* 工作流运行日志仅捕获工作流步骤中的标准输出。 不会写入标准输出的活动（例如网络调用、文件系统修改或后台进程）不会显示在日志中。
* 对于 GitHub 托管的运行器，运行器环境是临时的，并会在作业完成后被销毁。
  GitHub 除了这些运行器的工作流运行日志外，不会保留任何数据。 对于自托管运行器，可能还可以从你自己的基础设施获取额外的主机级或网络遥测数据。
* 若要进行更全面的调查，请关联工作流运行日志与审核日志事件。 例如 `git.clone`、`git.fetch`、`git.push`、`protected_branch.create` 和 `protected_branch.policy_override` 等事件可以提供更多上下文。 由于企业级 GitHub 托管审核日志中的 Git 事件目前仅保留 7 天，因此提前设置流式企业审核日志对于此类调查非常重要。 有关详细信息，请参阅“[准备应对安全事件](/zh/enterprise-server@3.22/code-security/tutorials/secure-your-organization/prepare-for-a-security-incident)”。