Silabs 21Q2 droša BLE ierīce Drošības laboratorija
BLE drošības laboratorijas rokasgrāmata
Šajā laboratorijā jūs redzēsiet, kā izveidot drošāku BLE ierīci. Mēs sāksim ar beigasview par to, kā izmantot dažas steka funkcijas, un pāriet uz dažiem vispārīgiem padomiem par drošāku savienojumu paņēmieniem, un visbeidzot mēs redzēsim, kā izmantot ierīču sertifikātus, izmantojot BLE, lai identificētu perifērijas ierīci kā autentisku.
Darba sākšana
Bluetooth sampLietojumprogramma, kuru izmantosit, ir paredzēta lietošanai kopā ar sāknēšanas ielādētāju. Ja strādājat ar pavisam jaunu EFR32MG21B, tam nebūs bootloader. Iepriekš iebūvētu sāknēšanas ielādētāju varat atrast platformā\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a jūsu SDK mapē.
- Sāciet ar soc-tukšu samplietotne. Šis sample lietotne tiek izmantota kā veidne, un tā ir labs sākumpunkts jebkurai BLE lietojumprogrammai.
- Programmā Simplicity Studio atveriet Silicon Labs Project Wizard File izvēlne -> jauns.
- Atlasiet BRD4181C un noklikšķiniet uz pogas "Nākamais".
- Noklikšķiniet uz izvēles rūtiņas “Bluetooth (9)” zem tehnoloģijas veida.
- Iezīmējiet “Bluetooth – SoC Empty” un noklikšķiniet uz Tālāk.
- Noklikšķiniet uz pogas "Pabeigt".
- Tagad varat pievienot dažus raksturlielumus, lai redzētu, kā aizsargātās un neaizsargātās īpašības tiek apstrādātas atšķirīgi.
- Atveriet projekta slcp file veicot dubultklikšķi uz tā Project Explorer logā
- Iezīmējiet cilni PROGRAMMATŪRAS KOMPONENTI un atveriet GATT konfigurācijas rīku, kā parādīts tālāk:
Un izmantojiet tālāk norādīto importēšanas rīku, lai importētu failu gatt_configuration.btconf file no servera mapes sniegtajos materiālos.
GATT datubāzē ir pielāgots pakalpojums, ko sauc par apmācību, un daži dati ir aizsargāti, bet daži nav aizsargāti. Tas ļauj salīdzināt to, kas notiek, mēģinot piekļūt aizsargātam raksturlielumam ar neaizsargātu raksturlielumu. Tas ir ātrs veids, kā izveidot ierīci ar ļoti vienkāršu drošību.
- Mēs izmantosim seriālo portu, lai drukātu uz konsoli programmā Simplicity Studio, lai izsekotu, kas notiek lietojumprogrammā. Vienkāršākais veids, kā atrast šos komponentus, ir meklēt tos dialoglodziņā PROGRAMMATŪRAS KOMPONENTI, kā parādīts attēlā:
-
- Instalējiet IO Stream USART komponentu
- Instalējiet IO Stream Retarget STDIO komponentu
- Instalējiet standarta I/O komponentu
- Instalējiet žurnāla komponentu
- Atveriet Board Control komponentu un ieslēdziet "Iespējot virtuālo COM UART".
- Ar peles labo pogu noklikšķiniet uz adaptera panelī “Atkļūdošanas adapteri” un atlasiet “Launch Console”. Atlasiet cilni "Serial 1" un novietojiet kursoru konsoles loga teksta ievades laukā un nospiediet enter, lai aktivizētu konsoli.
-
- Izveidojiet lokālo mainīgo sl_bt_on_event(), kas atrodams lietotnē app.c, lai saglabātu savienojuma rokturi. Mainīgajam ir jābūt statiskam, jo šī funkcija tiek izsaukta katru reizi, kad steka paaugstina notikumu, un mēs vēlamies, lai vērtība būtu noturīga. Savienojuma rokturis tiks izmantots vēlāk
laboratorijas sadaļa.
- Ievietojiet dažus app_log() paziņojumus notikumiem, lai redzētu, kad esam izveidojuši savienojumu, drošības režīmus utt
-
- Iekļaujiet galveni app_log.h file
- sl_bt_evt_connection_opened – izdrukājiet saites rokturi un saglabājiet savienojuma rokturi. Ja savienojuma rokturis ir 0xFF, savienojuma starp pievienotajām ierīcēm nav. Modificējiet esošo notikumu apdarinātāju, lai tas izskatītos apmēram šādi:
- sl_bt_evt_connection_parameters – drošības režīms. Tas tiek darīts, lai jūs varētu redzēt, kad mainās drošības režīms. Atšķiras drošības režīmu numerācija, kur drošības režīms 1 ir norādīts ar vērtību 0 utt. Pievienojiet savai lietojumprogrammai šādu notikumu apdarinātāju:
- sl_bt_evt_connection_closed_id. Šis notikumu apdarinātājs ir modificēts, lai atjauninātu savienojuma rokturi. Vērtība 0xFF tiek izmantota, lai norādītu, ka nav aktīva savienojuma. Komanda app_log() tiek izmantota, lai izdrukātu savienojuma slēgšanas iemeslu, statusa kodu saraksts ir šeit. Modificējiet esošo notikumu apdarinātāju, lai tas izskatītos apmēram šādi:
- Iekļaujiet galveni app_log.h file
-
- Izveidojiet un izgaismojiet projektu. Šajā brīdī mēs izpildīsim samplietotni, lai redzētu, kā tā darbojas bez izmaiņām, izņemot GATT datu bāzi.
- Izveidojiet savienojumu ar EFRConnect mobilo lietotni šādi:
-
- Pieskarieties ikonai “Bluetooth Browser”.
- Pieskarieties ikonai "Savienot" ierīcē ar nosaukumu "Training".
-
- Izlasiet neaizsargāto raksturlielumu šādi:
-
- Pieskarieties saitei Plašāka informācija zem nezināmā pakalpojuma ar UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Izlasiet neaizsargāto raksturlielumu UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c, pieskaroties ikonai Lasīt. Šeit nav nekādu pārsteigumu. Tā kā raksturlielums nekādā veidā nav aizsargāts, tas tiks nosūtīts vienkāršā tekstā.
-
- Tagad izlasiet aizsargāto raksturlielumu UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Jūsu mobilajam tālrunim vajadzētu lūgt izveidot savienojumu pārī un izveidot savienojumu; ziņojums var atšķirties atkarībā no jūsu mobilās operētājsistēmas. Kad esat apstiprinājis pieprasījumu izveidot savienojumu pārī, konsolē vajadzētu parādīt šādu ziņojumu:
Piezīme: A pielikumā šīs rokasgrāmatas beigās ir sniegts I/O iespēju un savienošanas pārī metožu kopsavilkums atsaucei. B pielikumā ir apkopoti Bluetooth drošības režīmi.
Drošības pārvaldnieka konfigurācija
Drošības pārvaldnieks ir daļa no Bluetooth steka, kas nosaka, kuri drošības līdzekļi tiek izmantoti. Šīs funkcijas ietver MITM (man-in-the-middle) aizsardzību, LE Secure savienojumus (pazīstams arī kā ECDH), kam nepieciešams apstiprinājums savienošanai utt. Drošības pārvaldnieks apstrādā arī I/O iespējas, kas tiek izmantotas, lai noteiktu, kura metode tiek izmantota savienošanai pārī. /bonding (kopsavilkumu skatiet A pielikumā). Šajā sadaļā jūs redzēsit vienkāršu iestatīšanu.
- Iestatiet SM ar vēlamo konfigurāciju. Šīs laboratorijas aparatūra ļauj ērti parādīt piekļuves atslēgu konsolē. Lai iespējotu MITM aizsardzību, ir jāievada piekļuves atslēga. Pievienojiet šo kodu savam sl_bt_system_boot_id notikumu apstrādātājam. Tas iespējo cilvēku vidū un informē attālo ierīci, ka mums ir iespēja parādīt ieejas atslēgu, taču tas arī viss.
- Lai konsolē parādītu piekļuves atslēgu, ir nepieciešams notikumu apstrādātājs, kā parādīts tālāk:
- Iestatiet savienošanas režīmu, maksimālo saišu skaitu utt. Lai sāktu, izmantojiet šo kodu:
Šos iestatījumus var izmantot, lai ierobežotu uzbrucēja spēju izveidot savienojumu ar jūsu ierīci. Ja jūsu produktam ir jābūt tikai vienam lietotājam, varat ierobežot maksimālo saišu skaitu līdz 1. Laba vieta, kur pievienot šos zvanus, ir notikumu apdarinātājs sl_bt_system_boot_id. Pašlaik mēs neiespējosim savienošanu, lai pārējā laboratorijā noritētu raitāk, taču mēs iestatām saistīšanas politiku, lai atļautu tikai vienu saiti. Uzziņai šo API dokumentācija ir atrodama šeit un šeit .
- Pievienojiet notikumu apdarinātājus sl_bt_evt_sm_bonded_id un sl_bt_evt_sm_bonding_failed_id. Šo notikumu galvenais lietojums pašlaik ir informatīvs, bet vēlāk laboratorijā jūs pievienosit funkcionalitāti.
- Veidot un flash uz mērķa kuģa. Izveidojiet savienojumu ar EFRConnect un izlasiet aizsargāto raksturlielumu tāpat kā iepriekš. Šoreiz konsolē tiks parādīta piekļuves atslēga. Ievadiet šo ieejas atslēgu savā mobilajā tālrunī, kad tas tiek prasīts.
- Izmēģiniet savienojuma apstiprinājumu. Šī funkcija sniedz lietotājam iespēju pieprasīt, lai savienošanas pieprasījumi tiktu apstiprināti. Tādējādi lietojumprogramma var kontrolēt, ar kurām vienādranga ierīcēm tā tiek savienota. Viena no iespējām ir pieprasīt lietotājam nospiest pogu pirms saites atļaušanas.
- Mobilajā tālrunī atveriet Bluetooth iestatījumus un noņemiet saiti ar EFR32 ierīci. Mobilo tālruņu ieviešanas iespējas atšķiras, tāpēc šī darbība var nebūt nepieciešama. Ja Bluetooth iestatījumos neredzat ierīci Apmācība, vienkārši pārejiet pie nākamās darbības.
- Programmatūras komponentos instalējiet vienu vienkāršā pogu apstrādātāja gadījumu.
- Iekļaujiet galveni file sl_simple_button_instances.h lietotnē app.c
- Pievienojiet apdarinātāju notikumam sl_bt_evt_sm_bonding_confirm_id. Šī notikumu apstrādātāja galvenais uzdevums ir informēt lietotāju, ka attālā ierīce pieprasa jaunu saiti.
- Pievienojiet atzvanīšanas funkciju vienkāršajam pogu apstrādātājam, lai nosūtītu signālu uz Bluetooth skursteni, norādot, ka poga ir nospiesta. Tas ignorē noklusējuma atzvanīšanu, kas vienkārši atgriežas.
- Pievienojiet ārējā signāla notikumu apstrādātāju. Šis notikums tiek aktivizēts, reaģējot uz signāla saņemšanu, piemēram, iepriekšējā darbībā. Ārējā signāla notikums tiks izmantots savienojuma apstiprināšanai.
- Mainiet izsaukumu uz sl_bt_sm_configure, lai pieprasītu savienojuma apstiprinājumu, piemēram,
- Pārbūvēt un mirgot.
- Izveidojiet savienojumu ar EFRConnect un izlasiet aizsargāto raksturlielumu tāpat kā iepriekš. Tagad konsolē redzēsit šādu ziņojumu:
Nospiediet PB0, lai apstiprinātu savienošanu. Tagad konsole parādīs ieejas atslēgu, kas jāievada mobilajā tālrunī savienošanai. Ievadiet ieejas atslēgu, lai pabeigtu savienošanas procesu.
Padoms: izmantojiet noklusējuma reģistru notikumu apdarinātājā, lai izdrukātu ziņojumu, kad steka nosūta notikumu, kas netiek apstrādāts. Iespējams, kaudze mēģina jums pateikt kaut ko svarīgu.
Ārpus pamatiem
Šajā brīdī jūs esat izmantojis avansutage no mūsu komplekta piedāvātajām drošības funkcijām. Tagad uzlabosim ieviešanu, saprātīgi izmantojot mūsu rīcībā esošās funkcijas. Tālāk norādītās darbības nav obligātas un nav viena no otras. Varat izveidot un mirgot pēc katras darbības, lai redzētu darbību vai izmēģinātu tās visas kopā.
- Atvienojiet savienojumu neveiksmīgu savienojuma mēģinājumu gadījumā. Šī ir laba vieta draudu noteikšanai. Ja attālā ierīce neatbalsta šifrēšanu/autentificēšanu vai tai vienkārši nav pareizo atslēgu, tas varētu būt hakeris. Tātad, pārtrauksim savienojumu. Mēģiniet pievienot izsaukumu sl_bt_connection_close() notikumā sl_bt_sm_bonding_failed_id. API ir dokumentēta šeit.
Varat pārbaudīt šo funkciju, ievadot nepareizu piekļuves atslēgu.
- Savienošana tiek atļauta tikai noteiktos laikos. Tas ierobežo laiku, kas uzbrucējam ir jāizveido, lai izveidotu saikni, un ļauj izmantot funkciju “Atļaut tikai saistītos savienojumus”. Dizainers var izvēlēties, kā iespējot vai atspējot savienojuma režīmu. Demonstrācijas nolūkos mēs iespējosim “iestatīšanas režīmu” ar PB1 un izmantosim taimeri, lai to atspējotu pēc 30 sekundēm.
- Instalējiet otro vienkāršās pogas interfeisa gadījumu. Tas ļaus izmantot PB1.
- Lai iespējotu/atspējotu savienošanu, pārveidojiet atzvanīšanu, lai stekam nosūtītu citu signālu. Rezultātam vajadzētu izskatīties apmēram šādi:
- Pārveidojiet ārējā signāla notikumu apdarinātāju, lai tas apstrādātu šo jauno signālu. Rezultātam vajadzētu būt šādam:
- Pievienojiet notikumu apdarinātāju notikumam sl_bt_evt_system_soft_timer_id. Tas tiks izmantots, lai atspējotu iestatīšanas režīmu.
- Šo kodu var izmantot, lai iespējotu savienojuma režīmu un atļautu visus savienojumus vai atspējotu savienojuma režīmu un atļautu savienojumus tikai no savienotajām ierīcēm:
- Pievienojiet šādu izsaukumu notikumu apdarinātājā sl_bt_system_boot_id
- Izveidojiet projektu un pievienojiet to ierīcei.
- Mēģiniet izveidot savienojumu ar ierīci, izmantojot EFRConnect. Savienojumam vajadzētu neizdoties.
- Tagad mēģiniet nospiest PB1, pirms izveidojat savienojumu ar EFRConnect. Šoreiz savienojums būs veiksmīgs. Pēc 30 sekundēm konsolē tiks parādīts ziņojums, kas norāda, ka ierīce iziet no iestatīšanas režīma. Tas nozīmē, ka savienojuma režīms tagad ir atspējots.
- Palieliniet drošību, veidojot savienojumu. Tā kā drošība nav obligāta, mums pēc iespējas ātrāk jāpieprasa šifrēts savienojums, nevis jāpaļaujas uz GATT īpašībām. API ir dokumentēta šeit. Laba vieta, kur izsaukt šo API, ir sl_bt_evt_connection_opened_id notikums. Savienojuma rokturis ir pieejams savienojuma mainīgajā.
Droša identitāte
Tagad, kad mums ir drošāka Bluetooth ierīce, var uzlabot autentifikācijas darbību. Iepriekšējās mācību laboratorijās jau esat redzējis, kā pārbaudīt glabātuves ierīču drošo identitāti, izmantojot komandrindu. Šajā sadaļā mēs redzēsim, kā viena BLE ierīce var pārbaudīt citas BLE ierīces identitāti, pieprasot tās sertifikātu ķēdi un nosūtot izaicinājumu. Visām drošās glabātuves daļām ir savs ierīces sertifikāts un partijas sertifikāts. Rūpnīcas un saknes sertifikāti ir stingri iekodēti klienta lietojumprogrammā, lai varētu pārbaudīt visu sertifikātu ķēdi. Plašāku informāciju par drošu identitāti skatiet AN1268.
- Definējiet globālo buferi ierīces atestācijas paraksta glabāšanai, kā norādīts tālāk.
- Iestatiet drošības pārvaldnieka konfigurāciju, lai izmantotu JustWorks savienošanu pārī. Tas tiek darīts, lai savienojums būtu šifrēts. Praksē ir jāizmanto MITM aizsardzība, bet, lai laboratorija būtu vienkārša, mēs izmantosim JustWorks. Mainiet zvanu uz sl_bt_sm_configure atpakaļ uz šādu:
Tāpat komentējiet izsaukumu setup_mode(true) notikumu apdarinātājā system_boot.
- Atveriet helpers.c no piedāvātajiem materiāliem un kopējiet saturu uz app.c. Šīs atzvanīšanas funkcijas veic tādus uzdevumus kā sertifikātu segmentēšana, lai tos varētu nosūtīt, izmantojot BLE, pārbauda sertifikātu ķēdi un ģenerē/pārbauda izaicinājumu.
- Ir nepieciešams noteikt maksimālo pārsūtīšanas vienības (MTU) lielumu, lai sertifikātus varētu segmentēt un atkārtoti salikt. Definējiet globālo mainīgo, lai saglabātu MTU, kā parādīts šeit:
Pēc tam pievienojiet notikumu apdarinātāju GATT MTU apmaiņas notikumam, kā parādīts tālāk:
- Ir trīs lietotāja datu raksturlielumi, kurus var nolasīt. Šīs īpašības tiek izmantotas, lai paziņotu par ierīces sertifikātu, partijas sertifikātu un izaicinājumu. Lai apstrādātu šos lietotāju lasīšanas pieprasījumus, tiek izmantota atzvanīšanas funkcija. Pievienojiet apdarinātāju, lai izsauktu šo funkciju, kā parādīts tālāk:
Atzvanīšanai tiek izmantots MTU no 2. darbības, lai pēc vajadzības segmentētu un nosūtītu sertifikātus. Tas arī apstrādā parakstītā izaicinājuma nosūtīšanu.
- Klients nosūta izaicinājumu, nejaušu numuru, kas jāparaksta serverim, ierakstot vienu no GATT raksturlielumiem. Šī iemesla dēļ lietojumprogrammai ir jābūt lietotāja rakstīšanas pieprasījuma notikuma apstrādātājam, kā norādīts tālāk.
- Pievienojiet drošas identitātes atbalstu files uz projektu:
- app_se_manager_macro.h, app_se_manager_secure_identity.c un app_se_secure_identity.h no nodrošinātajiem materiāliem uz projektu. Šie files satur dažas palīgfunkcijas tādiem uzdevumiem kā sertifikāta lieluma iegūšana, ierīces publiskās atslēgas iegūšana un izaicinājuma parakstīšana.
- Iekļaujiet app_se_manager_secure_identity.h failā app.c.
- Importējiet sniegto gatt_configuration-attest.btconf no sniegtajiem materiāliem. Šo GATT datubāzi sauc par drošu atestāciju, kas ietver četrus raksturlielumus, kas tiks izmantoti, lai pārbaudītu mūsu ierīces identitāti. Tie ietver ierīces sertifikātu, partijas sertifikātu, izaicinājumu un atbildi.
- Klients, kas tiek izmantots, lai simulētu ierīci, piemēram, vārteju, tiek nodrošināts kā pilnīgs projekts, jo to ir sarežģītāk uzbūvēt. Kopumā klienta darbība ir šāda:
- Skenē ierīces, kurās tiek reklamēts drošā atestācijas pakalpojums, un izveido savienojumu ar tām.
- Atklāj GATT datu bāzes pakalpojumus un īpašības.
- Nolasa ierīces un sērijas sertifikātus un pārbauda sertifikātu ķēdi, izmantojot rūpnīcas un saknes sertifikātu, ko tā ir saglabājusi zibatmiņā.
- Nosūta serverim nejaušu izaicinājumu.
- Mēģina pārbaudīt atbildi uz izaicinājumu.
- Savienojums tiek slēgts, ja kāda no verifikācijas rezultātiem neizdodas.
- Izveidojiet un pārveidojiet servera projektu savā serverī WSTK/radioboard.
- Importējiet klienta projektu no klienta mapes sniegtajos materiālos. Izveidojiet un pievienojiet klienta projektu savam klienta WSTK/radioboard.
- Nospiediet atiestatīt klienta WSTK un atveriet seriālo konsoli. Klients sāk meklēt ierīces, kurās tiek reklamēts mūsu drošās identitātes pakalpojums, un izveidos savienojumu, kad to atradīs.
- Klients parādīs dažus ziņojumus, kas norāda, ka ir atradis serveri ar vēlamo pakalpojumu, un statusa ziņojumus par sertifikātu ķēdes verifikāciju.
- Ja verifikācija iziet, klients ģenerēs nejaušu skaitli, ko sauc par izaicinājumu, un nosūtīs to serverim. Serveris parakstīs izaicinājumu ar savu droši turēto privāto ierīces atslēgu un parakstu atpakaļ klientam. To sauc par izaicinājuma atbildi. Pēc tam klients izmanto publisko atslēgu iepriekš saņemtajā ierīces sertifikātā, lai pārbaudītu parakstu. Tas tiek darīts, lai apstiprinātu, ka serverim patiešām ir privātā atslēga, par kuru tas apgalvoja, ka tā ir. Ja izaicinājums ir pareizi pārbaudīts, tiek parādīts attiecīgs ziņojums; pretējā gadījumā savienojums tiek aizvērts un tiek parādīts ziņojums, kurā paskaidrots, kāpēc.
- Tagad nosūtiet nederīgu sertifikātu, lai apstiprinātu, ka pārbaude patiešām darbojas. Varat modificēt user_read_request_cb(), lai bojātu sertifikāta datus vai izaicinājuma atbildi.
A pielikums – I/O iespējas un savienošanas pārī metodes 
B pielikums – Drošības režīmi un līmeņi
1. drošības režīms ir vienīgais Bluetooth Low Energy atbalstītais režīms Silicon Labs kaudzē. Līmeņi ir šādi:
- 1. līmenis bez drošības
- 2. līmeņa neautentificēta savienošana pārī ar šifrēšanu
- 3. līmeņa autentificēta savienošana pārī ar šifrēšanu
- 4. līmeņa autentificēti droši savienojumi ar spēcīgu šifrēšanu (ECDH atslēgu apmaiņa)
Dokumenti / Resursi
![]() |
Silabs 21Q2 droša BLE ierīce Drošības laboratorija [pdfLietotāja rokasgrāmata 21Q2 droša BLE ierīce Drošības laboratorija, droša BLE ierīce Drošības laboratorija, Drošības laboratorija |