无服务器计算(Serverless Computing),或称函数即服务(Function as a Service,FaaS),自诞生以来一直以惊人的速度持续发展。在无服务器计算范式下,租户将任务部署、环境配置和自动扩展等额外职责委托给平台。越来越多的公司,尤其是初创公司,正在考虑将他们的业务转移到无服务器平台,因为它们提供了具有吸引力的优势,例如灵活性、低成本和随用随付的计费模式。
图1显示了一个典型的无服务器平台架构。用户通常将代码上传到无服务器平台,平台将根据代码生成一个执行实例,该实例可能是虚拟机(VM)、容器或进程,具体取决于平台的实现。当一个新的请求通过负载均衡被分派到一个实例时,activator决定是否冷启动、扩展或将请求直接路由到相关的执行实例。
这些特性将FaaS与基础设施即服务(IaaS)区分开来,但它们也使无服务器平台的租户面临传统攻击以及额外的安全威胁。其中一种安全威胁是拒绝服务(DoS)攻击的变体之一,称为拒绝钱包(DoW)攻击。DoW攻击主要有两种类型:外部DoW攻击和内部DoW攻击。外部DoW攻击者将通过反复调用受害者无意中暴露的API来消耗受害者的资金,内部DoW攻击者将试图在受害者的功能实例(例如容器或虚拟机)上引起资源争用,从而减慢他们的程序的执行速度。本文主要关注内部DoW攻击检测。
与DoS攻击者类似,内部DoW攻击者进行此类攻击是为了在恶意的行业竞争、敲诈勒索或黑客行动中获利。通过延迟受害者函数的执行,内部DoW攻击可以对受害者产生两种直接影响。首先,内部DoW攻击可能导致受害者破产,因为执行时间延长和“pay-as-you-go”的计费模式导致平台费用增加。其次,由于函数持续时间的增加,受害者的关键服务将严重中断。亚马逊声称,页面加载时间每增加100毫秒,销售额就会减少1%。
内部DoW攻击是通过触发共享硬件上的资源争用来实现的。攻击者通过部署和调用恶意函数来争抢未监控但至关重要的共享资源。受害者因为资源争用导致执行速度变慢,虽然能获得正确的执行结果,但由于无服务器计费模型和较长的执行时间,受害者将被收取多次费用。本文文章利用内存总线锁定实现了真实的DoW攻击,并在后续提出了检测DoW攻击的算法。
什么是内存总线锁定?
现代处理器采用了一种特殊的技术来保持某些指令的原子性。当一个原子内存操作(例如ATOMIC_FETCH_ADD)跨越缓存线边界时,硬件将短暂停止其他内存操作,以遵守缓存一致性协议。这个过程如图2所示,被称为内存总线锁定,攻击者可以利用这个过程来减慢受害者的执行速度。
大多数云平台都允许内存总线锁定,并且实现起来很简单,不需要任何额外的特权。诸如ATOMIC_FETCH_ADD之类的原子内存操作通常用于多线程应用程序中,用于共享资源上的通信,普通用户可以在其函数中直接编码这些指令(如图3的代码所示)。考虑到这些操作的普遍存在,云提供商无法用简单的补丁来保护自己,比如禁止所有类型的原子操作。因为,禁用该操作会造成影响所有x86硬件和大多数云应用(例如机器学习应用、HTTP服务器、key-value存储等)的硬件漏洞。
图3.内存总线锁定的一个例子
为了展示内部DoW攻击的实用性和可行性,本文按照上述三个步骤对AWS Lambda、Microsoft Azure Function和Alibaba Function Compute进行了真实的内部DoW攻击。论文作者实现了一个Hello-World函数作为受害者函数。使用类似于图3的代码作为恶意函数,并将攻击函数和受害者函数保持在同一个机器上。图4描绘了受害者函数的性能波动。在攻击之前和之后,可以观察到受害者函数执行同一段程序所需的执行时间有显著而稳定的增高。
图4.真实的DoW攻击结果
Gringotts由两个高级组件组成:(i)代理和(ii)诊断程序。图5展示了Gringotts的简化系统架构。要利用平台提供的服务,用户必须将其代码集成到云提供商提供的运行时模板中。云提供商收到租户的请求后,会从集群中选择一台服务器,并将上传的功能部署到该物理机上。平台会根据用户的订阅分配指定数量的资源,函数运行时会维护一个处理循环来处理收到的请求。Gringotts代理负责监控目标函数的资源利用率。它被平台合并到每个受监控函数的运行时中,并与实例一起部署,就像任何其他运行时组件(例如,HTTP请求处理、函数日志记录)一样。每次用户调用函数时,代理都会自动执行以收集硬件性能指标,然后传输到诊断程序。代理接受平台的协调,并保持与用户功能相同的生命周期。
Gringotts的诊断程序可以在物理机器上实际检测内部DoW攻击。从代理收到的聚合性能指标可以通过HTTP、gRPC等协议传输。诊断程序针对目标函数实时执行每个请求检测,无需在同一台计算机上本地执行,并且云提供商可能会根据工作负载为每隔几台计算机部署一个诊断程序。当怀疑有DoW攻击时,它会向用户和平台运营商提供攻击警报。他们还可能采取其他行动,例如验证DoW攻击并阻止损失。
图5.Gringotts的框架图
本文文章在一个双节点的Kubernetes集群(版本1.24.2)上进行了实验。为了评估Gringotts的改善情况,它构建了三条基线:
• SDS/B。SDS/B是一种统计内存DoS检测方法。它计算基于滑动窗口和指数加权移动平均(EWMA)监控应用程序的正常范围。
• SDS/B-0。SDS/B的一个变体,将SDS/B的一个参数Hc设置为0。
• Gringotts。
本文文章的端到端实验旨在检测三种场景中对四种选定函数的DoW攻击。选择准确度作为指标,因为它同时考虑了误报和漏报。最终结果如图6所示。场景1的前300秒由正常数据组成,而攻击发生在300到600秒之间。在场景1中,所有方法都获得了较高的准确度。SDS/B能够对采样数据进行去噪,因此比SDS/B-0具有更高的精度。然而,当考虑场景2时,SDS/B-0的准确性超过了SDS/B。这是因为,与虚拟机不同,它们的工作负载是从均匀分布中随机选择的。即使没有针对请求的攻击,其性能指标也会根据每个请求而变化。更不用说使检测更具挑战性的背景噪声了。在场景3中波动变得更加极端。然而,在某些情况下,这实际上补偿了过去由请求变化和背景噪声引起的错误估计。因此,PCA和贝叶斯函数中SDS的准确性有所提高。然而,无论场景如何变化,Gringotts都保持着很高的准确率,从91.3%到99.3%。
在本文中,论文作者深入分析了DoW攻击,这是专门在无服务器平台上进行的DoS 攻击的一种变体。论文作者对商用无服务器平台进行了真实的DoW 攻击,结果表明,对受害者的云函数发起DoW 攻击会导致费用增加超过37 倍。最后,作者还实现了一个DoW检测算法Gringotts。实验表明,Gringotts的性能开销低于1.1%,平均检测延迟为1.86 秒,平均检测准确率为95.75%。
END
原文始发于微信公众号(风眼实验室):针对无服务器计算中内部Denial-of-Wallet攻击的快速准确检测算法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论