
Yandex.Station é um alto-falante inteligente com assistente de voz Alice. Para ativá-lo, você precisa trazer o telefone e reproduzir o som do aplicativo Yandex. Abaixo, mostrarei como esse sinal funciona, sobre a
senha do WiFi em formato aberto e tentarei desenvolver a idéia de transmitir dados através do som.
Preâmbulo
Eu me formei na faculdade de engenharia de rádio do MIPT, estudei e desenvolvi sistemas de comunicação desde protocolos de camada física até redes federais. Portanto, quando os amigos apresentaram o Yandex.Station, perguntei-me imediatamente como era organizada a transferência de dados para ativação por meio do token de áudio.
Processo de ativação
Quando você ativa uma nova coluna, é necessário transferir informações para conectar-se a uma rede Wi-Fi e autorização nos serviços Yandex. Na estação, isso é feito através do som e se parece com o vídeo abaixo (7:34).
"... a informação está sendo transmitida, bem, não pelo som, é claro ..." - diz Valentin. Ele saberia que naquele momento sua senha de WiFi entrava no vídeo de forma quase aberta! Mas mais sobre isso mais tarde.
Enquanto isso, considere o que está acontecendo. O telefone coleta dados na rede WiFi (ssid do sistema, o usuário digita a senha) e dados para autorização no Yandex. Eles são de alguma forma codificados, modulados e emitidos pelo alto-falante do telefone. A estação desmodula o sinal dos microfones, decodifica os dados e os usa para conectar-se à rede e autorização.
Nesse processo, estamos interessados em como os dados são
codificados e
modulados .
Desmodulação visual
Para obter uma amostra de sinal, a própria estação não é necessária. Só é necessário que o telefone esteja conectado ao Wi-Fi com a Internet. Decidi criar pontos de acesso com ssid e senhas diferentes para ver como o sinal muda. Por conveniência, comecei a gravar sons em arquivos e trabalhar com eles.
Primeiro, criei um ponto de acesso com uma senha aleatória "012345678" e conectei um telefone a ele. Cliquei em "Play Sound" e gravei o sinal resultante. Vejamos o seu espectro ao longo do tempo (cascata). Aqui, o eixo vertical representa a frequência, o eixo horizontal representa o tempo e a cor é determinada pela amplitude.
Assim, pode-se observar que a modulação de frequência é usada e os dados são transmitidos em caracteres de 40 ms. Você também pode destacar a crescente subsequência:

Pare com isso! Parece que tivemos uma senha crescente. "012345678". Como esses números são exibidos nas codificações ascii ou utf-8? "
30 31 32 33 34 35 36 37 38. " Uau! Nem precisei alterar a senha! Aqui está:

Tentei mudar a senha e certifiquei-me de determinar corretamente sua posição no sinal.
Acontece que os dados são codificados em caracteres de 4 bits. De fato, uma cadeia hexadecimal é codificada, onde cada valor 0 - F tem sua própria frequência de 1 kHz a 4,6 kHz em passos de 240 Hz. Ao mesmo tempo, no início e no final da transmissão, há radiação em frequências acima de 5 kHz - as marcas de início e fim são separadas da parte principal no nível físico.
Decodificação
Para não reescrever símbolos em um pedaço de papel toda vez que olho para o espectro, desenhei um simples receptor python que converte o arquivo de áudio de maneira suficientemente estável na sequência hexadecimal original. Comecei a mudar o ssid do ponto de acesso e analisar quais bytes isso afeta. Como resultado, as informações sobre o ssid são armazenadas em dois bytes antes da senha. O comprimento deste bloco não depende do comprimento do ssid. Como assim?
Provavelmente, apenas um hash ssid é transmitido para a estação. Nesse caso, provavelmente, a estação após ligar calcula os hashes dos nomes de todas as redes disponíveis. Em seguida, ele seleciona a rede, comparando os valores recebidos com os aceitos. Provavelmente, isso foi feito para reduzir o comprimento do pacote. (Mas como é então a conexão com redes ocultas?)
Também é visto que, com algum período, há inserções de 4 caracteres. No espectro, eles podem ser vistos duas vezes dentro da senha. Provavelmente, esse é algum tipo de codificação resistente a ruído ou símbolos de sincronização.

Não foi possível alocar dados para autorização no Yandex. No entanto, o tamanho do pacote é bastante pequeno, portanto, podemos dizer com certeza que não há token OAuth no pacote. Suponho que o aplicativo Yandex receba um link temporário, parte do qual é transmitido para a estação. E ela, por sua vez, recebe informações completas de autenticação por esse link. Eu acho que isso também foi feito para reduzir o comprimento do pacote.
Publicado em Yandex?
Sim, 8 de maio de 2019. Recebida uma resposta automática:

4 meses se passaram - e não entraram em contato. De acordo com as regras do Yandex, agora você pode divulgar informações, o que eu de fato faço.
Isso é um problema?
Talvez os funcionários da Yandex não considerem isso um problema. De fato, dificilmente pode ser chamado de vulnerabilidade, porque a ativação da Estação raramente ocorre mais de uma vez. Além disso, muitas vezes ela está em uma sala "confiável". Em casa ou no escritório, você pode pronunciar a senha do WiFi em voz alta, quase a mesma. Especialistas em segurança da informação, o que você acha?
Além disso, o algoritmo de ativação já foi conectado às estações fabricadas, portanto, é improvável que você consiga se livrar dessa vulnerabilidade na versão atual.
No entanto, acredito que este não é um motivo para ignorar as mensagens no bugbounty. No mínimo, não é educado prometer responder e não fazer. Ok, vamos supor que meu apelo tenha sido perdido em algum lugar. Se houver, número do bilhete: 19050804473488035.
Pessoalmente, acredito que haja algum tipo de vulnerabilidade. Portanto, apesar de eu ter um receptor estável desse sinal, não posso dar a você.
E também quero lembrar
Wylsacom ,
Rozetked e outros blogueiros sobre a necessidade de alterações regulares de senha. Pelo menos eu sei o que você tinha na época da revisão do Yandex.Station)
Qual é o resultado?
Os desenvolvedores da Yandex fizeram uma coisa legal. Eles decoraram o processo de ativação da Estação, tornando-a incomum. O único problema, na minha opinião, é uma senha aberta.
Mas o mesmo processo pode ser mais seguro usando o Bluetooth. Isso me fez pensar que, neste caso, segurança ou velocidade não é tão importante. Show importante. A ativação através de sons que lembram R2-D2 de Star Wars é impressionante e parece incomum.
Essa posição me inspirou a desenvolver a idéia dos desenvolvedores Yandex e a criar um protocolo orientado a impressões. E se as frequências de notas forem usadas para modular caracteres hexadecimais? Por que não transferir os dados em Dó maior? Ficou muito interessante, mas mais sobre isso
no próximo artigo .
Obrigado pela leitura, sucesso!
UPD: resposta YandexDo serviço de segurança da informação, eles responderam nos
comentários e também enviaram uma carta:
