Bisakah program yang dimuat ke papan NodeMCU diekstraksi?

13

Saya menggunakan papan NodeMCU dengan kemampuan WiFi untuk membangun pelacak aset sederhana. Saya telah berhasil menemukan beberapa sketsa Arduino yang memungkinkan konektivitas ke Azure IoT Hub dan memposting pesan.

Salah satu kunci yang perlu saya "muat" ke papan adalah string Azure Device Connection dan tentu saja WiFi SSID dan kata sandi.

Ketakutan saya adalah seseorang mungkin hanya mengambil papan dan "mengunduh" file untuk mendapatkan akses ke kredensial keamanan.

Apakah ketakutan saya tidak beralasan atau hilangnya kredensial merupakan ancaman nyata yang perlu saya mitigasi?

domba jantan
sumber
3
Saya pikir jawaban dari @Mike Ounsworth dan Bence Kaulics diambil bersama memberi saya pilihan yang layak. Sayangnya saya tidak dapat menandai keduanya sebagai jawaban yang diterima.
domba jantan

Jawaban:

12

[Penafian: Saya seorang profesional keamanan / crypto dan menangani pertanyaan arsitektur keamanan seperti ini setiap hari.]

Anda menemukan masalah dalam menyimpan kredensial sedemikian rupa sehingga proses yang tidak dijaga dapat mengaksesnya, tetapi penyerang tidak bisa. Ini adalah masalah yang sudah diketahui dan sangat sulit untuk dipecahkan.

Jika perangkat IoT Anda memiliki keystore perangkat keras yang terpasang di motherboard, seperti TPM, atau setara dengan Keystore yang didukung Android Hardware atau Apple Secure Enclave, maka Anda dapat menggunakannya.

Dengan server tradisional, Anda dapat menggunakan HSM atau Kartu Cerdas, tetapi satu-satunya solusi perangkat lunak lengkap yang saya ketahui adalah untuk mendapatkan kunci AES dari semacam "sidik jari perangkat keras" yang dibangun dengan menggabungkan nomor seri semua perangkat perangkat keras. Kemudian gunakan kunci AES untuk mengenkripsi kredensial. Sebuah proses yang berjalan di server yang sama dapat merekonstruksi kunci AES dan mendekripsi kredensial, tetapi begitu Anda mengekstrak file dari server, itu pada dasarnya tidak dapat didekripsi.

IOT melemparkan kunci pas ke dalam itu karena dua alasan:

  1. Asumsi bahwa nomor seri perangkat keras adalah unik mungkin tidak berlaku, dan

  2. Tidak seperti server, penyerang memiliki akses fisik ke perangkat, oleh karena itu mungkin bisa mendapatkan shell pada perangkat untuk menjalankan program dekripsi.

Enkripsi perangkat keras (TPM) dan enkripsi "sidik jari perangkat keras" paling tidak membingungkan karena, pada dasarnya, jika suatu proses lokal dapat mendekripsi data, maka seorang penyerang yang dapat menjalankan proses lokal itu juga dapat mendekripsi.


Jadi trik standar sepertinya tidak berfungsi di sini. Pertanyaan pertama yang perlu Anda tanyakan pada diri sendiri adalah:

  • Apa model ancaman saya / di mana proyek ini berada pada Secure <--> Convenientskala?

Pada akhirnya, saya pikir Anda juga perlu memutuskan itu security > conveniencedan meminta seorang manusia memasukkan kredensial setelah setiap boot-up (menggunakan sesuatu seperti jawaban @ BenceKaulics ), atau Anda memutuskan itu security < conveniencedan hanya meletakkan kredensial pada perangkat, mungkin menggunakan sedikit kebingungan jika Anda merasa itu membuat perbedaan.


Ini adalah masalah sulit yang diperberat oleh sifat perangkat IoT.

Untuk kelengkapan, solusi industri lengkap untuk masalah ini adalah:

  • Berikan setiap perangkat IoT kunci publik RSA yang unik pada waktu pembuatan. Rekam kunci publik ini dalam db terhadap nomor seri perangkat.
  • Simpan kredensial sensitif di server yang tepat, sebut saja "gateway".
  • Ketika perangkat IoT mengautentikasi ke gateway (menggunakan kunci RSA-nya), gateway membuka sesi untuk itu menggunakan kredensial yang disimpan dan menyerahkan token sesi kembali ke perangkat.
  • Untuk keamanan terbaik, gateway adalah gateway fisik (atau VPN) sehingga semua lalu lintas dari perangkat IoT melewati gateway dan Anda memiliki kontrol lebih besar atas aturan dan hal-hal firewall - idealnya mencegah perangkat agar tidak langsung (non-VPN tunneled) akses ke internet.

Dengan cara ini, dan penyerang yang berkompromi dengan perangkat dapat membuka sesi, tetapi tidak pernah memiliki akses langsung ke kredensial.

Mike Ounsworth
sumber
2
Iya. Sebagian besar masalahnya adalah apa yang coba dilindungi di sini adalah rahasia bersama yaitu kata sandi wifi. Rahasia bersama adalah ide buruk ketika perangkat dapat dibedah secara fisik. Desain yang lebih baik akan memisahkan setiap instance perangkat (atau komputer lain) ke dalam lingkungan keamanannya sendiri dengan saluran aman unik antara masing-masing gadget dan sistem yang perlu mereka komunikasikan. Dalam hal ini, wifi mungkin tidak cocok untuk aplikasi ini vs beberapa skema 2,4 GHz point-to-point atau bahkan protokol "Esp Now".
Chris Stratton
1
Poin yang bagus. Anda bisa memperbaiki masalah rahasia bersama dengan menggunakan sertifikat klien perusahaan WPA2 daripada kata sandi SSID (jika perangkat IoT cukup besar untuk memiliki tumpukan TLS, banyak yang tidak). Saya tidak tahu apa-apa tentang Azure IoT Hub, tapi saya berasumsi string Koneksi Perangkat Azure itu sudah unik per perangkat. Sayangnya, ini tampaknya menjadi hitam-putih yang cukup bersih antara "DIY tidak ada keamanan" dan "Keamanan skala industri" dengan tidak banyak di antaranya.
Mike Ounsworth
2
Saya bertanya-tanya, jika saya bisa membuka sesi sesuka hati, mengapa saya perlu kredensial?
Andrew Savinykh
1
@AndrewSavinykh Tergantung pada apa kredensial itu. Mungkin yang mereka lakukan hanyalah membuka sesi, dalam hal ini ya, tidak banyak alasan. Tapi mungkin itu adalah kredensial AD domain Windows, atau memberikan akses ke API tambahan yang biasanya tidak digunakan / diakses dari perangkat IoT. Mungkin Anda baik-baik saja dengan sesi yang berasal dari perangkat yang disusupi, tetapi tidak apa-apa dengan sesi yang datang dari laptop penyerang. Ya, itu bisa digunakan khusus kasus cukup cepat.
Mike Ounsworth
3
Nomor serial??? Menemukan nomor seri yang unik seharusnya tidak menjadi masalah, tetapi nomor seri bukanlah rahasia. Mereka tidak berguna untuk membentuk kunci. Di mana di bumi menggunakan nomor seri untuk membentuk kunci "trik standar"?
Gilles 'SANGAT berhenti menjadi jahat'
6

Ancamannya nyata tetapi untungnya bukan Anda yang pertama atau satu-satunya dengan masalah keamanan seperti ini.

Yang Anda butuhkan adalah ESP WiFi Manager yang Anda butuhkan di sini.

Dengan perpustakaan ini, ESP yang tidak memiliki sesi yang disimpan akan beralih ke mode AP dan akan menjadi tuan rumah portal web. Jika Anda terhubung ke AP ini dengan PC atau ponsel pintar, maka Anda akan dapat mengkonfigurasi kredensial WiFi melalui halaman web.

Anda tidak perlu melakukan hardcode pada informasi penting dan Anda dapat menggunakan perangkat Anda di jaringan WiFi apa pun yang Anda inginkan tanpa perlu membukanya lagi.

Bagaimana itu bekerja

  • ketika ESP Anda mulai, itu mengaturnya dalam mode Station dan mencoba untuk terhubung ke Access Point yang disimpan sebelumnya

  • jika ini tidak berhasil (atau tidak ada jaringan yang disimpan sebelumnya) itu memindahkan ESP ke mode Access Point dan memutar DNS dan WebServer (ip default 192.168.4.1)

  • menggunakan perangkat berkemampuan wifi apa pun dengan browser (komputer, telepon, tablet) terhubung ke Access Point yang baru dibuat

  • karena Captive Portal dan server DNS Anda akan mendapatkan popup jenis 'Bergabung ke jaringan' atau mendapatkan domain apa pun yang Anda coba akses diarahkan ke portal konfigurasi.

  • pilih salah satu titik akses yang dipindai, masukkan kata sandi, klik simpan

  • ESP akan mencoba terhubung. Jika berhasil, itu akan mengembalikan kontrol ke aplikasi Anda. Jika tidak, sambungkan kembali ke AP dan konfigurasi ulang.

(Dokumentasi WiFi Manager ESP)

Bence Kaulics
sumber
1
Atau cukup unduh rekaman atau apa pun saat sedang dalam mode AP. Semoga poster tidak mencoba menggunakan wifi itu sendiri untuk pelacakan aset.
Chris Stratton
1
@ ChrisStratton :-) sebenarnya, saya mencoba menggunakan WiFi untuk pelacakan aset. Untungnya, jaringan WiFI yang saya gunakan bersifat publik dan terbuka, tetapi saya khawatir tentang implikasi ketika saya perlu menggunakan yang lain yang membutuhkan kata sandi. Juga fakta bahwa string koneksi AzureIoT Hub ada di perangkat.
domba jantan
2
@rams Tentunya, membaca EEPROM perangkat tidak akan menjadi tugas besar.
Bence Kaulics
3
@rams Pada perangkat keras Anda, ya EPROM dapat dibaca. Perangkat yang lebih baru mungkin memiliki beberapa wilayah flash aman yang terlindungi lebih baik. Tentu saja ini adalah masalah yang diketahui yang membutuhkan dukungan on-chip untuk mencoba dan melakukannya dengan benar.
Sean Houlihane
2
@SeanHoulihane - ESP8266 tidak memiliki EEPROM. Flash SPI yang digunakannya untuk semuanya (termasuk mengemulasi fungsi Arduino) adalah eksternal untuk ESP8266. Bahkan dalam modul multi-chip, itu adalah die berbeda yang dapat diperiksa di laboratorium yang layak.
Chris Stratton
3

Ya, mereka dapat mengakses kata sandi Anda jika Anda membiarkannya sebagai teks biasa.

Intinya adalah banyak antarmuka koneksi wifi menerima kata sandi hash. Sementara yang saya gunakan hash md5 diterima dan md5 tidak super aman, masih merupakan tantangan yang sangat sulit untuk joe rata-rata. Bergantung pada file konfigurasi Anda, Anda bisa menyebutkan nama algoritma hashing Anda dan kemudian menulis kata sandi Anda atau menggunakan default yang digunakan antarmuka wifi Anda.

atakanyenel
sumber
3
Jika mereka dapat mengekstrak kata sandi hash yang berfungsi sementara hash apa yang mencegah mereka menggunakannya tanpa pernah membalikkannya?
Chris Stratton
1
@ ChrisStratton Anda benar. Cara bagaimana mencegahnya adalah untuk Keamanan Informasi SE, pertanyaan ini meminta pencegahan kehilangan kredensial. Namun demikian kata sandi hash masih tidak dapat digunakan oleh ponsel untuk terhubung ke jaringan tanpa perangkat lunak tambahan.
atakanyenel
1
Ya, pada dasarnya itu akan menawarkan beberapa perlindungan dalam hal penggunaan kembali kata sandi wifi di beberapa sistem lain, tetapi tidak banyak terhadap koneksi yang tidak sah ke titik akses wifi itu.
Chris Stratton
1
@ ChrisStratton ya, misalnya daftar putih MAC jauh lebih aman daripada hanya memiliki kata sandi dan hashing, tetapi langkah-langkah ini untuk keamanan wifi secara umum, bukan untuk privasi kredensial pada perangkat publik.
atakanyenel
2
Tidak, daftar putih MAC adalah lelucon - tidak ada rahasia sama sekali. Dan tentu saja MAC siap diekstraksi dari ESP8266 yang dicuri atau flash SPI-nya. Tentang satu-satunya tempat whitelisting MAC akan membantu adalah terhadap orang-orang yang menggunakan GUI untuk bergabung dengan jaringan wifi, atau jika titik akses sedang duduk di sana menunggu koneksi dari klien yang mungkin muncul suatu hari, tetapi tidak pernah terhubung ke sana - yaitu , Pedang dalam hal jenis batu.
Chris Stratton
1

Jawaban sederhana - YA. Itu bisa dilakukan. Anda harus, setidaknya, melakukan semacam kebingungan untuk memberikan perlindungan minimal.

Amit Vujic
sumber
1
Kebingungan membuat lebih sulit untuk mengetahui bagaimana perangkat melakukan hal-hal, tetapi tidak ada gunanya untuk melindungi terhadap kloning perangkat. Tidak ada gunanya untuk melindungi dari ekstraksi kredensial: yang harus Anda lakukan adalah menjalankan firmware di emulator.
Gilles 'SANGAT berhenti menjadi jahat'
Setuju. Motivasi saya memberikan jawaban seperti itu adalah untuk mencatat bahwa <keamanan jaringan IoT harus dipertimbangkan>. @Mike Ounsworth memberikan jawaban terperinci yang menyarankan solusi menggunakan infrastruktur AES dan / atau RSA. Saya sedang mempertimbangkan untuk memberikan satu jawaban lagi tetapi saya tidak yakin bagaimana cara mencelupkannya ke dalam kriptografi (Saya juga sudah bertahun-tahun dalam solusi pembayaran dan perbankan). Pemikiran saya adalah bahwa kita harus memberikan saran praktis / seimbang karena biasanya orang akan menghindari untuk masuk jauh ke dalam kriptografi untuk melindungi perangkat IoT di halaman belakang rumahnya.
Amit Vujic
1
Jika orang ingin membuat perangkat yang tidak aman karena mereka tidak dapat diganggu untuk mengetahui cara membuat perangkat yang aman, saya tidak melihat alasan untuk mengaktifkannya.
Gilles 'SO- berhenti bersikap jahat'
Pengalaman saya adalah bahwa orang ingin belajar tetapi sekali lagi, harus ada keseimbangan antara tingkat keamanan dan kompleksitas. Ada cerita terkenal di industri pembayaran mengenai SET ( en.wikipedia.org/wiki/Secure_Electronic_Transaction ) yang / sangat aman tetapi rumit untuk diimplementasikan dan karena itu gagal dalam praktiknya.
Amit Vujic
2
Kebingungan menambah kompleksitas tanpa meningkatkan keamanan. Itu tidak seimbang.
Gilles 'SO- stop being evil'