修复 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 函数部署在亚马逊 VPC 之外

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

将函数附加到 VPC

在曝光度调查结果中,使用超链接打开资源。这将打开 Lambda 函数窗口。要通过限制您的 Lambda 函数的网络访问来保护其安全,请将其连接到具有相应网络控制的 VPC。在将您的函数附加到 VPC 之前,请规划其可能需要的任何 AWS 服务访问权限,因为没有 NAT 网关或 VPC 终端节点的私有子网中的函数将无法 AWS 访问服务。 APIs有关如何将 Lambda 函数附加到您账户中的亚马逊 VPC 的信息,请参阅中的将 Lambda 函数附加到亚马逊 VPC。 AWS 账户如果您的功能需要从私有子网内访问服务,请考虑使用 VPC 终端节点进行 AWS 服务连接,无需访问 Internet。如果您需要私有子网的出站互联网连接,请配置 NAT 网关。

Lambda 函数能够担任 IAM 角色

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

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

    确定 Lambda 函数是否需要配置 IAM 执行角色。大多数 Lambda 函数都需要基本权限才能操作,例如将日志写入。 CloudWatch查看附加到函数执行角色的权限,并确定该函数是否需要 IAM 角色。有关 Lambda 执行角色的信息,请参阅开发人员指南中的使用执行角色定义 Lambda 函数权限。AWS 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 服务和资源的广泛权限。这些策略通常包括功能不需要的权限。向 IAM 身份提供对 Lambda 函数的管理访问策略,而不是执行角色所需的最低权限集,如果该函数遭到破坏,则可能会扩大攻击范围。遵循标准的安全原则, 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 要求使用其他形式的身份验证,从而增加了额外的安全层。即使凭据遭到泄露,这也有助于防止未经授权的访问。有关更多信息,请参阅《用户指南》中的 “需要多重身份验证 (MFA) AWS Identity and Access Management ”

    • 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 要求使用其他形式的身份验证,从而增加了额外的安全层。即使凭据遭到泄露,这也有助于防止未经授权的访问。有关更多信息,请参阅《用户指南》中的 “需要多重身份验证 (MFA) AWS Identity and Access Management ”

    • IAM 条件 — 设置条件元素允许您根据来源 IP 或 MFA 年龄等因素限制何时以及如何使用管理权限。有关更多信息,请参阅AWS Identity and Access Management 用户指南中的使用 IAM 策略中的条件进一步限制访问权限

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

Lambda 函数的可达性特征

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

可以公开调用 Lambda 函数

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

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

在曝光的 “资源” 选项卡中,打开带有超链接的资源。这将打开 Lambda 函数窗口。通过在基于资源的策略中仅指定授权 AWS 账户 IDs 或特定的 IAM 委托人(用户、角色或服务),限制对您的 Lambda 函数的访问。您只能通过编程方式修改基于资源的策略。

Lambda 函数的漏洞特征

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

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

Lambda 函数代码中使用的软件包可能包含很有可能被利用的常见漏洞和漏洞 (CVEs)。 CVEs 危急会给您的 AWS 环境带来严重的安全风险。攻击者可以利用这些未修补的脆弱性来破坏数据的保密性、完整性或可用性,或访问其他系统。由于漏洞利用代码可能已经公开并被攻击者或自动扫描工具积极使用,因此具有高利用可能性的关键漏洞构成了直接的安全威胁。按照安全最佳实践,我们建议修补这些漏洞,以保护您的功能免受攻击。

更新受影响的函数

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

Lambda 函数存在软件漏洞

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

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