
Yandex.Station adalah speaker cerdas dengan asisten suara Alice. Untuk mengaktifkannya, Anda perlu membawa ponsel dan memutar suara dari aplikasi Yandex. Di bawah potongan, saya akan memberi tahu Anda bagaimana sinyal ini bekerja, tentang
kata sandi untuk WiFi dalam bentuk terbuka dan mencoba mengembangkan gagasan mentransmisikan data melalui suara.
Pembukaan
Saya lulus dari fakultas teknik radio MIPT, mempelajari dan mengembangkan sistem komunikasi dari protokol lapisan fisik ke jaringan federal. Karena itu, ketika teman-teman mempresentasikan Yandex.Station, saya langsung bertanya-tanya bagaimana transfer data untuk aktivasi melalui token audio diatur.
Proses aktivasi
Ketika Anda menghidupkan kolom baru, entah bagaimana Anda perlu mentransfer informasi ke sana untuk menghubungkan ke jaringan WiFi dan otorisasi dalam layanan Yandex. Di Stasiun, ini dilakukan melalui suara dan terlihat seperti video di bawah ini (7:34).
"... informasi sedang dikirim, baik, bukan dengan suara, tentu saja ..." - kata Valentin. Dia akan tahu bahwa pada saat itu kata sandi WiFi-nya masuk ke video dalam bentuk hampir terbuka! Tetapi lebih lanjut tentang itu nanti.
Sementara itu, pertimbangkan apa yang terjadi. Telepon mengambil data pada jaringan WiFi (ssid dari sistem, pengguna memasukkan kata sandi) dan data untuk otorisasi di Yandex. Entah bagaimana mereka dikodekan, dimodulasi, dan dipancarkan oleh pengeras suara telepon. Stasiun mendemodulasi sinyal dari mikrofon, menerjemahkan data dan menggunakannya untuk terhubung ke jaringan dan otorisasi.
Dalam proses ini, kami tertarik pada bagaimana data
dikodekan dan
dimodulasi .
Demodulasi visual
Untuk mendapatkan sampel sinyal, Stasiun itu sendiri tidak diperlukan. Hanya perlu telepon terhubung ke WiFi dengan internet. Saya memutuskan untuk membuat jalur akses dengan ssid dan kata sandi yang berbeda untuk melihat bagaimana sinyal berubah. Untuk kenyamanan, saya mulai merekam suara dalam file dan bekerja dengannya.
Pertama, saya membuat titik akses dengan kata sandi acak "012345678" dan menghubungkan telepon ke sana. Saya mengklik "Mainkan Suara" dan merekam sinyal yang dihasilkan. Mari kita lihat spektrumnya dari waktu ke waktu (air terjun). Di sini, sumbu vertikal mewakili frekuensi, sumbu horizontal mewakili waktu, dan warnanya ditentukan oleh amplitudo.
Jadi, dapat dilihat bahwa modulasi frekuensi digunakan, dan data ditransmisikan dalam karakter 40 ms. Anda juga dapat menyoroti peningkatan selanjutnya:

Hentikan itu! Tampaknya kami memiliki kata sandi yang berkembang. "012345678". Bagaimana angka-angka ini terlihat dalam pengkodean ascii atau utf-8? "
30 31 32 33 34 35 36 37 38. " Wow! Saya bahkan tidak perlu mengubah kata sandi! Ini dia:

Saya mencoba mengubah kata sandi dan memastikan bahwa saya benar menentukan posisinya di sinyal.
Ternyata data dikodekan dalam karakter 4-bit. Bahkan, string hex dikodekan, di mana setiap nilai 0 - F memiliki frekuensi sendiri dari 1 kHz hingga 4,6 kHz dalam langkah 240 Hz. Pada saat yang sama, di awal dan di akhir transmisi ada radiasi pada frekuensi di atas 5 kHz - tanda awal dan akhir dipisahkan dari bagian utama di tingkat fisik.
Decoding
Agar tidak menulis ulang simbol setiap kali, melihat spektrumnya, saya membuat sketsa penerima python sederhana yang mengubah file audio ke string hex asli cukup stabil. Saya mulai mengubah ssid dari titik akses dan menganalisis apa yang mempengaruhi byte ini. Akibatnya, ternyata informasi tentang ssid disimpan dalam dua byte sebelum kata sandi. Panjang blok ini tidak tergantung pada panjang ssid. Bagaimana bisa begitu?
Mungkin hanya hash ssid yang ditransmisikan ke Stasiun. Dalam hal ini, kemungkinan besar, Stasiun setelah mengaktifkan menghitung hash nama semua jaringan yang tersedia. Kemudian dia memilih jaringan, membandingkan nilai yang diterima dengan yang diterima. Kemungkinan besar, ini dilakukan untuk mengurangi panjang paket. (Tapi bagaimana kemudian koneksi ke jaringan tersembunyi?)
Terlihat juga bahwa dengan beberapa periode ada sisipan 4 karakter. Pada spektrum mereka dapat dilihat dua kali di dalam kata sandi. Ini mungkin semacam pengkodean yang tahan noise, atau simbol sinkronisasi.

Saya tidak dapat mengalokasikan data untuk otorisasi di Yandex. Namun, panjang paket cukup kecil, sehingga kita dapat mengatakan dengan pasti bahwa tidak ada token OAuth dalam paket. Saya berasumsi bahwa aplikasi Yandex menerima tautan sementara, yang sebagian dikirimkan ke Stasiun. Dan dia, pada gilirannya, menerima informasi otentikasi lengkap melalui tautan ini. Saya pikir ini juga dilakukan untuk mengurangi panjang paket.
Diposting di Yandex?
Ya, 8 Mei 2019. Menerima respons otomatis:

4 bulan berlalu - dan tidak menghubungi. Menurut aturan Yandex, sekarang Anda dapat mengungkapkan informasi, yang sebenarnya saya lakukan.
Apakah ini masalah?
Mungkin karyawan Yandex tidak menganggap ini masalah. Memang, hampir tidak dapat disebut kerentanan, karena aktivasi Stasiun jarang terjadi lebih dari 1 kali. Selain itu, seringkali dia berada di ruangan "tepercaya". Di rumah atau di kantor, Anda dapat mengucapkan kata sandi WiFi dengan keras, yang hampir sama. Pakar keamanan informasi, bagaimana menurut Anda?
Selain itu, algoritma aktivasi telah ditransfer ke Stasiun yang diproduksi, sehingga tidak mungkin untuk menghilangkan kerentanan ini dalam versi saat ini.
Namun, saya percaya ini bukan alasan untuk mengabaikan pesan di bugbounty. Paling tidak, tidak sopan berjanji untuk menjawab dan tidak melakukannya. Oke, mari kita asumsikan bahwa daya tarik saya telah hilang di suatu tempat. Jika ada, nomor tiket: 19050804473488035.
Secara pribadi, saya percaya ada semacam kerentanan. Karena itu, terlepas dari kenyataan bahwa saya memiliki penerima sinyal yang stabil, saya tidak dapat memberikannya kepada Anda.
Dan juga, saya ingin mengingatkan
Wylsacom ,
Rozetked , dan blogger lain tentang perlunya perubahan kata sandi biasa. Setidaknya saya tahu apa yang Anda miliki pada saat ulasan Yandex.Station)
Apa hasilnya?
Pengembang dari Yandex melakukan hal yang keren. Mereka mendekorasi proses aktivasi Stasiun, membuatnya menjadi tidak biasa. Satu-satunya masalah, menurut saya, adalah kata sandi terbuka.
Tetapi proses yang sama bisa dibuat lebih aman menggunakan Bluetooth. Ini membuat saya berpikir bahwa dalam hal ini, keamanan atau kecepatan tidak begitu penting. Pertunjukan penting. Aktivasi melalui suara yang mengingatkan pada R2-D2 dari Star Wars sangat mengesankan dan terlihat tidak biasa.
Posisi ini menginspirasi saya untuk mengembangkan ide pengembang Yandex dan membuat protokol yang berorientasi pada kesan. Bagaimana jika frekuensi note digunakan untuk memodulasi karakter hex? Mengapa tidak mentransfer data dalam C mayor? Ternyata sangat menarik, tetapi lebih pada itu
di artikel selanjutnya .
Terima kasih sudah membaca, sukses!
UPD: Tanggapan YandexDari layanan keamanan informasi, mereka menjawab dalam
komentar , dan juga mengirim surat:
