Ingeniería inversa Yandex. Protocolo de activación de estación



Yandex.Station es un altavoz inteligente con asistente de voz Alice. Para activarlo, debe traer el teléfono y reproducir el sonido de la aplicación Yandex. Debajo del corte, le diré cómo funciona esta señal, sobre la contraseña para WiFi en forma abierta e intentaré desarrollar la idea de transmitir datos a través del sonido.

Preámbulo


Me gradué de la facultad de ingeniería de radio de MIPT, estudié y desarrollé sistemas de comunicación desde protocolos de capa física hasta redes federales. Por lo tanto, cuando mis amigos presentaron Yandex.Station, inmediatamente me pregunté cómo se organizó la transferencia de datos para la activación a través del token de audio.

Proceso de activación


Cuando activa una nueva columna, de alguna manera necesita transferirle información para conectarse a una red WiFi y autorización en los servicios de Yandex. En la estación, esto se hace a través del sonido y se ve como el video a continuación (7:34).



"... la información se transmite, bueno, no por sonido, por supuesto ..." - dice Valentin. ¡Habría sabido que en ese momento su contraseña de WiFi entró en el video en forma casi abierta! Pero más sobre eso más tarde.

Mientras tanto, considere lo que está sucediendo. El teléfono toma datos en la red WiFi (ssid del sistema, el usuario ingresa la contraseña) y datos para autorización en Yandex. De alguna manera están codificados, modulados y emitidos por el altavoz del teléfono. La estación demodula la señal de los micrófonos, decodifica los datos y los utiliza para conectarse a la red y autorizar.

En este proceso, estamos interesados ​​en cómo se codifican y modulan los datos .

Demodulación visual


Para obtener una muestra de señal, no se necesita la propia estación. Solo es necesario que el teléfono esté conectado a WiFi con internet. Decidí crear puntos de acceso con diferentes ssid y contraseñas para ver cómo cambia la señal. Por conveniencia, comencé a grabar sonido en archivos y a trabajar con ellos.

Primero, creé un punto de acceso con una contraseña aleatoria "012345678" y le conecté un teléfono. Hice clic en "Reproducir sonido" y grabé la señal resultante. Veamos su espectro a lo largo del tiempo (cascada). Aquí, el eje vertical representa la frecuencia, el eje horizontal representa el tiempo y el color está determinado por la amplitud.


Por lo tanto, se puede ver que se utiliza la modulación de frecuencia y los datos se transmiten en caracteres de 40 ms. También puede resaltar la subsecuencia creciente:



Basta! Parece que teníamos una contraseña cada vez mayor. "012345678". ¿Cómo se ven estos números en codificaciones ascii o utf-8? " 30 31 32 33 34 35 36 37 38. " Wow! ¡Ni siquiera tuve que cambiar la contraseña! Aquí esta:



Traté de cambiar la contraseña y me aseguré de determinar correctamente su posición en la señal.

Resulta que los datos están codificados en caracteres de 4 bits. De hecho, se codifica una cadena hexadecimal, donde cada valor 0 - F tiene su propia frecuencia de 1 kHz a 4.6 kHz en pasos de 240 Hz. Al mismo tiempo, al principio y al final de la transmisión hay radiación a frecuencias superiores a 5 kHz: las marcas de inicio y fin están separadas de la parte principal a nivel físico.

Decodificación


Para no reescribir símbolos en una hoja de papel cada vez que miro el espectro, dibujé un simple receptor de Python que convierte el archivo de audio de manera suficientemente estable en la cadena hexadecimal original. Comencé a cambiar el ssid del punto de acceso y analizar qué bytes afecta esto. Como resultado, resultó que la información sobre ssid se almacena en dos bytes antes de la contraseña. La longitud de este bloque no depende de la longitud de ssid. ¿Cómo es eso?

Probablemente solo se transmite un hash ssid a la estación. En este caso, lo más probable es que la estación después de encender calcula los hash de los nombres de todas las redes disponibles. Luego selecciona la red, comparando los valores recibidos con los aceptados. Lo más probable es que esto se haya hecho para reducir la longitud del paquete. (¿Pero cómo es la conexión a redes ocultas?)

También se ve que con algún período hay inserciones de 4 caracteres. En el espectro se pueden ver dos veces dentro de la contraseña. Probablemente se trate de algún tipo de codificación resistente al ruido o símbolos de sincronización.



No pude asignar datos para autorización en Yandex. Sin embargo, la longitud del paquete es bastante pequeña, por lo que podemos decir con certeza que no hay token OAuth en el paquete. Supongo que la aplicación Yandex recibe un enlace temporal, parte del cual se transmite a la estación. Y ella, a su vez, recibe información completa de autenticación a través de este enlace. Creo que esto también se hizo para reducir la longitud del paquete.

Publicado en Yandex?


Sí, 8 de mayo de 2019. Recibí una respuesta automática:



Pasaron 4 meses y no se contactó. De acuerdo con las reglas de Yandex, ahora puede revelar información, lo que, de hecho, hago.

¿Es esto un problema en absoluto?


Quizás los empleados de Yandex no lo consideren un problema. De hecho, difícilmente se le puede llamar vulnerabilidad, porque la activación de la estación rara vez ocurre más de 1 vez. Además, a menudo se encuentra en una habitación "confiable". En casa o en la oficina, puede pronunciar la contraseña de WiFi en voz alta, que es casi lo mismo. Expertos en seguridad de la información, ¿qué opinas?

Además, el algoritmo de activación ya se ha conectado a las estaciones fabricadas, por lo que es poco probable que pueda deshacerse de esta vulnerabilidad en la versión actual.

Sin embargo, creo que esta no es una razón para ignorar los mensajes en bugbounty. Por lo menos, no es educado prometer responder y no hacerlo. Bien, supongamos que mi apelación se ha perdido en alguna parte. En todo caso, número de boleto: 19050804473488035.

Personalmente, creo que hay algún tipo de vulnerabilidad. Por lo tanto, a pesar de que tengo un receptor estable de esta señal, no puedo dárselo.


Y también, quiero recordarle a Wylsacom , Rozetked y otros bloggers sobre la necesidad de cambios regulares de contraseña. Al menos sé lo que tenías en el momento de la revisión de Yandex.

Cual es el resultado?


Los desarrolladores de Yandex hicieron algo genial. Decoraron el proceso de activación de la estación, lo hicieron inusual. El único problema, en mi opinión, es una contraseña abierta.

Pero el mismo proceso podría hacerse más seguro usando Bluetooth. Esto me hizo pensar que en este caso, la seguridad o la velocidad no son tan importantes. Espectáculo importante La activación a través de sonidos que recuerdan a R2-D2 de Star Wars es impresionante y parece inusual.

Esta posición me inspiró a desarrollar la idea de los desarrolladores de Yandex y crear un protocolo orientado a la impresión. ¿Qué sucede si se usan frecuencias de nota para modular los caracteres hexadecimales? ¿Por qué no transferir los datos en do mayor? Resultó muy interesante, pero más sobre eso en el próximo artículo .

¡Gracias por leer, éxito!

UPD: Respuesta de Yandex
Desde el servicio de seguridad de la información, respondieron en los comentarios y también enviaron una carta:

Source: https://habr.com/ru/post/469435/


All Articles