逆向工程Yandex.Station激活协议



Yandex.Station是具有语音助手Alice的智能扬声器。 要激活它,您需要携带电话并播放Yandex应用程序中的声音。 下面,我将告诉您该信号的工作原理, 开放格式的WiFi密码,并尝试发展通过声音传输数据的想法。

前言


我毕业于MIPT的无线电工程学院,研究并开发了从物理层协议到联邦网络的通信系统。 因此,当我的朋友介绍Yandex.Station时,我立即想知道如何组织通过音频令牌进行激活的数据传输。

激活过程


打开新列时,您需要以某种方式将信息传输到该列,以连接到WiFi网络并在Yandex服务中进行授权。 在电台中,这是通过声音完成的,看起来像下面的视频(7:34)。



“……信息当然是通过声音而不是声音来传递的……”-瓦伦丁说。 他会知道,那时他的WiFi密码几乎以开放形式进入了视频! 但是稍后会更多。

同时,请考虑发生了什么。 手机通过WiFi网络获取数据(来自系统的ssid,用户输入密码)和Yandex中用于授权的数据。 它们由手机的扬声器以某种方式进行编码,调制和发射。 该电台对来自麦克风的信号进行解调,对数据进行解码,然后将其用于连接到网络并进行授权。

在此过程中,我们对数据的编码调制方式很感兴趣。

视觉解调


要获取信号样本,不需要电台本身。 仅需要将电话连接到具有互联网的WiFi。 我决定用不同的ssid和密码创建访问点,以查看信号如何变化。 为了方便起见,我开始在文件中录制声音并使用它们。

首先,我创建了一个随机密码为“ 012345678”的接入点,并将手机连接到该接入点。 我单击“播放声音”并记录了产生的信号。 让我们看一下它随时间变化的频谱(瀑布)。 在此,纵轴表示频率,横轴表示时间,颜色由振幅决定。


因此,可以看出使用了频率调制,并且以40 ms的字符传输数据。 您还可以突出显示不断增加的子序列:



别说了 看来我们的密码越来越多。 “ 012345678”。 这些数字如何以ascii或utf-8编码显示? “ 30 31 32 33 34 35 36 3738。 ” 哇! 我什至不必更改密码! 这是:



我试图更改密码,并确保正确确定了它在信号中的位置。

事实证明,数据以4位字符编码。 实际上,十六进制字符串已编码,其中每个值0-F都有自己的频率,从1 kHz到4.6 kHz,步长为240 Hz。 同时,在传输的开始和结束时,会出现高于5 kHz频率的辐射-起始标记和结束标记在物理水平上与主体分开。

解码方式


为了不每次查看频谱时都重写符号,我绘制了一个简单的python接收器,该接收器将音频文件非常稳定地转换为原始十六进制字符串。 我开始更改访问点的ssid并分析这会影响哪些字节。 结果,发现关于ssid的信息存储在密码之前的两个字节中。 该块的长度不取决于ssid的长度。 怎么会这样

可能只有ssid哈希发送到工作站。 在这种情况下,工作站很有可能在开机后计算所有可用网络名称的哈希值。 然后,他选择网络,将接收到的值与接受的值进行比较。 这样做很可能是为了减少包装的长度。 (但是如何连接到隐藏网络?)

还可以看到在一段时间内插入了4个字符。 在频谱上,可以在密码中两次看到它们。 这可能是某种抗噪编码或同步符号。



我无法在Yandex中分配用于授权的数据。 但是,数据包的长度非常小,因此可以肯定地说包中没有OAuth令牌。 我假设Yandex应用程序接收到一个临时链接,该链接的一部分已传输到工作站。 然后,她通过此链接接收完整的身份验证信息。 我认为这样做也是为了减少包装的长度。

张贴在Yandex中?


是的,2019年5月8日。收到自动回复:



4个月过去了-没有联系。 根据Yandex的规则,现在您可以公开信息,而实际上我是这样做的。

这是一个问题吗?


Yandex的员工也许不认为这是一个问题。 实际上,几乎不能将其称为漏洞,因为工作站的激活很少发生超过1次。 而且,她经常在“受信任”的房间里。 在家里或办公室,您都可以大声念出WiFi密码,几乎是一样的。 信息安全专家,您怎么看?

此外,激活算法已经连接到制造的工作站中,因此在当前版本中不太可能摆脱此漏洞。

但是,我相信这不是忽略漏洞悬赏消息的原因。 至少,答应不做是不礼貌的。 好吧,假设我的上诉在某处已经失败。 如果有的话,机票号:19050804473488035。

我个人认为存在某种漏洞。 因此,尽管我有一个稳定的信号接收器,但我无法将其提供给您。


而且,我想提醒WylsacomRozetked和其他博客作者有关定期更改密码的需求。 至少我知道您在Yandex.Station审查时的想法)

结果如何?


Yandex的开发人员做了一件很酷的事情。 他们装饰了车站的启动过程,使其与众不同。 我认为唯一的问题是开放密码。

但是使用蓝牙可以使相同的过程更安全。 这使我认为在这种情况下,安全性或速度并不是那么重要。 重要节目。 通过声音的激活让人联想到《星球大战》中的R2-D2,令人印象深刻,而且看起来与众不同。

这个职位启发了我发展Yandex开发人员的想法并制定了一个面向印象的协议。 如果使用音符频率来调制十六进制字符怎么办? 为什么不使用C专业传输数据? 事实证明这很有趣,但在下一篇文章中会对此进行更多介绍

感谢您的阅读,成功!

UPD:Yandex响应
他们从信息安全服务部门回复了评论 ,并致了一封信:

Source: https://habr.com/ru/post/zh-CN469435/


All Articles