本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
修复 Lambda 函数的暴露
AWSSecurity Hub 可以为 AWS Lambda (Lambda) 函数生成暴露结果。
在 Security Hub 控制台上,暴露调查发现中涉及的 Lambda 函数及其识别信息列在调查发现详细信息的资源部分中。通过编程方式,您可以通过 Security Hub CSP GetFindingsV2M API 的操作来检索资源详细信息。
在确定暴露调查发现中涉及的资源后,如果不需要该资源,您可以将其删除。删除不必要的资源可以减少您的曝光概况和AWS成本。如果资源至关重要,请按照这些建议的修复步骤进行操作以帮助降低风险。修复主题根据特征的类型进行划分。
单个暴露调查发现包含在多个修复主题中发现的问题。相反,您只需解决一个修复主题即可解决暴露调查发现并降低其严重性级别。您的风险修复方法取决于您的组织要求和工作负载。
注意
本主题中提供的补救指南可能需要在其他AWS资源中进行进一步的咨询。
目录
Lambda 函数的错误配置特征
以下是 Lambda 函数的错误配置特征和建议的修复步骤。
Lambda 函数正在运行不受支持的运行时
Lambda 允许开发人员通过在托管环境中执行代码的运行时来运行代码,而无需预置或管理服务器。Lambda 会自动将补丁和安全更新应用于托管运行时及其对应的容器基础映像。当运行时版本不再受支持时,它将不再收到安全更新、错误修复或技术支持。在弃用的运行时上运行的函数可能存在安全漏洞,并且可能由于证书过期等问题而最终停止运行。此外,如果没有可用补丁,不受支持的运行时可能容易受到新发现的安全漏洞的攻击。根据安全最佳实践,我们建议对 Lambda 函数使用已修补且受支持的运行时。
升级函数运行时
在暴露的资源选项卡中,通过超链接打开资源。此时将打开 Lambda 函数窗口。要将函数升级到支持的运行时,请配置运行时管理配置。您可以选择让函数自动更新到最新的运行时版本,但在选择此选项之前,请评估自动升级是否会影响您正在运行的应用程序。有关更多信息,请参阅了解 Lambda 如何管理运行时版本更新。
Lambda 函数部署在 Amazon VPC 之外
默认情况下,部署 Lambda 函数时可以访问公共互联网。此默认配置使 Lambda 函数能够访问AWS服务端点和外部端点 APIs,但也使它们面临潜在的安全风险。具有互联网访问权限的函数可能会被用来泄漏数据、与未经授权的服务器进行通信,或者在遭到入侵后成为外部行为者的入口点。Amazon VPC 通过限制 Lambda 函数只能与您定义的私有网络内的资源通信来提供网络隔离。根据标准安全原则,我们建议在 VPC 内部署 Lambda 函数以通过网络隔离提高安全性。
将函数附加到 VPC
在暴露调查发现中,通过超链接打开资源。此时将打开 Lambda 函数窗口。要通过限制其网络访问权限来保护 Lambda 函数,请将其附加到具有适当网络控制的 VPC。在将您的函数附加到 VPC 之前,请规划其可能需要的任何AWS服务访问权限,因为没有 NAT 网关或 VPC 终端节点的私有子网中的函数将无法AWS访问服务。 APIs有关如何将 Lambda 函数附加到您账户中的 Amazon VPC 的信息,请参阅将 Lambda 函数附加到您的 AWS 账户中的 Amazon VPC。如果您的功能需要从私有子网内访问服务,请考虑使用 VPC 终端节点进行AWS服务连接,无需访问 Internet。如果您需要从私有子网进行出站互联网连接,请配置 NAT 网关。
Lambda 函数能够代入 IAM 角色
Lambda 函数使用 IAM 角色与服务进行交互。AWS这些角色授予 Lambda 函数在执行期间访问AWS资源的权限。虽然这些角色有时是 Lambda 函数执行任务所必需的,但这些角色应遵循最低权限原则。根据标准的安全原则,AWS建议您根据该功能的预期功能,查看附加到该角色的权限是否合适。
-
确定是否需要附加的 IAM 角色
确定 Lambda 函数是否需要配置 IAM 执行角色。大多数 Lambda 函数都需要基本权限才能操作,例如将日志写入。 CloudWatch请检查函数的执行角色所附加的权限,并确定该函数是否需要 IAM 角色。有关 Lambda 执行角色的信息,请参阅《AWS Lambda 开发人员指南》中的使用执行角色定义 Lambda 函数权限。
-
实施最低权限访问
将过于宽松的策略替换为仅授予函数运行所需的特定权限的策略。有关 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 建议您授予最低权限,这意味着您仅授予执行任务所需的权限。
-
查看和识别管理策略
在暴露调查发现中,识别角色名称。前往 IAM 控制面板,找到具有先前识别的角色名称的角色。查看附加到 IAM 角色的权限策略。如果该策略是AWS托管策略,请查找
AdministratorAccess或IAMFullAccess。否则,在策略文档中,查找同时包含"Effect": "Allow", "Action": "*"和"Resource": "*"语句的语句。 -
实施最低权限访问
将管理策略替换为仅授予函数运行所需的特定权限的策略。有关 IAM 角色的安全最佳实践的更多信息,请参阅《AWS Identity and Access Management 用户指南》中的应用最低权限许可。要识别不必要的权限,您可以使用 IAM Access Analyzer 来了解如何基于访问历史记录修改策略。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的外部和未使用的访问的调查发现。或者,您可以创建一个新的 IAM 角色,以避免影响使用现有角色的其他 Lambda 函数。在这种情况下,请创建一个新的 IAM 角色。然后将新角色与实例关联起来。有关替换函数的 IAM 角色的信息,请参阅《AWS Lambda 开发人员指南》中的更新函数的执行角色。
-
安全配置注意事项
如果实例需要管理访问权限,请考虑实施以下额外安全控制措施来降低风险:
-
多重身份验证(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环境中的敏感数据或服务。根据标准安全原则,我们建议您授予最低权限,这意味着您仅授予执行任务所需的权限。
-
查看和识别管理策略
在暴露调查发现中,识别 ARN 中的角色名称。前往 IAM 控制面板,找到角色名称。查看附加到角色的权限策略。如果该策略是AWS托管策略,请查找
AdministratorAccess或IAMFullAccess。否则,在策略文档中,查找包含"Effect": "Allow", "Action": "*"和"Resource": "*"语句的语句。 -
实施最低权限访问
将管理策略替换为仅授予函数运行所需的特定权限的策略。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的应用最低权限许可。要识别不必要的权限,您可以使用 IAM Access Analyzer 来了解如何基于访问历史记录修改策略。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的外部和未使用的访问的调查发现。或者,您可以创建一个新的 IAM 角色,以避免影响使用现有角色的其他 Lambda 函数。在这种情况下,请创建一个新的 IAM 角色,然后将新的 IAM 角色与实例关联起来。有关替换函数的 IAM 角色的说明,请参阅《AWS Lambda 开发人员指南》中的更新函数的执行角色。
-
安全配置注意事项
如果实例需要服务级别的管理权限,请考虑实施以下额外安全控制措施来降低风险:
-
多重身份验证(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账户 IDs 或特定的 IAM 委托人(用户、角色或服务),限制对您的 Lambda 函数的访问。您只能以编程方式修改基于资源的策略。
Lambda 函数的漏洞特征
以下是 Lambda 函数的漏洞特征和建议的修复步骤。
Lambda 函数存在可通过网络利用的软件漏洞
Lambda 函数代码中使用的软件包可能包含很有可能被利用的常见漏洞和漏洞 (CVEs)。 CVEs 危急会给您的AWS环境带来严重的安全风险。攻击者可以利用这些未修补的漏洞来破坏数据的保密性、完整性或可用性,或访问其他系统。利用可能性较高的严重漏洞代表直接的安全威胁,因为漏洞利用代码可能已经公开并被攻击者或自动扫描工具积极使用。根据安全最佳实践,我们建议修补这些漏洞以保护您的函数免受攻击。
更新受影响的函数
查看特征的漏洞选项卡中的参考部分。供应商文档可能包括具体的修复指导。按照供应商推荐的过程,将易受攻击的库更新到其最新的安全版本。通常,修复工作流取决于您是通过上传 zip 文件来部署 Lambda 包,还是通过创建带有容器映像的 Lambda 函数来部署 Lambda 包。更新库后,请更新 Lambda 函数代码以使用修复后的版本。之后,请部署更新后的版本。
Lambda 函数存在软件漏洞
Lambda 函数通常使用第三方库和依赖项,这些库和依赖项可能包含安全漏洞,与严重漏洞相比,其严重性或可利用性较低。 CVEs虽然这些非关键漏洞可能不会立即被利用,但它们仍然代表着安全隐患,这些隐患可能会与其他漏洞关联在一起,从而危及您的函数。随着时间推移,还可能会出现新的漏洞利用技术,从而增加这些漏洞的风险。根据标准安全原则,我们建议修补这些漏洞以维护安全的环境。
查看特征的漏洞选项卡中的参考部分。供应商文档可能包括具体的修复指导。按照供应商推荐的过程,将易受攻击的库更新到其最新的安全版本。通常,修复工作流取决于您是通过上传 zip 文件来部署 Lambda 包,还是通过创建带有容器映像的 Lambda 函数来部署 Lambda 包。更新库后,请更新 Lambda 函数代码以使用修复后的版本。之后,请部署更新后的版本。
Lambda 函数包含恶意软件包
恶意软件包是包含有害代码的软件组件,旨在危害系统和数据的机密性、完整性和可用性。恶意软件包会对您的 Lambda 函数构成严重威胁,因为攻击者可以在不利用漏洞的情况下自动执行恶意代码。按照安全最佳实践,AWS建议移除恶意软件包,以保护您的 Lambda 函数免受潜在攻击。
移除恶意软件包
在特征的 “漏洞” 选项卡的 “参考” 部分中查看恶意软件包的详细信息,以了解威胁。从您的函数代码和依赖项中移除已识别的恶意软件包。对于使用图层的函数,请检查是否在任何层中安装了恶意软件包,然后将其删除。更新您的部署包或容器映像以排除恶意软件包,然后部署更新的版本。有关说明,请参阅将 Lambda 函数部署为.zip 文件存档的.zip 文件存档或使用容器映像创建容器映像的 Lambda 函数。