silabs 21Q2 feilich BLE apparaat Security Lab
BLE Security Lab Manual
Yn dit laboratoarium sille jo sjen hoe't jo in feiliger BLE-apparaat kinne ûntwerpe. Wy sille begjinne mei in oerview fan hoe't jo guon fan 'e stackfunksjes brûke en trochgean nei wat algemien advys oer techniken foar feiliger ferbiningen en as lêste sille wy sjen hoe't jo apparaatsertifikaten kinne brûke oer BLE om in perifeare apparaat as autentyk te identifisearjen.
Getting Started
De Bluetooth sampDe applikaasje wêrop jo sille bouwe is bedoeld om te brûken mei in bootloader. As jo wurkje mei in gloednije EFR32MG21B, sil it gjin bootloader hawwe. Jo kinne in foarboude bootloader fine yn it platfoarm\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a map fan jo SDK.
- Begjinne mei in soc-lege sample app. Dizze sample app wurdt brûkt as sjabloan en makket in goed begjinpunt foar eltse BLE applikaasje.
- Iepenje de Silicon Labs Project Wizard fan 'e Simplicity Studio File menu -> nij.
- Selektearje de BRD4181C en klikje op de knop 'folgjende'.
- Klikje op it karfakje 'Bluetooth (9)' ûnder technologytype.
- Markearje 'Bluetooth - SoC Empty' en klikje dan op folgjende.
- Klikje op de knop 'Finish'.
- No kinne jo wat skaaimerken tafoegje om te sjen hoe't beskerme en net-beskerme eigenskippen oars wurde behannele.
- Iepenje de slcp fan it projekt file troch te dûbelklikken yn it Project Explorer-finster
- Markearje it ljepblêd 'SOFTWARE COMPONENTS' en iepenje it GATT-konfiguraasjeark lykas hjirûnder werjûn:
En brûk it hjirûnder werjûn ymportark om de gatt_configuration.btconf te ymportearjen file út de tsjinner map yn de levere materialen.
De GATT-database hat in oanpaste tsjinst, neamd 'Training', mei guon gegevens dy't beskerme binne en guon dy't net. Hjirmei kinne jo fergelykje wat der bart as jo besykje tagong te krijen ta in beskerme karakteristyk tsjin in net beskerme. Dit is in rappe manier om in apparaat te meitsjen mei heul basale feiligens.
- Wy sille de seriële poarte brûke om te printsjen nei de konsole yn Simplicity Studio om te folgjen wat der bart yn 'e applikaasje. De maklikste manier om dizze komponinten te finen is troch se te sykjen yn it dialoochfinster SOFTWAREKOMPONENTEN lykas werjûn:
-
- Ynstallearje de IO Stream USART-komponint
- Ynstallearje de IO Stream Retarget STDIO-komponint
- Ynstallearje de Standert I / O komponint
- Ynstallearje de Log komponint
- Iepenje de komponint Board Control en skeakelje de 'Enable Virtual COM UART' yn
- Rjochts-klikke op de adapter yn it paniel 'Debug adapters' en selektearje 'Konsole starte'. Selektearje ljepper 'Serial 1' en pleats de rinnerke yn it tekstynfierfjild fan it konsolefinster en druk op enter om de konsole wekker te meitsjen.
-
- Meitsje in lokale fariabele yn sl_bt_on_event (), fûn yn app.c, foar it bewarjen fan de ferbining handgreep. De fariabele moat statysk wêze, om't dizze funksje elke kear oanroppen wurdt as in evenemint troch de stapel wurdt ferhege en wy wolle dat de wearde persistint is. De ferbining handgreep sil brûkt wurde yn in letter
diel fan it laboratoarium.
- Foegje wat app_log () útspraken yn foar eveneminten om te sjen wannear't wy binne ferbûn, befeiligingsmodi, ensfh
-
- Omfetsje de koptekst app_log.h file
- sl_bt_evt_connection_opened - print bond handgreep en bewarje de ferbining handgreep. As de bondelhandgreep 0xFF is, bestiet gjin bân tusken de ferbûne apparaten. Feroarje de besteande barrenshanneler sadat it der sa útsjocht:
- sl_bt_evt_connection_parameters - feiligens modus. Dit wurdt dien sadat jo sjen kinne wannear't de befeiligingsmodus feroaret. Der is in ferskil yn de nûmering fan feiligens modus dêr't feiligens modus 1, wurdt opnomd mei de wearde 0, etc. Foegje de folgjende event handler ta oan jo applikaasje:
- sl_bt_evt_connection_closed_id. Dizze evenemintehanneler is wizige om de ferbiningshandtak te aktualisearjen. De wearde 0xFF wurdt brûkt om oan te jaan dat der gjin aktive ferbining is. It kommando app_log () wurdt brûkt om de reden foar it sluten fan de ferbining út te printsjen, de list mei statuskoades is hjir. Feroarje de besteande barrenshanneler sadat it der sa útsjocht:
- Omfetsje de koptekst app_log.h file
-
- Bou en flash it projekt. Op dit punt, wy sille rinne de sample app om te sjen hoe't it gedraacht sûnder feroarings, neist de GATT-database.
- Ferbine mei de EFRConnect mobile app as folget:
-
- Tik op it ikoan 'Bluetooth Browser'.
- Tik op it ikoan 'Ferbine' op it apparaat mei de namme 'Training'.
-
- Lês de ûnbeskerme karakteristyk as folget:
-
- Tik op de keppeling 'Mear ynfo' ûnder de ûnbekende tsjinst mei UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Lês it net beskerme karakteristyk, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c troch op it 'Lês' ikoan te tikjen. Gjin ferrassingen hjir. Om't it karakteristyk op gjin inkelde manier beskerme is, sil it yn platte tekst ferstjoerd wurde.
-
- Lês no de beskerme karakteristyk, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Jo mobile tillefoan moat jo freegje om te koppelen en te ferbinen, it berjocht kin ferskille ôfhinklik fan jo mobile OS. Neidat jo it fersyk om te paren hawwe akseptearre, moatte jo in berjocht op 'e konsole as folgjend:
Noat: Taheakke A oan 'e ein fan dizze hânlieding hat in gearfetting fan I / O mooglikheden en pairing metoaden foar referinsje. Bylage B vat de Bluetooth-befeiligingsmodi gear.
Security Manager Konfiguraasje
De feiligensbehearder is diel fan 'e Bluetooth-stapel dy't bepaalt hokker feiligensfunksjes wurde brûkt. Dizze funksjes omfetsje man-in-the-middle (MITM) beskerming, LE Secure ferbiningen (aka ECDH), befêstiging nedich foar bonding, ensfh. / bonding (sjoch taheakke A foar in gearfetting). Yn dizze seksje sille jo in ienfâldige opset sjen.
- Setup SM mei winske konfiguraasje. De hardware foar dit laboratoarium makket it maklik om in wachtwurd te werjaan op 'e konsole. Passkey-yngong is in fereaske om MITM-beskerming yn te skeakeljen. Foegje de folgjende koade ta oan jo sl_bt_system_boot_id event handler. Dit makket man-in-the-midden mooglik en ynformearret it apparaat op ôfstân dat wy de mooglikheid hawwe om in wachtwurd te werjaan, mar dat is alles.
- Om de wachtwurdkaai op 'e konsole te werjaan, is in evenemintehanneler nedich lykas hjirûnder werjûn:
- Stel de bonding modus, max oantal bondings, ensfh Brûk de folgjende koade om te begjinnen:
Dizze ynstellingen kinne brûkt wurde om it fermogen fan in oanfaller te beheinen om te ferbinen mei jo apparaat. As jo produkt mar ien brûker moat hawwe, dan kinne jo de maksimale obligaasjes beheine ta 1. In goed plak om dizze oproppen ta te foegjen is yn 'e sl_bt_system_boot_id event handler. Wy sille op dit stuit gjin bonding ynskeakelje om de rest fan it laboratoarium soepeler te meitsjen, mar wy sette in bondingbelied yn om mar ien bonding ta te stean. Foar referinsje is de dokumintaasje foar dizze API's hjir en hjir te finen.
- Foegje evenemintehannelers ta foar sl_bt_evt_sm_bonded_id en sl_bt_evt_sm_bonding_failed_id. It haadgebrûk foar dizze eveneminten is op it stuit ynformatyf, mar letter yn it laboratoarium sille jo funksjonaliteit tafoegje.
- Bou en flits nei it doelboerd. Ferbine mei EFRConnect en lês de beskerme karakteristyk lykas earder. Dizze kear sille jo in wachtwurd sjen werjûn op 'e konsole. Fier dit wachtwurd yn op jo mobile tillefoan as jo frege wurde.
- Besykje bonding befêstiging. Dizze funksje jout de brûker de mooglikheid om te fereaskje dat bonding fersiken wurde befêstige. Troch dit te dwaan jout de applikaasje kontrôle oer hokker peer-apparaten it bûnt mei. Ien mooglikheid is om de brûker te fereaskje om op in knop te drukken foardat de bonding tastien is.
- Iepenje de Bluetooth-ynstellingen yn jo mobile tillefoan en ferwiderje de bân nei it EFR32-apparaat. Mobile telefoan ymplemintaasjes fariearje sadat dizze stap kin net nedich wêze. As jo it apparaat 'Training' net sjogge yn jo Bluetooth-ynstellingen, gean dan gewoan troch nei de folgjende stap.
- Yn software komponinten, ynstallearje ien eksimplaar fan de ienfâldige knop handler.
- Meitsje de koptekst yn file sl_simple_button_instances.h yn app.c
- Foegje in handler ta foar it evenemint sl_bt_evt_sm_bonding_confirm_id. De wichtichste taak fan dit barren handler is om de brûker te ynformearjen dat in apparaat op ôfstân in nije bonding freget.
- Foegje in werombelfunksje ta foar de ienfâldige knopbehandler om in sinjaal te stjoeren nei de Bluetooth-stapel dy't oanjout dat in knop is yndrukt. Dit oerskriuwt de standert callback dy't gewoan weromkomt.
- Foegje in eksterne sinjaal evenemint handler. Dit evenemint wurdt opheft yn reaksje op it ûntfangen fan in sinjaal, lykas yn 'e foarige stap. It eksterne sinjaal-evenemint sil brûkt wurde om bonding te befêstigjen.
- Feroarje de oprop nei sl_bt_sm_configure om bonding befêstiging te fereaskje lykas
- Werombou en flash.
- Ferbine mei EFRConnect en lês de beskerme karakteristyk lykas earder. No sille jo in berjocht sjen op 'e konsole as folget:
Druk op PB0 om de bonding te befêstigjen. No sil de konsole de passkey werjaan dy't moat wurde ynfierd op 'e mobile tillefoan foar bonding. Fier de wachtwurd yn om it bondingproses te foltôgjen.
Tip: Brûk de standert gefal yn 'e evenemint handler foar in print út in berjocht doe't de steapel stjoert in evenemint dat wurdt net behannele. De stapel kin besykje jo wat wichtich te fertellen.
Beyond the Basics
Op dit punt hawwe jo foardiel nommentage fan 'e feiligensfunksjes dy't ús stapel te bieden hat. Litte wy no de ymplemintaasje ferbetterje troch ferstannich gebrûk fan funksjes ta ús beskikking. De folgjende stappen binne opsjoneel en ûnôfhinklik fan elkoar, jo kinne nei elk bouwe en flitsje om it gedrach te sjen of se allegear tegearre te besykjen.
- Ferbine op mislearre bondpogingen. Dit is in goed plak om bedrigingen te detektearjen. As it apparaat op ôfstân gjin fersifering / autentikaasje stipet of gewoan net de juste kaaien hat, kin it in hacker wêze. Dus, lit ús de ferbining brekke. Besykje in oprop ta sl_bt_connection_close () yn it evenemint sl_bt_sm_bonding_failed_id. De API is hjir dokumintearre.
Jo kinne dizze funksje testen troch it ferkearde wachtwurd yn te fieren.
- Allinich tastien bonding op bepaalde tiden. Dit beheint de tiid dy't in oanfaller hat om in bân te foarmjen en makket it mooglik om de funksje 'allinich ferbûne ferbiningen tastean' te brûken. De ûntwerper kin kieze hoe't de bondable modus yn- of útskeakelje kin. Foar demonstraasjedoelen hjir sille wy in 'ynstellingsmodus' ynskeakelje mei PB1 en in timer brûke om it nei 30 sekonden út te skeakeljen.
- Ynstallearje in twadde eksimplaar fan 'e ienfâldige knopynterface. Dit sil it gebrûk fan PB1 ynskeakelje.
- Feroarje de weromrop om in oar sinjaal nei de stapel te stjoeren om bonding yn te skeakeljen / út te skeakeljen. It resultaat moat der sa útsjen:
- Feroarje de eksterne sinjaal evenemint handler, sadat it omgiet dit nije sinjaal. It resultaat soe sa wêze moatte:
- Foegje in evenemintehanneler ta foar it evenemint sl_bt_evt_system_soft_timer_id. Dit sil brûkt wurde om de ynstellingsmodus út te skeakeljen.
- De folgjende koade kin brûkt wurde om bondele modus yn te skeakeljen en alle ferbiningen te tastean of om bondele modus út te skeakeljen en allinich ferbiningen fan bondele apparaten ta te stean:
- Foegje de folgjende oprop ta yn 'e sl_bt_system_boot_id event handler
- Bou it projekt en flash it nei it apparaat.
- Besykje te ferbinen mei it apparaat mei EFRConnect. De ferbining moat mislearje.
- Besykje no op PB1 te drukken foardat jo ferbine mei EFRConnect. Dizze kear sil de ferbining suksesfol wêze. Nei 30 sekonden sille jo in berjocht sjen op 'e konsole dat oanjout dat it apparaat de opsetmodus útgiet. Dit betsjut dat bondable modus is no útskeakele.
- Fergrutsje feiligens by it foarmjen fan in ferbining. Sûnt feiligens is opsjoneel, wy moatte freegje in fersifere ferbining sa gau as mooglik ynstee in berop dwaan op GATT skaaimerken. De API is hjir dokumintearre. In goed plak in belje dizze API is yn de sl_bt_evt_connection_opened_id evenemint. De ferbining handgreep is beskikber yn de ferbining fariabele.
Feilige identiteit
No't wy in feiliger Bluetooth-apparaat hawwe, litte wy de autentikaasjestap ferbetterje. Jo hawwe al sjoen hoe't jo de feilige identiteit fan gewelfapparaten kinne ferifiearje mei de kommandorigel yn eardere trainingslaboratoaren. Yn dizze seksje sille wy sjen hoe't ien BLE-apparaat de identiteit fan in oar BLE-apparaat kin ferifiearje troch syn sertifikaatketen oan te freegjen en in útdaging te stjoeren. Alle feilige ferwulfdielen hâlde har eigen apparaatsertifikaat en batchsertifikaat. De fabryk- en root-sertifikaten binne hurd kodearre yn 'e kliïntapplikaasje om ferifikaasje fan' e heule sertifikaatketen yn te skeakeljen. Ferwize nei AN1268 foar mear details oer feilige identiteit.
- Definiearje in globale buffer foar it bewarjen fan de hantekening fan it apparaat attest as hjirûnder:
- Stel de konfiguraasje fan feiligensbehearder yn om JustWorks-paring te brûken. Dit wurdt dien sadat de ferbining is fersifere. Yn 'e praktyk moat MITM-beskerming brûkt wurde, mar om it laboratoarium ienfâldich te hâlden, sille wy JustWorks brûke. Feroarje de oprop nei sl_bt_sm_configure werom nei it folgjende:
Kommentearje ek de oprop oan setup_mode (wier) yn 'e system_boot-eveneminthanneler.
- Iepenje helpers.c út de levere materialen en kopiearje de ynhâld yn app.c. Dizze callback-funksjes útfiere taken lykas it segmentearjen fan de sertifikaten sadat se oer BLE stjoerd wurde kinne, de sertifikaatketen ferifiearje en de útdaging generearje / ferifiearje.
- It is needsaaklik om de maksimale grutte fan 'e oerdracht-ienheid (MTU) te bepalen, sadat sertifikaten kinne wurde segmentearre en opnij gearstald. Definiearje in globale fariabele om de MTU te bewarjen lykas hjir te sjen:
Foegje dan in evenemintehanneler ta foar it GATT MTU útwiksele evenemint lykas hjirûnder werjûn:
- D'r binne trije skaaimerken fan brûkersgegevens dy't kinne wurde lêzen. Dizze skaaimerken wurde brûkt om it apparaatsertifikaat, batchsertifikaat en de útdaging te kommunisearjen. In werombelfunksje wurdt brûkt om dizze lêsfersiken fan brûkers te behanneljen. Foegje in handler ta om dizze funksje te neamen lykas hjirûnder werjûn:
De weromrop brûkt de MTU fan stap #2 om de sertifikaten te segmentearjen en te ferstjoeren as nedich. It behannelet ek it ferstjoeren fan de ûndertekene útdaging.
- De kliïnt stjoert in útdaging, in willekeurich getal wurde tekene troch de tsjinner, troch it skriuwen fan ien fan de GATT skaaimerken. Om dizze reden moat de applikaasje in handler hawwe foar it skriuwfersyk fan brûker as hjirûnder:
- Foegje feilige identiteitsstipe ta files oan it projekt:
- app_se_manager_macro.h, app_se_manager_secure_identity.c en app_se_secure_identity.h fan 'e levere materialen nei it projekt. Dizze files befetsje wat helpfunksjes foar taken lykas it krijen fan de grutte fan it sertifikaat, it krijen fan de iepenbiere kaai fan it apparaat en it ûndertekenjen fan in útdaging.
- Omfetsje app_se_manager_secure_identity.h yn app.c.
- Ymportearje de foarsjoen gatt_configuration-attest.btconf út de levere materialen. Dizze GATT-database neamd feilige attestaasje dy't fjouwer skaaimerken omfettet dy't sille wurde brûkt om de identiteit fan ús apparaat te ferifiearjen. Dizze omfetsje it apparaatsertifikaat, batchsertifikaat, útdaging en antwurd.
- De klant, dy't wurdt brûkt om in apparaat lykas gateway te simulearjen, wurdt levere as in folslein projekt, om't it komplekser is om te bouwen. Yn 't algemien is de wurking fan' e klant as folget:
- Scant foar apparaten dy't advertearje foar de feilige attestaasjetsjinst en ferbynt har.
- Untdekt de GATT databank tsjinsten en skaaimerken.
- Lês it apparaat- en batch-sertifikaten en ferifiearret de sertifikaatketen mei it fabryk- en root-sertifikaat dat it yn flash hat opslein.
- Stjoert in willekeurige útdaging nei de tsjinner.
- Besiket it antwurd op 'e útdaging te ferifiearjen.
- Slút de ferbining as beide ferifikaasje mislearret.
- Bou en flash it serverprojekt nei jo server WSTK / radioboard.
- Ymportearje it kliïntprojekt út 'e kliïntmap yn 'e levere materialen. Bou en flash it kliïntprojekt nei jo kliïnt WSTK / radioboard.
- Druk op reset op 'e client WSTK en iepenje de seriële konsole. De klant begjint te scannen foar apparaten dy't advertearje foar ús feilige identiteitstsjinst en sil ferbine as hy ien fynt.
- De kliïnt sil wat berjochten werjaan om oan te jaan dat it de tsjinner fûn hat mei de winske tsjinst en statusberjochten oer de ferifikaasje fan 'e sertifikaatketen.
- As de ferifikaasje trochgiet, sil de kliïnt in willekeurich nûmer generearje, in útdaging neamd, en stjoere it nei de tsjinner. De tsjinner sil de útdaging ûndertekenje mei syn feilich hâlden privee apparaatkaai en de hantekening werom nei de kliïnt, dit wurdt in útdagingsantwurd neamd. De kliïnt brûkt dan de iepenbiere kaai yn it earder ûntfongen apparaatsertifikaat om de hantekening te ferifiearjen. Dit wurdt dien om te befêstigjen dat de tsjinner echt de privee kaai hat dy't it bewearde te hawwen. As de útdaging goed ferifiearre is, wurdt in berjocht dêrfoar werjûn; oars, de ferbining is sluten, en in berjocht wurdt werjûn útlizze wêrom.
- Stjoer no in ûnjildich sertifikaat om te befêstigjen dat de ferifikaasje echt wurket. Jo kinne user_read_request_cb () wizigje om de sertifikaatgegevens of de útdagingsantwurd te beskeadigjen.
Taheakke A - I / O mooglikheden en Pairing Metoaden 
Taheakke B - Feiligens Modes en Levels
Feiligensmodus 1 is de ienige modus stipe foar Bluetooth Low Energy yn 'e Silicon Labs' stack. De nivo's binne as folget:
- Niva 1 gjin feiligens
- Nivo 2 net authentisearre paring mei fersifering
- Nivo 3 autentike paring mei fersifering
- Nivo 4 autentike feilige ferbiningen mei sterke fersifering (ECDH-kaaiútwikseling)
Dokuminten / Resources
![]() |
silabs 21Q2 feilich BLE apparaat Security Lab [pdf] Brûkershânlieding 21Q2 feilich BLE apparaat Security Lab, feilich BLE apparaat Security Lab, Security Lab |