01 · 参考架构与组件解构
1.1 FaaS/BaaS 参考架构六层模型
函数应用并非"一个函数",而是一条由多层托管服务拼接的调用链。任何一层配置失误都会成为整链的短板,因此攻击面分析必须以架构分层为单位展开。下表为课题内部使用的参考模型(与各云厂商官方架构文档一致):
| 架构层 | 典型组件 | 核心安全关切 |
|---|---|---|
| L1 访问层 | API网关、函数URL、边缘网络(CloudFront类CDN) | 认证与授权缺失、无节流、WAF缺位、CORS过宽、域名/证书治理 |
| L2 事件层 | SQS/SNS/EventBridge、Pub/Sub、定时调度、存储事件通知、数据库流 | 事件注入、公开主题/队列、事件规则被篡改(持久化)、跨账号事件投毒 |
| L3 计算层 | 函数运行时、执行环境、Layer、容器镜像函数 | 隔离强度、运行时版本弃用、资源限额、临时目录滥用、代码与依赖漏洞 |
| L4 编排层 | Step Functions/Workflows、Durable Functions、回调与状态机 | 状态机任务角色过宽、输入注入、任务令牌泄露、长流程状态污染 |
| L5 后端层(BaaS) | S3/DynamoDB/Firestore/Cosmos DB、KMS、消息队列 | 数据权限最小化、公开存储桶、静态与传输加密、密钥归属 |
| L6 治理层 | IAM、CloudTrail/审计日志、监控告警、Secrets Manager、预算 | 凭证最小化与轮换、审计覆盖、密钥托管、计费护栏与滥用发现 |
1.2 函数生命周期与执行环境关键事实
理解函数安全必须先理解执行模型。以AWS Lambda官方文档为基准(各平台机制不同但范式一致):
- 部署形态:代码包(zip,含Layer)或容器镜像(2020年12月起支持);发布不可变版本与可移动别名,回滚以别名切换实现。
- 执行环境:每个执行环境运行在一个独立的Firecracker微虚机中,与主机及其他租户硬件级隔离;官方文档明确每个执行环境默认串行处理一个请求(部分自定义运行时可通过并发参数调整),事件处理之间环境可能被复用。
- 文件系统:除/tmp目录外只读;/tmp提供10,240MB临时存储,其内容可能在多次调用间短时保留——官方文档明确警告不可将其作为可靠存储或信任其中的残留数据(本函数写入的临时文件在异常终止时可能遗留,敏感数据写入/tmp即构成泄露面)。
- 资源约束(官方配额):单次执行最长15分钟(900秒);内存128MB—10,240MB(控制台新建默认128MB),内存决定vCPU配额(1,769MB约对应1个vCPU);同步调用负载上限6MB、异步事件负载上限256KB;默认并发上限每区域1,000。
- 网络:函数默认具备出站互联网访问能力且无入站监听;接入VPC后失去直接出站能力,改经NAT/Endpoints通信——出站面既是数据外泄通道也是管控抓手。
责任分界提示:以上隔离机制(微虚机、文件系统约束、网络模型)由云服务商维护,属"云自身安全";但每个函数的内存/超时配置、/tmp使用方式、出站目的地、事件源绑定全部为客户责任面——历史云安全事件几乎均发生在客户侧配置,而非平台隔离失效(Capital One 2019年事件的根因是应用侧SSRF与凭证治理,而非AWS平台漏洞)。
02 · 攻击面六域全景
综合OWASP Serverless Top 10(2019)的风险谱系与主流平台配置面,本课题将函数攻击面归纳为六域。下表同时给出六域与OWASP十条风险的映射:
| 攻击面域 | 典型弱点 | OWASP Serverless Top 10 映射 |
|---|---|---|
| 访问与调用面 | 函数公网匿名可达(资源策略Principal:*、函数URL AuthType NONE)、API网关无认证、CORS通配 | SAS-02 失效认证;SAS-03 不安全部署配置 |
| 事件与输入面 | 事件注入(对象键、消息属性、Webhook体)、Schema缺失、重试风暴、执行流程操纵 | SAS-01 注入;SAS-09 执行流程操纵 |
| 身份与权限面 | 执行角色通配符权限、跨账号信任滥用、共享角色、长期凭证泄露 | SAS-04 权限过宽 |
| 代码与依赖面 | 存在漏洞的第三方依赖、恶意包投毒、硬编码密钥、危险反序列化 | SAS-06 第三方依赖;SAS-07 密钥存储不当 |
| 配置与资源面 | 环境变量明文敏感信息、超时/内存过度配置、日志未开启或保留期过短、死信队列缺失 | SAS-03;SAS-05 日志与监控不足 |
| 计费资源面 | 无并发护栏被刷流量、无预算告警、凭证泄露后被用于挖矿与垃圾邮件中继 | SAS-08 拒绝服务与财务资源耗尽 |
03 · 默认配置高危点清单
函数平台的设计哲学是"最快跑通"——默认配置面向开发便利而非生产安全。以下清单来自各平台官方文档的行为描述与公开安全基线,是新建函数时最常见的危险出厂状态:
| 编号 | 高危默认配置 | 风险机理 | 基线处置 |
|---|---|---|---|
| D1 | 资源策略允许公网匿名调用 | Lambda资源策略Principal设为*、或函数URL AuthType=NONE,函数直接暴露互联网 | 资源策略显式列举主体;函数URL默认IAM型并纳入审计 |
| D2 | 执行角色模板化宽权限 | 部分部署模板为省事赋予arn:aws:iam::aws:policy/AdministratorAccess或通配符服务权限 | 一函数一角色,从拒绝开始按需放行(第3页) |
| D3 | 环境变量明文存密钥 | DescribeFunctionConfiguration/GetFunction对角色可读;日志与异常栈常回显环境变量 | 高价值密钥迁移Secrets Manager/Key Vault类托管服务(第3页) |
| D4 | 未配置死信队列/失败目标 | 异步事件默认重试2次后静默丢弃,注入或故障事件不可审计 | 全部异步函数配置DLQ或Destinations(第5页) |
| D5 | 日志未开启或保留期过短 | 函数日志默认保留期有限;无法满足《网络安全法》第21条"网络日志留存不少于六个月"合规要求 | 集中日志库显式设置保留期≥6个月(第7、8页) |
| D6 | API网关无节流与使用计划 | 账户级默认节流被单个函数耗尽,计费面被刷 | 方法级节流+Usage Plan配额+预算告警三件套(第5、7页) |
| D7 | 事件源侧策略公开 | SQS队列/SNS主题/S3桶策略允许匿名投递,攻击者绕过网关直接向函数喂毒事件 | 事件源侧按主体最小化,桶默认私有(第5页) |
| D8 | 函数无并发护栏 | 单个失控函数可吃满账户级1,000并发,拖垮同区域全部函数 | 关键函数预留并发上限;熔断时置0(第7页) |
04 · 典型案例剖析(事件档案)
| 时间 | 事件 | 关键事实与函数安全启示 |
|---|---|---|
| 2019.3—7 | Capital One数据泄露 | 应用SSRF获取EC2实例元数据中的临时角色凭证,进而读取S3数据(约1亿美国+600万加拿大客户记录)。函数场景同构风险:Lambda虽无EC2式实例元数据服务(IMDS),但函数代码中硬编码的凭证、事件注入获取的执行角色临时凭证、以及出站SSRF读取内网元数据服务(如自建服务暴露的凭证端点)构成同构链路——凭证治理与出站控制是第一防线。 |
| 2020.12 | Log4Shell(CVE-2021-44228) | CVSS 10.0。AWS官方博客(2021年12月)明确分层处置:托管Lambda运行时已修复并发布热修补层,但函数自带依赖(fat-jar内的log4j-core)仍需客户自行升级。"平台已打补丁"与"我的依赖已打补丁"之间隔着整个供应链责任面(第6页)。 |
| 2023.1 | Denonia(Cado Security披露) | 首个公开针对AWS Lambda执行环境的恶意软件样本:x86_64 ELF二进制,运行XMRig门罗币挖矿程序,通过DNS over HTTPS(Cloudflare/Google DoH端点)解析矿池域名以规避传统DNS检测,样本内含Lambda环境探测逻辑;部署途径推测为凭证泄露。启示:①函数是直接的攻击目标而非跳板;②出站DNS可见性是检测命门;③凭证泄露→批量部署→挖矿的链路真实存在(第7页深度剖析)。 |
| 2020—2022 | 函数与边缘服务被用于钓鱼托管 | 多项公开报告披露攻击者滥用云函数、函数URL与对象存储静态托管搭建钓鱼页面与跳转基础设施,利用云域名信誉绕过邮件网关拦截。与主课题"云基础设施与反钓鱼治理"联动:函数URL与API网关已成为低成本钓鱼托管面,处置需依赖云厂商滥用举报通道与分钟级下架联动。 |
05 · 典型攻击路径图谱
将公开事件与研究文献中的攻击手法串成一条七步路径,每一步标注对应的平台审计事件(以AWS CloudTrail为例,便于检测章节直接映射):
| 阶段 | 攻击动作 | 说明 | 平台侧可见信号(CloudTrail事件) |
|---|---|---|---|
| 1 | 侦察与资产发现 | 枚举云域名、网关端点、函数URL(格式可预测),识别技术栈与公开面 | —(被动);后续扫描会在网关访问日志留痕 |
| 2 | 未授权调用 / 事件注入 | 匿名调用公开函数,或经S3对象键/消息属性/Webhook体注入恶意载荷 | 函数日志异常;网关4xx/5xx突增 |
| 3 | 权限探测与凭证窃取 | 探测执行角色权限边界;从环境变量/配置/出站元数据端点窃取凭证 | ListFunctions/GetFunction调用激增;角色AssumeRole记录 |
| 4 | 数据访问与外泄 | 利用角色权限读取S3/DynamoDB,经出站连接外传 | 数据事件日志(S3对象级)需显式开启;GuardDuty异常 |
| 5 | 持久化 | 新增定时规则/事件源映射、修改函数代码、创建后门函数版本 | CreateFunction/UpdateFunctionCode/PutRule/CreateEventSourceMapping事件(第7页重点检测场景) |
| 6 | 资源滥用 | 挖矿(Denonia)、钓鱼托管、垃圾邮件中继、刷账单 | 异常DNS/矿池连接、账单异常、并发打满 |
| 7 | 痕迹清理 | 删除日志、停用检测器、删除函数别名混淆回滚 | DeleteLogGroup/StopLogging类事件——本身即高危信号 |
本节参考来源(第2页)
以下均为真实可查的权威来源,用于支撑本页事实性表述。
OWASP《Serverless Top 10》(2019年)风险条目:SAS-01至SAS-10:owasp.org/www-project-serverless-top-ten。
AWS Lambda官方文档(执行环境与生命周期、文件系统/tmp行为、并发模型):Lambda execution environment;Lambda quotas。
AWS官方博客:Lambda函数URL发布(2022年4月):Announcing AWS Lambda Function URLs。
AWS API Gateway官方文档(节流默认值、集成超时29秒上限):API Gateway开发者指南。
Capital One事件:公司披露与美国司法部起诉材料:justice.gov。
AWS Security Blog:如何应对Log4Shell对Lambda函数的影响(2021年12月,含托管运行时修复与热修补层说明):AWS Security Blog。
Cado Security:Denonia恶意软件分析(2023年1月):Cado Security官方博客。
MITRE ATT&CK Cloud矩阵(攻击阶段映射参考):attack.mitre.org。