由于云计算的发展,带来了如对象存储等很多丰富的中间件,应用开发者希望可以不用写后端逻辑,直接把逻辑写在客户端,组合云上的一些服务来完成业务逻辑,FaaS的概念逐渐浮现。
2014 年 AWS 在拉斯维加斯的 re:Invent 大会发布 Lambda ,得到业界非常大的关注。从 Lambda 开始,每个云厂商都逐渐有了自己的无服务器服务。
以 AWS Lambad 为例,基本定义了什么叫 Serverless,只要一个服务具备了四方面特性:免运维、按需付费、高可用和自动扩容,这个服务就是个 Serverless 的服务。所以 Serverless 这个概念可以对应 FaaS,也可以代表一种架构,也可以代表一种服务的形态。而Serverless与容器的区别在于,Serverless 是无容器的,除了不关注服务器,也看不到容器。两者是面向不同场景的,并不是互相替代的关系。
OWASP自2017年就提出了无服务器应用风险TOP10,下面将详细介绍其风险
A1 | 注入 |
---|---|
A2 | 失效的身份验证 |
A3 | 敏感数据泄露 |
A4 | XML外部实体 |
A5 | 失效的访问控制 |
A6 | 安全配置错误 |
A7 | 跨站脚本 |
A8 | 不安全的反序列化 |
A9 | 使用含有已知漏洞的组件 |
A10 | 不足的日志记录和监控 |
攻击向量 | API调用、云存储时间、留时间处理、数据库更改、代码更改通知 |
---|---|
安全弱点 | SQL/NoSQL注入、命令注入(关注于容器里的代码和敏感信息) |
影响 | 取决于受攻击函数的权限 |
总体评价 | 攻击门槛较高、API攻击安全可预测、但攻击面更广 |
SQL注入,OS命令注入,代码注入之类的攻击以及许多其他攻击的方式通常是黑客的最爱,同时,在蓝方看来,这些攻击一直被认为是头号风险,他们通常会尽一切努力来防止它们。即使经过至少二十年的整体应用程序开发,仍然存在这些问题。
所以,这依旧在OWASP无服务安全领域排行前十。但是,对于注入攻击的防护比以前的更加容易。在无服务出现之前,注入攻击几乎是相同的攻击流程。应用程序处理来自不受信任源的输入,该输入通过网络进入应用程序。
尽管第一部分依旧是一样的,但在无服务器的“网络”上却是一个更复杂的术语。无服务器功能通常是通过事件触发的。事件可以是基础架构提供的任何服务,例如云存储,电子邮件或通知。
这意味着编写安全的代码更加重要,我们不能再相信网络外围放置的安全控制设备为我们提供保护。我们留下的代码可以在不知道目标优劣,不知道发生了什么的情况下运行。如果该函数的代码容易受到任何类型的注入攻击,那么在无服务器环境中,通常将其称为事件注入。
以owasp的官方靶场为例,输入任意网址然后添加 ; ls
返回结果如下,可以看到由攻击者输入的ls命令被服务器端执行
攻击向量 | 公有云存储或开发的API、欺骗性电子邮件 |
---|---|
安全弱点 | 潜在的入口点、服务、事件和触发器 |
影响 | 敏感信息泄露、破坏系统的业务逻辑和业务流程 |
总体评价 | 无服务器使用完整和安全的身份验证方案比较复杂、识别没有身份 验证的内部触发函数是一个挑战 |
攻击向量 | 窃取密钥、中间人攻击、在静态存储和传输中获取数据、Github获取密钥、函数的运行环境如/tmp目录中获取函数的源代码和环境变量 |
---|---|
安全弱点 | 明文形式存储敏感数据、容器销毁时不清理/tmp目录 |
影响 | 敏感数据暴露造成的维护与传统模式一致 |
总体评价 | 敏感数据泄露是一个风险,但服务提供商提供了一整套安全方案帮助开发者保护自己的数据 |
即可查看到亚马逊云的access_key等敏感参数,通过这些关键数据访问其存储服务可以造成更进一步的利用
攻击向量 | 云存储上传事件触发 |
---|---|
安全弱点 | 使用XML处理器可能导致XXE攻击 |
影响 | 可能导致函数代码和敏感文件泄露 |
总体评价 | 使用供应商的SDK可以降低XXE的风险和影响,如果使用了XML解 析,请确保安全 |
攻击向量 | 超特权功能为目标,而不是控制环境 |
---|---|
安全弱点 | 授予函数过多资源的权限是潜在的后门,不遵守最低授权原则的函数都可能导致访问控制受损 |
影响 | 取决于受损的资源 |
总体评价 | 就算不存在基础设施,也可能会泄露敏感数据 |
攻击向量 | 无链接的触发器、公共存储桶 |
---|---|
安全弱点 | Github密钥泄露、长超时函数攻击和低并发函数攻击 |
影响 | 敏感信息丢失、资金损失、DoS攻击,严重情况下导致未经授权访问云资源 |
总体评价 | 入口点数量增加、但是影响降低 |
攻击向量 | 存储攻击,Email、存储、日志等 |
---|---|
安全弱点 | 在JSON中解析不受信任的数据 |
影响 | 敏感信息泄露 |
总体评价 | 更多攻击媒介,但影响更小 |
以owasp的官方靶场为例,使其包含一个恶意的doc文档。
文档内容如下:
成功触发弹框:
攻击向量 | Python、NodeJS和JSON的普及使得向量很广泛 |
---|---|
安全弱点 | 第三方库处理JSON数据引入漏洞 |
影响 | 任意代码执行和数据泄露 |
总体评价 | 攻击面很小、但影响很巨大 |
与可能的攻击向量一起,大多数函数使用第三方库来处理数据的序列化,可能会给我们的无服务器应用带来这样的弱点。反序列化漏洞在 Python(如:pickle)和 JavaScript(如:nodeserialize)中很常见,但也可能在.NET 和 Java 中找到。
像往常一样,业务影响取决于应用及其处理的数据。不安全的反序列化通常导致运行任意代 码,最终可能导致数据泄漏,在严重的情况下甚至会导致数据泄漏资源和帐户控制。
攻击向量 | 依赖库和第三方库 |
---|---|
安全弱点 | 问题很普遍 |
影响 | 一些大规模的漏洞爆发正是利用了已知组件的漏洞 |
总体评价 | 每个函数都会带一大堆的依赖,所以漏洞存在的可能性更高 |
攻击向量 | 依靠监控和日志记录不足来避免被发现,无服务器审计更加困难 |
---|---|
安全弱点 | 不实施恰当的审计机制和仅依赖服务提供商的手段 |
影响 | 影响不确定,但太晚发现攻击可能造成很大的损失 |
总体评价 | 缺乏恰当审计机制所造成的影响本身是无法确定的。但是,太晚发现安全事件的影响可能是重大的。攻击者可能已经成为应用的一部分,并感染了代码。值得一提的是,无服务器函数的短暂性降低了攻击的粘性,这意味着即使应用被感染,如果攻击者不使用技术使攻击持续下去,它可能会自行消失。 |
除TOP10以外从实战环境视角参考还有一些其他需要考虑的风险
在实际场景中,每个事件都是在一个单独环境中处理的,这意味着传统的 DoS 攻击与当前场景不太一样。即使攻击者设法让容器不可用,但它也只会影响进入此环境的事件,而不会影响下一个即将发生的事件。
但是这不代表威胁不存在,只要着眼于当前条件,攻击者照样可以实现跨账户的 DoS:
加固基础设施有助于防御此类攻击,AWS 甚至还提供了一些解决方案(如:AWS Shield)。因此,针对此类攻击,风险较低。
风险值:2分
自动化的可伸缩性和可用性是使用无服务器的原因之一。这允许应用开发人员只为自己使用的部分付费,并将扩展应用的责任转移到基础设施提供商。
由于这种天然特性。攻击者可以疯狂触发资源(如:外部 API、公共存储),让服务提供者造成大量资源损失从而加大资金开销。
为了“防止”此类攻击,AWS 允许配置调用或预算的限制。然而,如果攻击者可以达到该限制,他可能会对账户可用性进行 DoS 攻击。在传统体系架构中,攻击并不像在无服务器体系架构中那样简单。因此,该问题风险相当高。
风险值:9分
安全的管理我们所有的机密信息总是很难的。然而,机密信息通常可以在后台一个受保护的地方进行管理。在无服务器中,它们在账户中跨资源共享。
像密钥、API 令牌、存储凭证和其他敏感设置等这样的机密信息,现在更容易在函数和代码之间共享,这可能会导致敏感数据泄露的风险难以缓解。
此外,如果机密信息以环境变量的方式被存储在每个函数所部署的环境之中,而不是一个传统的配置文件,那么如果受到破坏,就很难对所有函数进行更改。
另一方面,与现场编译版本相比,在云原生应用上更改已获取的密钥更容易。因此,总体风险应与传统应用中的风险相等。
风险值:5分
如果容器没有被销毁,那么无服务器的环境空间在调用之间是被共享的,这意味着,如果应用将一些数据写入用户空间(如:/tmp),并且在使用后没有手动删除这些数据,并且认为容器将会销毁,那么攻击者就可以利用这些数据窃取其他用户的数据。
这可能需要另一个漏洞,为攻击者提供对该环境访问权限。如果应用容易受到代码或者命令注入的攻击,攻击者只需要简单地访问/tmp 文件夹并窃取敏感数据即可。
在传统应用上,这通常是在应用容易受到遍历攻击时实现的。在AWS无服务器服务上,唯一可写的空间是/tmp。然而它只是暂时的(或仅限于容器),这使得风险略低一些。
风险值:4分
业务逻辑攻击可能是检测到的最复杂攻击,通常具有很高的业务影响。诸如识别、约束和流操作之类的攻击对于无服务器可能不是唯一的,但事实是,使用无状态的微服务意味着在依赖之前可能发生或已经发生的事件时,应考虑详细设计。
此外,在某些情况下,函数只能由某些调用者调用。由于他们是无状态的,这意味着他们可能无法被核实。
这种行为可以通过以下方式实现:
仅无状态体系结构就使逻辑和流操作成为无服务器应用中的实际风险,这很容易导致 DoS、
DoW、调用内部功能、执行流绕过等。在无服务器应用中,总体风险应该明显更高。
风险值:8分
以上概况了各种类型的威胁,然而放眼实际场景,可能还是略有不同。
再次以AWS的lambda为例 2018年10月 一位名叫Caleb Sima的用户提供了一个在线的网站http://www.lambdashell.com/ 使用默认的权限和配置让人们通过Lambda函数攻击他的AWS账户,该函数使人能够运行Shell命令,甚至还做出了美观的GUI界面,但到目前为止没有人能造成严重破坏。
唯一的例外是有些人设法使用过度特权的功能删除了他的网页,当然还有一些人设法挖掘加密货币(尽管每次调用需要3秒钟),但这只是在他故意向其设置引入了一些宽松权限之后才发生的。
官方靶场:https://www.serverless-hack.me/
项目地址:https://github.com/OWASP/Serverless-Goat
参考文档:OWASP无服务器安全风险Top10
参考文章:https://www.keithrozario.com/2019/02/securing-lambda-functions.html
参考文章:https://thetestlabs.io/code/exploiting-common-serverless-security-flaws-in-aws/
参考文章:https://www.protego.io/category/a-deep-dive-into-serverless-attacks/
参考文章:https://www.protego.io/owasp-top-ten-serverless-attacks-sls-1-event-injection/
参考项目:https://github.com/puresec/sas-top-10
本文作者 r0fus0d、RyuZU、the-fog、xidaner、Alienware-OWO
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。