修复 Lambda 函数的暴露 - AWS Security Hub

修复 Lambda 函数的暴露

注意

Security Hub 目前为预览版,可能会发生变化。

AWS Security Hub 可以为 AWS Lambda (Lambda) 函数生成暴露调查发现。

在 Security Hub 控制台上,暴露调查发现中涉及的 Lambda 函数及其识别信息列在调查发现详细信息的资源部分中。您可以通过 Security Hub API 的 GetFindingsV2 操作以编程方式检索资源详细信息。

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

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

注意

本主题中提供的修复指导可能需要在其他 AWS 资源中进行额外咨询。

注意

本主题中提供的修复指导可能需要在其他 AWS 资源中进行额外咨询。

Lambda 函数的错误配置特征

以下是 Lambda 函数的配置错误特征和建议的修复步骤。

Lambda 函数正在运行不受支持的运行时

Lambda 允许开发人员通过在托管环境中执行代码的运行时来运行代码,而无需预置或管理服务器。Lambda 会自动将补丁和安全更新应用于托管运行时及其对应的容器基础映像。当运行时版本不再受支持时,它将不再收到安全更新、错误修复或技术支持。在弃用的运行时上运行的函数可能存在安全漏洞,并且可能由于证书过期等问题而最终停止运行。此外,如果没有可用补丁,不受支持的运行时可能容易受到新发现的安全漏洞的攻击。根据安全最佳实践,我们建议对 Lambda 函数使用已修补且受支持的运行时。

升级函数运行时

在暴露的资源选项卡中,通过超链接打开资源。此时将打开 Lambda 函数窗口。要将函数升级到支持的运行时,请配置运行时管理配置。您可以选择让函数自动更新到最新的运行时版本,但在选择此选项之前,请评估自动升级是否会影响您正在运行的应用程序。有关更多信息,请参阅了解 Lambda 如何管理运行时版本更新

Lambda 函数部署在 Amazon VPC 之外

默认情况下,部署 Lambda 函数时可以访问公共互联网。此默认配置使 Lambda 函数能够访问 AWS 服务端点和外部 API,但也使它们面临潜在的安全风险。具有互联网访问权限的函数可能会被用来泄漏数据、与未经授权的服务器进行通信,或者在遭到入侵后成为外部行为者的入口点。Amazon VPC 通过限制 Lambda 函数只能与您定义的私有网络内的资源通信来提供网络隔离。根据标准安全原则,我们建议在 VPC 内部署 Lambda 函数以通过网络隔离提高安全性。

将函数附加到 VPC

在暴露调查发现中,通过超链接打开资源。此时将打开 Lambda 函数窗口。要通过限制其网络访问权限来保护 Lambda 函数,请将其附加到具有适当网络控制的 VPC。在将函数附加到 VPC 之前,请规划其可能需要的任何 AWS 服务访问权限,因为没有 NAT 网关或 VPC 端点的私有子网中的函数将无法访问 AWS 服务 API。有关如何将 Lambda 函数附加到您账户中的 Amazon VPC 的信息,请参阅将 Lambda 函数附加到您的 AWS 账户中的 Amazon VPC。如果您的函数需要从私有子网访问 AWS 服务,请考虑使用 VPC 端点来实现没有互联网访问的服务连接。如果您需要从私有子网进行出站互联网连接,请配置 NAT 网关。

Lambda 函数能够代入 IAM 角色

Lambda 函数使用 IAM 角色与 AWS 服务进行交互。这些角色授予 Lambda 函数在执行期间访问 AWS 资源的权限。虽然这些角色有时是 Lambda 函数执行任务所必需的,但这些角色应遵循最低权限原则。根据标准安全原则,AWS 建议您根据函数的预期功能,审查附加到角色的权限是否合适。

  1. 确定是否需要附加的 IAM 角色

    确定 Lambda 函数是否需要配置 IAM 执行角色。大多数 Lambda 函数需要基本权限才能运行,例如将日志写入 CloudWatch。请检查函数的执行角色所附加的权限,并确定该函数是否需要 IAM 角色。有关 Lambda 执行角色的信息,请参阅《AWS Lambda 开发人员指南》中的使用执行角色定义 Lambda 函数权限

  2. 实施最低权限访问

    将过于宽松的策略替换为仅授予函数运行所需的特定权限的策略。有关 IAM 角色的安全最佳实践的信息,请参阅《AWS Identity and Access Management 用户指南》中的应用最低权限许可。要识别不必要的权限,您可以使用 IAM Access Analyzer 来了解如何基于访问历史记录修改策略。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的外部和未使用的访问的调查发现。或者,您可以创建一个新的 IAM 角色,以避免影响使用现有角色的其他 Lambda 函数。在这种情况下,请创建一个新的 IAM 角色,然后将新的 IAM 角色与实例关联起来。有关替换函数的 IAM 角色的说明,请参阅《AWS Lambda 开发人员指南》中的更新函数的执行角色

与 Lambda 函数关联的 IAM 角色具有管理访问策略

管理访问策略为 Lambda 函数提供对 AWS 服务和资源的广泛权限。这些策略通常包含功能不需要的权限。如果在 Lambda 函数上提供具有管理访问策略的 IAM 身份,而不是执行角色所需的最低权限集,则当函数遭到入侵时,可能会扩大攻击范围。根据标准安全原则,AWS 建议您授予最低权限,这意味着您仅授予执行任务所需的权限。

  1. 查看和识别管理策略

    在暴露调查发现中,识别角色名称。前往 IAM 控制面板,找到具有先前识别的角色名称的角色。查看附加到 IAM 角色的权限策略。如果该策略是 AWS 托管策略,请查找 AdministratorAccessIAMFullAccess。否则,在策略文档中,查找同时包含 "Effect": "Allow", "Action": "*""Resource": "*" 语句的语句。

  2. 实施最低权限访问

    将管理策略替换为仅授予函数运行所需的特定权限的策略。有关 IAM 角色的安全最佳实践的更多信息,请参阅《AWS Identity and Access Management 用户指南》中的应用最低权限许可。要识别不必要的权限,您可以使用 IAM Access Analyzer 来了解如何基于访问历史记录修改策略。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的外部和未使用的访问的调查发现。或者,您可以创建一个新的 IAM 角色,以避免影响使用现有角色的其他 Lambda 函数。在这种情况下,请创建一个新的 IAM 角色。然后将新角色与实例关联起来。有关替换函数的 IAM 角色的信息,请参阅《AWS Lambda 开发人员指南》中的更新函数的执行角色

  3. 安全配置注意事项

    如果实例需要管理访问权限,请考虑实施以下额外安全控制措施来降低风险:

    • 多重身份验证 (MFA) – MFA 通过要求其他形式的身份验证来增加额外安全保障。即使凭证遭到泄露,这也有助于防止未经授权的访问。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的需要多重身份验证 (MFA)

    • IAM 条件 – 通过设置条件元素,您可以基于源 IP 或 MFA 期限等因素限制何时以及如何使用管理权限。有关更多信息,请参阅《IAM 用户指南》中的使用 IAM 策略中的条件进一步限制访问权限

    • 权限边界 – 权限边界规定了角色可以拥有的最大权限,为具有管理访问权限的角色提供防护。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的使用权限边界在账户内委派权限管理

与 Lambda 函数关联的 IAM 角色拥有对 AWS 服务具有管理访问权限的策略

服务管理员策略允许 Lambda 函数在特定的 AWS 服务中执行所有操作。这些策略通常会授予比函数运行所需更多的权限。如果具有服务管理员策略的 Lambda 函数遭到入侵,攻击者可能会利用这些权限访问或修改 AWS 环境中的敏感数据或服务。根据标准安全原则,我们建议您授予最低权限,这意味着您仅授予执行任务所需的权限。

  1. 查看和识别管理策略

    在暴露调查发现中,识别 ARN 中的角色名称。前往 IAM 控制面板,找到角色名称。查看附加到角色的权限策略。如果该策略是 AWS 托管策略,请查找 AdministratorAccessIAMFullAccess。否则,在策略文档中,查找包含 "Effect": "Allow", "Action": "*""Resource": "*" 语句的语句。

  2. 实施最低权限访问

    将管理策略替换为仅授予函数运行所需的特定权限的策略。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的应用最低权限许可。要识别不必要的权限,您可以使用 IAM Access Analyzer 来了解如何基于访问历史记录修改策略。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的外部和未使用的访问的调查发现。或者,您可以创建一个新的 IAM 角色,以避免影响使用现有角色的其他 Lambda 函数。在这种情况下,请创建一个新的 IAM 角色,然后将新的 IAM 角色与实例关联起来。有关替换函数的 IAM 角色的说明,请参阅《AWS Lambda 开发人员指南》中的更新函数的执行角色

  3. 安全配置注意事项

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

    • 多重身份验证 (MFA) – MFA 通过要求其他形式的身份验证来增加额外安全保障。即使凭证遭到泄露,这也有助于防止未经授权的访问。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的需要多重身份验证 (MFA)

    • IAM 条件 – 通过设置条件元素,您可以基于源 IP 或 MFA 期限等因素限制何时以及如何使用管理权限。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的使用 IAM 策略中的条件进一步限制访问权限

    • 权限边界 – 权限边界规定了角色可以拥有的最大权限,为具有管理访问权限的角色提供防护。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的使用许可边界委派权限管理

Lambda 函数的可访问性特征

以下是 Lambda 函数的可访问性特征和建议的修复步骤。

可以公开调用 Lambda 函数

Lambda 基于资源的策略决定了谁可以调用您的函数。资源策略中包含“*”作为主体(或根本没有主体)的函数允许任何经过身份验证的 AWS 用户调用它。这会带来重大风险,特别是对于处理敏感数据、修改资源或拥有提升权限的函数。未经授权的用户可以利用此配置执行不需要的操作,从而可能暴露数据、操纵资源或滥用函数功能。根据安全最佳实践,我们建议仅允许授权主体访问 Lambda 函数。

修改函数的基于资源的策略

在暴露的资源选项卡中,通过超链接打开资源。此时将打开 Lambda 函数窗口。通过在基于资源的策略中指定仅允许授权的 AWS 账户 ID 或特定 IAM 主体(用户、角色或服务),来限制对 Lambda 函数的访问。您只能以编程方式修改基于资源的策略。

Lambda 函数的漏洞特征

以下是 Lambda 函数的漏洞特征和建议的修复步骤。

Lambda 函数存在可通过网络利用的软件漏洞

Lambda 函数代码中使用的软件包可能包含很有可能被利用的通用漏洞披露 (CVE)。严重 CVE 会对您的 AWS 环境带来重大安全风险。攻击者可以利用这些未修补的脆弱性来破坏数据的保密性、完整性或可用性,或访问其他系统。利用可能性较高的严重漏洞代表直接的安全威胁,因为漏洞利用代码可能已经公开并被攻击者或自动扫描工具积极使用。根据安全最佳实践,我们建议修补这些漏洞以保护您的函数免受攻击。

更新受影响的函数

查看特征的漏洞选项卡中的参考部分。供应商文档可能包括具体的修复指导。按照供应商推荐的过程,将易受攻击的库更新到其最新的安全版本。通常,修复工作流取决于您是通过上传 zip 文件来部署 Lambda 包,还是通过创建带有容器映像的 Lambda 函数来部署 Lambda 包。更新库后,请更新 Lambda 函数代码以使用修复后的版本。之后,请部署更新后的版本。

Lambda 函数存在软件漏洞

Lambda 函数经常使用第三方库和依赖项,这些库和依赖项可能包含安全漏洞,但与严重 CVE 相比,这些漏洞的严重性或可利用性较低。虽然这些非关键漏洞可能不会立即被利用,但它们仍然代表着安全漏洞,这些漏洞可能会与其他漏洞关联在一起,从而危及您的函数。随着时间推移,还可能会出现新的漏洞利用技术,从而增加这些漏洞的风险。根据标准安全原则,我们建议修补这些漏洞以维护安全的环境。

查看特征的漏洞选项卡中的参考部分。供应商文档可能包括具体的修复指导。按照供应商推荐的过程,将易受攻击的库更新到其最新的安全版本。通常,修复工作流取决于您是通过上传 zip 文件来部署 Lambda 包,还是通过创建带有容器映像的 Lambda 函数来部署 Lambda 包。更新库后,请更新 Lambda 函数代码以使用修复后的版本。之后,请部署更新后的版本。