Belkin Wemo Smart Plug V2 – buffer overflow yang tidak akan ditambal

Belkin Wemo Smart Plug V2 – buffer overflow yang tidak akan ditambal

Node Sumber: 2657924

Peneliti di perusahaan keamanan IoT Sternum menggali colokan listrik otomasi rumah populer dari merek perangkat terkenal Belkin.

Model yang mereka lihat, the Steker Pintar Wemo Mini (F7C063) tampaknya mendekati akhir masa simpannya, tetapi kami menemukan banyak dari mereka untuk dijual secara online, bersama dengan saran dan instruksi terperinci di situs Belkin tentang cara menyiapkannya.

Tua (dalam pengertian modern jangka pendek) meskipun mungkin, para peneliti mencatat bahwa:

Ketertarikan awal kami pada perangkat ini berasal dari beberapa di antaranya yang ada di sekitar lab kami dan digunakan di rumah kami, jadi kami hanya ingin melihat seberapa aman (atau tidak) perangkat tersebut digunakan. [… T]tampaknya ini adalah perangkat konsumen yang cukup populer[; berdasarkan angka-angka ini, aman untuk memperkirakan bahwa total penjualan di Amazon saja harus mencapai ratusan ribu.

Sederhananya, ada banyak orang di luar sana yang telah membeli dan menyambungkan barang-barang ini, dan menggunakannya sekarang untuk mengontrol outlet listrik di rumah mereka.

Sederhananya, "steker pintar", adalah soket daya yang Anda colokkan ke stopkontak dinding yang ada dan menempatkan sakelar yang dikendalikan Wi-Fi antara stopkontak listrik di bagian depan stopkontak dinding dan stopkontak listrik yang tampak identik di bagian depan smart plug. Anggap saja seperti adaptor daya yang alih-alih mengubah, katakanlah, soket Euro bundar menjadi soket Inggris berbentuk segitiga, mengubah, katakanlah, soket AS yang dialihkan secara manual menjadi soket AS yang dialihkan secara elektronik yang dapat dikontrol dari jarak jauh melalui aplikasi atau antarmuka tipe web.

S di IoT…

Masalah dengan banyak yang disebut perangkat Internet of Things (IoT), seperti lelucon lama, adalah huruf "S" dalam "IoT" yang berarti keamanan ...

…artinya, tentu saja, sering kali keamanan siber tidak sebanyak yang Anda harapkan, atau bahkan tidak ada sama sekali.

Seperti yang dapat Anda bayangkan, perangkat otomasi rumah yang tidak aman, terutama yang memungkinkan seseorang di luar rumah Anda, atau bahkan di belahan dunia lain, untuk menghidupkan dan mematikan peralatan listrik sesuka hati, dapat menyebabkan banyak masalah.

Kami telah menulis tentang ketidakamanan IoT dalam berbagai macam produk sebelumnya, dari ketel internet (ya, sungguh) yang dapat membocorkan kata sandi Wi-Fi rumah Anda, ke kamera keamanan yang dapat digunakan penjahat untuk menyimpan mata pada Anda alih-alih sebaliknya, ke disk drive yang terhubung ke jaringan berisiko terkena dilumpuhkan oleh ransomware langsung di internet.

Dalam hal ini, para peneliti menemukan lubang eksekusi kode jarak jauh di Wemo Mini Smart Plug pada Januari 2023, melaporkannya pada Februari 2023, dan menerima nomor CVE pada Maret 2023 (CVE-2023-27217).

Sayangnya, meskipun hampir pasti banyak dari perangkat ini yang digunakan secara aktif di dunia nyata, Belkin tampaknya mengatakan bahwa ia menganggap perangkat tersebut "di akhir masa pakainya" dan oleh karena itu lubang keamanan tidak akan ditambal.

(Kami tidak yakin seberapa dapat diterima penolakan "akhir masa pakai" semacam ini jika perangkat ternyata memiliki cacat pada sirkuit listrik 120V AC atau 230V AC, seperti kemungkinan terlalu panas dan memancarkan bahan kimia berbahaya atau pengaturan terbakar, tetapi tampaknya kesalahan pada elektronik digital bertegangan rendah atau firmware di perangkat dapat diabaikan, bahkan jika hal itu dapat menyebabkan penyerang dunia maya menyalakan dan mematikan sakelar daya utama di perangkat berulang kali sesuka hati.)

Ketika nama ramah adalah musuhmu

Masalah yang ditemukan para peneliti adalah masa lalu yang baik tumpukan buffer overflow di bagian perangkat lunak perangkat yang memungkinkan Anda mengubah apa yang disebut FriendlyName perangkat – string teks yang ditampilkan saat Anda menghubungkannya dengan aplikasi di ponsel Anda.

Secara default, perangkat ini memulai dengan nama yang ramah seperti Wemo mini XYZ, Di mana XYZ menunjukkan tiga digit heksadesimal yang kami duga dipilih secara acak.

Itu berarti bahwa bahkan jika Anda memiliki dua atau tiga perangkat ini, mereka hampir pasti akan memulai dengan nama yang berbeda sehingga Anda dapat mengaturnya dengan mudah.

Tapi Anda mungkin ingin mengganti namanya nanti agar lebih mudah dibedakan di masa mendatang, dengan menetapkan nama ramah seperti TV power, Laptop charger dan Raspberry Pi server.

Pemrogram Belkin (atau, lebih tepatnya, pemrogram kode yang berakhir di perangkat bermerek Belkin ini, yang mungkin telah memasok perangkat lunak smart plug ke nama merek lain, juga) rupanya mencadangkan 68 byte penyimpanan sementara untuk melacak nama baru selama proses penggantian nama.

Tapi mereka lupa memeriksa apakah nama yang Anda berikan cocok dengan slot 68-byte itu.

Sebaliknya, mereka berasumsi bahwa Anda akan menggunakan aplikasi telepon resmi mereka untuk melakukan proses penggantian nama perangkat, dan dengan demikian mereka dapat membatasi jumlah data yang dikirim ke perangkat, untuk mencegah luapan buffer yang mungkin sebaliknya. timbul.

Ironisnya, mereka sangat berhati-hati tidak hanya untuk membuat Anda tetap pada batas 68-byte yang diperlukan agar perangkat itu sendiri berfungsi dengan baik, tetapi bahkan membatasi Anda untuk mengetik hanya dalam 30 karakter.

Kita semua tahu mengapa membiarkan sisi klien melakukan pemeriksaan kesalahan, alih-alih memeriksa (atau, lebih baik lagi, juga) di sisi server, adalah ide yang buruk:

  • Kode klien dan kode server mungkin tidak sesuai. Aplikasi klien masa depan mungkin memutuskan bahwa nama 72 karakter akan menjadi opsi yang bagus, dan mulai mengirim lebih banyak data ke server daripada yang dapat ditangani dengan aman. Pembuat kode sisi server di masa depan mungkin memperhatikan bahwa sepertinya tidak ada yang pernah menggunakan 68 byte penuh yang dicadangkan, dan secara sepihak memutuskan bahwa 24 sudah lebih dari cukup.
  • Penyerang dapat memilih untuk tidak repot dengan aplikasi tersebut. Dengan membuat dan mengirimkan permintaan mereka sendiri ke perangkat, mereka akan dengan mudah melewati pemeriksaan keamanan apa pun yang hanya mengandalkan aplikasi.

Para peneliti dengan cepat dapat mencoba nama yang lebih panjang sampai-sampai mereka dapat merusak perangkat Wemo sesuka hati dengan menulis di akhir buffer memori yang disediakan untuk nama baru, dan merusak data yang disimpan dalam byte yang segera menyusul.

Merusak tumpukan

Sayangnya, dalam sistem operasi berbasis tumpukan, sebagian besar perangkat lunak berakhir dengan buffer memori sementara berbasis tumpukan yang ditata sehingga sebagian besar buffer ini diikuti oleh blok memori penting lainnya yang memberi tahu program ke mana harus pergi setelah selesai apa itu lakukan sekarang.

Secara teknis, potongan data "ke mana selanjutnya" ini dikenal sebagai alamat pengirim, dan secara otomatis disimpan saat program memanggil apa yang dikenal sebagai a fungsi, atau subrutin, yang merupakan potongan kode (misalnya, "cetak pesan ini" atau "munculkan dialog peringatan") yang ingin Anda gunakan di beberapa bagian program Anda.

Alamat pengirim dicatat secara ajaib di tumpukan setiap kali subrutin digunakan, sehingga komputer dapat secara otomatis "melepaskan" jalurnya untuk kembali ke asal subrutin dipanggil, yang dapat berbeda setiap kali diaktifkan.

(Jika sebuah subrutin memiliki alamat pengirim yang tetap, Anda hanya dapat memanggilnya dari satu tempat di program Anda, yang akan membuat percuma repot mengemas kode itu ke dalam subrutin terpisah sejak awal.)

Seperti yang dapat Anda bayangkan, jika Anda menginjak-injak alamat pengembalian ajaib itu sebelum subrutin selesai berjalan, maka ketika selesai, subrutin itu akan dengan percaya diri tetapi tanpa sadar "melepaskan" dirinya ke tempat yang salah.

Dengan sedikit (atau mungkin banyak) keberuntungan, seorang penyerang mungkin dapat memprediksi terlebih dahulu bagaimana menginjak-injak alamat pengirim secara kreatif, dan dengan demikian menyesatkan program dengan cara yang disengaja dan jahat.

Alih-alih hanya mogok, program yang salah arah dapat diakali untuk menjalankan kode pilihan penyerang, sehingga menyebabkan apa yang dikenal sebagai eksekusi kode jarak jauh mengeksploitasi, atau RCE.

Dua pertahanan umum membantu melindungi dari eksploitasi semacam ini:

  • Pengacakan tata letak ruang alamat, juga dikenal sebagai ASLR. Sistem operasi sengaja memuat program di lokasi memori yang sedikit berbeda setiap kali dijalankan. Hal ini mempersulit penyerang untuk menebak bagaimana mengarahkan program buggy dengan cara yang pada akhirnya mendapatkan dan mempertahankan kendali alih-alih hanya merusak kode.
  • tumpukan burung kenari, dinamai menurut nama burung yang biasa dibawa para penambang ke bawah tanah karena mereka akan pingsan di hadapan metana, sehingga memberikan peringatan dini yang kejam namun efektif akan risiko ledakan. Program ini dengan sengaja menyisipkan blok data yang dikenal tetapi acak tepat di depan alamat pengirim setiap kali subrutin dipanggil, sehingga buffer overflow akan menimpa "canary" terlebih dahulu, sebelum overrun cukup jauh untuk diinjak-injak pada alamat pengirim yang sangat penting.

Agar eksploit mereka bekerja dengan cepat dan andal, para peneliti perlu memaksa colokan Wemo untuk mematikan ASLR, yang tidak dapat dilakukan penyerang jarak jauh, tetapi dengan banyak percobaan dalam kehidupan nyata, penyerang mungkin beruntung, tebak dengan benar di alamat memori yang digunakan oleh program, dan tetap mendapatkan kontrol.

Tetapi para peneliti tidak perlu khawatir tentang masalah stack canary, karena aplikasi buggy telah dikompilasi dari kode sumbernya dengan fitur “insert canary-checking safety instruction” dimatikan.

(Program yang dilindungi Canary biasanya sedikit lebih besar dan lebih lambat daripada yang tidak dilindungi karena kode tambahan diperlukan di setiap subrutin untuk melakukan pemeriksaan keamanan.)

Apa yang harus dilakukan?

  • Jika Anda adalah pemilik Wemo Smart Plug V2, pastikan Anda belum mengonfigurasi router rumah Anda untuk mengizinkan perangkat diakses dari "luar", melalui internet. Ini mengurangi apa yang dikenal dalam jargon sebagai milik Anda luas permukaan serangan.
  • Jika Anda memiliki router yang mendukung Universal Plug and Play, juga dikenal sebagai UPnP, pastikan itu dimatikan. UPnP sangat memudahkan perangkat internal untuk dibuka secara tidak sengaja ke pihak luar.
  • Jika Anda seorang programmer, hindari mematikan fitur keamanan perangkat lunak (seperti perlindungan tumpukan atau pemeriksaan tumpukan kenari) hanya untuk menghemat beberapa byte. Jika Anda benar-benar kehabisan memori, cobalah untuk mengurangi jejak Anda dengan meningkatkan kode Anda atau menghapus fitur daripada dengan mengurangi keamanan sehingga Anda dapat menjejalkan lebih banyak.

Stempel Waktu:

Lebih dari Keamanan Telanjang