silabs 21Q2 varna BLE naprava Varnostni laboratorij

Priročnik BLE Security Lab

V tem laboratoriju boste videli, kako oblikovati varnejšo napravo BLE. Začeli bomo z nadview o tem, kako uporabiti nekatere funkcije sklada in preiti na nekaj splošnih nasvetov o tehnikah za bolj varne povezave in na koncu bomo videli, kako uporabiti potrdila naprave prek BLE za identifikacijo periferne naprave kot pristne.

Kako začeti

Bluetooth sampAplikacija, ki jo boste gradili, je namenjena uporabi z zagonskim nalagalnikom. Če delate s popolnoma novim EFR32MG21B, ne bo imel zagonskega nalagalnika. Vnaprej zgrajen zagonski nalagalnik najdete v platformi\bootloader\sampmapo le-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a vašega SDK-ja.

  1. Začnite s soc-prazno sample app. Ta sampaplikacija le se uporablja kot predloga in je dobro izhodišče za katero koli aplikacijo BLE.
    1. Odprite čarovnika za projekte Silicon Labs iz programa Simplicity Studio File meni -> novo.
    2. Izberite BRD4181C in kliknite gumb 'naprej'.
    3. Kliknite potrditveno polje »Bluetooth (9)« pod vrsto tehnologije.
    4. Označite »Bluetooth – SoC Empty« in kliknite »Naprej«.
    5. Kliknite gumb 'Dokončaj'.
  2. Zdaj lahko dodate nekaj značilnosti, da vidite, kako se zaščitene in nezaščitene lastnosti obravnavajo drugače.
    1. Odprite slcp projekta file tako, da ga dvokliknete v oknu Raziskovalca projektov
    2. Označite zavihek 'SOFTWARE COMPONENTS' in odprite konfiguracijsko orodje GATT, kot je prikazano spodaj: Za uvoz gatt_configuration.btconf uporabite spodaj prikazano orodje za uvoz file iz strežniške mape v priloženih materialih.Baza podatkov GATT ima storitev po meri, imenovano 'Usposabljanje', z nekaterimi podatki, ki so zaščiteni, in nekaterimi, ki niso. To vam omogoča primerjavo, kaj se zgodi, ko poskušate dostopati do zaščitene lastnosti v primerjavi z nezaščiteno. To je hiter način za izdelavo naprave z zelo osnovno varnostjo.
  3. Uporabili bomo serijska vrata za tiskanje na konzolo v Simplicity Studio, da bi spremljali, kaj se dogaja v aplikaciji. Te komponente najlažje poiščete tako, da jih poiščete v pogovornem oknu SOFTWARE COMPONENTS, kot je prikazano:
      1. Namestite komponento IO Stream USART
      2. Namestite komponento IO Stream Retarget STDIO
      3. Namestite standardno V/I komponento
      4. Namestite komponento Log
      5. Odprite komponento Board Control in vklopite »Enable Virtual COM UART«
      6. Z desno miškino tipko kliknite adapter v plošči 'Debug adapters' in izberite 'Launch Console'. Izberite zavihek 'Serial 1' in postavite kazalec v polje za vnos besedila v oknu konzole ter pritisnite enter, da prebudite konzolo.
  4. Ustvarite lokalno spremenljivko v sl_bt_on_event(), ki jo najdete v app.c, za shranjevanje ročaja povezave. Spremenljivka mora biti statična, ker se ta funkcija kliče vsakič, ko sklad sproži dogodek, in želimo, da je vrednost obstojna. Ročaj za povezavo bo uporabljen poznejeoddelek lab.
  5. Vstavite nekaj stavkov app_log() za dogodke, da vidite, kdaj smo povezani, varnostne načine itd
      1. Vključite glavo app_log.h file
      2. sl_bt_evt_connection_opened – natisni ročico povezave in shrani ročico povezave. Če je ročaj povezave 0xFF, povezava med povezanimi napravami ne obstaja. Spremenite obstoječo obravnavo dogodkov, tako da bo videti nekako takole:
      3. sl_bt_evt_connection_parameters – varnostni način. To je narejeno tako, da lahko vidite, kdaj se varnostni način spremeni. Obstaja razlika v številčenju varnostnih načinov, kjer je varnostni način 1 oštevilčen z vrednostjo 0 itd. Svoji aplikaciji dodajte naslednji obravnavalec dogodkov:
      4. sl_bt_evt_connection_closed_id. Ta obravnavalec dogodkov je spremenjen tako, da posodobi ročico povezave. Vrednost 0xFF se uporablja za označevanje, da ni aktivne povezave. Ukaz app_log() se uporablja za izpis razloga za prekinitev povezave, seznam statusnih kod je tukaj. Spremenite obstoječo obravnavo dogodkov, tako da bo videti nekako takole:
  6. Zgradite in bliskajte projekt. Na tej točki bomo vodili sample aplikacijo, da vidite, kako se obnaša brez kakršnih koli sprememb, poleg baze podatkov GATT.
  7. Povežite se z mobilno aplikacijo EFRConnect na naslednji način:
      1. Tapnite ikono »Brskalnik Bluetooth«.
      2. Dotaknite se ikone »Poveži« na napravi z imenom »Usposabljanje«.
  8. Preberite nezaščiteno lastnost, kot sledi:
      1. Dotaknite se povezave »Več informacij« pod neznano storitvijo z UUID a815944e-da1e-9d2a-02e2-a8d15e2430a0.
      2. Preberite nezaščiteno lastnost, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c, tako da tapnete ikono »Preberi«. Tukaj ni presenečenj. Ker lastnost ni zaščitena na noben način, bo poslana v navadnem besedilu.
  9. Zdaj preberite zaščiteno lastnost, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Vaš mobilni telefon bi vas moral pozvati, da seznanite in povežete, sporočilo se lahko razlikuje glede na vaš mobilni OS. Ko sprejmete zahtevo za seznanitev, bi se moralo na konzoli prikazati naslednje sporočilo: Opomba: Dodatek A na koncu tega priročnika vsebuje povzetek V/I zmožnosti in metod združevanja za referenco. Dodatek B povzema varnostne načine Bluetooth.

Konfiguracija varnostnega upravitelja

Upravitelj varnosti je del sklada Bluetooth, ki določa, katere varnostne funkcije se uporabljajo. Te funkcije vključujejo zaščito man-in-the-middle (MITM), varne povezave LE (aka ECDH), zahtevajo potrditev za povezovanje itd. Upravitelj varnosti upravlja tudi zmožnosti V/I, ki se uporabljajo za določanje, katera metoda se uporablja za seznanjanje /bonding (za povzetek glejte Dodatek A). V tem razdelku boste videli preprosto nastavitev.

  1. Nastavite SM z želeno konfiguracijo. Strojna oprema za ta laboratorij olajša prikaz gesla na konzoli. Vnos gesla je pogoj za omogočanje zaščite MITM. Dodajte naslednjo kodo svojemu upravljalniku dogodkov sl_bt_system_boot_id. To omogoči človeka v sredini in obvesti oddaljeno napravo, da imamo možnost prikazati geslo, toda to je vse.
  2. Za prikaz gesla na konzoli je potreben upravljalnik dogodkov, kot je prikazano spodaj:
  3. Nastavite način povezovanja, največje število povezav itd. Za začetek uporabite naslednjo kodo:Te nastavitve lahko uporabite za omejitev zmožnosti napadalca, da se poveže z vašo napravo. Če mora vaš izdelek imeti samo enega uporabnika, lahko omejite največje število vezi na 1. Dobro mesto za dodajanje teh klicev je v obdelovalniku dogodkov sl_bt_system_boot_id. Trenutno ne bomo omogočili povezovanja, da bi preostali del laboratorija potekal bolj gladko, vendar smo nastavili politiko povezovanja, ki dovoljuje samo eno vez. Za referenco je dokumentacija za te API-je na voljo tukaj in tukaj.
  4. Dodajte obdelovalce dogodkov za sl_bt_evt_sm_bonded_id in sl_bt_evt_sm_bonding_failed_id. Glavna uporaba teh dogodkov je trenutno informativna, kasneje v laboratoriju pa boste dodali funkcionalnost.
  5. Zgradite in bliskajte na ciljno ploščo. Povežite se z EFRConnect in preberite zaščiteno karakteristiko kot prej. Tokrat boste na konzoli videli prikazano geslo. Ob pozivu vnesite to geslo v mobilni telefon.
  6. Preizkusite potrditev povezovanja. Ta funkcija daje uporabniku možnost, da zahteva potrditev zahtev za povezovanje. S tem daje aplikaciji nadzor nad tem, s katerimi enakovrednimi napravami se povezuje. Ena od možnosti je zahtevati, da uporabnik pritisne gumb, preden dovoli povezavo.
    1. Odprite nastavitve Bluetooth v svojem mobilnem telefonu in odstranite povezavo z napravo EFR32. Implementacije mobilnih telefonov se razlikujejo, zato ta korak morda ni potreben. Če v nastavitvah Bluetooth ne vidite naprave »Usposabljanje«, nadaljujte z naslednjim korakom.
    2. V komponente programske opreme namestite en primerek preprostega upravljalnika gumbov.
    3. Vključite glavo file sl_simple_button_instances.h v app.c
    4. Dodajte obravnavo za dogodek sl_bt_evt_sm_bonding_confirm_id. Glavna naloga tega obdelovalca dogodkov je obvestiti uporabnika, da oddaljena naprava zahteva novo povezavo.
    5. Dodajte funkcijo povratnega klica za preprostega upravljalnika gumbov za pošiljanje signala v sklad Bluetooth, ki označuje, da je bil gumb pritisnjen. To preglasi privzeti povratni klic, ki se preprosto vrne.
    6. Dodajte zunanji upravljalnik dogodkov signala. Ta dogodek se sproži kot odgovor na sprejem signala, kot na primer v prejšnjem koraku. Zunanji signalni dogodek bo uporabljen za potrditev povezave.
    7. Spremenite klic na sl_bt_sm_configure, da bo zahteval potrditev povezovanja, kot npr
    8. Obnovi in ​​flash.
    9. Povežite se z EFRConnect in preberite zaščiteno karakteristiko kot prej. Zdaj boste na konzoli videli naslednje sporočilo:Pritisnite PB0, da potrdite povezavo. Zdaj bo konzola prikazala geslo, ki ga je treba vnesti v mobilni telefon za povezovanje. Vnesite geslo, da dokončate postopek povezovanja.

 

Nasvet: Uporabite privzeto velikost črk v obdelovalniku dogodkov, da natisnete sporočilo, ko sklad pošlje dogodek, ki ni obravnavan. Sklad vam morda poskuša povedati nekaj pomembnega.

Onkraj osnov

Na tej točki ste napredovalitage od varnostnih funkcij, ki jih ponuja naš sklad. Zdaj pa izboljšajmo izvedbo s pametno uporabo funkcij, ki so nam na voljo. Naslednji koraki so izbirni in neodvisni drug od drugega, lahko sestavite in utripate po vsakem, da vidite vedenje, ali jih preizkusite vse skupaj.

  1. Prekinite povezavo ob neuspelih poskusih povezovanja. To je dobro mesto za odkrivanje groženj. Če oddaljena naprava ne podpira šifriranja/avtentikacije ali preprosto nima pravilnih ključev, je lahko heker. Torej, prekinimo povezavo. Poskusite dodati klic za sl_bt_connection_close() v dogodku sl_bt_sm_bonding_failed_id. API je dokumentiran tukaj.To funkcijo lahko preizkusite tako, da vnesete napačno geslo.
  2. Omogoča le povezovanje ob določenih časih. To omeji čas, ki ga mora napadalec vzpostaviti, in omogoča uporabo funkcije »dovoli samo povezane povezave«. Oblikovalec lahko izbere, kako omogoči ali onemogoči povezovalni način. Za namene predstavitve bomo tukaj omogočili "nastavitveni način" s PB1 in ga s časovnikom onemogočili po 30 sekundah.
    1. Namestite drugi primerek vmesnika preprostih gumbov. To bo omogočilo uporabo PB1.
    2. Spremenite povratni klic tako, da v sklad pošlje drugačen signal, da omogočite/onemogočite povezovanje. Rezultat bi moral izgledati nekako takole:
    3. Spremenite zunanji upravljalnik dogodkov signala, tako da bo obravnaval ta novi signal. Rezultat bi moral biti takšen:
    4. Dodajte obravnavo dogodkov za dogodek sl_bt_evt_system_soft_timer_id. To bo uporabljeno za onemogočanje nastavitvenega načina.
    5. Naslednjo kodo je mogoče uporabiti, da omogočite povezovalni način in omogočite vse povezave ali da onemogočite povezovalni način in dovolite samo povezave iz povezanih naprav:
    6. Dodajte naslednji klic v obravnavo dogodkov sl_bt_system_boot_id
    7. Zgradite projekt in ga prenesite v napravo.
    8. Poskusite se povezati z napravo z EFRConnect. Povezava naj ne bi uspela.
    9. Zdaj poskusite pritisniti PB1, preden se povežete z EFRConnect. Tokrat bo povezava uspešna. Po 30 sekundah boste na konzoli videli sporočilo, ki nakazuje, da naprava zapušča način nastavitve. To pomeni, da je povezljivi način zdaj onemogočen.
  3. Povečajte varnost pri vzpostavljanju povezave. Ker varnost ni obvezna, bi morali zahtevati šifrirano povezavo čim prej, namesto da bi se zanašali na značilnosti GATT. API je dokumentiran tukaj. Dobro mesto za klic tega API-ja je dogodek sl_bt_evt_connection_opened_id. Ročaj povezave je na voljo v spremenljivki povezave.

Varna identiteta

Zdaj, ko imamo varnejšo napravo Bluetooth, izboljšajmo korak preverjanja pristnosti. V prejšnjih laboratorijih za usposabljanje ste že videli, kako preveriti varno identiteto trezorskih naprav z ukazno vrstico. V tem razdelku bomo videli, kako lahko ena naprava BLE preveri identiteto druge naprave BLE tako, da zahteva njeno verigo potrdil in pošlje izziv. Vsi deli varnega trezorja imajo lasten certifikat naprave in paketni certifikat. Tovarniška in korenska potrdila so trdo kodirana v odjemalski aplikaciji, da omogočijo preverjanje celotne verige potrdil. Glejte AN1268 za več podrobnosti o varni identiteti.

  1. Definirajte globalni medpomnilnik za shranjevanje podpisa potrdila naprave, kot je prikazano spodaj:
  2. Nastavite konfiguracijo varnostnega upravitelja za uporabo seznanjanja JustWorks. To se naredi tako, da je povezava šifrirana. V praksi je treba uporabiti zaščito MITM, a da bi bil laboratorij preprost, bomo uporabili JustWorks. Spremenite klic v sl_bt_sm_configure nazaj v naslednje:Prav tako komentirajte klic setup_mode(true) v obdelovalniku dogodkov system_boot.
  3. Odprite helpers.c iz priloženih materialov in kopirajte vsebino v app.c. Te funkcije povratnega klica izvajajo naloge, kot je segmentiranje potrdil, tako da jih je mogoče poslati prek BLE, preverjanje verige potrdil in generiranje/preverjanje izziva.
  4. Treba je določiti največjo velikost prenosne enote (MTU), da je mogoče certifikate segmentirati in ponovno sestaviti. Definirajte globalno spremenljivko za shranjevanje MTU, kot je prikazano tukaj:Nato dodajte obravnavo dogodkov za izmenjani dogodek GATT MTU, kot je prikazano spodaj:
  5. Obstajajo tri značilnosti uporabniških podatkov, ki jih je mogoče brati. Te značilnosti se uporabljajo za sporočanje potrdila naprave, paketnega potrdila in izziva. Za obravnavanje teh uporabniških zahtev za branje se uporablja funkcija povratnega klica. Dodajte upravljalnik za klic te funkcije, kot je prikazano spodaj:Povratni klic uporablja MTU iz 2. koraka za segmentiranje in pošiljanje potrdil po potrebi. Obravnava tudi pošiljanje podpisanega izziva.
  6. Odjemalec pošlje izziv, naključno številko, ki jo strežnik podpiše, tako da napiše eno od značilnosti GATT. Iz tega razloga mora imeti aplikacija upravljalnik za dogodek zahteve za pisanje uporabnika, kot je prikazano spodaj:
  7. Dodajte podporo za varno identiteto files k projektu:
    1. app_se_manager_macro.h, app_se_manager_secure_identity.c in app_se_secure_identity.h iz predloženih materialov v projekt. te filevsebujejo nekaj pomožnih funkcij za naloge, kot je pridobivanje velikosti potrdila, pridobivanje javnega ključa naprave in podpisovanje izziva.
    2. Vključite app_se_manager_secure_identity.h v app.c.
  8. Uvozite predloženi gatt_configuration-attest.btconf iz predloženih materialov. Ta zbirka podatkov GATT, imenovana varno potrdilo, vključuje štiri značilnosti, ki bodo uporabljene za preverjanje identitete naše naprave. Ti vključujejo potrdilo naprave, paketno potrdilo, izziv in odgovor.
  9. Odjemalec, ki se uporablja za simulacijo naprave, kot je prehod, je na voljo kot celoten projekt, saj je bolj zapleten za izdelavo. Na splošno je delovanje stranke naslednje:
    1. Išče naprave, ki oglašujejo storitev varnega potrjevanja, in se z njimi poveže.
    2. Odkriva storitve in značilnosti baze podatkov GATT.
    3. Prebere potrdila naprave in serije ter preveri verigo potrdil z uporabo tovarniškega in korenskega potrdila, ki ju je shranil v flash.
    4. Pošlje naključni izziv strežniku.
    5. Poskusi preveriti odgovor na izziv.
    6. Zapre povezavo, če katero od preverjanj ne uspe.
  10. Zgradite in bliskajte projekt strežnika v strežnik WSTK /radioboard.
  11. Uvozite odjemalski projekt iz odjemalske mape v priloženih materialih. Zgradite in bliskajte odjemalski projekt v odjemalski WSTK/radioboard.
  12. Pritisnite ponastavitev na odjemalcu WSTK in odprite serijsko konzolo. Odjemalec začne iskati naprave, ki oglašujejo našo storitev varne identitete, in se poveže, ko jo najde.
  13. Odjemalec bo prikazal nekaj sporočil, ki nakazujejo, da je našel strežnik z želeno storitvijo, in statusna sporočila o preverjanju verige potrdil.
  14. Če je preverjanje uspešno, bo odjemalec ustvaril naključno število, imenovano izziv, in ga poslal strežniku. Strežnik bo podpisal izziv s svojim varno shranjenim zasebnim ključem naprave in podpis vrnil odjemalcu, to se imenuje odziv na izziv. Odjemalec nato uporabi javni ključ v predhodno prejetem potrdilu naprave za preverjanje podpisa. To se naredi za potrditev, da ima strežnik res zasebni ključ, za katerega trdi, da ga ima. Če je izziv pravilno preverjen, se prikaže sporočilo o tem; v nasprotnem primeru je povezava prekinjena in prikaže se sporočilo z razlago, zakaj.
  15. Zdaj pošljite neveljavno potrdilo, da potrdite, da preverjanje res deluje. User_read_request_cb() lahko spremenite tako, da poškoduje podatke potrdila ali odziv na izziv.

Dodatek A – V/I zmogljivosti in metode združevanja
Dodatek B – Varnostni načini in ravni

Varnostni način 1 je edini način, ki je podprt za Bluetooth Low Energy v skladu Silicon Labs. Ravni so naslednje:

  • 1. stopnja brez varnosti
  • Nepreverjeno seznanjanje 2. stopnje s šifriranjem
  • Preverjeno združevanje 3. stopnje s šifriranjem
  • Preverjene varne povezave 4. stopnje z močnim šifriranjem (izmenjava ključev ECDH)

 

Dokumenti / Viri

silabs 21Q2 varna BLE naprava Varnostni laboratorij [pdfUporabniški priročnik
21Q2 Varnostni laboratorij za varno napravo BLE, Varnostni laboratorij za varno napravo BLE, Varnostni laboratorij

Reference

Pustite komentar

Vaš elektronski naslov ne bo objavljen. Obvezna polja so označena *