修复 Amazon ECS 服务的风险 - AWS Security Hub

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

修复 Amazon ECS 服务的风险

AWS Security Hub 可以生成亚马逊弹性容器服务 (Amazon ECS) 服务的曝光结果。

风险调查结果中涉及的 Amazon ECS 服务及其识别信息列在调查结果详情的 “资源” 部分。您可以在 Security Hub 控制台上检索这些资源详细信息,也可以通过 Security Hub API 的GetFindingsV2操作以编程方式检索这些资源详细信息。

确定风险调查结果中涉及的资源后,如果您不需要该资源,则可以将其删除。删除不必要的资源可以减少您的曝光概况和 AWS 成本。如果资源必不可少,请按照这些建议的补救步骤进行操作,以帮助降低风险。补救主题根据特征的类型进行划分。

单个暴露发现包含在多个补救主题中发现的问题。相反,您只需解决一个补救主题即可解决风险发现并降低其严重性级别。您的风险补救方法取决于您的组织要求和工作量。

注意

本主题中提供的补救指南可能需要在其他 AWS 资源中进行进一步的咨询。

Amazon ECS 服务的配置错误特征

以下是 Amazon ECS 服务的配置错误特征和建议的补救措施。

Amazon ECS 服务使用配置了提升权限的任务定义

以提升权限运行的 Amazon ECS 容器具有与主机系统相似的功能,有可能允许访问主机资源和其他容器。这种配置增加了被入侵的容器可能被用来访问或修改其预期范围之外的资源的风险,从而可能导致容器逃脱、未经授权访问底层主机,以及影响同一主机上的其他容器的漏洞。遵循标准的安全原则, AWS 建议您授予最低权限,这意味着您只授予执行任务所需的权限。

查看和修改任务定义

在曝光中,确定任务定义 ARN。在 Amazon ECS 控制台中打开任务定义。在任务定义中,查找容器定义中设置为 true 的特权标志。如果不需要特权模式,请创建一个不带特权标志的新任务定义修订版。如果需要特权模式,可以考虑将容器配置为使用只读文件系统,以防止未经授权的修改。

Amazon ECS 服务有一个可以代替 IAM 角色的容器

IAM 角色使 Amazon ECS 任务能够使用临时证书安全地访问其他 AWS 服务。容器需要与其他 AWS 资源交互的 Amazon ECS 任务可能需要任务执行角色。虽然这有时是容器功能所必需的,但配置不当的角色可能会授予过多的权限,如果容器遭到入侵,攻击者可能会利用这些权限,从而可能允许未经授权访问 AWS 资源、窃取数据或未经授权修改您的基础架构。遵循标准安全原则, AWS 建议实施最低权限访问权限并查看附加到您的 Amazon ECS 任务的 IAM 角色。

查看附加角色

转到 IAM 控制面板,然后选择已识别的角色。查看附加到 IAM 角色的权限策略。如果任务需要与其他 AWS 服务交互,请保留任务执行角色并考虑应用最低权限权限。否则,创建一个不带执行角色的新任务定义修订版。

Amazon ECS 服务使用允许容器访问根文件系统的任务定义

有权访问主机根文件系统的 Amazon ECS 容器可能会读取、修改或执行主机系统上的关键文件。这种配置增加了受损容器可能被用来访问或修改其预期范围之外的资源的风险,从而有可能暴露主机文件系统上的敏感数据。遵循标准的安全原则, AWS 建议您授予最低权限,这意味着您只授予执行任务所需的权限。

查看和修改具有主机文件系统访问权限的容器

在曝光调查结果中,确定任务定义 ARN。在 Amazon ECS 控制台中打开任务定义。在定义主机路径映射的任务定义中查找卷部分。查看任务定义以确定容器功能是否需要主机文件系统访问权限。s 如果不需要访问主机文件系统,请创建新的任务定义修订版并删除所有使用主机路径的卷定义。如果需要访问主机文件系统,请考虑将容器配置为使用只读文件系统,以防止未经授权的修改。

Amazon ECS 服务使用配置为共享主机的进程命名空间的任务定义

使用暴露命名空间运行的 Amazon ECS 容器可能会访问主机系统资源和其他容器命名空间。这种配置可能允许受感染的容器逃离其隔离边界,从而可能导致访问超出其预期范围的进程、网络接口或其他资源。进程 ID (PID) 命名空间提供了进程之间的分离。它可以防止系统进程可见,并 PIDs 允许重复使用,包括 PID 1。如果主机的 PID 命名空间与容器共享,则容器可以看到主机系统上的所有进程。这降低了主机和容器之间进程级分离的好处。这些因素可能导致未经授权访问主机本身的进程,包括操纵和终止这些进程的能力。遵循标准的安全原则, AWS 建议为容器保持适当的命名空间隔离。

使用公开的命名空间更新任务定义

打开曝光的 “资源” 选项卡,使用公开的命名空间识别任务定义。在 Amazon ECS 控制台中打开任务定义。查找值为 host 的 PidMode 设置,该设置将与主机共享进程 ID 命名空间。从任务定义中删除 PidMode: host 设置,以确保容器在适当的命名空间隔离下运行。

Amazon ECS 服务使用在环境变量中配置了明文凭证的任务定义

在环境变量中带有明文凭证的 Amazon ECS 容器会暴露敏感的身份验证信息,如果攻击者获得任务定义、容器环境或容器日志的访问权限,这些信息可能会被泄露。这会造成严重的安全风险,因为泄露的凭据可能被用来访问其他 AWS 服务或资源。

替换明文凭证

在曝光调查结果中,使用明文凭证识别任务定义。在 Amazon ECS 控制台中打开任务定义。在容器定义中查找包含敏感值(例如 AWS 访问密钥、数据库密码或 API 令牌)的环境变量。

考虑以下替代方法来传递证书:

  • 与其使用 AWS 访问密钥,不如使用 IAM 任务执行角色和任务角色向容器授予权限。

  • 将凭据作为密钥存储在 S AWS ecrets Manager 中,并在任务定义中引用它们。

更新任务定义

为您的任务定义创建新的修订版,以安全地处理凭据。然后更新您的 Amazon ECS 服务以使用新的任务定义修订版。

Amazon ECS 服务有一个开放的安全组

安全组充当您的 Amazon ECS 任务的虚拟防火墙,用于控制入站和出站流量。开放式安全组允许从任何 IP 地址进行不受限制的访问,可能会使您的容器面临未经授权的访问,从而增加暴露于自动扫描工具和有针对性的攻击的风险。根据标准安全原则, AWS 建议将安全组的访问权限限制为特定 IP 地址和端口。

查看安全组规则并评估当前配置

打开 Amazon ECS 安全组的资源。评估哪些端口是开放的,并且可以从广泛的 IP 范围访问,例如(0.0.0.0/0 or ::/0)

修改安全组规则

修改您的安全组规则,以限制对特定可信 IP 地址或范围的访问。更新安全组规则时,请考虑通过为每个所需的源 IP 范围创建规则或限制对特定端口的访问权限来区分不同网段的访问要求。

修改安全组规则

对于其他访问方法,请考虑以下选项:

  • Session Manager 提供对您的 Amazon EC2 实例的安全外壳访问权限,无需入站端口、管理 SSH 密钥或维护堡垒主机。

  • NACLs 在子网级别提供额外的安全层。与安全组不同, NACLs 它们是无状态的,需要明确定义入站和出站规则。

Amazon ECS 服务有一个公有 IP 地址

为其任务分配了公有 IP 地址的 Amazon ECS 服务可以直接从互联网访问。虽然这对于需要公开提供的服务来说可能是必要的,但它会增加攻击面和未经授权访问的可能性。

使用公有 IP 地址识别服务

在曝光调查结果中,确定为其任务分配了公有 IP 地址的 Amazon ECS 服务。在服务配置ENABLED中查找值为的assignPublicIp设置。

更新任务定义

创建禁用公有 IP 地址的任务定义的新修订版。然后更新您的 Amazon ECS 服务以使用新的任务定义修订版。

实施私有网络访问模式

对于运行 Web 应用程序的实例,请考虑使用 Load Balancer (LB)。 LBs 可以配置为允许您的实例在私有子网中运行,而 LB 在公有子网中运行并处理互联网流量。

Amazon ECS 服务使用的任务定义配置为启用了主机联网模式

以主机联网模式运行的 Amazon ECS 容器与主机共享网络命名空间,允许直接访问主机的网络接口、端口和路由表。此配置绕过了容器提供的网络隔离,有可能将容器上运行的服务直接暴露给外部网络,并允许容器修改主机网络设置。遵循标准的安全原则, AWS 建议为容器保持适当的网络隔离。

禁用主机联网模式

在曝光结果中,使用主机联网模式确定任务定义。在 Amazon ECS 控制台中打开任务定义。在任务定义中查找值为 host 的 NetworkMode 设置。

要禁用主机联网模式,请考虑以下选项:

  • awsvpc网络模式通过为每项任务提供自己的 elastic network 接口,从而提供最强的网络隔离级别。

  • bridge网络模式提供隔离,同时允许端口映射向主机公开特定的容器端口。

更新任务定义

使用更新的网络模式配置创建任务定义的新版本。然后更新您的 Amazon ECS 服务以使用新的任务定义修订版。

与 Amazon ECS 服务关联的 IAM 角色具有管理访问策略

在 Amazon ECS 任务上附加了管理访问策略的 IAM 角色提供的广泛权限超出了容器操作通常所需的权限。这种配置会增加被入侵的容器被用来访问或修改整个 AWS 环境中的资源的风险。遵循标准的安全原则, AWS 建议通过仅授予任务运行所需的权限来实现最低权限访问权限。

审查并确定管理政策

资源 ID 中,标识 IAM 角色名称。前往 IAM 控制面板并选择已识别的角色。查看附加到 IAM 角色的权限策略。如果该策略是 AWS 托管策略,请查找AdministratorAccess。否则,在策略文档中查找将这些声明放在"Effect": "Allow", "Action": "*", and "Resource": "*"一起的声明。

实施最低权限访问

将管理策略替换为仅授予实例运行所需的特定权限的策略。要识别不必要的权限,您可以使用 IAM Access Analyzer 来了解如何根据访问历史记录修改策略。或者,您可以创建新的 IAM 角色以避免影响使用现有角色的其他应用程序。在此场景中,创建一个新的 IAM 角色,然后将新的 IAM 角色与该实例关联。

安全配置注意事项

如果实例需要服务级别的管理权限,请考虑实施以下其他安全控制措施以降低风险:

  • MFA 要求使用其他形式的身份验证,从而增加了额外的安全层。即使凭据遭到泄露,这也有助于防止未经授权的访问。

  • 通过设置条件元素,您可以根据来源 IP 或 MFA 年龄等因素限制何时以及如何使用管理权限。

更新任务定义

为您的任务定义创建新的修订版,以引用新的或更新的 IAM 角色。然后更新您的 Amazon ECS 服务以使用新的任务定义修订版。

Amazon ECS 服务的漏洞特征

以下是 Amazon ECS 的可访问性特征和建议的补救措施。

Amazon ECS 服务有一个容器,里面有可被网络利用的软件漏洞,很有可能被利用

  1. 了解曝光情况

    Package 漏洞发现可识别您的 AWS 环境中暴露于常见漏洞和漏洞的软件包(CVEs)。攻击者可以利用这些未修补的脆弱性来破坏数据的保密性、完整性或可用性,或访问其他系统。ECR 容器镜像可能有软件包漏洞发现。

  2. 修复暴露情况

    1. 更新软件包版本

      查看您的 Lambda 函数的软件包漏洞发现结果。按照 Amazon Inspector 的建议更新软件包版本。有关信息,请参阅亚马逊 Inspect or 用户指南中的查看亚马逊 Inspect or 发现的详情。Amazon Inspector 控制台中查找结果详情的 “修复” 部分告诉您可以运行哪些命令来更新软件包。

    2. 更新基本容器镜像

      定期重建和更新基础容器镜像,使您的容器保持最新状态。重建镜像时,不要添加不必要的组件以减少攻击面。有关重建容器映像的说明,请参阅经常重建镜像

Amazon ECS 服务有一个存在软件漏洞的容器

安装在 Amazon ECS 容器上的软件包可能会暴露在常见漏洞和漏洞中(CVEs)。与高优先级漏洞相比,低优先级漏洞表示严重性或可利用性较低的安全漏洞。虽然这些漏洞带来的直接风险较小,但攻击者仍然可以利用这些未修补的漏洞来破坏数据的机密性、完整性或可用性,或者访问其他系统。

更新受影响的容器镜像

查看该特征的 “漏洞” 选项卡中的 “参考” 部分。供应商文档可能包括具体的补救指南。

按照以下一般准则应用适当的补救措施:

  • 更新您的容器镜像以使用受影响软件包的修补版本。

  • 将应用程序中受影响的依赖项更新到其最新的安全版本。

更新容器映像后,将其推送到您的容器注册表,并更新您的 Amazon ECS 任务定义以使用新映像。

未来的考虑

要进一步加强容器映像的安全状况,请考虑遵循 Amazon ECS 任务和容器安全最佳实践。可以将 Amazon Inspector 配置为 CVEs 自动扫描您的容器。Amazon Inspector 也可以与 Security Hub 集成以进行自动补救。考虑使用 Systems Manager 维护窗口实施定期修补计划,以最大限度地减少对容器的干扰。