什么是无服务器安全?
无服务器指的是云计算中的一种云原生开发模式,允许开发人员构建和运行应用程序和服务,而无需管理基础设施或服务器端 IT。无服务器模式中的应用依赖于托管云服务和功能即服务(FaaS)的组合,它们抽象出了管理、修补和保护基础设施和虚拟机的需求。
无服务器架构的优势
据 O'Reilly 称,到 2020 年, 40% 的组织表示已完全采用无服务器架构。此后几年,无服务器已成为一种主流的应用执行环境。 2024 年云原生安全状况报告 》显示,在未来 24 个月内,70% 的调查对象表示计划增加使用量,这表明 云原生安全 将进一步增长。
采用无服务器模式在多个方面有利于应用程序开发:
- 减少运营开销:由于无需管理服务器,开发人员和 DevOps 无需担心大规模扩展基础架构、安装和维护代理或其他与基础架构相关的操作。
- 提高灵活性:由于无服务器应用程序在很大程度上依赖于数据库和身份验证等托管服务,因此开发人员可以专注于应用程序的实际业务逻辑,而这些逻辑通常会在 FaaS(如 AWS® Lambda 或 Google Cloud Functions)上运行。
- 降低成本:对于无服务器应用程序中使用的大多数服务,客户只需为使用付费。例如,对于 AWS Lambda,客户为其功能的执行付费。这通常会对成本产生重大影响,因为他们不必像使用虚拟机那样为未使用的容量付费。
无服务器应用要求无服务器安全
随着软件开发和 IT 运营的每一次重大进步,攻击载体和安全风险也随之发生变化。从虚拟化到 容器安全的早期,安全专业人员必须适应并找到加固、防御和治理基础设施的新方法。在应用程序安全方面,无服务器应用程序的概念带来了有史以来最大的模式转变之一。
传统上,组织会依靠基础设施和基于网络的工具来保护其应用程序。他们会使用防火墙检查流量,尝试使用入侵检测系统检测恶意活动,或使用运行时应用程序自我保护(或 RASP)技术保护应用程序。即使有了容器,组织仍然可以在一定程度上依赖底层基础设施的安全性。
无服务器应用程序由协同工作的分布式云服务组成,例如触发 Lambda 函数的 S3 bucket,Lambda 函数又会触发 DynamoDB®。在这种架构中,没有防火墙、IDS/IPS 工具或任何类型的仪器代理或基于服务器的保护方法的空间。无服务器模式不再关注网络检测和访问控制列表,而是将安全重点转移到 IAM 权限、行为保护和 强代码上。
无服务器攻击向量
采用无服务器安全可从安全角度为应用程序提供强大的先发优势,因为组织不再需要担心基础设施、网络或主机安全。然而,新的攻击载体已经出现,熟悉的攻击方式也针对无服务器环境进行了重新设计。让我们来看一个例子(完整列表请参阅云安全联盟的《 无服务器应用程序的 12 大风险》):
事件数据注入
应用程序中的注入漏洞是迄今为止最常见的风险之一,许多安全编码最佳实践指南对此都有详尽的介绍。从高层次上讲,当未受信任的输入在执行或评估之前直接传递给解释器时,就会出现注入缺陷。不过,在无服务器架构中,函数事件数据注入并不严格局限于直接的用户输入(如来自 网络 API 调用的输入)。大多数无服务器架构都提供了大量可触发无服务器功能执行的事件源。
事件数据注入源示例包括
- 云存储事件(如 AWS S3®、Azure Blob Storage、Google Cloud Storage)
- NoSQL 数据库事件(如 AWS DynamoDB、Azure Cosmos DB®)
- SQL 数据库事件
- 流处理事件(如 Amazon Kinesis®)
- 代码变更和新代码存储库代码提交
- HTTP API 调用
每个事件输入可能包括不同的信息格式,这些事件信息的不同部分可能包含攻击者控制的或其他危险的输入。丰富的事件源增加了潜在的攻击面,并在试图保护无服务器功能免受事件数据注入时引入了复杂性。这一点尤其正确,因为无服务器架构不像网络环境那样为人所熟知,在网络环境中,开发人员知道哪些消息部分不值得信任(如 GET/POST 参数、HTTP 头等)。
保护无服务器应用程序
有效的无服务器安全侧重于确保代码完整性、严格的权限和行为分析。
- 访问和权限:为无服务器功能和其他服务维护 最低权限访问 。例如,如果 AWS Lambda 函数需要访问一个 DynamoDB 表,请确保它只能执行业务逻辑要求的特定操作。
- 漏洞扫描:通过定期扫描易受攻击的第三方依赖关系、配置错误和过度许可角色,确保代码和 基础架构即代码模板的完整性 。
- 运行时保护:使用运行时保护检测恶意事件输入和异常函数行为,并根据需要限制每个函数访问文件、主机、互联网和生成子进程的能力。