silabs 21Q2 sigurni BLE uređaj Sigurnosni laboratorij
BLE sigurnosni laboratorijski priručnik
U ovom laboratoriju vidjet ćete kako dizajnirati sigurniji BLE uređaj. Počet ćemo s overomview kako koristiti neke od značajki hrpe i prijeći na neke općenite savjete o tehnikama za sigurnije veze i na kraju ćemo vidjeti kako koristiti certifikate uređaja preko BLE-a za identifikaciju periferije kao autentične.
Početak rada
Bluetooth sampAplikacija koju ćete graditi namijenjena je za korištenje s bootloaderom. Ako radite s potpuno novim EFR32MG21B, on neće imati bootloader. Možete pronaći unaprijed izgrađeni bootloader u platformi\bootloader\sampmapu le-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a vašeg SDK-a.
- Počnite sa soc-empty sample app. Ovo sample app koristi se kao predložak i čini dobro polazište za bilo koju BLE aplikaciju.
- Otvorite Silicon Labs Project Wizard iz Simplicity Studio File izbornik -> novo.
- Odaberite BRD4181C i kliknite gumb "dalje".
- Pritisnite potvrdni okvir 'Bluetooth (9)' pod vrstom tehnologije.
- Označite 'Bluetooth – SoC Empty', a zatim kliknite dalje.
- Pritisnite gumb "Završi".
- Sada možete dodati neke karakteristike da biste vidjeli kako se različito tretiraju zaštićene i nezaštićene karakteristike.
- Otvorite slcp projekta file dvostrukim klikom na njega u prozoru Project Explorera
- Označite karticu 'SOFTVERSKE KOMPONENTE' i otvorite konfiguracijski alat GATT kao što je prikazano u nastavku:
I koristite alat za uvoz prikazan ispod za uvoz gatt_configuration.btconf file iz mape poslužitelja u priloženim materijalima.
Baza podataka GATT-a ima prilagođenu uslugu, nazvanu 'Obuka', s nekim podacima koji su zaštićeni, a nekima koji nisu. To vam omogućuje da usporedite što se događa kada pokušate pristupiti zaštićenoj karakteristici u odnosu na nezaštićenu. Ovo je brz način izrade uređaja s vrlo osnovnom sigurnošću.
- Koristit ćemo serijski priključak za ispis na konzolu u Simplicity Studiju kako bismo pratili što se događa u aplikaciji. Najlakši način za pronalaženje ovih komponenti je pretraživanjem u dijaloškom okviru SOFTVERSKE KOMPONENTE kao što je prikazano:
-
- Instalirajte IO Stream USART komponentu
- Instalirajte komponentu IO Stream Retarget STDIO
- Instalirajte Standard I/O komponentu
- Instalirajte komponentu Log
- Otvorite komponentu upravljanja pločom i uključite 'Omogući virtualni COM UART'
- Desnom tipkom miša kliknite adapter na ploči 'Debug adapters' i odaberite 'Launch Console'. Odaberite karticu 'Serial 1' i postavite kursor u polje za unos teksta u prozoru konzole i pritisnite enter da biste probudili konzolu.
-
- Napravite lokalnu varijablu u sl_bt_on_event(), koja se nalazi u app.c, za spremanje ručice veze. Varijabla mora biti statična budući da se ova funkcija poziva svaki put kada stog pokrene događaj i želimo da vrijednost bude trajna. Ručka za povezivanje koristit će se kasnije
dio laboratorija.
- Umetnite neke izjave app_log() za događaje da vidite kada smo povezani, sigurnosne načine itd
-
- Uključite zaglavlje app_log.h file
- sl_bt_evt_connection_opened – ispis oznake veze i spremanje oznake veze. Ako je regulator veze 0xFF, ne postoji veza između povezanih uređaja. Izmijenite postojeći rukovatelj događajima tako da izgleda otprilike ovako:
- sl_bt_evt_connection_parameters – sigurnosni način rada. To je učinjeno kako biste mogli vidjeti kada se sigurnosni način promijeni. Postoji razlika u numeriranju sigurnosnih načina gdje je sigurnosni način 1 naveden s vrijednošću 0 itd. . Dodajte sljedeći rukovatelj događajima svojoj aplikaciji:
- sl_bt_evt_connection_closed_id. Ovaj rukovatelj događajima je modificiran da ažurira ručicu veze. Vrijednost 0xFF koristi se za označavanje da nema aktivne veze. Naredba app_log() koristi se za ispis razloga zatvaranja veze, popis statusnih kodova je ovdje. Izmijenite postojeći rukovatelj događajima tako da izgleda otprilike ovako:
- Uključite zaglavlje app_log.h file
-
- Izgradite i flash projekt. U ovom trenutku ćemo pokrenuti sample aplikaciju da vidite kako se ponaša bez ikakvih promjena, osim baze podataka GATT-a.
- Povežite se s mobilnom aplikacijom EFRConnect na sljedeći način:
-
- Dodirnite ikonu "Bluetooth preglednik".
- Dodirnite ikonu 'Poveži' na uređaju pod nazivom 'Trening'.
-
- Pročitajte nezaštićenu karakteristiku na sljedeći način:
-
- Dodirnite vezu "Više informacija" ispod nepoznate usluge s UUID-om a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Pročitajte nezaštićenu karakteristiku, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c dodirivanjem ikone "Čitaj". Ovdje nema iznenađenja. Budući da karakteristika nije ni na koji način zaštićena, bit će poslana u otvorenom tekstu.
-
- Sada pročitajte zaštićenu karakteristiku, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Vaš mobilni telefon trebao bi od vas zatražiti uparivanje i povezivanje, poruka se može razlikovati ovisno o vašem mobilnom OS-u. Nakon što prihvatite zahtjev za uparivanje, na konzoli bi se trebala pojaviti sljedeća poruka:
Bilješka: Dodatak A na kraju ovog priručnika sadrži sažetak I/O mogućnosti i metoda uparivanja za referencu. Dodatak B sažima Bluetooth sigurnosne načine.
Konfiguracija upravitelja sigurnosti
Upravitelj sigurnosti dio je Bluetooth skupa koji određuje koje se sigurnosne značajke koriste. Ove značajke uključuju zaštitu čovjeka u sredini (MITM), sigurne veze LE (aka ECDH), zahtijevanje potvrde za povezivanje, itd. Upravitelj sigurnosti također upravlja I/O mogućnostima koje se koriste za određivanje metode koja se koristi za uparivanje /bonding (pogledajte Dodatak A za sažetak). U ovom odjeljku vidjet ćete jednostavnu postavku.
- Postavite SM sa željenom konfiguracijom. Hardver za ovaj laboratorij olakšava prikazivanje pristupnog ključa na konzoli. Unos zaporke preduvjet je za omogućavanje MITM zaštite. Dodajte sljedeći kod svom obrađivaču događaja sl_bt_system_boot_id. Ovo omogućuje čovjeka u sredini i obavještava udaljeni uređaj da imamo mogućnost prikazati pristupni ključ, ali to je sve.
- Za prikaz pristupnog ključa na konzoli potreban je rukovatelj događajima kao što je prikazano u nastavku:
- Postavite način povezivanja, maksimalni broj spajanja itd. Upotrijebite sljedeći kôd za početak:
Ove se postavke mogu koristiti za ograničavanje sposobnosti napadača da se poveže s vašim uređajem. Ako vaš proizvod treba imati samo jednog korisnika, tada možete ograničiti maksimalne veze na 1. Dobro mjesto za dodavanje ovih poziva je sl_bt_system_boot_id rukovatelj događajima. Trenutačno nećemo omogućiti povezivanje kako bi ostatak laboratorija tekao glatko, ali postavljamo politiku povezivanja koja dopušta samo jedno povezivanje. Za referencu, dokumentacija za ove API-je nalazi se ovdje i ovdje.
- Dodajte rukovatelje događajima za sl_bt_evt_sm_bonded_id i sl_bt_evt_sm_bonding_failed_id. Glavna upotreba ovih događaja trenutno je informativna, ali ćete kasnije u laboratoriju dodati funkcionalnost.
- Izgradite i bljesnite na ciljnu ploču. Povežite se s EFRConnect i pročitajte zaštićenu karakteristiku kao i prije. Ovaj put ćete vidjeti pristupni ključ prikazan na konzoli. Unesite ovaj pristupni ključ na svom mobilnom telefonu kada se to od vas zatraži.
- Isprobajte potvrdu povezivanja. Ova značajka daje korisniku mogućnost da zahtijeva da se zahtjevi za povezivanje potvrde. Na taj način daje aplikaciji kontrolu nad uređajima s kojima se povezuje. Jedna od mogućnosti je zahtijevati od korisnika da pritisne gumb prije nego što dopusti vezu.
- Otvorite Bluetooth postavke na svom mobilnom telefonu i uklonite vezu s EFR32 uređajem. Implementacije mobilnih telefona razlikuju se tako da ovaj korak možda neće biti potreban. Ako ne vidite uređaj 'Training' u svojim Bluetooth postavkama, samo prijeđite na sljedeći korak.
- U softverskim komponentama instalirajte jednu instancu jednostavnog rukovatelja gumbima.
- Uključite zaglavlje file sl_simple_button_instances.h u app.c
- Dodajte rukovatelja za događaj sl_bt_evt_sm_bonding_confirm_id. Glavni zadatak ovog rukovatelja događajima je obavijestiti korisnika da udaljeni uređaj zahtijeva novu vezu.
- Dodajte funkciju povratnog poziva jednostavnom rukovatelju gumbima za slanje signala Bluetooth skupu koji pokazuje da je gumb pritisnut. Ovo nadjačava zadani povratni poziv koji se jednostavno vraća.
- Dodajte vanjski rukovatelj događajima signala. Ovaj događaj se pokreće kao odgovor na primanje signala, kao u prethodnom koraku. Događaj vanjskog signala koristit će se za potvrdu povezivanja.
- Promijenite poziv na sl_bt_sm_configure da zahtijeva potvrdu povezivanja kao što je
- Rebuild i flash.
- Povežite se s EFRConnect i pročitajte zaštićenu karakteristiku kao i prije. Sada ćete na konzoli vidjeti sljedeću poruku:
Pritisnite PB0 za potvrdu spajanja. Sada će konzola prikazati pristupni ključ koji treba unijeti na mobilni telefon za povezivanje. Unesite šifru za dovršetak procesa povezivanja.
Savjet: Koristite zadani slučaj u rukovatelju događajima za ispis poruke kada stog pošalje događaj koji nije obrađen. Stog vam možda pokušava reći nešto važno.
Izvan osnova
U ovom trenutku ste poduzeli napredaktage od sigurnosnih značajki koje naš skup nudi. Sada poboljšajmo implementaciju mudrim korištenjem značajki koje su nam na raspolaganju. Sljedeći koraci nisu obavezni i neovisni jedan o drugom, možete izgraditi i flashati nakon svakog da biste vidjeli ponašanje ili ih isprobati sve zajedno.
- Prekinite vezu pri neuspjelim pokušajima spajanja. Ovo je dobro mjesto za otkrivanje prijetnji. Ako udaljeni uređaj ne podržava enkripciju/autentifikaciju ili jednostavno nema ispravne ključeve, mogao bi biti haker. Dakle, prekinimo vezu. Pokušajte dodati poziv sl_bt_connection_close() u događaj sl_bt_sm_bonding_failed_id. API je dokumentiran ovdje.
Ovu značajku možete testirati unosom krive šifre.
- Dopuštanje povezivanja samo u određeno vrijeme. Ovo ograničava vrijeme koje napadač ima da uspostavi vezu i omogućuje korištenje značajke 'dopusti samo povezane veze'. Dizajner može odabrati kako omogućiti ili onemogućiti način povezivanja. U svrhu demonstracije ovdje ćemo omogućiti 'način postavljanja' s PB1 i upotrijebiti mjerač vremena da ga onemogućimo nakon 30 sekundi.
- Instalirajte drugu instancu jednostavnog sučelja gumba. To će omogućiti korištenje PB1.
- Izmijenite povratni poziv za slanje drugačijeg signala na stog kako biste omogućili/onemogućili povezivanje. Rezultat bi trebao izgledati otprilike ovako:
- Izmijenite rukovatelja događajima vanjskog signala tako da obrađuje ovaj novi signal. Rezultat bi trebao biti ovakav:
- Dodajte rukovatelja događajem za događaj sl_bt_evt_system_soft_timer_id. Ovo će se koristiti za onemogućavanje načina postavljanja.
- Sljedeći kod može se koristiti za omogućavanje načina povezivanja i dopuštanje svih veza ili za onemogućavanje načina povezivanja i dopuštanje veza samo s povezanih uređaja:
- Dodajte sljedeći poziv u rukovatelj događajima sl_bt_system_boot_id
- Izgradite projekt i flashirajte ga na uređaj.
- Pokušajte se povezati s uređajem pomoću EFRConnecta. Veza bi trebala prekinuti.
- Sada pokušajte pritisnuti PB1 prije povezivanja s EFRConnect. Ovaj put će veza biti uspješna. Nakon 30 sekundi vidjet ćete poruku na konzoli koja pokazuje da uređaj izlazi iz načina postavljanja. To znači da je način povezivanja sada onemogućen.
- Povećajte sigurnost pri uspostavljanju veze. Budući da sigurnost nije obavezna, trebali bismo zatražiti šifriranu vezu što je prije moguće umjesto da se oslanjamo na karakteristike GATT-a. API je dokumentiran ovdje. Dobro mjesto za pozivanje ovog API-ja je u događaju sl_bt_evt_connection_opened_id. Ručka veze dostupna je u varijabli veze.
Siguran identitet
Sada kada imamo sigurniji Bluetooth uređaj, poboljšajmo korak autentifikacije. Već ste vidjeli kako provjeriti siguran identitet trezorskih uređaja pomoću naredbenog retka u prethodnim laboratorijima za obuku. U ovom odjeljku vidjet ćemo kako jedan BLE uređaj može potvrditi identitet drugog BLE uređaja traženjem njegovog lanca certifikata i slanjem izazova. Svi dijelovi sigurnog trezora imaju vlastiti certifikat uređaja i paketni certifikat. Tvornički i korijenski certifikati čvrsto su kodirani u klijentskoj aplikaciji kako bi se omogućila provjera cijelog lanca certifikata. Pogledajte AN1268 za više pojedinosti o sigurnom identitetu.
- Definirajte globalni međuspremnik za pohranjivanje potpisa atestiranja uređaja na sljedeći način:
- Postavite konfiguraciju upravitelja sigurnosti da koristi JustWorks uparivanje. To se radi kako bi veza bila šifrirana. U praksi bi se trebala koristiti MITM zaštita, ali da bi laboratorij bio jednostavan, koristit ćemo JustWorks. Promijenite poziv za sl_bt_sm_configure natrag na sljedeće:
Također, komentirajte poziv za setup_mode(true) u rukovatelju događajima system_boot.
- Otvorite helpers.c iz ponuđenih materijala i kopirajte sadržaj u app.c. Ove funkcije povratnog poziva obavljaju zadatke kao što je segmentiranje certifikata tako da se mogu poslati putem BLE-a, provjera lanca certifikata i generiranje/provjera izazova.
- Potrebno je odrediti maksimalnu veličinu prijenosne jedinice (MTU) kako bi se certifikati mogli segmentirati i ponovno sastaviti. Definirajte globalnu varijablu za spremanje MTU-a kao što je prikazano ovdje:
Zatim dodajte rukovatelja događajem za razmijenjeni događaj GATT MTU kao što je prikazano u nastavku:
- Postoje tri karakteristike korisničkih podataka koje je moguće očitati. Ove se karakteristike koriste za komunikaciju certifikata uređaja, paketnog certifikata i izazova. Funkcija povratnog poziva koristi se za obradu ovih korisničkih zahtjeva za čitanje. Dodajte rukovatelj za pozivanje ove funkcije kao što je prikazano u nastavku:
Povratni poziv koristi MTU iz koraka #2 za segmentiranje i slanje certifikata prema potrebi. Također obrađuje slanje potpisanog izazova.
- Klijent šalje izazov, nasumični broj koji treba potpisati poslužitelj, ispisujući jednu od karakteristika GATT-a. Iz tog razloga, aplikacija mora imati rukovatelja za događaj zahtjeva za pisanje korisnika kao što je prikazano u nastavku:
- Dodajte sigurnu podršku za identitet files projektu:
- app_se_manager_macro.h, app_se_manager_secure_identity.c i app_se_secure_identity.h iz dostavljenih materijala u projekt. ove filesadrže neke pomoćne funkcije za zadatke kao što su dobivanje veličine certifikata, dobivanje javnog ključa uređaja i potpisivanje izazova.
- Uključi app_se_manager_secure_identity.h u app.c.
- Uvezite dostavljeni gatt_configuration-attest.btconf iz dostavljenih materijala. Ova GATT baza podataka nazvana je sigurna potvrda koja uključuje četiri karakteristike koje će se koristiti za provjeru identiteta našeg uređaja. To uključuje certifikat uređaja, paketni certifikat, izazov i odgovor.
- Klijent, koji se koristi za simulaciju uređaja kao što je gateway, pruža se kao cjeloviti projekt budući da je složeniji za izgradnju. Općenito, rad klijenta je sljedeći:
- Skenira uređaje koji oglašavaju sigurnu uslugu potvrde i povezuje se s njima.
- Otkriva usluge i karakteristike baze podataka GATT-a.
- Čita certifikate uređaja i paketa te provjerava lanac certifikata pomoću tvorničkog i korijenskog certifikata koje je pohranio u Flashu.
- Šalje nasumični izazov poslužitelju.
- Pokušava provjeriti odgovor na izazov.
- Zatvara vezu ako bilo koja provjera ne uspije.
- Izgradite i flash projekt poslužitelja na vašem poslužitelju WSTK /radioboard.
- Uvezite projekt klijenta iz mape klijenta u priloženim materijalima. Izgradite i flash klijentski projekt na vašem klijentu WSTK/radioboard.
- Pritisnite reset na WSTK klijenta i otvorite serijsku konzolu. Klijent počinje skenirati uređaje koji oglašavaju našu uslugu sigurnog identiteta i povezat će se kada ga pronađe.
- Klijent će prikazati neke poruke koje pokazuju da je pronašao poslužitelj sa željenom uslugom i statusne poruke o provjeri lanca certifikata.
- Ako provjera prođe, klijent će generirati nasumični broj, koji se zove izazov, i poslati ga poslužitelju. Poslužitelj će potpisati izazov sa svojim sigurno čuvanim privatnim ključem uređaja i potpisom vratiti klijentu, to se zove odgovor na izazov. Klijent zatim koristi javni ključ u prethodno primljenom certifikatu uređaja za provjeru potpisa. Ovo se radi kako bi se potvrdilo da poslužitelj stvarno ima privatni ključ za koji je tvrdio da ga ima. Ako je izazov ispravno potvrđen, prikazuje se poruka o tome; u protivnom se veza prekida i prikazuje se poruka s objašnjenjem zašto.
- Sada pošaljite nevažeći certifikat kako biste potvrdili da provjera stvarno radi. Možete modificirati user_read_request_cb() da pokvari ili podatke certifikata ili odgovor na zahtjev.
Dodatak A – I/O mogućnosti i metode uparivanja 
Dodatak B – Sigurnosni načini i razine
Sigurnosni način rada 1 jedini je podržani način rada za Bluetooth Low Energy u nizu Silicon Labsa. Razine su sljedeće:
- Razina 1 nema sigurnosti
- Neovjereno uparivanje razine 2 s enkripcijom
- Uparivanje provjerene razine 3 s enkripcijom
- Sigurne veze provjerene razine 4 s jakom enkripcijom (ECDH razmjena ključeva)
Dokumenti / Resursi
![]() |
silabs 21Q2 sigurni BLE uređaj Sigurnosni laboratorij [pdf] Korisnički priručnik 21Q2 Sigurnosni laboratorij sigurnog BLE uređaja, Sigurnosni laboratorij sigurnog BLE uređaja, Sigurnosni laboratorij |