silabs 21Q2 siguran BLE uređaj Sigurnosna laboratorija

BLE Security Lab priručnik

U ovoj laboratoriji ćete vidjeti kako dizajnirati sigurniji BLE uređaj. Počećemo sa ponovljenimview o tome kako koristiti neke od karakteristika steka i prijeći na neke općenite savjete o tehnikama za sigurnije veze i konačno ćemo vidjeti kako koristiti certifikate uređaja preko BLE-a da identifikujemo periferiju kao autentičnu.

Getting Started

Bluetooth sampAplikacija na kojoj ćete graditi je namijenjena za korištenje s bootloaderom. Ako radite sa potpuno novim EFR32MG21B, on neće imati bootloader. Možete pronaći unaprijed izgrađeni bootloader u platformi\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a folder vašeg SDK.

  1. Počnite sa soc-empty sample app. Ovo sample app se koristi kao šablon i predstavlja dobru polaznu tačku za bilo koju BLE aplikaciju.
    1. Otvorite čarobnjak za projekte Silicon Labs iz Simplicity Studio File meni -> novo.
    2. Odaberite BRD4181C i kliknite na dugme 'Next'.
    3. Kliknite na potvrdni okvir 'Bluetooth (9)' ispod vrste tehnologije.
    4. Označite 'Bluetooth – SoC Empty', a zatim kliknite na dalje.
    5. Kliknite na dugme 'Završi'.
  2. Sada možete dodati neke karakteristike da vidite kako se zaštićene i nezaštićene karakteristike različito tretiraju.
    1. Otvorite slcp projekta file dvostrukim klikom na nju u prozoru Project Explorer
    2. Označite karticu 'SOFTVERSKE KOMPONENTE' i otvorite GATT konfiguracijski alat kao što je prikazano ispod: I koristite alat za uvoz prikazan ispod da uvezete gatt_configuration.btconf file iz fascikle servera u priloženim materijalima.GATT baza podataka ima prilagođenu uslugu, nazvanu 'Obuka', s nekim podacima koji su zaštićeni, a nekima nisu. Ovo vam omogućava da uporedite šta se dešava kada pokušavate da pristupite zaštićenoj karakteristici u odnosu na nezaštićenu karakteristiku. Ovo je brz način izrade uređaja sa vrlo osnovnom sigurnošću.
  3. Koristićemo serijski port za štampanje na konzoli u Simplicity Studiju da pratimo šta se dešava u aplikaciji. Najlakši način da pronađete ove komponente je da ih potražite u dijaloškom okviru SOFTVERSKE KOMPONENTE kao što je prikazano:
      1. Instalirajte USART komponentu IO Stream
      2. Instalirajte IO Stream Retarget STDIO komponentu
      3. Instalirajte standardnu ​​I/O komponentu
      4. Instalirajte komponentu dnevnika
      5. Otvorite komponentu za kontrolu ploče i uključite 'Enable Virtual COM UART'
      6. Desni klik na adapter u panelu 'Debug adapters' i odaberite 'Launch Console'. Odaberite karticu 'Serial 1' i postavite kursor u polje za unos teksta prozora konzole i pritisnite enter da probudite konzolu.
  4. Kreirajte lokalnu varijablu u sl_bt_on_event(), koja se nalazi u app.c, za spremanje ručke veze. Varijabla mora biti statična jer se ova funkcija poziva svaki put kada stek pokrene događaj i želimo da vrijednost bude trajna. Ručica za povezivanje će se koristiti kasnijeodjeljak laboratorije.
  5. Ubacite neke app_log() izraze za događaje da vidite kada smo povezani, sigurnosne načine itd
      1. Uključite zaglavlje app_log.h file
      2. sl_bt_evt_connection_opened – ispisati ručku veze i sačuvati ručku veze. Ako je ručka veze 0xFF, ne postoji veza između povezanih uređaja. Izmijenite postojeći obrađivač događaja tako da izgleda otprilike ovako:
      3. sl_bt_evt_connection_parameters – sigurnosni način rada. Ovo je učinjeno kako biste mogli vidjeti kada se sigurnosni način mijenja. Postoji razlika u numeraciji sigurnosnih modova gdje je sigurnosni način 1 nabrojan vrijednošću 0, itd. Dodajte sljedeći obrađivač događaja vašoj aplikaciji:
      4. sl_bt_evt_connection_closed_id. Ovaj obrađivač događaja je modificiran da ažurira ručku veze. Vrijednost 0xFF se koristi za označavanje da nema aktivne veze. Naredba app_log() se koristi za ispis razloga zatvaranja veze, lista statusnih kodova je ovdje. Izmijenite postojeći obrađivač događaja tako da izgleda otprilike ovako:
  6. Izgradite i flešujte projekat. U ovom trenutku ćemo pokrenuti sample app da vidite kako se ponaša bez ikakvih promjena, osim GATT baze podataka.
  7. Povežite se s mobilnom aplikacijom EFRConnect na sljedeći način:
      1. Dodirnite ikonu 'Bluetooth Browser'.
      2. Dodirnite ikonu 'Poveži' na uređaju pod nazivom 'Trening'.
  8. Pročitajte nezaštićenu karakteristiku na sljedeći način:
      1. Dodirnite vezu 'Više informacija' ispod nepoznate usluge sa UUID-om a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
      2. Pročitajte nezaštićenu karakteristiku, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c dodirom na ikonu 'Pročitaj'. Nema iznenađenja. S obzirom da karakteristika nije ni na koji način zaštićena, bit će poslana u otvorenom tekstu.
  9. Sada pročitajte zaštićenu karakteristiku, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Vaš mobilni telefon bi trebao zatražiti od vas da uparite i povežete se, poruka se može razlikovati ovisno o vašem mobilnom OS-u. Nakon što prihvatite zahtjev za uparivanje, na konzoli bi trebalo da se pojavi poruka kako slijedi: Napomena: Dodatak A na kraju ovog priručnika sadrži sažetak I/O mogućnosti i metoda uparivanja za referencu. Dodatak B rezimira Bluetooth sigurnosne modove.

Konfiguracija sigurnosnog menadžera

Upravljač sigurnosti je dio Bluetooth steka koji određuje koje se sigurnosne funkcije koriste. Ove karakteristike uključuju zaštitu čoveka u sredini (MITM), LE bezbedne veze (aka ECDH), koje zahtevaju potvrdu za povezivanje, itd. Upravljač bezbednosti takođe upravlja I/O mogućnostima koje se koriste da bi se utvrdilo koja metoda se koristi za uparivanje /bonding (pogledajte Dodatak A za sažetak). U ovom odeljku ćete videti jednostavnu postavku.

  1. Postavite SM sa željenom konfiguracijom. Hardver za ovu laboratoriju olakšava prikazivanje lozinke na konzoli. Unos lozinke je uslov za omogućavanje MITM zaštite. Dodajte sljedeći kod svom sl_bt_system_boot_id rukovatelju događaja. Ovo omogućava čovjeka u sredini i obavještava udaljeni uređaj da imamo mogućnost da prikažemo pristupni ključ, ali to je sve.
  2. Da bi se pristupni ključ prikazao na konzoli, potreban je rukovalac događaja kao što je prikazano u nastavku:
  3. Podesite način spajanja, maksimalan broj veza itd. Koristite sljedeći kod za početak:Ove postavke se mogu koristiti za ograničavanje mogućnosti napadača da se poveže s vašim uređajem. Ako vaš proizvod treba da ima samo jednog korisnika, onda možete ograničiti maksimalne veze na 1. Dobro mjesto za dodavanje ovih poziva je u rukovaocu događaja sl_bt_system_boot_id. U ovom trenutku nećemo omogućiti povezivanje da bi ostatak laboratorije prošao glatko, ali postavljamo politiku vezivanja koja dozvoljava samo jednu vezu. Za referencu, dokumentacija za ove API-je se nalazi ovdje i ovdje.
  4. Dodajte rukovaoce događaja za sl_bt_evt_sm_bonded_id i sl_bt_evt_sm_bonding_failed_id. Glavna upotreba ovih događaja je trenutno informativna, ali kasnije u laboratoriji ćete dodati funkcionalnost.
  5. Izgradite i flešujte na ciljnu ploču. Povežite se sa EFRConnect i pročitajte zaštićenu karakteristiku kao i prije. Ovaj put ćete vidjeti pristupni ključ prikazan na konzoli. Unesite ovu lozinku na svoj mobilni telefon kada se to od vas zatraži.
  6. Isprobajte potvrdu povezivanja. Ova funkcija daje korisniku mogućnost da zahtijeva da se zahtjevi za spajanje potvrde. To daje aplikaciji kontrolu nad kojim se ravnopravnim uređajima povezuje. Jedna od mogućnosti je da se od korisnika zahteva da pritisne dugme pre nego što dozvoli vezu.
    1. Otvorite Bluetooth postavke na svom mobilnom telefonu i uklonite vezu sa EFR32 uređajem. Implementacije mobilnih telefona se razlikuju pa ovaj korak možda neće biti potreban. Ako ne vidite uređaj 'Training' u vašim Bluetooth postavkama, samo nastavite na sljedeći korak.
    2. U softverskim komponentama, instalirajte jednu instancu jednostavnog rukovaoca dugmadima.
    3. Uključite zaglavlje file sl_simple_button_instances.h u app.c
    4. Dodajte rukovalac 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.
    5. Dodajte funkciju povratnog poziva za jednostavan rukovalac dugmadima za slanje signala na Bluetooth stog koji ukazuje da je dugme pritisnuto. Ovo poništava podrazumevani povratni poziv koji se jednostavno vraća.
    6. Dodajte eksterni rukovalac signalnim događajima. Ovaj događaj se pokreće kao odgovor na prijem signala, kao u prethodnom koraku. Događaj eksternog signala će se koristiti za potvrdu povezivanja.
    7. Promijenite poziv u sl_bt_sm_configure da zahtijeva potvrdu povezivanja kao što je
    8. Ponovo izgradite i flešujte.
    9. Povežite se sa EFRConnect i pročitajte zaštićenu karakteristiku kao i prije. Sada ćete vidjeti poruku na konzoli kako slijedi:Pritisnite PB0 da potvrdite spajanje. Sada će konzola prikazati pristupni ključ koji treba unijeti na mobilni telefon radi povezivanja. Unesite pristupni ključ da završite proces povezivanja.

 

Savjet: Koristite podrazumevani slučaj u rukovaocu događajima da ispišete poruku kada stog pošalje događaj koji nije obrađen. Stog vam možda pokušava reći nešto važno.

Beyond the Basics

U ovom trenutku ste uzeli prednosttage od sigurnosnih karakteristika koje naš skup može ponuditi. Sada poboljšajmo implementaciju kroz mudro korištenje funkcija koje su nam na raspolaganju. Sljedeći koraci su opcioni i neovisni jedan od drugog, možete napraviti i flash nakon svakog od njih da vidite ponašanje ili ih isprobate sve zajedno.

  1. Prekinite vezu u slučaju neuspjelih pokušaja povezivanja. Ovo je dobro mjesto za otkrivanje prijetnji. Ako udaljeni uređaj ne podržava šifriranje/autentifikaciju ili jednostavno nema ispravne ključeve, možda je riječ o hakeru. Pa, hajde da prekinemo vezu. Pokušajte dodati poziv sl_bt_connection_close() u događaju sl_bt_sm_bonding_failed_id. API je dokumentiran ovdje.Ovu funkciju možete testirati unosom pogrešnog lozinke.
  2. Dozvoljeno spajanje samo u određenim trenucima. Ovo ograničava vrijeme koje napadač mora da formira vezu i omogućava korištenje funkcije 'dozvoli samo povezane veze'. Dizajner može odabrati kako da omogući ili onemogući način povezivanja. Za potrebe demonstracije, omogućit ćemo 'režim podešavanja' sa PB1 i koristiti tajmer da ga onemogućimo nakon 30 sekundi.
    1. Instalirajte drugu instancu jednostavnog interfejsa dugmeta. Ovo će omogućiti korištenje PB1.
    2. Izmijenite povratni poziv da pošalje drugačiji signal u stog da omogući/onemogući povezivanje. Rezultat bi trebao izgledati otprilike ovako:
    3. Izmijenite rukovao događajima eksternog signala tako da rukuje ovim novim signalom. Rezultat bi trebao ovako:
    4. Dodajte obrađivač događaja za događaj sl_bt_evt_system_soft_timer_id. Ovo će se koristiti za onemogućavanje načina podešavanja.
    5. Sljedeći kod se može koristiti za omogućavanje vezanog načina rada i omogućavanje svih veza ili za onemogućavanje vezanog načina rada i omogućavanje povezivanja samo sa povezanih uređaja:
    6. Dodajte sljedeći poziv u obrađivač događaja sl_bt_system_boot_id
    7. Napravite projekat i flešujte ga na uređaj.
    8. Pokušajte se povezati s uređajem pomoću EFRConnect-a. Veza bi trebala propasti.
    9. Sada pokušajte pritisnuti PB1 prije povezivanja s EFRConnect-om. Ovaj put će veza biti uspješna. Nakon 30 sekundi vidjet ćete poruku na konzoli koja pokazuje da uređaj izlazi iz moda podešavanja. To znači da je način povezivanja sada onemogućen.
  3. Povećajte sigurnost prilikom uspostavljanja veze. Pošto je sigurnost opcionalna, trebali bismo zatražiti šifriranu vezu što je prije moguće umjesto da se oslanjamo na GATT karakteristike. API je dokumentiran ovdje. Dobro mjesto za pozivanje ovog API-ja je u događaju sl_bt_evt_connection_opened_id. Ručica veze je dostupna u varijabli veze.

Secure Identity

Sada kada imamo sigurniji Bluetooth uređaj, poboljšajmo korak autentifikacije. Već ste vidjeli kako provjeriti siguran identitet trezorskih uređaja pomoću komandne linije u prethodnim laboratorijama za obuku. U ovom odjeljku ćemo vidjeti kako jedan BLE uređaj može provjeriti identitet drugog BLE uređaja tako što će zatražiti njegov lanac certifikata i poslati izazov. Svi sigurni dijelovi trezora posjeduju vlastiti certifikat uređaja i certifikat serije. Tvornički i korijenski certifikati su tvrdo kodirani u klijentskoj aplikaciji kako bi se omogućila provjera cijelog lanca certifikata. Pogledajte AN1268 za više detalja o sigurnom identitetu.

  1. Definirajte globalni bafer za pohranjivanje potpisa atestiranja uređaja na sljedeći način:
  2. Postavite konfiguraciju sigurnosnog menadžera da koristi JustWorks uparivanje. Ovo se radi tako da je veza šifrirana. U praksi bi trebalo koristiti MITM zaštitu, ali da bi laboratorija bila jednostavna, koristićemo JustWorks. Promijenite poziv u sl_bt_sm_configure natrag na sljedeće:Također, komentirajte poziv na setup_mode(true) u rukovatelju događaja system_boot.
  3. Otvorite helpers.c iz priloženih materijala i kopirajte sadržaj u app.c. Ove funkcije povratnog poziva izvode zadatke kao što su segmentiranje certifikata tako da se mogu poslati preko BLE-a, provjera lanca certifikata i generiranje/provjera izazova.
  4. Potrebno je odrediti maksimalnu veličinu jedinice prijenosa (MTU) kako bi se certifikati mogli segmentirati i ponovo sastaviti. Definirajte globalnu varijablu da sačuvate MTU kao što je prikazano ovdje:Zatim dodajte obrađivač događaja za GATT MTU razmijenjen događaj kao što je prikazano u nastavku:
  5. Postoje tri karakteristike korisničkih podataka koje se mogu čitati. Ove karakteristike se koriste za prenošenje sertifikata uređaja, sertifikata serije i izazova. Funkcija povratnog poziva koristi se za rukovanje ovim korisničkim zahtjevima za čitanje. Dodajte rukovaoce za pozivanje ove funkcije kao što je prikazano ispod:Povratni poziv koristi MTU od koraka #2 za segmentiranje i slanje certifikata po potrebi. Također upravlja slanjem potpisanog izazova.
  6. Klijent šalje izazov, slučajni broj koji server potpisuje, pisanjem jedne od GATT karakteristika. Iz tog razloga, aplikacija mora imati rukovatelja za događaj zahtjeva za pisanjem kao u nastavku:
  7. Dodajte podršku za siguran identitet files na projekat:
    1. app_se_manager_macro.h, app_se_manager_secure_identity.c i app_se_secure_identity.h iz dostavljenih materijala za projekat. 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.
    2. Uključite app_se_manager_secure_identity.h u app.c.
  8. Uvezite priloženi gatt_configuration-attest.btconf iz priloženih materijala. Ova GATT baza podataka naziva se sigurna atestacija koja uključuje četiri karakteristike koje će se koristiti za provjeru identiteta našeg uređaja. To uključuje certifikat uređaja, certifikat serije, izazov i odgovor.
  9. Klijent, koji se koristi za simulaciju uređaja kao što je gateway, pruža se kao kompletan projekat jer je složeniji za izgradnju. Općenito, rad klijenta je sljedeći:
    1. Skenira uređaje koji reklamiraju uslugu sigurne atestacije i povezuje se s njima.
    2. Otkriva usluge i karakteristike GATT baze podataka.
    3. Čita certifikate uređaja i serije i provjerava lanac certifikata koristeći tvornički i korijenski certifikat koji je pohranio u flash.
    4. Šalje slučajni izazov serveru.
    5. Pokušaji provjere odgovora na izazov.
    6. Zatvara vezu ako bilo koja provjera ne uspije.
  10. Izgradite i flešujte serverski projekat na vaš server WSTK /radioboard.
  11. Uvezite klijentski projekat iz klijentske fascikle u priloženim materijalima. Izgradite i flešujte klijentski projekat na svom klijentu WSTK/radioboard.
  12. Pritisnite reset na klijentskom WSTK i otvorite serijsku konzolu. Klijent počinje skenirati uređaje koji reklamiraju našu sigurnu uslugu identiteta i povezaće se kada ga pronađe.
  13. Klijent će prikazati neke poruke koje pokazuju da je pronašao server sa željenom uslugom i statusne poruke o verifikaciji lanca certifikata.
  14. Ako provjera prođe, klijent će generirati nasumični broj, nazvan izazov, i poslati ga serveru. Server će potpisati izazov sa svojim zaštićenim privatnim ključem uređaja i potpisom natrag klijentu, to se zove izazovni odgovor. Klijent tada koristi javni ključ u prethodno primljenom certifikatu uređaja za provjeru potpisa. Ovo se radi kako bi se potvrdilo da server zaista ima privatni ključ za koji je tvrdio da ga ima. Ako je izazov ispravno potvrđen, prikazuje se poruka u tom smislu; u suprotnom, veza se zatvara i prikazuje se poruka koja objašnjava zašto.
  15. Sada pošaljite nevažeći certifikat da potvrdite da provjera zaista funkcionira. Možete modificirati user_read_request_cb() da ošteti ili podatke certifikata ili odgovor na izazov.

Dodatak A – I/O mogućnosti i metode uparivanja
Dodatak B – Sigurnosni načini i nivoi

Sigurnosni način rada 1 je jedini način koji je podržan za Bluetooth Low Energy u grupi Silicon Labs. Nivoi su sljedeći:

  • Nivo 1 bez sigurnosti
  • Nivo 2 neautorizirano uparivanje s enkripcijom
  • Provjereno uparivanje razine 3 s enkripcijom
  • Provjerene sigurne veze 4. nivoa sa jakom enkripcijom (razmjena ključeva ECDH)

 

Dokumenti / Resursi

silabs 21Q2 siguran BLE uređaj Sigurnosna laboratorija [pdf] Korisnički priručnik
21Q2 bezbjedna BLE laboratorija za sigurnost uređaja, sigurna laboratorija za sigurnost BLE uređaja, Sigurnosna laboratorija

Reference

Ostavite komentar

Vaša email adresa neće biti objavljena. Obavezna polja su označena *