silabs 21Q2 secure na BLE device Security Lab
Manual ng BLE Security Lab
Sa lab na ito, makikita mo kung paano magdisenyo ng mas secure na BLE device. Magsisimula tayo sa isang taposview ng kung paano gamitin ang ilan sa mga feature ng stack at magpatuloy sa ilang pangkalahatang payo tungkol sa mga diskarte para sa mas secure na mga koneksyon at sa wakas ay makikita natin kung paano gamitin ang mga certificate ng device sa BLE para matukoy ang isang peripheral bilang tunay.
Pagsisimula
Ang Bluetooth sampAng application na bubuuin mo ay nilayon na gamitin sa isang bootloader. Kung nagtatrabaho ka sa isang bagong EFR32MG21B, hindi ito magkakaroon ng bootloader. Makakahanap ka ng pre-built bootloader sa platform\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a folder ng iyong SDK.
- Magsimula sa isang soc-empty sampang app. Ito sample app ay ginagamit bilang isang template at gumagawa ng isang magandang panimulang punto para sa anumang BLE application.
- Buksan ang Silicon Labs Project Wizard mula sa Simplicity Studio File menu -> bago.
- Piliin ang BRD4181C at i-click ang 'susunod' na buton.
- I-click ang checkbox na 'Bluetooth (9)' sa ilalim ng uri ng teknolohiya.
- I-highlight ang 'Bluetooth – SoC Empty' pagkatapos ay i-click ang susunod.
- I-click ang button na 'Tapos na'.
- Maaari ka na ngayong magdagdag ng ilang katangian upang makita kung paano naiiba ang pagtrato sa mga protektadong at hindi protektadong katangian.
- Buksan ang slcp ng proyekto file sa pamamagitan ng pag-double click nito sa window ng Project Explorer
- I-highlight ang tab na 'SOFTWARE COMPONENTS' at buksan ang GATT configuration tool tulad ng ipinapakita sa ibaba:
At gamitin ang tool sa pag-import na ipinapakita sa ibaba upang i-import ang gatt_configuration.btconf file mula sa folder ng server sa mga ibinigay na materyales.
Ang database ng GATT ay may custom na serbisyo, na tinatawag na 'Pagsasanay', na may ilang data na protektado at ang ilan ay hindi. Nagbibigay-daan ito sa iyong paghambingin kung ano ang nangyayari kapag sinusubukang i-access ang isang protektadong katangian kumpara sa isang hindi protektadong katangian. Ito ay isang mabilis na paraan ng paggawa ng isang device na may napakapangunahing seguridad.
- Gagamitin namin ang serial port para mag-print sa console sa Simplicity Studio para subaybayan kung ano ang nangyayari sa application. Ang pinakamadaling paraan upang mahanap ang mga bahaging ito ay sa pamamagitan ng paghahanap sa mga ito sa dialog ng SOFTWARE COMPONENTS tulad ng ipinapakita:
-
- I-install ang bahagi ng IO Stream USART
- I-install ang bahagi ng IO Stream Retarget STDIO
- I-install ang Standard I/O component
- I-install ang Log component
- Buksan ang bahagi ng Board Control at i-on ang 'Paganahin ang Virtual COM UART'
- I-right-click ang adapter sa panel ng 'Mga adaptor sa pag-debug' at piliin ang 'Ilunsad ang Console'. Piliin ang tab na 'Serial 1' at ilagay ang cursor sa field ng text entry ng console window at pindutin ang enter upang gisingin ang console.
-
- Gumawa ng lokal na variable sa sl_bt_on_event(), na makikita sa app.c, para sa pag-save ng handle ng koneksyon. Ang variable ay dapat na static dahil ang function na ito ay tinatawag sa bawat oras na ang isang kaganapan ay itataas ng stack at gusto namin ang halaga na maging persistent. Ang hawakan ng koneksyon ay gagamitin sa ibang pagkakataon
seksyon ng lab.
- Maglagay ng ilang app_log() statement para makita ng mga event kung kailan kami nakakonekta, mga security mode, atbp
-
- Isama ang app_log.h header file
- sl_bt_evt_connection_open – i-print ang bond handle at i-save ang connection handle. Kung ang hawakan ng bono ay 0xFF, walang umiiral na bond sa pagitan ng mga konektadong device. Baguhin ang kasalukuyang handler ng kaganapan upang maging ganito ang hitsura nito:
- sl_bt_evt_connection_parameters – mode ng seguridad. Ginagawa ito upang makita mo kung kailan nagbago ang mode ng seguridad. Mayroong pagkakaiba sa pagnunumero ng mga mode ng seguridad kung saan ang mode ng seguridad 1, ay binibilang na may halagang 0, atbp. Idagdag ang sumusunod na tagapangasiwa ng kaganapan sa iyong aplikasyon:
- sl_bt_evt_connection_closed_id. Ang event handler na ito ay binago para i-update ang connection handle. Ang value na 0xFF ay ginagamit upang ipahiwatig na walang aktibong koneksyon. Ang utos ng app_log() ay ginagamit upang i-print ang dahilan ng pagsasara ng koneksyon, ang listahan ng mga status code ay narito. Baguhin ang kasalukuyang handler ng kaganapan upang maging ganito ang hitsura nito:
- Isama ang app_log.h header file
-
- Buuin at i-flash ang proyekto. Sa puntong ito, tatakbo tayo sa sample app upang makita kung paano ito kumikilos nang walang anumang mga pagbabago, bukod sa database ng GATT.
- Kumonekta sa EFRConnect mobile app gaya ng sumusunod:
-
- I-tap ang icon na 'Bluetooth Browser'.
- I-tap ang icon na 'Connect' sa device na pinangalanang 'Training'.
-
- Basahin ang hindi protektadong katangian tulad ng sumusunod:
-
- I-tap ang link na 'Higit Pang Impormasyon' sa ilalim ng hindi kilalang serbisyo gamit ang UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Basahin ang hindi protektadong katangian, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c sa pamamagitan ng pag-tap sa icon na 'Read'. Walang sorpresa dito. Dahil ang katangian ay hindi protektado sa anumang paraan, ito ay ipapadala sa plaintext.
-
- Ngayon basahin ang protektadong katangian, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Dapat kang i-prompt ng iyong mobile phone na ipares at kumonekta, maaaring mag-iba ang mensahe depende sa iyong mobile OS. Pagkatapos mong tanggapin ang kahilingang ipares, dapat kang magpadala ng mensahe sa console tulad ng sumusunod:
Tandaan: Ang Appendix A sa dulo ng manwal na ito ay may buod ng mga kakayahan ng I/O at mga paraan ng pagpapares para sanggunian. Binubuod ng Appendix B ang mga mode ng seguridad ng Bluetooth.
Configuration ng Security Manager
Ang security manager ay bahagi ng Bluetooth stack na tumutukoy kung aling mga security feature ang ginagamit. Kasama sa mga feature na ito ang proteksyon ng man-in-the-middle (MITM), LE Secure connections (aka ECDH), na nangangailangan ng kumpirmasyon para sa bonding, atbp. Ang security manager ay humahawak din sa mga kakayahan ng I/O na ginagamit upang matukoy kung aling paraan ang ginagamit para sa pagpapares /bonding (tingnan ang Appendix A para sa isang buod). Sa seksyong ito makikita mo ang isang simpleng pag-setup.
- I-setup ang SM na may gustong configuration. Pinapadali ng hardware para sa lab na ito ang pagpapakita ng passkey sa console. Ang pagpasok ng passkey ay isang kinakailangan upang paganahin ang proteksyon ng MITM. Idagdag ang sumusunod na code sa iyong sl_bt_system_boot_id event handler. Nagbibigay-daan ito sa man-in-the-middle at ipinapaalam sa malayong device na mayroon kaming kakayahang magpakita ng passkey, ngunit iyon lang.
- Para ipakita ang passkey sa console, kailangan ng event handler gaya ng ipinapakita sa ibaba:
- Itakda ang bonding mode, max na bilang ng mga bonding, atbp. Gamitin ang sumusunod na code upang makapagsimula:
Maaaring gamitin ang mga setting na ito upang limitahan ang kakayahan ng isang umaatake na makipag-bonding sa iyong device. Kung kailangan lang ng iyong produkto na magkaroon ng isang user, maaari mong limitahan ang maximum na mga bono sa 1. Ang isang magandang lugar para idagdag ang mga tawag na ito ay nasa sl_bt_system_boot_id event handler. Hindi namin papaganahin ang bonding sa oras na ito para maging mas maayos ang natitirang bahagi ng lab ngunit nagtatakda kami ng patakaran sa bonding upang payagan ang isang bond lang. Para sa sanggunian, ang dokumentasyon para sa mga API na ito ay matatagpuan dito at dito.
- Magdagdag ng mga tagapangasiwa ng kaganapan para sa sl_bt_evt_sm_bonded_id at sl_bt_evt_sm_bonding_failed_id. Ang pangunahing gamit para sa mga kaganapang ito ay nagbibigay-kaalaman sa kasalukuyan ngunit sa ibang pagkakataon sa lab ay magdaragdag ka ng paggana.
- Bumuo at mag-flash sa target na board. Kumonekta sa EFRConnect at basahin ang protektadong katangian tulad ng dati. Sa pagkakataong ito, makikita mo ang isang passkey na ipinapakita sa console. Ilagay ang passkey na ito sa iyong mobile phone kapag na-prompt.
- Subukan ang bonding confirmation. Ang feature na ito ay nagbibigay sa user ng kakayahang humiling na kumpirmahin ang mga kahilingan sa bonding. Ang paggawa nito ay nagbibigay sa application ng kontrol sa kung aling mga peer na device ang pinagsasama nito. Ang isang posibilidad ay hilingin sa gumagamit na pindutin ang isang pindutan bago payagan ang bono.
- Buksan ang mga setting ng Bluetooth sa iyong mobile phone at alisin ang bond sa EFR32 device. Nag-iiba-iba ang mga pagpapatupad ng mobile phone kaya maaaring hindi kinakailangan ang hakbang na ito. Kung hindi mo nakikita ang 'Training' device sa iyong mga setting ng Bluetooth, magpatuloy lang sa susunod na hakbang.
- Sa mga bahagi ng software, i-install ang isang instance ng simpleng handler ng button.
- Isama ang header file sl_simple_button_instances.h sa app.c
- Magdagdag ng handler para sa sl_bt_evt_sm_bonding_confirm_id na kaganapan. Ang pangunahing trabaho ng event handler na ito ay ipaalam sa user na humihiling ng bagong bond ang isang remote na device.
- Magdagdag ng callback function para sa simpleng handler ng button para magpadala ng signal sa Bluetooth stack na nagsasaad na pinindot ang isang button. Ino-override nito ang default na callback na bumabalik lang.
- Magdagdag ng external signal event handler. Itinaas ang kaganapang ito bilang tugon sa pagtanggap ng signal, gaya ng sa nakaraang hakbang. Gagamitin ang event ng panlabas na signal para kumpirmahin ang bonding.
- Baguhin ang tawag sa sl_bt_sm_configure upang mangailangan ng kumpirmasyon ng bonding gaya ng
- Buuin muli at flash.
- Kumonekta sa EFRConnect at basahin ang protektadong katangian tulad ng dati. Ngayon ay makikita mo ang isang mensahe sa console tulad ng sumusunod:
Pindutin ang PB0 para kumpirmahin ang bonding. Ngayon ay ipapakita ng console ang passkey na ilalagay sa mobile phone para sa bonding. Ilagay ang passkey para kumpletuhin ang proseso ng bonding.
Tip: Gamitin ang default na case sa event handler para mag-print ng mensahe kapag nagpadala ang stack ng event na hindi pinangangasiwaan. Maaaring sinusubukan ng stack na sabihin sa iyo ang isang bagay na mahalaga.
Higit pa sa Mga Pangunahing Kaalaman
Sa puntong ito, kumuha ka ng advantage ng mga tampok sa seguridad na inaalok ng aming stack. Ngayon, pagbutihin natin ang pagpapatupad sa pamamagitan ng matalinong paggamit ng mga feature na magagamit natin. Ang mga sumusunod na hakbang ay opsyonal at independiyente sa isa't isa, maaari kang bumuo at mag-flash pagkatapos ng bawat isa upang makita ang gawi o subukan ang lahat ng ito nang magkasama.
- Idiskonekta sa mga nabigong pagtatangka sa bono. Ito ay isang magandang lugar upang makita ang mga banta. Kung hindi sinusuportahan ng remote na device ang encryption/authentication o wala lang tamang key, maaaring isa itong hacker. Kaya, putulin natin ang koneksyon. Subukang magdagdag ng tawag sa sl_bt_connection_close() sa sl_bt_sm_bonding_failed_id na kaganapan. Nakadokumento ang API dito.
Maaari mong subukan ang tampok na ito sa pamamagitan ng pagpasok ng maling passkey.
- Pinapayagan lamang ang pagsasama-sama sa ilang mga oras. Nililimitahan nito ang oras na kailangan ng isang umaatake upang bumuo ng isang bono at ginagawang posible na gamitin ang tampok na 'payagan lamang ang mga nakagapos na koneksyon'. Maaaring piliin ng taga-disenyo kung paano paganahin o huwag paganahin ang bondable mode. Para sa mga layunin ng pagpapakita dito, paganahin namin ang isang 'setup mode' na may PB1 at gagamit ng timer upang hindi paganahin ito pagkatapos ng 30 segundo.
- Mag-install ng pangalawang pagkakataon ng simpleng interface ng button. Ito ay magbibigay-daan sa paggamit ng PB1.
- Baguhin ang callback upang magpadala ng ibang signal sa stack upang paganahin/i-disable ang bonding. Ang resulta ay dapat magmukhang ganito:
- Baguhin ang panlabas na tagapangasiwa ng kaganapan ng signal upang mahawakan nito ang bagong signal na ito. Ang resulta ay dapat ganito:
- Magdagdag ng event handler para sa sl_bt_evt_system_soft_timer_id event. Ito ay gagamitin upang i-disable ang setup mode.
- Maaaring gamitin ang sumusunod na code upang paganahin ang bondable mode at payagan ang lahat ng koneksyon o i-disable ang bondable mode at payagan lamang ang mga koneksyon mula sa mga bonded na device:
- Idagdag ang sumusunod na tawag sa sl_bt_system_boot_id event handler
- Buuin ang proyekto at i-flash ito sa device.
- Subukang kumonekta sa device gamit ang EFRConnect. Ang koneksyon ay dapat mabigo.
- Ngayon subukang pindutin ang PB1 bago kumonekta sa EFRConnect. Sa pagkakataong ito ang koneksyon ay magiging matagumpay. Pagkatapos ng 30 segundo, makakakita ka ng mensahe sa console na nagsasaad na lumalabas ang device sa setup mode. Nangangahulugan ito na naka-disable na ngayon ang bondable mode.
- Dagdagan ang seguridad sa pagbuo ng isang koneksyon. Dahil opsyonal ang seguridad, dapat kaming humiling ng naka-encrypt na koneksyon sa lalong madaling panahon sa halip na umasa sa mga katangian ng GATT. Nakadokumento ang API dito. Ang isang magandang lugar para tawagan ang API na ito ay nasa sl_bt_evt_connection_opened_id na kaganapan. Available ang handle ng koneksyon sa variable ng koneksyon.
Ligtas na Pagkakakilanlan
Ngayon na mayroon na kaming mas secure na Bluetooth device, pagbutihin natin ang hakbang sa pag-authenticate. Nakita mo na kung paano i-verify ang secure na pagkakakilanlan ng mga vault device gamit ang command line sa mga nakaraang training lab. Sa seksyong ito, makikita natin kung paano mabe-verify ng isang BLE device ang pagkakakilanlan ng isa pang BLE device sa pamamagitan ng paghiling sa chain ng certificate nito at pagpapadala ng hamon. Ang lahat ng secure na bahagi ng vault ay may hawak ng sarili nilang certificate ng device at batch certificate. Ang mga factory at root certificate ay hard coded sa client application upang paganahin ang pag-verify ng buong chain ng certificate. Sumangguni sa AN1268 para sa higit pang mga detalye sa secure na pagkakakilanlan.
- Tukuyin ang isang pandaigdigang buffer para sa pag-iimbak ng lagda ng pagpapatunay ng device tulad ng nasa ibaba:
- Itakda ang configuration ng manager ng seguridad upang gamitin ang pagpapares ng JustWorks. Ginagawa ito upang ang koneksyon ay naka-encrypt. Sa pagsasagawa, dapat gamitin ang proteksyon ng MITM ngunit para mapanatiling simple ang lab, gagamitin namin ang JustWorks. Baguhin ang tawag sa sl_bt_sm_configure pabalik sa sumusunod:
Gayundin, ikomento ang tawag sa setup_mode(true) sa system_boot event handler.
- Buksan ang mga katulong.c mula sa mga ibinigay na materyales at kopyahin ang mga nilalaman sa app.c. Ang mga callback function na ito ay gumaganap ng mga gawain tulad ng pagse-segment ng mga certificate upang maipadala ang mga ito sa BLE, pag-verify sa chain ng certificate, at pagbuo/pag-verify ng hamon.
- Kinakailangang tukuyin ang maximum transfer unit (MTU) na laki upang ang mga sertipiko ay mahati at mabuo muli. Tukuyin ang isang pandaigdigang variable upang i-save ang MTU tulad ng ipinapakita dito:
Pagkatapos ay magdagdag ng tagapangasiwa ng kaganapan para sa ipinagpalit na kaganapan ng GATT MTU tulad ng ipinapakita sa ibaba:
- May tatlong katangian ng data ng user na mababasa. Ginagamit ang mga katangiang ito para ipaalam ang certificate ng device, batch certificate at ang hamon. Ang isang callback function ay ginagamit upang pangasiwaan ang mga kahilingan sa pagbasa ng user na ito. Magdagdag ng handler upang tawagan ang function na ito tulad ng ipinapakita sa ibaba:
Ginagamit ng callback ang MTU mula sa hakbang #2 hanggang sa pagse-segment at ipadala ang mga certificate kung kinakailangan. Pinangangasiwaan din nito ang pagpapadala ng pinirmahang hamon.
- Nagpapadala ang kliyente ng hamon, isang random na numero na lalagdaan ng server, sa pamamagitan ng pagsulat ng isa sa mga katangian ng GATT. Para sa kadahilanang ito, ang application ay kailangang magkaroon ng isang tagapangasiwa para sa kaganapan ng kahilingan sa pagsulat ng user tulad ng nasa ibaba:
- Magdagdag ng secure na suporta sa pagkakakilanlan files sa proyekto:
- app_se_manager_macro.h, app_se_manager_secure_identity.c at app_se_secure_identity.h mula sa mga ibinigay na materyales hanggang sa proyekto. Ang mga ito files ay naglalaman ng ilang mga function ng helper para sa mga gawain tulad ng pagkuha ng laki ng certificate, pagkuha ng pampublikong key ng device at pagpirma ng isang hamon.
- Isama ang app_se_manager_secure_identity.h sa app.c.
- I-import ang ibinigay na gatt_configuration-attest.btconf mula sa mga ibinigay na materyales. Ang database ng GATT na ito ay tinatawag na secure na pagpapatunay na kinabibilangan ng apat na katangian na gagamitin upang i-verify ang pagkakakilanlan ng aming device. Kabilang dito ang certificate ng device, batch certificate, hamon at tugon.
- Ang kliyente, na ginagamit upang gayahin ang isang device gaya ng gateway, ay ibinibigay bilang isang kumpletong proyekto dahil mas kumplikado itong buuin. Sa pangkalahatan, ang operasyon ng kliyente ay ang mga sumusunod:
- Nag-scan para sa mga device na nag-a-advertise ng secure na serbisyo sa pagpapatunay at kumokonekta sa kanila.
- Natutuklasan ang mga serbisyo at katangian ng database ng GATT.
- Binabasa ang device at mga batch certificate at bini-verify ang chain ng certificate gamit ang factory at root certificate na inimbak nito sa flash.
- Nagpapadala ng random na hamon sa server.
- Mga pagtatangkang i-verify ang tugon sa hamon.
- Isinasara ang koneksyon kung nabigo ang alinmang pag-verify.
- Buuin at i-flash ang proyekto ng server sa iyong server na WSTK /radioboard.
- I-import ang proyekto ng kliyente mula sa folder ng kliyente sa mga ibinigay na materyales. Buuin at i-flash ang proyekto ng kliyente sa iyong kliyente na WSTK/radioboard.
- Pindutin ang reset sa client WSTK at buksan ang serial console. Nagsisimulang mag-scan ang kliyente para sa mga device na nag-a-advertise ng aming secure na serbisyo ng pagkakakilanlan at kokonekta ito kapag nakakita ito ng isa.
- Magpapakita ang kliyente ng ilang mensahe upang ipahiwatig na natagpuan nito ang server na may nais na serbisyo at mga mensahe ng katayuan tungkol sa pag-verify ng chain ng certificate.
- Kung pumasa ang pag-verify, bubuo ang kliyente ng random na numero, na tinatawag na hamon, at ipapadala ito sa server. Pipirmahan ng server ang hamon gamit ang secure na hawak nitong pribadong key ng device at ang lagda pabalik sa kliyente, ito ay tinatawag na challenge response. Pagkatapos ay ginagamit ng kliyente ang pampublikong susi sa dati nang natanggap na sertipiko ng device upang i-verify ang lagda. Ginagawa ito upang kumpirmahin na ang server ay talagang mayroong pribadong key na inaangkin nitong mayroon. Kung ang hamon ay na-verify nang tama, ang isang mensahe ay ipinapakita sa epekto na iyon; kung hindi, ang koneksyon ay sarado, at ang isang mensahe ay ipinapakita na nagpapaliwanag kung bakit.
- Ngayon magpadala ng di-wastong sertipiko upang kumpirmahin na talagang gumagana ang pag-verify. Maaari mong baguhin ang user_read_request_cb() upang sirain ang alinman sa data ng sertipiko o ang tugon sa hamon.
Appendix A – Mga Kakayahang I/O at Paraan ng Pagpapares 
Appendix B – Mga Mode at Antas ng Seguridad
Ang mode ng seguridad 1 ay ang tanging mode na sinusuportahan para sa Bluetooth Low Energy sa stack ng Silicon Labs. Ang mga antas ay ang mga sumusunod:
- Level 1 walang seguridad
- Level 2 na hindi napatotohanan na pagpapares sa pag-encrypt
- Level 3 na napatotohanan ang pagpapares sa pag-encrypt
- Level 4 authenticated secure na koneksyon na may malakas na pag-encrypt (ECDH key exchange)
Mga Dokumento / Mga Mapagkukunan
![]() |
silabs 21Q2 secure na BLE device Security Lab [pdf] User Manual 21Q2 secure na BLE device Security Lab, secure na BLE device Security Lab, Security Lab |