语音个人助手(VPA,Voice Personal Assistant)正成为控制物联网(IoT)环境中连接设备的流行工具,例如,通过调用亚马逊Alexa的语音应用(称为功能)来通过语音命令开关灯。亚马逊Alexa平台允许第三方开发者构建功能并将其发布到市场,这大大扩展了VPA的功能。
这项研究发现了亚马逊Alexa平台中的新漏洞,这些漏洞允许恶意第三方开发者劫持Alexa内置的语音命令来调用恶意IoT功能。一共提出了三种新的攻击,包括命令调用混淆攻击、自定义命令攻击和命令-动作劫持攻击。此外还发现了一个漏洞,该漏洞允许在后端代码中随意控制智能家居设备。此处有更多攻击细节和演示:https://github.com/voice-assistant-research/IoT-skills 。
0x01 简介
语音个人助手 VPA 允许用户使用语音命令控制物联网设备,这为智能家居环境中与物联网设备的交互带来了便利。人们越来越多地使用 VPA 来控制物联网设备,例如智能灯、恒温器、门锁和联网汽车。越来越多地使用 VPA 来控制物联网设备也带来了安全问题。
Amazon Alexa 是目前最大的 VPA 平台,允许开发人员构建第三方语音应用程序并将其发布到功能商店。Alexa Skills 商店中现在有超过 100,000 种功能可用。这样一个开放的生态系统极大地扩展了 VPA 功能,第三方开发人员可以通过新功能增强 VPA。VPA 系统容易受到语音抢注攻击(Voice Squatting Attack)。语音抢注是一种网络攻击,其中开发了欺诈性语音来模仿真正的功能。攻击者的目标是让用户通过说出攻击者已注册的命令来调用恶意语音功能以触发攻击。这可以通过使用与良性语音功能发音相似的名称或使用发音类似于良性功能使用的命令来实现。本文的重点是物联网功能的安全性。
由于认证流程宽松,恶意功能(收集用户敏感信息或包含不当内容)很容易通过亚马逊 Alexa 平台认证。实现攻击目的的一个重要步骤是让用户调用这些恶意功能。例如,侵犯隐私的功能只有在被 VPA 平台选择并调用与用户交互时才能收集用户数据。因此,调用哪种功能在攻击链中起着至关重要的作用。
本文旨在揭开亚马逊 Alexa 平台中功能调用的神秘面纱,并利用功能调用过程中的潜在漏洞。Alexa 采用排名过程来确定给定语音命令最相关的功能。然而,对于内置动作,功能类别和上下文会影响功能排名结果,这为恶意开发人员发动命令劫持攻击提供了机会。
通过操纵排名系统中的漏洞,第三方命令可以具有比 Alexa 内置控制 IoT 设备的命令更高的调用优先级。在这种情况下,攻击者可以发布恶意的 IoT 功能,每当用户发出 Alexa 内置语音命令来控制 IoT 设备时,该功能都会被调用。这种潜在威胁称为命令劫持攻击。与抢注攻击不同,后者的根源在于不同的用户可以拥有不同但相似的口音和命令行为。如此大的搜索空间为攻击者提供了一个很好的机会,通过注册误导性或类似的发音命令来抢注受害者功能。
0x02 背景
Amazon Alexa 平台是最大的 VPA 平台之一,它允许第三方开发者将语音应用程序(称为功能)发布到 Alexa 功能商店。为了帮助用户更好地理解如何与功能交互,Alexa 要求功能不仅需要提供描述,还需要为用户提供一些用于调用功能或调用功能功能的话语。对于每项功能,Alexa 还会在功能网页上显示功能的基本信息,例如功能名称、开发人员、描述和隐私政策等。这些信息可帮助用户选择合适的功能并了解如何使用该功能。
A. 功能调用
调用名称:与功能自身名称不同,部分功能还有用于调用的 “调用名称” (invocation name)。对于 Alexa商店中显示的功能,用户可以使用由唤醒词 “Alexa”、启动词(如 “打开”或 “启动”)和功能调用名称组成的句子来调用功能,例如 “Alexa,打开每日星座运势”或 “Alexa,启动每日星座运势”。功能调用名称也会显示在功能的介绍网页上。功能网页上的大部分话语都是关于如何使用调用名称来调用的。
功能函数:用户也可以直接调用没有功能调用名称的功能函数。当 Alexa 收到用户的请求时,例如 “Alexa,播放音乐”或 “Alexa,打开门”,Alexa 会寻找可能满足该请求的功能。对于这些功能,他们应该首先在功能中定义这样的请求句子,以便 Alexa 知道该功能可以处理这样的请求。通常,此类功能还会在网页上提供有关如何调用此类函数的话语。例如,功能DiCEhome提供了一个话语 “Alexa,打开骰子智能”,其中包含调用该功能的调用名称,用户稍后可以进行更多交互。它还提供了另一个话语 “Alexa,打开开关”,以便用户可以跳过功能调用的步骤,直接调用此功能的功能。
B. 功能开发
下图显示了开发人员开发功能的两种典型方式:一种是Alexa开发人员控制台,另一种是Alexa功能蓝图控制台。
开发者控制台:Amazon Alexa为开发人员提供了几个不同的地方以不同的方式开发功能。通常,开发人员可以在 “Alexa开发人员控制台” 中开发功能,开发人员可以在其中选择模型,设计功能交互模型,并为功能功能编写后端代码。之后,开发人员可以提供功能清单数据(如功能名称,描述,类别等),并将功能提交给认证流程。交互模型 [3] 定义了用户如何与功能交互,例如功能可以处理哪种类型的用户请求(语音命令)。
数据类型:在交互模型中定义了三种类型的数据,目标动作(Intent)、槽位(Slot)和示例话语(Sample Utterances)。目标动作代表了一个实现用户口头请求的动作。示例话语是一组可能的口头表达,映射到对应的目标动作上,开发者应包括具有代表性的短语,以便模型更好地学习句式模式。此外,目标动作可以选择性地包含称为槽位的参数。槽位是可以捕获用户特定类型回复的变量,例如用户名或用户国家。亚马逊提供了超过100种内置槽位类型来捕获不同的数据,例如用数千个流行的名字训练的AMAZON.FirstName。
用户请求随后被转发到后端代码。后端代码定义了一些函数,这些函数被称为目标动作处理器(Intent Handler),用于处理请求。例如,当用户询问 “现在几点了”,TimeIntent能够捕获这一请求。为了处理这一请求,后端代码中的TimeIntentHandler被调用,它将调用其他函数或API来处理请求并向用户提供答案。
蓝图控制台:Alexa 还提供了一个蓝图控制台,供开发人员快速开发功能。蓝图控制台包含 70 个执行特定功能的蓝图。选择相应的蓝图后,开发人员只需更改功能内容,而无需编辑交互模型和后端代码,这使得开发变得更加容易。
C. 智能家居功能
智能家居交互模型:Amazon Alexa和Google Home等 VPA 在当前的智能家居环境中发挥着重要作用。以前图中的 Alex