silabs 21Q2 veilige BLE toestel Sekuriteit Lab

BLE Sekuriteit Lab Handleiding

In hierdie laboratorium sal jy sien hoe om 'n veiliger BLE-toestel te ontwerp. Ons begin met 'n oorview van hoe om sommige van die stapelkenmerke te gebruik en gaan aan na 'n paar algemene advies oor tegnieke vir veiliger verbindings en uiteindelik sal ons sien hoe om toestelsertifikate oor BLE te gebruik om 'n randapparaat as outentiek te identifiseer.

Aan die gang

Die Bluetooth sampDie toepassing waarop u gaan bou, is bedoel om saam met 'n selflaaiprogram gebruik te word. As jy met 'n splinternuwe EFR32MG21B werk, sal dit nie 'n selflaaiprogram hê nie. Jy kan 'n voorafgeboude selflaaiprogram vind in die platform\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a gids van jou SDK.

  1. Begin met 'n soc-leë sampdie app. Hierdie sample app word as 'n sjabloon gebruik en maak 'n goeie beginpunt vir enige BLE-toepassing.
    1. Maak die Silicon Labs Project Wizard oop vanaf die Simplicity Studio File spyskaart -> nuut.
    2. Kies die BRD4181C en klik op die 'volgende'-knoppie.
    3. Klik die 'Bluetooth (9)'-merkblokkie onder tegnologietipe.
    4. Merk 'Bluetooth – SoC Empty' en klik dan op volgende.
    5. Klik op die 'Voltooi'-knoppie.
  2. Nou kan jy 'n paar kenmerke byvoeg om te sien hoe beskermde en onbeskermde eienskappe verskillend behandel word.
    1. Maak die projek se slcp oop file deur dit te dubbelklik in die Project Explorer-venster
    2. Merk die 'SAGTEWAAREKOMPONENTE'-oortjie en maak die GATT-konfigurasienutsding oop soos hieronder getoon: En gebruik die invoerinstrument wat hieronder gewys word om die gatt_configuration.btconf in te voer file vanaf die bedienergids in die verskafde materiaal.Die GATT-databasis het 'n pasgemaakte diens, genaamd 'Opleiding', met sommige data wat beskerm is en sommige wat nie. Dit laat jou toe om te vergelyk wat gebeur wanneer jy probeer om toegang te verkry tot 'n beskermde eienskap teenoor 'n onbeskermde een. Dit is 'n vinnige manier om 'n toestel met baie basiese sekuriteit te maak.
  3. Ons sal die reekspoort gebruik om na die konsole in Simplicity Studio te druk om op te spoor wat in die toepassing aangaan. Die maklikste manier om hierdie komponente te vind, is deur daarna te soek in die SAGTEWAREKOMPONENTE-dialoog soos aangedui:
      1. Installeer die IO Stream USART-komponent
      2. Installeer die IO Stream Retarget STDIO-komponent
      3. Installeer die Standaard I/O-komponent
      4. Installeer die Log-komponent
      5. Maak die Board Control-komponent oop en skakel die 'Enable Virtual COM UART' aan
      6. Regskliek op die adapter in die 'Ontfoutadapters'-paneel en kies 'Begin konsole'. Kies 'Serial 1'-oortjie en plaas die wyser in die teksinvoerveld van die konsolevenster en druk enter om die konsole wakker te maak.
  4. Skep 'n plaaslike veranderlike in sl_bt_on_event(), gevind in app.c, om die verbindingshandvatsel te stoor. Die veranderlike moet staties wees aangesien hierdie funksie geroep word elke keer as 'n gebeurtenis deur die stapel verhoog word en ons wil hê dat die waarde aanhoudend moet wees. Die verbindingshandvatsel sal later gebruik wordafdeling van die laboratorium.
  5. Voeg 'n paar app_log()-stellings in vir gebeurtenisse om te sien wanneer ons gekoppel is, sekuriteitmodusse, ens
      1. Sluit die app_log.h-kopskrif in file
      2. sl_bt_evt_connection_opened – druk verbandhandvatsel en stoor die verbindinghandvatsel. As die verbandhandvatsel 0xFF is, bestaan ​​geen band tussen die gekoppelde toestelle nie. Verander die bestaande gebeurtenis hanteerder sodat dit so iets lyk:
      3. sl_bt_evt_connection_parameters – sekuriteitsmodus. Dit word gedoen sodat jy kan sien wanneer die sekuriteitsmodus verander. Daar is 'n verskil in die nommering van sekuriteitsmodusse waar sekuriteitsmodus 1, opgesom word met die waarde 0, ens. Voeg die volgende gebeurtenis hanteerder by jou aansoek:
      4. sl_bt_evt_connection_closed_id. Hierdie gebeurtenishanteerder is gewysig om die verbindingshandvatsel op te dateer. Die waarde 0xFF word gebruik om aan te dui dat daar geen aktiewe verbinding is nie. Die app_log()-opdrag word gebruik om die rede uit te druk waarom die verbinding gesluit is, die lys van statuskodes is hier. Verander die bestaande gebeurtenis hanteerder sodat dit so iets lyk:
  6. Bou en flits die projek. Op hierdie stadium sal ons die sample app om te sien hoe dit optree sonder enige veranderinge, behalwe die GATT-databasis.
  7. Koppel soos volg met die EFRConnect-selfoontoepassing:
      1. Tik op die 'Bluetooth-blaaier'-ikoon.
      2. Tik die 'Verbind'-ikoon op die toestel genaamd 'Opleiding'.
  8. Lees die onbeskermde eienskap soos volg:
      1. Tik die 'Meer inligting'-skakel onder die onbekende diens met UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
      2. Lees die onbeskermde eienskap, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c deur die 'Lees'-ikoon te tik. Geen verrassings hier nie. Aangesien die eienskap op geen manier beskerm word nie, sal dit in gewone teks gestuur word.
  9. Lees nou die beskermde eienskap, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Jou selfoon behoort jou te vra om saam te koppel en te koppel, die boodskap kan verskil afhangende van jou selfoonbedryfstelsel. Nadat jy die versoek om saam te koppel aanvaar het, moet jy 'n boodskap op die konsole soos volg: Let wel: Bylaag A aan die einde van hierdie handleiding het 'n opsomming van I/O-vermoëns en paringmetodes vir verwysing. Bylaag B som die Bluetooth-sekuriteitsmodusse op.

Sekuriteitsbestuurder-konfigurasie

Die sekuriteitsbestuurder is deel van die Bluetooth-stapel wat bepaal watter sekuriteitskenmerke gebruik word. Hierdie kenmerke sluit in mens-in-die-middel (MITM)-beskerming, LE Secure-verbindings (ook bekend as ECDH), wat bevestiging vir binding vereis, ens. Die sekuriteitsbestuurder hanteer ook I/O-vermoëns wat gebruik word om te bepaal watter metode vir paring gebruik word /binding (sien Bylaag A vir 'n opsomming). In hierdie afdeling sal jy 'n eenvoudige opstelling sien.

  1. Stel SM op met die gewenste konfigurasie. Die hardeware vir hierdie laboratorium maak dit maklik om 'n wagwoordsleutel op die konsole te vertoon. Wagsleutelinskrywing is 'n vereiste om MITM-beskerming te aktiveer. Voeg die volgende kode by jou sl_bt_system_boot_id gebeurtenis hanteerder. Dit stel man-in-die-middel in staat en lig die afgeleë toestel in dat ons die vermoë het om 'n wagwoordsleutel te vertoon, maar dit is al.
  2. Om die wagwoordsleutel op die konsole te vertoon, word 'n gebeurtenishanteerder vereis soos hieronder getoon:
  3. Stel die bindingsmodus, maksimum aantal bindings, ens. Gebruik die volgende kode om te begin:Hierdie instellings kan gebruik word om 'n aanvaller se vermoë om met jou toestel te bind, te beperk. As jou produk net een gebruiker hoef te hê, kan jy die maksimum verbande tot 1 beperk. 'n Goeie plek om hierdie oproepe by te voeg, is in die sl_bt_system_boot_id gebeurtenis hanteerder. Ons sal nie nou binding aktiveer om die res van die laboratorium gladder te laat verloop nie, maar ons stel 'n bindingsbeleid op om slegs een verband toe te laat. Vir verwysing word die dokumentasie vir hierdie API's hier en hier gevind.
  4. Voeg gebeurtenishanteerders by vir sl_bt_evt_sm_bonded_id en sl_bt_evt_sm_bonding_failed_id. Die hoofgebruik vir hierdie gebeurtenisse is tans insiggewend, maar later in die laboratorium sal jy funksionaliteit byvoeg.
  5. Bou en flits na die teikenbord. Koppel aan EFRConnect en lees die beskermde eienskap soos voorheen. Hierdie keer sal jy 'n wagwoordsleutel op die konsole sien. Voer hierdie wagwoordsleutel op jou selfoon in wanneer jy gevra word.
  6. Probeer bindingsbevestiging. Hierdie kenmerk gee die gebruiker die vermoë om te vereis dat bindingsversoeke bevestig word. Deur dit te doen, gee die toepassing beheer oor watter eweknie-toestelle dit verbind. Een moontlikheid is om van die gebruiker te vereis om 'n knoppie te druk voordat die verband toegelaat word.
    1. Maak die Bluetooth-instellings in jou selfoon oop en verwyder die verband aan die EFR32-toestel. Selfoonimplementerings verskil so hierdie stap is dalk nie nodig nie. As jy nie die 'Opleiding'-toestel in jou Bluetooth-instellings sien nie, gaan net voort na die volgende stap.
    2. In sagteware-komponente, installeer een geval van die eenvoudige knoppie-hanteerder.
    3. Sluit die kopskrif in file sl_simple_button_instances.h in app.c
    4. Voeg 'n hanteerder by vir die sl_bt_evt_sm_bonding_confirm_id gebeurtenis. Die hooftaak van hierdie gebeurtenishanteerder is om die gebruiker in te lig dat 'n afgeleë toestel 'n nuwe verband versoek.
    5. Voeg 'n terugbelfunksie by vir die eenvoudige knoppie-hanteerder om 'n sein na die Bluetooth-stapel te stuur wat aandui dat 'n knoppie gedruk is. Dit ignoreer die verstek terugbel wat eenvoudig terugkeer.
    6. Voeg 'n eksterne seingebeurtenishanteerder by. Hierdie gebeurtenis word geopper in reaksie op die ontvangs van 'n sein, soos in die vorige stap. Die eksterne seingebeurtenis sal gebruik word om binding te bevestig.
    7. Verander die oproep na sl_bt_sm_configure om bindingsbevestiging te vereis soos
    8. Herbou en flits.
    9. Koppel aan EFRConnect en lees die beskermde eienskap soos voorheen. Nou sal jy 'n boodskap op die konsole sien soos volg:Druk PB0 om die binding te bevestig. Nou sal die konsole die wagwoord wys wat op die selfoon ingevoer moet word vir binding. Voer die wagwoord in om die bindingsproses te voltooi.

 

Wenk: Gebruik die verstek geval in die gebeurtenis hanteerder om 'n boodskap uit te druk wanneer die stapel 'n gebeurtenis stuur wat nie hanteer word nie. Die stapel probeer dalk vir jou iets belangrik vertel.

Beyond the Basics

Op hierdie stadium het jy voordeel getrektage van die sekuriteitskenmerke wat ons stapel kan bied. Kom ons verbeter nou die implementering deur wyse gebruik van funksies tot ons beskikking. Die volgende stappe is opsioneel en onafhanklik van mekaar, jy kan na elkeen bou en flits om die gedrag te sien of hulle almal saam probeer.

  1. Ontkoppel op mislukte verbandpogings. Dit is 'n goeie plek om bedreigings op te spoor. As die afgeleë toestel nie enkripsie/verifikasie ondersteun nie of net nie die regte sleutels het nie, kan dit 'n hacker wees. So, kom ons verbreek die verband. Probeer om 'n oproep by sl_bt_connection_close() te voeg in die sl_bt_sm_bonding_failed_id gebeurtenis. Die API word hier gedokumenteer.Jy kan hierdie kenmerk toets deur die verkeerde wagwoordsleutel in te voer.
  2. Laat binding slegs op sekere tye toe. Dit beperk die tyd wat 'n aanvaller het om 'n band te vorm en maak dit moontlik om die 'laat net gebonde verbindings toe'-kenmerk te gebruik. Die ontwerper kan kies hoe om bindbare modus te aktiveer of te deaktiveer. Vir demonstrasiedoeleindes hier, sal ons 'n 'opstellingsmodus' met PB1 aktiveer en 'n timer gebruik om dit na 30 sekondes te deaktiveer.
    1. Installeer 'n tweede instansie van die eenvoudige knoppie-koppelvlak. Dit sal die gebruik van PB1 moontlik maak.
    2. Verander die terugbel om 'n ander sein na die stapel te stuur om binding te aktiveer/deaktiveer. Die resultaat moet iets soos volg lyk:
    3. Verander die eksterne sein gebeurtenis hanteerder sodat dit hierdie nuwe sein hanteer. Die resultaat behoort soos volg te wees:
    4. Voeg 'n gebeurtenishanteerder by vir die sl_bt_evt_system_soft_timer_id gebeurtenis. Dit sal gebruik word om opstelmodus te deaktiveer.
    5. Die volgende kode kan gebruik word om bindbare modus te aktiveer en alle verbindings toe te laat of om bindbare modus te deaktiveer en slegs verbindings vanaf gebonde toestelle toe te laat:
    6. Voeg die volgende oproep by die sl_bt_system_boot_id gebeurtenis hanteerder
    7. Bou die projek en flits dit na die toestel.
    8. Probeer om met EFRConnect aan die toestel te koppel. Die verbinding behoort te misluk.
    9. Probeer nou om PB1 te druk voordat jy met EFRConnect verbind. Hierdie keer sal die verbinding suksesvol wees. Na 30 sekondes sal jy 'n boodskap op die konsole sien wat aandui dat die toestel die opstelmodus verlaat. Dit beteken dat bindbare modus nou gedeaktiveer is.
  3. Verhoog sekuriteit by die vorming van 'n verbinding. Aangesien sekuriteit opsioneel is, moet ons so gou as moontlik 'n geënkripteerde verbinding versoek eerder as om op GATT-eienskappe staat te maak. Die API word hier gedokumenteer. 'n Goeie plek om hierdie API te noem is in die sl_bt_evt_connection_opened_id gebeurtenis. Die verbindingshandvatsel is beskikbaar in die verbindingsveranderlike.

Veilige identiteit

Noudat ons 'n veiliger Bluetooth-toestel het, kan ons die stawingstap verbeter. Jy het reeds gesien hoe om die veilige identiteit van kluistoestelle met die opdragreël in vorige opleidingslaboratoriums te verifieer. In hierdie afdeling sal ons sien hoe een BLE-toestel die identiteit van 'n ander BLE-toestel kan verifieer deur sy sertifikaatketting aan te vra en 'n uitdaging te stuur. Alle veilige kluisonderdele hou hul eie toestelsertifikaat en bondelsertifikaat. Die fabriek- en wortelsertifikate is hard gekodeer in die kliënttoepassing om verifikasie van die hele sertifikaatketting moontlik te maak. Verwys na AN1268 vir meer besonderhede oor veilige identiteit.

  1. Definieer 'n globale buffer vir die stoor van die toestelverklaring handtekening soos hieronder:
  2. Stel die sekuriteitsbestuurder-konfigurasie om JustWorks-paring te gebruik. Dit word gedoen sodat die verbinding geïnkripteer is. In die praktyk moet MITM-beskerming gebruik word, maar om die laboratorium eenvoudig te hou, sal ons JustWorks gebruik. Verander die oproep na sl_bt_sm_configure terug na die volgende:Lewer ook kommentaar op die oproep na setup_mode(true) in die system_boot gebeurtenis hanteerder.
  3. Maak helpers.c oop uit die verskafde materiaal en kopieer die inhoud na app.c. Hierdie terugbelfunksies voer take uit soos om die sertifikate te segmenteer sodat dit oor BLE gestuur kan word, die sertifikaatketting te verifieer en die uitdaging te genereer/verifieer.
  4. Dit is nodig om die maksimum oordrageenheid (MTU) grootte te bepaal sodat sertifikate gesegmenteer en weer saamgestel kan word. Definieer 'n globale veranderlike om die MTU te stoor soos hier getoon:Voeg dan 'n gebeurtenishanteerder by vir die GATT MTU-uitgeruilde gebeurtenis soos hieronder getoon:
  5. Daar is drie gebruikersdata-eienskappe wat gelees kan word. Hierdie kenmerke word gebruik om die toestelsertifikaat, bondelsertifikaat en die uitdaging te kommunikeer. 'n Terugbelfunksie word gebruik om hierdie gebruikerleesversoeke te hanteer. Voeg 'n hanteerder by om hierdie funksie te noem soos hieronder getoon:Die terugbel gebruik die MTU vanaf stap #2 om die sertifikate te segmenteer en stuur soos nodig. Dit hanteer ook die stuur van die getekende uitdaging.
  6. Die kliënt stuur 'n uitdaging, 'n ewekansige nommer wat deur die bediener onderteken moet word, deur een van die GATT-kenmerke te skryf. Om hierdie rede moet die toepassing 'n hanteerder hê vir die gebruikerskryfversoekgebeurtenis soos hieronder:
  7. Voeg veilige identiteitsondersteuning by files aan die projek:
    1. app_se_manager_macro.h, app_se_manager_secure_identity.c en app_se_secure_identity.h van die verskafde materiaal na die projek. Hierdie files bevat 'n paar helperfunksies vir take soos om die grootte van die sertifikaat te kry, die toestel se publieke sleutel te kry en 'n uitdaging te onderteken.
    2. Sluit app_se_manager_secure_identity.h in app.c in.
  8. Voer die verskafde gatt_configuration-attest.btconf in vanaf die verskafde materiaal. Hierdie GATT-databasis genoem veilige attestasie wat vier kenmerke insluit wat gebruik sal word om die identiteit van ons toestel te verifieer. Dit sluit die toestelsertifikaat, bondelsertifikaat, uitdaging en reaksie in.
  9. Die kliënt, wat gebruik word om 'n toestel soos gateway te simuleer, word as 'n volledige projek verskaf aangesien dit meer kompleks is om te bou. Oor die algemeen is die werking van die kliënt soos volg:
    1. Soek vir toestelle wat die veilige attestasiediens adverteer en koppel daaraan.
    2. Ontdek die GATT-databasisdienste en kenmerke.
    3. Lees die toestel- en bondelsertifikate en verifieer die sertifikaatketting deur die fabrieks- en wortelsertifikaat wat dit in flits gestoor het, te gebruik.
    4. Stuur 'n ewekansige uitdaging na die bediener.
    5. Pogings om die reaksie op die uitdaging te verifieer.
    6. Maak die verbinding toe as enige verifikasie misluk.
  10. Bou en flits die bedienerprojek na jou bediener WSTK /radioboard.
  11. Voer die kliëntprojek uit die kliëntlêergids in die verskafde materiaal in. Bou en flits die kliëntprojek na jou kliënt WSTK/radiobord.
  12. Druk reset op die kliënt WSTK en maak die reekskonsole oop. Die kliënt begin soek na toestelle wat ons veilige identiteitsdiens adverteer en sal koppel wanneer hy een kry.
  13. Die kliënt sal 'n paar boodskappe vertoon om aan te dui dat dit die bediener met die verlangde diens en statusboodskappe oor die verifikasie van die sertifikaatketting gevind het.
  14. As die verifikasie slaag, sal die kliënt 'n ewekansige nommer genereer, 'n uitdaging genoem, en dit na die bediener stuur. Die bediener sal die uitdaging onderteken met sy privaat toestelsleutel wat veilig gehou word en die handtekening terug na die kliënt, dit word 'n uitdagingsreaksie genoem. Die kliënt gebruik dan die publieke sleutel in die voorheen ontvangde toestelsertifikaat om die handtekening te verifieer. Dit word gedoen om te bevestig dat die bediener werklik die private sleutel het wat hy beweer het. As die uitdaging korrek geverifieer is, word 'n boodskap in daardie effek vertoon; anders word die verbinding gesluit, en 'n boodskap word vertoon wat verduidelik hoekom.
  15. Stuur nou 'n ongeldige sertifikaat om te bevestig dat die verifikasie werklik werk. Jy kan user_read_request_cb() verander om óf die sertifikaatdata óf die uitdagingsreaksie te korrupteer.

Bylaag A – I/O-vermoëns en paringsmetodes
Bylaag B – Sekuriteitsmodusse en -vlakke

Sekuriteitmodus 1 is die enigste modus wat vir Bluetooth Low Energy in die Silicon Labs se stapel ondersteun word. Die vlakke is soos volg:

  • Vlak 1 geen sekuriteit
  • Vlak 2 ongeverifieerde paring met enkripsie
  • Vlak 3-geverifieerde paring met enkripsie
  • Vlak 4-geverifieerde veilige verbindings met sterk enkripsie (ECDH-sleuteluitruiling)

 

Dokumente / Hulpbronne

silabs 21Q2 veilige BLE toestel Sekuriteit Lab [pdfGebruikershandleiding
21Q2 veilige BLE-toestelsekuriteitslaboratorium, veilige BLE-toestelsekuriteitslaboratorium, sekuriteitslaboratorium

Verwysings

Los 'n opmerking

Jou e-posadres sal nie gepubliseer word nie. Vereiste velde is gemerk *