silabs 21Q2 mengamankan Lab Keamanan perangkat BLE
Manual Lab Keamanan BLE
Di lab ini, Anda akan melihat cara mendesain perangkat BLE yang lebih aman. Kita akan mulai dengan overview tentang cara menggunakan beberapa fitur tumpukan dan beralih ke beberapa saran umum tentang teknik untuk koneksi yang lebih aman dan akhirnya kita akan melihat cara menggunakan sertifikat perangkat melalui BLE untuk mengidentifikasi periferal sebagai otentik.
Memulai
Bluetooth-nyaample aplikasi yang akan Anda bangun dimaksudkan untuk digunakan dengan bootloader. Jika Anda bekerja dengan EFR32MG21B baru, itu tidak akan memiliki bootloader. Anda dapat menemukan bootloader bawaan di platform\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a folder SDK Anda.
- Mulailah dengan soc-kosong sampaplikasi ini sample app digunakan sebagai template dan menjadi titik awal yang baik untuk aplikasi BLE apa pun.
- Buka Wizard Proyek Silicon Labs dari Simplicity Studio File menu -> baru.
- Pilih BRD4181C dan klik tombol 'berikutnya'.
- Klik kotak centang 'Bluetooth (9)' di bawah jenis teknologi.
- Sorot 'Bluetooth – SoC Empty' lalu klik next.
- Klik tombol 'Selesai'.
- Sekarang Anda dapat menambahkan beberapa karakteristik untuk melihat bagaimana karakteristik yang dilindungi dan tidak dilindungi diperlakukan secara berbeda.
- Buka slcp proyek file dengan mengklik dua kali di jendela Project Explorer
- Sorot tab 'KOMPONEN PERANGKAT LUNAK' dan buka alat konfigurasi GATT seperti yang ditunjukkan di bawah ini:
Dan gunakan alat impor yang ditunjukkan di bawah ini untuk mengimpor gatt_configuration.btconf file dari folder server di materi yang disediakan.
Basis data GATT memiliki layanan khusus, yang disebut 'Pelatihan', dengan beberapa data yang dilindungi dan beberapa yang tidak. Ini memungkinkan Anda untuk membandingkan apa yang terjadi ketika mencoba mengakses karakteristik yang dilindungi vs yang tidak dilindungi. Ini adalah cara cepat membuat perangkat dengan keamanan yang sangat mendasar.
- Kami akan menggunakan port serial untuk mencetak ke konsol di Simplicity Studio untuk melacak apa yang terjadi di aplikasi. Cara termudah untuk menemukan komponen ini adalah dengan mencarinya di dialog KOMPONEN PERANGKAT LUNAK seperti yang ditunjukkan:
-
- Instal komponen IO Stream USART
- Instal komponen IO Stream Retarget STDIO
- Instal komponen I/O Standar
- Instal komponen Log
- Buka komponen Board Control dan nyalakan 'Enable Virtual COM UART'
- Klik kanan adaptor di panel 'Debug adapters' dan pilih 'Launch Console'. Pilih tab 'Serial 1' dan letakkan kursor di kolom entri teks di jendela konsol dan tekan enter untuk mengaktifkan konsol.
-
- Buat variabel lokal di sl_bt_on_event(), ditemukan di app.c, untuk menyimpan pegangan koneksi. Variabel harus statis karena fungsi ini dipanggil setiap kali suatu peristiwa dimunculkan oleh tumpukan dan kami ingin nilainya tetap. Pegangan koneksi akan digunakan nanti
bagian laboratorium.
- Sisipkan beberapa pernyataan app_log() untuk acara untuk dilihat saat kita terhubung, mode keamanan, dll
-
- Sertakan tajuk app_log.h file
- sl_bt_evt_connection_opened – cetak pegangan ikatan dan simpan pegangan sambungan. Jika pegangan ikatan 0xFF, tidak ada ikatan antara perangkat yang terhubung. Ubah event handler yang ada sehingga terlihat seperti ini:
- sl_bt_evt_connection_parameters – mode keamanan. Hal ini dilakukan agar Anda dapat melihat saat mode keamanan berubah. Terdapat perbedaan penomoran mode keamanan dimana mode keamanan 1, dicacah dengan nilai 0, dst. Tambahkan event handler berikut ke aplikasi Anda:
- sl_bt_evt_connection_closed_id. Penangan acara ini dimodifikasi untuk memperbarui pegangan koneksi. Nilai 0xFF digunakan untuk menunjukkan bahwa tidak ada koneksi yang aktif. Perintah app_log() digunakan untuk mencetak alasan koneksi ditutup, daftar kode status ada di sini. Ubah event handler yang ada sehingga terlihat seperti ini:
- Sertakan tajuk app_log.h file
-
- Bangun dan flash proyek. Pada titik ini, kita akan menjalankan sample aplikasi untuk melihat bagaimana perilakunya tanpa perubahan apa pun, selain database GATT.
- Terhubung dengan aplikasi seluler EFRConnect sebagai berikut:
-
- Ketuk ikon 'Peramban Bluetooth'.
- Ketuk ikon 'Hubungkan' pada perangkat bernama 'Pelatihan'.
-
- Baca karakteristik tidak terlindungi sebagai berikut:
-
- Ketuk tautan 'Info Lebih Lanjut' di bawah layanan tidak dikenal dengan UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Baca karakteristik yang tidak dilindungi, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c dengan mengetuk ikon 'Baca'. Tidak ada kejutan di sini. Karena karakteristik tidak dilindungi dengan cara apa pun, itu akan dikirim dalam teks biasa.
-
- Sekarang baca karakteristik yang dilindungi, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Ponsel Anda akan meminta Anda untuk memasangkan dan menyambungkan, pesan tersebut dapat bervariasi tergantung pada OS seluler Anda. Setelah Anda menerima permintaan untuk memasangkan, Anda akan mendapatkan pesan di konsol sebagai berikut:
Catatan: Lampiran A di akhir manual ini memiliki ringkasan kemampuan I/O dan metode pasangan untuk referensi. Lampiran B merangkum mode keamanan Bluetooth.
Konfigurasi Manajer Keamanan
Manajer keamanan adalah bagian dari tumpukan Bluetooth yang menentukan fitur keamanan mana yang digunakan. Fitur-fitur ini termasuk perlindungan man-in-the-middle (MITM), koneksi LE Secure (alias ECDH), memerlukan konfirmasi untuk ikatan, dll. Manajer keamanan juga menangani kemampuan I/O yang digunakan untuk menentukan metode mana yang digunakan untuk memasangkan /bonding (lihat Lampiran A untuk ringkasan). Di bagian ini Anda akan melihat pengaturan sederhana.
- Atur SM dengan konfigurasi yang diinginkan. Perangkat keras untuk lab ini memudahkan untuk menampilkan kunci sandi di konsol. Entri kunci sandi adalah persyaratan untuk mengaktifkan perlindungan MITM. Tambahkan kode berikut ke event handler sl_bt_system_boot_id Anda. Ini memungkinkan man-in-the-middle dan menginformasikan perangkat jarak jauh bahwa kami memiliki kemampuan untuk menampilkan kunci sandi, tetapi hanya itu.
- Untuk menampilkan kunci sandi di konsol, diperlukan event handler seperti yang ditunjukkan di bawah ini:
- Atur mode bonding, jumlah maksimal bonding, dll. Gunakan kode berikut untuk memulai:
Pengaturan ini dapat digunakan untuk membatasi kemampuan penyerang untuk terikat dengan perangkat Anda. Jika produk Anda hanya perlu memiliki satu pengguna, maka Anda dapat membatasi ikatan maksimum menjadi 1. Tempat yang baik untuk menambahkan panggilan ini adalah di event handler sl_bt_system_boot_id. Kami tidak akan mengaktifkan bonding saat ini untuk membuat sisa lab berjalan lebih lancar, tetapi kami menetapkan kebijakan bonding untuk mengizinkan hanya satu bond. Untuk referensi, dokumentasi untuk API ini dapat ditemukan di sini dan di sini .
- Tambahkan event handler untuk sl_bt_evt_sm_bonded_id dan sl_bt_evt_sm_bonding_failed_id. Penggunaan utama untuk acara ini saat ini informatif tetapi nanti di lab Anda akan menambahkan fungsionalitas.
- Bangun dan flash ke papan target. Hubungkan dengan EFRConnect dan baca karakteristik yang dilindungi seperti sebelumnya. Kali ini, Anda akan melihat kunci sandi ditampilkan di konsol. Masukkan kunci sandi ini di ponsel Anda saat diminta.
- Cobalah konfirmasi ikatan. Fitur ini memberi pengguna kemampuan untuk meminta konfirmasi permintaan ikatan. Melakukannya memberi aplikasi kontrol atas perangkat peer mana yang terikat dengannya. Salah satu kemungkinannya adalah mengharuskan pengguna untuk menekan tombol sebelum mengizinkan ikatan.
- Buka pengaturan Bluetooth di ponsel Anda dan lepaskan ikatan ke perangkat EFR32. Implementasi ponsel bervariasi sehingga langkah ini mungkin tidak diperlukan. Jika Anda tidak melihat perangkat 'Pelatihan' di pengaturan Bluetooth Anda, lanjutkan ke langkah berikutnya.
- Dalam komponen perangkat lunak, instal satu contoh pengendali tombol sederhana.
- Sertakan headernya file sl_simple_button_instances.h di app.c
- Tambahkan handler untuk acara sl_bt_evt_sm_bonding_confirm_id. Tugas utama event handler ini adalah memberi tahu pengguna bahwa perangkat jarak jauh meminta ikatan baru.
- Tambahkan fungsi panggilan balik untuk pengendali tombol sederhana untuk mengirim sinyal ke tumpukan Bluetooth yang menunjukkan bahwa tombol telah ditekan. Ini menimpa panggilan balik default yang hanya kembali.
- Tambahkan pengendali peristiwa sinyal eksternal. Acara ini dibangkitkan sebagai respons terhadap penerimaan sinyal, seperti pada langkah sebelumnya. Peristiwa sinyal eksternal akan digunakan untuk mengkonfirmasi ikatan.
- Ubah panggilan menjadi sl_bt_sm_configure untuk meminta konfirmasi ikatan seperti
- Membangun kembali dan flash.
- Hubungkan dengan EFRConnect dan baca karakteristik yang dilindungi seperti sebelumnya. Sekarang Anda akan melihat pesan di konsol sebagai berikut:
Tekan PB0 untuk mengkonfirmasi ikatan. Sekarang konsol akan menampilkan kunci sandi yang akan dimasukkan pada ponsel untuk ikatan. Masukkan kunci sandi untuk menyelesaikan proses ikatan.
Tip: Gunakan case default di event handler untuk mencetak pesan saat stack mengirimkan event yang tidak ditangani. Tumpukan mungkin mencoba memberi tahu Anda sesuatu yang penting.
Melampaui Dasar-Dasar
Pada titik ini, Anda telah mengambil keuntungantagsalah satu fitur keamanan yang ditawarkan tumpukan kami. Sekarang mari kita tingkatkan implementasi melalui penggunaan fitur yang kita miliki secara bijaksana. Langkah-langkah berikut ini opsional dan independen satu sama lain, Anda dapat membangun dan mem-flash setelah masing-masing untuk melihat perilaku atau mencoba semuanya bersama-sama.
- Putuskan sambungan pada upaya ikatan yang gagal. Ini adalah tempat yang baik untuk mendeteksi ancaman. Jika perangkat jarak jauh tidak mendukung enkripsi/otentikasi atau hanya tidak memiliki kunci yang benar, bisa jadi itu adalah peretas. Jadi, mari kita putuskan sambungannya. Coba tambahkan panggilan ke sl_bt_connection_close() di acara sl_bt_sm_bonding_failed_id. API didokumentasikan di sini.
Anda dapat menguji fitur ini dengan memasukkan kunci sandi yang salah.
- Hanya mengizinkan ikatan pada waktu-waktu tertentu. Ini membatasi waktu penyerang untuk membentuk ikatan dan memungkinkan untuk menggunakan fitur 'hanya izinkan koneksi terikat'. Perancang dapat memilih cara mengaktifkan atau menonaktifkan mode bondable. Untuk tujuan demonstrasi di sini, kami akan mengaktifkan 'mode pengaturan' dengan PB1 dan menggunakan timer untuk menonaktifkannya setelah 30 detik.
- Instal instance kedua dari antarmuka tombol sederhana. Ini akan memungkinkan penggunaan PB1.
- Ubah panggilan balik untuk mengirim sinyal berbeda ke tumpukan untuk mengaktifkan/menonaktifkan ikatan. Hasilnya akan terlihat seperti ini:
- Ubah pengendali peristiwa sinyal eksternal sehingga menangani sinyal baru ini. Hasilnya harus seperti ini:
- Tambahkan pengendali acara untuk acara sl_bt_evt_system_soft_timer_id. Ini akan digunakan untuk menonaktifkan mode pengaturan.
- Kode berikut dapat digunakan untuk mengaktifkan mode bondable dan mengizinkan semua koneksi atau untuk menonaktifkan mode bondable dan hanya mengizinkan koneksi dari perangkat bonded:
- Tambahkan panggilan berikut di sl_bt_system_boot_id event handler
- Bangun proyek dan flash ke perangkat.
- Coba sambungkan ke perangkat dengan EFRConnect. Sambungan harus gagal.
- Sekarang coba tekan PB1 sebelum menghubungkan dengan EFRConnect. Kali ini koneksi akan berhasil. Setelah 30 detik, Anda akan melihat pesan di konsol yang menunjukkan bahwa perangkat keluar dari mode penyiapan. Ini berarti bahwa mode bondable sekarang dinonaktifkan.
- Tingkatkan keamanan dalam membentuk koneksi. Karena keamanan bersifat opsional, kita harus meminta koneksi terenkripsi sesegera mungkin daripada mengandalkan karakteristik GATT. API didokumentasikan di sini. Tempat yang baik untuk memanggil API ini adalah di acara sl_bt_evt_connection_opened_id. Pegangan koneksi tersedia di variabel koneksi.
Identitas Aman
Sekarang kita memiliki perangkat Bluetooth yang lebih aman, mari tingkatkan langkah otentikasi. Anda telah melihat cara memverifikasi identitas aman perangkat vault dengan baris perintah di lab pelatihan sebelumnya. Di bagian ini, kita akan melihat bagaimana satu perangkat BLE dapat memverifikasi identitas perangkat BLE lain dengan meminta rantai sertifikatnya dan mengirimkan tantangan. Semua bagian brankas yang aman memiliki sertifikat perangkat dan sertifikat batch mereka sendiri. Sertifikat pabrik dan root dikodekan ke dalam aplikasi klien untuk mengaktifkan verifikasi seluruh rantai sertifikat. Lihat AN1268 untuk detail lebih lanjut tentang identitas aman.
- Tentukan buffer global untuk menyimpan tanda tangan pengesahan perangkat seperti di bawah ini:
- Atur konfigurasi manajer keamanan untuk menggunakan pasangan JustWorks. Hal ini dilakukan agar koneksi terenkripsi. Dalam praktiknya, perlindungan MITM harus digunakan tetapi untuk menjaga lab tetap sederhana, kami akan menggunakan JustWorks. Ubah panggilan ke sl_bt_sm_configure kembali ke yang berikut:
Juga, beri komentar panggilan ke setup_mode(true) di event handler system_boot.
- Buka helpers.c dari materi yang disediakan dan salin isinya ke app.c. Fungsi panggilan balik ini melakukan tugas seperti mengelompokkan sertifikat sehingga dapat dikirim melalui BLE, memverifikasi rantai sertifikat, dan menghasilkan/memverifikasi tantangan.
- Penting untuk menentukan ukuran unit transfer maksimum (MTU) agar sertifikat dapat disegmentasi dan dipasang kembali. Tentukan variabel global untuk menyimpan MTU seperti yang ditunjukkan di sini:
Kemudian tambahkan event handler untuk GATT MTU exchanged event seperti yang ditunjukkan di bawah ini:
- Ada tiga karakteristik data pengguna yang dapat dibaca. Karakteristik ini digunakan untuk mengomunikasikan sertifikat perangkat, sertifikat batch, dan tantangan. Fungsi panggilan balik digunakan untuk menangani permintaan baca pengguna ini. Tambahkan handler untuk memanggil fungsi ini seperti yang ditunjukkan di bawah ini:
Callback menggunakan MTU dari langkah #2 untuk menyegmentasikan dan mengirim sertifikat sesuai kebutuhan. Itu juga menangani pengiriman tantangan yang ditandatangani.
- Klien mengirimkan tantangan, nomor acak untuk ditandatangani oleh server, dengan menulis salah satu karakteristik GATT. Untuk alasan ini, aplikasi perlu memiliki handler untuk acara permintaan tulis pengguna seperti di bawah ini:
- Tambahkan dukungan identitas yang aman files ke proyek:
- app_se_manager_macro.h, app_se_manager_secure_identity.c dan app_se_secure_identity.h dari materi yang disediakan ke proyek. Ini files berisi beberapa fungsi pembantu untuk tugas-tugas seperti mendapatkan ukuran sertifikat, mendapatkan kunci publik perangkat, dan menandatangani tantangan.
- Sertakan app_se_manager_secure_identity.h di app.c.
- Impor gatt_configuration-attest.btconf yang disediakan dari materi yang disediakan. Basis data GATT ini disebut pengesahan aman yang mencakup empat karakteristik yang akan digunakan untuk memverifikasi identitas perangkat kami. Ini termasuk sertifikat perangkat, sertifikat batch, tantangan dan respons.
- Klien, yang digunakan untuk mensimulasikan perangkat seperti gateway, disediakan sebagai proyek lengkap karena lebih kompleks untuk dibangun. Secara umum, operasi klien adalah sebagai berikut:
- Memindai perangkat yang mengiklankan layanan pengesahan aman dan menghubungkannya.
- Menemukan layanan dan karakteristik basis data GATT.
- Membaca perangkat dan sertifikat batch serta memverifikasi rantai sertifikat menggunakan sertifikat pabrik dan root yang telah disimpan dalam flash.
- Mengirim tantangan acak ke server.
- Upaya untuk memverifikasi respons terhadap tantangan.
- Menutup koneksi jika salah satu verifikasi gagal.
- Bangun dan flash proyek server ke server Anda WSTK / radioboard.
- Impor proyek klien dari folder klien di materi yang disediakan. Bangun dan flash proyek klien ke WSTK/radioboard klien Anda.
- Tekan reset pada WSTK klien dan buka konsol serial. Klien mulai memindai perangkat yang mengiklankan layanan identitas aman kami dan akan terhubung saat menemukannya.
- Klien akan menampilkan beberapa pesan untuk menunjukkan bahwa ia telah menemukan server dengan layanan yang diinginkan dan pesan status tentang verifikasi rantai sertifikat.
- Jika verifikasi lolos, klien akan menghasilkan nomor acak, yang disebut tantangan, dan mengirimkannya ke server. Server akan menandatangani tantangan dengan kunci perangkat pribadi yang dipegang dengan aman dan tanda tangan kembali ke klien, ini disebut respons tantangan. Klien kemudian menggunakan kunci publik dalam sertifikat perangkat yang diterima sebelumnya untuk memverifikasi tanda tangan. Ini dilakukan untuk mengonfirmasi bahwa server benar-benar memiliki kunci pribadi yang diklaimnya. Jika tantangan diverifikasi dengan benar, sebuah pesan ditampilkan untuk efek itu; jika tidak, koneksi ditutup, dan sebuah pesan ditampilkan menjelaskan alasannya.
- Sekarang kirim sertifikat yang tidak valid untuk mengonfirmasi bahwa verifikasi benar-benar berfungsi. Anda dapat memodifikasi user_read_request_cb() untuk merusak data sertifikat atau respons tantangan.
Lampiran A – Kemampuan I/O dan Metode Pairing 
Lampiran B – Mode dan Level Keamanan
Mode keamanan 1 adalah satu-satunya mode yang didukung untuk Bluetooth Low Energy di tumpukan Silicon Labs. Levelnya adalah sebagai berikut:
- Tingkat 1 tanpa keamanan
- Pasangan level 2 yang tidak diautentikasi dengan enkripsi
- Pasangan terautentikasi level 3 dengan enkripsi
- Koneksi aman terautentikasi level 4 dengan enkripsi kuat (pertukaran kunci ECDH)
Dokumen / Sumber Daya
![]() |
silabs 21Q2 mengamankan Lab Keamanan perangkat BLE [Bahasa Indonesia:] Panduan Pengguna 21Q2 mengamankan Lab Keamanan perangkat BLE, Lab Keamanan perangkat BLE aman, Lab Keamanan |