silabs 21Q2 sikker BLE-enhet Security Lab
BLE Security Lab Manual
I denne laboratoriet vil du se hvordan du designer en sikrere BLE-enhet. Vi starter med en overview om hvordan du bruker noen av stabelfunksjonene og gå videre til noen generelle råd om teknikker for sikrere tilkoblinger, og til slutt vil vi se hvordan du bruker enhetssertifikater over BLE for å identifisere en perifer som autentisk.
Komme i gang
Bluetooth-eneampapplikasjonen du skal bygge på er ment å brukes med en bootloader. Hvis du jobber med en helt ny EFR32MG21B, vil den ikke ha en bootloader. Du kan finne en forhåndsbygd bootloader i plattformen\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a-mappen til SDK-en din.
- Start med en soc-tom sampappen. Dette sample app brukes som en mal og er et godt utgangspunkt for enhver BLE-applikasjon.
- Åpne Silicon Labs Project Wizard fra Simplicity Studio File meny -> ny.
- Velg BRD4181C og klikk på 'neste'-knappen.
- Klikk på avmerkingsboksen "Bluetooth (9)" under teknologitype.
- Uthev "Bluetooth – SoC Empty" og klikk deretter på Neste.
- Klikk på "Fullfør"-knappen.
- Nå kan du legge til noen egenskaper for å se hvordan beskyttede og ubeskyttede egenskaper behandles forskjellig.
- Åpne prosjektets slcp file ved å dobbeltklikke den i Project Explorer-vinduet
- Uthev kategorien "PROGRAMVAREKOMPONENTER" og åpne GATT-konfigurasjonsverktøyet som vist nedenfor:
Og bruk importverktøyet vist nedenfor for å importere gatt_configuration.btconf file fra servermappen i det medfølgende materialet.
GATT-databasen har en tilpasset tjeneste, kalt 'Training', med noen data som er beskyttet og noen som ikke er det. Dette lar deg sammenligne hva som skjer når du prøver å få tilgang til en beskyttet egenskap kontra en ubeskyttet. Dette er en rask måte å lage en enhet med veldig grunnleggende sikkerhet.
- Vi bruker serieporten til å skrive ut til konsollen i Simplicity Studio for å spore hva som skjer i applikasjonen. Den enkleste måten å finne disse komponentene på er ved å søke etter dem i dialogboksen SOFTWARE COMPONENTS som vist:
-
- Installer IO Stream USART-komponenten
- Installer IO Stream Retarget STDIO-komponenten
- Installer standard I/O-komponenten
- Installer Log-komponenten
- Åpne Board Control-komponenten og slå på 'Enable Virtual COM UART'
- Høyreklikk på adapteren i 'Debug adapters'-panelet og velg 'Start Console'. Velg kategorien "Serie 1" og plasser markøren i tekstfeltet i konsollvinduet og trykk enter for å vekke konsollen.
-
- Opprett en lokal variabel i sl_bt_on_event(), funnet i app.c, for å lagre tilkoblingshåndtaket. Variabelen må være statisk siden denne funksjonen kalles hver gang en hendelse heves av stabelen og vi vil at verdien skal være vedvarende. Koblingshåndtaket vil bli brukt i en senere
delen av laboratoriet.
- Sett inn noen app_log()-setninger for hendelser for å se når vi er tilkoblet, sikkerhetsmoduser osv
-
- Ta med app_log.h-overskriften file
- sl_bt_evt_connection_opened – skriv ut bindingshåndtaket og lagre tilkoblingshåndtaket. Hvis bindingshåndtaket er 0xFF, eksisterer det ingen binding mellom de tilkoblede enhetene. Endre den eksisterende hendelsesbehandleren slik at den ser omtrent slik ut:
- sl_bt_evt_connection_parameters – sikkerhetsmodus. Dette gjøres slik at du kan se når sikkerhetsmodus endres. Det er en forskjell i nummereringen av sikkerhetsmoduser der sikkerhetsmodus 1, er oppregnet med verdien 0 osv. . Legg til følgende hendelsesbehandler i applikasjonen din:
- sl_bt_evt_connection_closed_id. Denne hendelsesbehandleren er modifisert for å oppdatere tilkoblingshåndtaket. Verdien 0xFF brukes for å indikere at det ikke er noen aktiv forbindelse. App_log()-kommandoen brukes til å skrive ut årsaken til at forbindelsen ble lukket, listen over statuskoder er her. Endre den eksisterende hendelsesbehandleren slik at den ser omtrent slik ut:
- Ta med app_log.h-overskriften file
-
- Bygg og flash prosjektet. På dette tidspunktet vil vi kjøre sampappen for å se hvordan den oppfører seg uten endringer, i tillegg til GATT-databasen.
- Koble til med EFRConnect-mobilappen på følgende måte:
-
- Trykk på "Bluetooth-nettleser"-ikonet.
- Trykk på "Koble til"-ikonet på enheten som heter "Trening".
-
- Les den ubeskyttede egenskapen som følger:
-
- Trykk på "Mer info"-koblingen under den ukjente tjenesten med UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Les den ubeskyttede karakteristikken, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c ved å trykke på "Les"-ikonet. Ingen overraskelser her. Siden karakteristikken ikke er beskyttet på noen måte, vil den bli sendt i klartekst.
-
- Les nå den beskyttede karakteristikken, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Mobiltelefonen din bør be deg om å pare og koble til, meldingen kan variere avhengig av mobiloperativsystemet. Etter at du har godtatt forespørselen om å pare, skal du få en melding på konsollen som følger:
Note: Vedlegg A på slutten av denne håndboken har et sammendrag av I/O-funksjoner og sammenkoblingsmetoder som referanse. Vedlegg B oppsummerer Bluetooth-sikkerhetsmodusene.
Security Manager-konfigurasjon
Sikkerhetsbehandlingen er en del av Bluetooth-stakken som bestemmer hvilke sikkerhetsfunksjoner som brukes. Disse funksjonene inkluderer man-in-the-middle (MITM)-beskyttelse, LE Secure-tilkoblinger (aka ECDH), som krever bekreftelse for binding, etc. Sikkerhetsadministratoren håndterer også I/O-funksjoner som brukes til å bestemme hvilken metode som brukes for sammenkobling /bonding (se vedlegg A for et sammendrag). I denne delen vil du se et enkelt oppsett.
- Sett opp SM med ønsket konfigurasjon. Maskinvaren for denne laboratoriet gjør det enkelt å vise en adgangsnøkkel på konsollen. Adgangsnøkkel er et krav for å aktivere MITM-beskyttelse. Legg til følgende kode til sl_bt_system_boot_id hendelsesbehandler. Dette muliggjør mann-i-midten og informerer den eksterne enheten om at vi har muligheten til å vise en passord, men det er alt.
- For å vise passordet på konsollen, kreves det en hendelsesbehandler som vist nedenfor:
- Still inn bindingsmodus, maks antall bindinger osv. Bruk følgende kode for å komme i gang:
Disse innstillingene kan brukes til å begrense en angripers evne til å binde seg til enheten din. Hvis produktet ditt bare trenger å ha én bruker, kan du begrense de maksimale bindingene til 1. Et godt sted å legge til disse anropene er i sl_bt_system_boot_id hendelsesbehandleren. Vi vil ikke aktivere binding på dette tidspunktet for å få resten av laboratoriet til å gå jevnere, men vi setter en bindingspolicy som kun tillater én binding. For referanse finner du dokumentasjonen for disse APIene her og her .
- Legg til hendelsesbehandlere for sl_bt_evt_sm_bonded_id og sl_bt_evt_sm_bonding_failed_id. Hovedbruken for disse hendelsene er informativ for øyeblikket, men senere i laboratoriet vil du legge til funksjonalitet.
- Bygg og flash til målbrettet. Koble til EFRConnect og les den beskyttede karakteristikken som før. Denne gangen vil du se en adgangsnøkkel vises på konsollen. Skriv inn denne nøkkelen på mobiltelefonen når du blir bedt om det.
- Prøv bindingsbekreftelse. Denne funksjonen gir brukeren muligheten til å kreve at bindingsforespørsler bekreftes. Å gjøre det gir applikasjonen kontroll over hvilke peer-enheter den knytter seg til. En mulighet er å kreve at brukeren trykker på en knapp før bindingen tillates.
- Åpne Bluetooth-innstillingene i mobiltelefonen og fjern bindingen til EFR32-enheten. Mobiltelefonimplementeringer varierer, så dette trinnet er kanskje ikke nødvendig. Hvis du ikke ser "Trening"-enheten i Bluetooth-innstillingene dine, bare fortsett til neste trinn.
- I programvarekomponenter, installer én forekomst av den enkle knappebehandleren.
- Ta med overskriften file sl_simple_button_instances.h i app.c
- Legg til en behandler for sl_bt_evt_sm_bonding_confirm_id-hendelsen. Hovedoppgaven til denne hendelsesbehandleren er å informere brukeren om at en ekstern enhet ber om en ny binding.
- Legg til en tilbakeringingsfunksjon for den enkle knappehåndtereren for å sende et signal til Bluetooth-stakken som indikerer at en knapp er trykket. Dette overstyrer standard tilbakeringing som bare returnerer.
- Legg til en ekstern signalhendelsesbehandler. Denne hendelsen oppstår som svar på mottak av et signal, slik som i forrige trinn. Den eksterne signalhendelsen vil bli brukt til å bekrefte binding.
- Endre anropet til sl_bt_sm_configure for å kreve bindingsbekreftelse som f.eks
- Bygg om og flash.
- Koble til EFRConnect og les den beskyttede karakteristikken som før. Nå vil du se en melding på konsollen som følger:
Trykk PB0 for å bekrefte bindingen. Nå vil konsollen vise passordet som skal legges inn på mobiltelefonen for binding. Skriv inn passordet for å fullføre bindingsprosessen.
Tupp: Bruk standardsaken i hendelsesbehandleren for å skrive ut en melding når stabelen sender en hendelse som ikke blir håndtert. Stakken prøver kanskje å fortelle deg noe viktig.
Utover det grunnleggende
På dette tidspunktet har du tatt fordeltage av sikkerhetsfunksjonene som stabelen vår har å tilby. La oss nå forbedre implementeringen gjennom klok bruk av funksjonene vi har til rådighet. De følgende trinnene er valgfrie og uavhengige av hverandre. Du kan bygge og blinke etter hvert trinn for å se oppførselen eller prøve dem alle sammen.
- Koble fra ved mislykkede bindingsforsøk. Dette er et bra sted å oppdage trusler. Hvis den eksterne enheten ikke støtter kryptering/autentisering eller bare ikke har de riktige nøklene, kan det være en hacker. Så la oss bryte forbindelsen. Prøv å legge til et kall til sl_bt_connection_close() i sl_bt_sm_bonding_failed_id-hendelsen. API er dokumentert her.
Du kan teste denne funksjonen ved å skrive inn feil passord.
- Tillater bare binding til bestemte tider. Dette begrenser tiden en angriper har på å danne en binding og gjør det mulig å bruke funksjonen «kun tillat bundne tilkoblinger». Designeren kan velge hvordan den skal aktivere eller deaktivere bondable modus. For demonstrasjonsformål her, vil vi aktivere en "oppsettmodus" med PB1 og bruke en timer for å deaktivere den etter 30 sekunder.
- Installer en andre forekomst av det enkle knappegrensesnittet. Dette vil muliggjøre bruk av PB1.
- Endre tilbakeringingen for å sende et annet signal til stabelen for å aktivere/deaktivere binding. Resultatet skal se omtrent slik ut:
- Endre den eksterne signalhendelsesbehandleren slik at den håndterer dette nye signalet. Resultatet skal være slik:
- Legg til en hendelsesbehandler for sl_bt_evt_system_soft_timer_id-hendelsen. Dette brukes til å deaktivere oppsettmodus.
- Følgende kode kan brukes for å aktivere bondable modus og tillate alle tilkoblinger eller for å deaktivere bondable mode og bare tillate tilkoblinger fra bondede enheter:
- Legg til følgende kall i hendelsesbehandleren sl_bt_system_boot_id
- Bygg prosjektet og flash det til enheten.
- Prøv å koble til enheten med EFRConnect. Tilkoblingen skal mislykkes.
- Prøv nå å trykke på PB1 før du kobler til EFRConnect. Denne gangen vil tilkoblingen være vellykket. Etter 30 sekunder vil du se en melding på konsollen som indikerer at enheten går ut av oppsettmodus. Dette betyr at bindbar modus nå er deaktivert.
- Øk sikkerheten når du oppretter en forbindelse. Siden sikkerhet er valgfritt, bør vi be om en kryptert tilkobling så snart som mulig i stedet for å stole på GATT-karakteristikker. API er dokumentert her. Et godt sted å kalle dette API er i sl_bt_evt_connection_opened_id-hendelsen. Tilkoblingshåndtaket er tilgjengelig i tilkoblingsvariabelen.
Sikker identitet
Nå som vi har en sikrere Bluetooth-enhet, kan vi forbedre autentiseringstrinnet. Du har allerede sett hvordan du bekrefter den sikre identiteten til hvelvenheter med kommandolinjen i tidligere opplæringslaboratorier. I denne delen vil vi se hvordan en BLE-enhet kan bekrefte identiteten til en annen BLE-enhet ved å be om sertifikatkjeden og sende en utfordring. Alle sikre hvelvdeler har sitt eget enhetssertifikat og batch-sertifikat. Fabrikk- og rotsertifikatene er hardkodet inn i klientapplikasjonen for å muliggjøre verifisering av hele sertifikatkjeden. Se AN1268 for mer informasjon om sikker identitet.
- Definer en global buffer for lagring av enhetsatestasjonssignaturen som nedenfor:
- Angi sikkerhetsadministratorkonfigurasjonen til å bruke JustWorks-paring. Dette gjøres slik at forbindelsen er kryptert. I praksis bør MITM-beskyttelse brukes, men for å holde laboratoriet enkelt, vil vi bruke JustWorks. Endre kallet til sl_bt_sm_configure tilbake til følgende:
Kommenter også kallet til setup_mode(true) i system_boot-hendelsesbehandleren.
- Åpne helpers.c fra det medfølgende materialet og kopier innholdet til app.c. Disse tilbakeringingsfunksjonene utfører oppgaver som å segmentere sertifikatene slik at de kan sendes over BLE, verifisere sertifikatkjeden og generere/verifisere utfordringen.
- Det er nødvendig å bestemme størrelsen på maksimal overføringsenhet (MTU), slik at sertifikater kan segmenteres og settes sammen igjen. Definer en global variabel for å lagre MTU som vist her:
Legg deretter til en hendelsesbehandler for den GATT MTU-utvekslede hendelsen som vist nedenfor:
- Det er tre brukerdatakarakteristikker som kan leses. Disse egenskapene brukes til å kommunisere enhetssertifikatet, batch-sertifikatet og utfordringen. En tilbakeringingsfunksjon brukes til å håndtere disse brukerleseforespørslene. Legg til en behandler for å kalle denne funksjonen som vist nedenfor:
Tilbakeringingen bruker MTU fra trinn #2 for å segmentere og sende sertifikatene etter behov. Den håndterer også sending av den signerte utfordringen.
- Klienten sender en utfordring, et tilfeldig tall som skal signeres av serveren, ved å skrive en av GATT-karakteristikkene. Av denne grunn må applikasjonen ha en behandler for brukerens skriveforespørselshendelse som nedenfor:
- Legg til sikker identitetsstøtte files til prosjektet:
- app_se_manager_macro.h, app_se_manager_secure_identity.c og app_se_secure_identity.h fra det leverte materialet til prosjektet. Disse files inneholder noen hjelpefunksjoner for oppgaver som å hente størrelsen på sertifikatet, hente enhetens offentlige nøkkel og signere en utfordring.
- Inkluder app_se_manager_secure_identity.h i app.c.
- Importer den medfølgende gatt_configuration-attest.btconf fra det medfølgende materialet. Denne GATT-databasen kalt sikker attestasjon som inkluderer fire egenskaper som vil bli brukt til å bekrefte identiteten til enheten vår. Disse inkluderer enhetssertifikatet, batch-sertifikatet, utfordringen og svar.
- Klienten, som brukes til å simulere en enhet som gateway, leveres som et komplett prosjekt siden det er mer komplisert å bygge. Generelt er driften av klienten som følger:
- Skanner etter enheter som annonserer for den sikre attestasjonstjenesten og kobler til dem.
- Oppdager GATT-databasetjenester og egenskaper.
- Leser enheten og batch-sertifikatene og verifiserer sertifikatkjeden ved hjelp av fabrikk- og rotsertifikatet som den har lagret i flash.
- Sender en tilfeldig utfordring til serveren.
- Forsøk på å verifisere svaret på utfordringen.
- Lukker tilkoblingen hvis en av verifiseringene mislykkes.
- Bygg og flash serverprosjektet til serveren WSTK /radioboard.
- Importer klientprosjektet fra klientmappen i det medfølgende materialet. Bygg og flash klientprosjektet til klientens WSTK/radioboard.
- Trykk reset på klient-WSTK og åpne seriekonsollen. Klienten begynner å skanne etter enheter som annonserer for vår sikre identitetstjeneste og kobler seg til når den finner en.
- Klienten vil vise noen meldinger for å indikere at den har funnet serveren med ønsket tjeneste og statusmeldinger om verifisering av sertifikatkjeden.
- Hvis verifiseringen går gjennom, vil klienten generere et tilfeldig nummer, kalt en utfordring, og sende det til serveren. Serveren vil signere utfordringen med sin sikre private enhetsnøkkel og signaturen tilbake til klienten, dette kalles et utfordringssvar. Klienten bruker deretter den offentlige nøkkelen i det tidligere mottatte enhetssertifikatet for å bekrefte signaturen. Dette gjøres for å bekrefte at serveren virkelig har den private nøkkelen den hevdet å ha. Hvis utfordringen er verifisert riktig, vises en melding om det; ellers lukkes tilkoblingen, og det vises en melding som forklarer hvorfor.
- Send nå et ugyldig sertifikat for å bekrefte at verifiseringen virkelig fungerer. Du kan endre user_read_request_cb() for å ødelegge enten sertifikatdataene eller utfordringssvaret.
Vedlegg A – I/O-funksjoner og sammenkoblingsmetoder 
Vedlegg B – Sikkerhetsmoduser og nivåer
Sikkerhetsmodus 1 er den eneste modusen som støttes for Bluetooth Low Energy i Silicon Labs' stabel. Nivåene er som følger:
- Nivå 1 ingen sikkerhet
- Nivå 2 uautentisert sammenkobling med kryptering
- Nivå 3 autentisert sammenkobling med kryptering
- Nivå 4 autentiserte sikre tilkoblinger med sterk kryptering (ECDH-nøkkelutveksling)
Dokumenter / Ressurser
![]() |
silabs 21Q2 sikker BLE-enhet Security Lab [pdfBrukerhåndbok 21Q2 sikker BLE-enhet Security Lab, sikker BLE-enhet Security Lab, Security Lab |