AWS - Abusing Lambda Extensions
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
Lambda 扩展通过与各种 监控、可观察性、安全和治理工具 集成来增强功能。这些扩展通过 .zip 文件使用 Lambda 层 添加或包含在 容器镜像部署 中,以两种模式运行:内部 和 外部。
内部扩展 与运行时进程合并,使用 特定语言的环境变量 和 包装脚本 操作其启动。此自定义适用于多种运行时,包括 Java Correto 8 和 11、Node.js 10 和 12,以及 .NET Core 3.1。
外部扩展 作为单独的进程运行,与 Lambda 函数的生命周期保持操作一致。它们与多种运行时兼容,如 Node.js 10 和 12、Python 3.7 和 3.8、Ruby 2.5 和 2.7、Java Corretto 8 和 11、.NET Core 3.1 以及 自定义运行时。
这是本文中提出的技术摘要:https://www.clearvector.com/blog/lambda-spy/
发现 Lambda 运行环境中的默认 Linux 内核是使用 “process_vm_readv” 和 “process_vm_writev” 系统调用编译的。所有进程都以相同的用户 ID 运行,即使是为外部扩展创建的新进程。这意味着外部扩展可以完全读取和写入 Rapid 的堆内存,这是设计使然。
此外,虽然 Lambda 扩展有能力 订阅调用事件,但 AWS 不会向这些扩展透露原始数据。这确保了 扩展无法访问通过 HTTP 请求传输的敏感信息。
Init (Rapid) 进程在 http://127.0.0.1:9001 监控所有 API 请求,而 Lambda 扩展在执行任何运行时代码之前初始化并运行,但在 Rapid 之后。
变量 AWS_LAMBDA_RUNTIME_API
指示 IP 地址和 端口 号,以便 子运行时进程 和其他扩展使用。
通过将 AWS_LAMBDA_RUNTIME_API
环境变量更改为我们可以访问的 port
,可以拦截 Lambda 运行时内的所有操作(中间人攻击)。这是可能的,因为扩展与 Rapid Init 具有相同的权限,并且系统内核允许 修改进程内存,从而能够更改端口号。
因为 扩展在任何运行时代码之前运行,修改环境变量将影响运行时进程(例如,Python、Java、Node、Ruby)的启动。此外,在我们之后加载的扩展,依赖于此变量,也将通过我们的扩展路由。此设置可能使恶意软件完全绕过安全措施或直接在运行时环境中记录扩展。
工具 lambda-spy 被创建用于执行 内存写入 和 窃取敏感信息,从 lambda 请求、其他 扩展 请求 甚至 修改它们。
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)