

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建渗透测试
<a name="perform-penetration-test"></a>

通过配置测试范围、目标域和 AWS 资源访问权限，为您的 Web 应用程序设置自动渗透测试。渗透测试通过模拟针对经过验证的域名的真实攻击场景，帮助识别正在运行的应用程序中的安全漏洞。

AWS Security Agent 会根据配置的范围和权限对您的 Web 应用程序执行全面的安全测试，在攻击者发现可利用漏洞之前提供有关这些漏洞的详细调查结果。

在此过程中，您将通过配置测试详细信息、定义测试范围和设置所需权限来创建渗透测试。

## 先决条件
<a name="_prerequisites"></a>

在开始之前，请确保您满足以下条件：
+ 访问 AWS 安全代理 Web 应用程序
+ 至少有一个经过验证的域名可供测试
+ 具有 AWS 安全代理相应权限的 IAM 角色
+ 了解应用程序的架构和关键路径

## 开始创建渗透测试
<a name="_start_creating_a_penetration_test"></a>

在 Agent Web 应用程序中导航到渗透测试创建页面。

1. 登录 AWS 安全代理 Web 应用程序。

1. 导航到 “**渗透测试**” 部分。

1. 选择 “**创建渗透测试**”。

**提示**  
只有经过验证的域名才能包含在渗透测试中。请您的管理员在 AWS 管理控制台中验证域名。请参阅[启用应用程序域进行渗透测试](enable-test-domain.md)。

## 为你的渗透测试命名
<a name="_name_your_penetration_test"></a>

提供描述性名称，以帮助确定此渗透测试的目的和范围。

1. 在**渗透测试名称**字段中，输入渗透测试的描述性名称。  
**Example**  

   名称应清楚地标识正在测试的应用程序、环境或组件。最多 100 个字符。

## 配置渗透测试范围
<a name="_configure_penetration_test_scope"></a>

定义将测试哪些域和 URL 路径，并配置可选的排除项以控制测试边界。

### 添加目标域名
<a name="_add_target_domains"></a>

指定将主动进行安全漏洞测试的经过验证的域名。

1. 在**渗透测试范围**部分中，找到**目标网址**。

1. 展开 “**已验证域名**” 部分以查看可用域名。

1. 在**目标 URL** 字段中，输入目标域 URL。
**重要**  
只能测试经过验证的域名。该 URL 必须位于您之前在 AWS 安全代理中验证过的域名下。 Sub-domains 已验证的域名不需要单独验证。

1. 要添加多个目标域，请执行以下操作：

   1. 选择**添加域**。

   1. 输入每个额外的域名 URL。

1. 要移除目标网域，请选择域名网址旁边的**移除**。

**提示**  
为了获得最佳效果，请包括应用程序用户流中的所有域，包括 API、身份验证服务和内容交付的子域名。 Sub-domains 已验证的父域名不需要单独验证。

### 排除风险类型（可选）
<a name="_exclude_risk_types_optional"></a>

如果特定风险类别不适用于您的应用程序，请选择将其排除在测试范围之外。

1. 找到 “**排除风险类型**” 字段。

1. 选择下拉列表以查看可用的风险类型。

1. 选择要从渗透测试中排除的一种或多种风险类型。
**注意**  
排除风险类型会限制测试范围。仅排除与您的应用程序无关或您想单独测试的风险类型。

### 添加超出范围的 URL 路径（可选）
<a name="_add_out_of_scope_url_paths_optional"></a>

指定在渗透测试期间不应测试的 URL 路径。AWS 安全代理排除指定路径及其下方嵌套的所有路径。例如，如果您添加`https://example.com/admin`为超出范围的 URL，`https://example.com/admin/tools`则也超出了范围。

1. 找到 “**Out-of-scope 网址**” 部分。

1. 在 **Out-of-scope URL** 输入字段中，输入要排除的 URL 路径（例如，`/admin/delete`或`/api/reset`）。
**警告**  
Out-of-scope 路径未经过漏洞测试。确保仅排除测试期间不应访问的路径，例如破坏性操作或敏感的管理功能。

1. 要添加多个超出范围的路径，请执行以下操作：

   1. 选择 “**添加网址**”。

   1. 输入每条其他路径。

1. 要移除路径，请选择路径旁边的 “**删除**”。

### 添加可访问的域名（可选）
<a name="_add_accessible_domains_optional"></a>

指定测试所需但不是漏洞测试目标的域。

1. 找到 “**可访问的网址**” 部分。

1. 在 “**可访问的 URL**” 输入字段中，输入在测试期间应可访问的域。
**注意**  
为目标域之外的第三方服务（例如 Okta、Auth0、Stripe）添加可访问的域名。这是必需的，这样 AWS 安全代理才能在测试期间访问这些 URL 进行登录和导航。AWS 安全代理不会对这些域进行渗透测试，它们仅用于访问目的。即使可访问的域名与您的目标域名属于不同的域名，也无需进行所有权验证。只有目标域名需要经过验证的所有权。

1. 要添加多个可访问的域，请执行以下操作：

   1. 选择 “**添加网址**”。

   1. 输入每个额外的域名。

1. 要移除某个域名，请选择该域名旁边的**移除**。

### 添加自定义 HTTP 标头（可选）
<a name="_add_custom_http_headers_optional"></a>

指定自定义 HTTP 标头，这些标头将添加到 AWS 安全代理在渗透测试期间发出的任何请求中。

1. 找到 “自**定义 HTTP 标头**” 部分。

1. 在**自定义 HTTP 标头**输入字段中，输入将与出站请求关联的标头名称和值。
**注意**  
默认情况下，除非指定了不同的自定义标头值，否则 AWS **安全代理**会将自定义**User-Agent**标头**User-Agent**设置为 securityagent。

1. 要添加多个自定义标题，请执行以下操作：

   1. 选择**添加标头**。

   1. 输入每个额外的自定义标题。

1. 要删除自定义标题，请选择标题旁边的**移除**。

## 配置 IAM 角色
<a name="_configure_iam_role"></a>

为此渗透测试选择预先配置的服务角色。AWS 安全代理使用代理 Space-based 权限模型，即管理员在设置您的代理空间时配置 IAM 角色。您可以从已经配置并可以使用的角色中进行选择。

1. 在 “**权限**” 部分中，找到 “**服务角色**” 下拉列表。

1. 选择授予 AWS 安全代理访问所需 AWS 资源的权限的 IAM 角色。
**重要**  
所选的 IAM 角色必须有权访问渗透测试所需的 VPC 资源、 CloudWatch 日志和任何其他 AWS 服务。验证该角色与 AWS 安全代理的信任关系是否正确。

1. 找到**CloudWatch 日志组**下拉列表。

1. 选择将存储渗透测试日志的日志组。 （可选）
**注意**  
选定的 CloudWatch 日志组将存储渗透测试执行的详细日志，包括发出的请求、收到的响应和发现的漏洞。  
如果您不选择日志组，则会自动创建一个带有`/aws/securityagent`前缀的新 CloudWatch 日志组来存储渗透测试日志。

## 自动代码修复
<a name="_automatic_code_remediation"></a>

选中 “**启用自动修复**” 复选框。

**重要**  
为了修复源代码存储库中的安全发现，AWS 安全代理可能会向您的存储库提交拉取请求。拉取请求可能对所有对仓库具有读取权限的用户可见。

## 配置 VPC 资源（可选）
<a name="_configure_vpc_resources_optional"></a>

如果您的目标域为私有域且托管在 VPC 中，请配置 AWS 安全代理应运行渗透测试的 VPC 设置。只有不可公开访问的应用程序才需要执行此步骤。

**注意**  
如果您的目标域名可以公开访问，请跳过此步骤。只有测试托管在 Amazon Virtual Private Cloud 中的私有应用程序时才需要 VPC 配置。

为渗透测试环境选择 VPC、子网和安全组。

1. 在 **VPC** 部分，找到 **VPC ID** 下拉列表。

1. 选择托管目标域的 VPC。
**重要**  
选定的 VPC 必须包含您在步骤 3 中指定的目标域。确保 VPC 具有适当的路由和网络配置，以允许 AWS 安全代理访问您的应用程序。

1. 找到 “**子网**” 下拉列表。

1. 选择一个或多个应在其中运行渗透测试的子网。
**注意**  
选择能够通过网络访问目标应用程序的子网。渗透测试将使用部署在这些子网中的资源执行。

1. 找到 “**安全组**” 下拉列表。

1. 选择控制渗透测试网络访问权限的安全组。
**重要**  
所选安全组必须允许您的目标域和任何可访问域的出站流量。确保安全组规则允许进行全面测试所需的网络访问权限。

## 配置身份验证凭证（可选）
<a name="_configure_authentication_credentials_optional"></a>

如果您的目标域需要身份验证，请提供证书，以允许 AWS Security Agent 在渗透测试期间访问您的应用程序的受保护区域。只有需要用户身份验证的应用程序才需要执行此步骤。

**注意**  
如果您的目标域名不需要身份验证，或者您要测试的所有区域均可公开访问，请跳过此步骤。仅在需要 AWS 安全代理来测试应用程序中经过身份验证的部分时才配置证书。

### 添加 凭证
<a name="_add_credentials"></a>

提供 AWS 安全代理用于访问您的应用程序的身份验证证书。

1. 在 “**凭据 \#1**” 部分中，选择一种凭据输入方法：
   +  **输入证书**-将您的证书直接输入到 AWS 安全代理中。
   +  **高级设置**-对于敏感的凭证信息，请使用高级选项，例如 AWS Secrets Manager 或 AWS Lambda 函数。有关详细信息，请参阅[为渗透测试提供身份验证凭证](provide-testing-credentials.md)。
**提示**  
对于生产环境或敏感证书，我们建议使用高级设置选项来安全地引用存储在 AWS Secrets Manager 或 Systems Manager Parameter Store 中的证书。

### 输入凭证详情
<a name="_enter_credential_details"></a>

提供经过身份验证的帐户的用户名和密码。

1. 在 “**用户名**” 字段中，输入用于身份验证的用户名。

1. 在 “**密码**” 字段中，输入用于身份验证的密码。
**重要**  
确保您提供的凭证具有适合您要测试的区域的相应访问级别。凭证应代表典型用户的访问级别，而不是管理权限。

### 选择访问域
<a name="_select_access_domain"></a>

指定哪个目标域将使用这些凭据进行身份验证。

1. 在**访问域**下拉列表中，选择将使用这些凭据的域。
**注意**  
如果您有多个目标域需要不同的凭据，则可以在完成此凭据配置后单击 “**添加其他凭据” 来添加其他凭据**集。

### 配置代理登录提示（可选）
<a name="_configure_agent_login_prompt_optional"></a>

提供指导 AWS 安全代理完成应用程序的身份验证过程的说明。

1. 如果您的身份验证流程需要特定说明，请展开**代理登录提示**部分。

1. 输入说明如何在应用程序的登录流程中使用所提供的凭据。
**注意**  
代理登录提示告诉代理如何将您的凭据应用于您的应用程序。这对于复杂的身份验证流程、多步登录过程或具有非标准登录过程的应用程序非常有用。包括分步说明，例如 “导航到/login，在'电子邮件'字段中输入用户名，输入密码，然后选择'登录'”。

### 添加多个凭据（可选）
<a name="_add_multiple_credentials_optional"></a>

如果您的应用程序需要多组凭据或不同的域需要单独的身份验证，请添加其他凭据集。

1. 完成第一个凭据配置后，选择**添加其他凭**据。

1. 为每个其他凭据集重复凭证配置步骤。

1. 要删除凭据集，请选择凭证**标题旁边的删除**。

**提示**  
在应用程序中测试不同的用户角色、访问多个经过身份验证的域名或验证基于角色的访问控制时，请配置多个凭据。

## 附加其他资源（可选）
<a name="_attach_additional_resources_optional"></a>

提供补充资源，帮助 AWS 安全代理进行更彻底、更准确的渗透测试。其他资源可能包括架构图、API 文档、配置文件、 GitHub 存储库或提供应用程序背景信息的 S3-hosted 材料。

**注意**  
其他资源是可选的，但建议使用。提供有关您的应用程序的全面信息有助于确保全面的测试覆盖率，减少误报，并提供更具可操作性的结果。

### 为渗透测试添加资源
<a name="_add_resources_to_the_penetration_test"></a>

选择现有资源或上传有助于指导渗透测试的新文件。

1. 在 “**已连接的资源**” 部分，您可以：
   + **选择 “从可用**资源中选择”，从已连接到 AWS 安全代理的资源（例如 GitHub 存储库或 S3 存储桶）中进行选择。
   + 选择 “**上传**” 可直接从本地系统添加新文件。

**提示**  
有用的资源包括 API 文档、架构图、 OpenAPI/Swagger 规范、配置文件、身份验证流程图以及描述应用程序结构和行为的任何其他材料。

### 从可用资源中选择
<a name="_select_from_available_resources"></a>

从已经与 AWS 安全代理集成的资源中进行选择。

1. **选择 “从现有资源**中选择”。

1. 浏览来自互联来源的可用资源列表，例如：
   + GitHub 存储库，在 **“GitHub 存储库” 选项卡**下 
   + S3 桶
   + 之前上传的文件
   + 文档存储库

1. 选择要包含在渗透测试中的资源。

1. 选择 “**添加到渗透测试**” 以附加所选资源。

**Example**  
我们建议您选择相关 GitHub 存储库并将其添加到您的 pentest 中，这样 AWS Security Agent 就可以了解您的应用程序环境，并通过拉取请求（启用后）生成随时可以实施的代码修复

**注意**  
从可用来源中选择的资源与其原始位置保持同步。如果您更新 GitHub 存储库或 S3 文件，则渗透测试将使用更新的版本。

**注意**  
如果您有与 pentest 关联的私有 VPC 并配置了 GitHub 存储库，请确保可以通过您的私有 VPC 访问 GitHub 该私有 VPC 以提取 GitHub 资源。在大多数情况下，您需要确保默认允许通过 [VPC NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)的出站流量，或者配置特定规则以允许 GitHub IP 的出站流量（参见 [GitHub Meta API 终端节点](https://api.github.com/meta)）

### 上传新资源
<a name="_upload_new_resources"></a>

直接从本地系统上传文件或向 AWS 安全代理提供纯文本内容。

1. 选择**上传**。

1. 选择以下输入法之一：
   +  **上传本地文件**-从本地系统中选择一个或多个文件。
   +  **粘贴纯文本**-直接在输入字段中键入或粘贴文本内容。选择**上传**。

1. 然后选择 “**添加**” 以完成上传。

1. 上传的资源显示在 “已**连接的资源**” 表中。

**提示**  
如果您想在不创建单独文件的情况下快速提供 API 端点列表、网址模式、测试说明或其他基于文本的信息，请使用纯文本选项。

**重要**  
确保上传的文件和粘贴的内容不包含敏感信息，例如生产凭证、私钥或个人身份信息 (PII)。使用经过消毒的配置文件和文档版本。

### Connect 现有资源
<a name="_connect_existing_resources"></a>

现有资源可以来自您之前上传到 AWS Security Agent 的资源、您的 S3 存储桶以及您的集成 GitHub 存储库。**选择 “从现有资源**中选择” 以将其选中。

### 管理连接的资源
<a name="_manage_connected_resources"></a>

查看、整理和移除渗透测试附带的资源。

**连接的资源**表显示渗透测试中包含的所有资源以及以下信息：
+  **名称**-文件名或资源标识符
+  **类型**-资源类别（上传的文件、S3 资源、 GitHub 存储库等）

要管理资源，请执行以下操作：

1. 使用复选框选择一个或多个资源。

1. 选择 “**从渗透测试中移除**” 以分离所选资源。

**注意**  
您可以通过单击列标题按名称或类型对表格进行排序。这有助于在处理许多文件时整理资源。

## 创建渗透测试
<a name="_create_the_penetration_test"></a>

完成并启动您的渗透测试配置。

配置完所有设置后，就可以开始创建渗透测试了。

1. 查看所有配置部分以确保准确性。

1. 请选择以下选项之一：
   + 选择 “**创建渗透**” 以保存配置，而无需立即运行。
   + 选择 “**创建并执行**” 以保存配置并立即开始渗透测试。
   + 选择 “**取消”** 以放弃渗透测试配置。

**重要**  
在运行渗透测试之前，请验证：  
所有目标域名均经过正确验证并可访问
IAM 角色具有适当的权限
Out-of-scope 已正确配置路径以防止测试破坏性操作
您有权在所有目标域上执行安全测试

**注意**  
渗透测试开始后，您可以从 “**渗透测试运行**” 部分监控其进度。测试可能需要几个小时才能完成。大多数在 16 小时内完成，具体取决于您的应用程序的范围和复杂性。