Dispositiu BLE segur silabs 21Q2 Security Lab

Manual de laboratori de seguretat BLE

En aquest laboratori, veureu com dissenyar un dispositiu BLE més segur. Començarem amb un finalview de com utilitzar algunes de les funcions de la pila i passar a alguns consells generals sobre tècniques per a connexions més segures i, finalment, veurem com utilitzar els certificats de dispositiu a través de BLE per identificar un perifèric com a autèntic.

Primers passos

El Bluetooth sampL'aplicació sobre la qual construireu està pensada per ser utilitzada amb un carregador d'arrencada. Si esteu treballant amb un EFR32MG21B nou, no tindrà un carregador d'arrencada. Podeu trobar un carregador d'arrencada preconstruït a la plataforma\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a carpeta del vostre SDK.

  1. Comença amb una s soc-buidaampl'aplicació. Aquest sampl'aplicació s'utilitza com a plantilla i és un bon punt de partida per a qualsevol aplicació BLE.
    1. Obriu l'assistent de projectes de Silicon Labs des de Simplicity Studio File menú -> nou.
    2. Seleccioneu el BRD4181C i feu clic al botó "següent".
    3. Feu clic a la casella de selecció "Bluetooth (9)" sota el tipus de tecnologia.
    4. Ressalteu "Bluetooth - SoC buit" i feu clic a Següent.
    5. Feu clic al botó "Finalitzar".
  2. Ara podeu afegir algunes característiques per veure com es tracten de manera diferent les característiques protegides i no protegides.
    1. Obriu el slcp del projecte file fent-hi doble clic a la finestra de l'Explorador de projectes
    2. Ressalteu la pestanya "COMPONENTS DEL PROGRAMARI" i obriu l'eina de configuració GATT tal com es mostra a continuació: I utilitzeu l'eina d'importació que es mostra a continuació per importar el fitxer gatt_configuration.btconf file des de la carpeta del servidor als materials proporcionats.La base de dades del GATT té un servei personalitzat, anomenat 'Formació', amb algunes dades que estan protegides i altres que no. Això us permet comparar què passa quan s'intenta accedir a una característica protegida amb una de no protegida. Aquesta és una manera ràpida de fer un dispositiu amb una seguretat molt bàsica.
  3. Utilitzarem el port sèrie per imprimir a la consola de Simplicity Studio per fer un seguiment del que passa a l'aplicació. La manera més senzilla de trobar aquests components és cercant-los al diàleg COMPONENTS DEL PROGRAMARI tal com es mostra:
      1. Instal·leu el component IO Stream USART
      2. Instal·leu el component IO Stream Retarget STDIO
      3. Instal·leu el component d'E/S estàndard
      4. Instal·leu el component Log
      5. Obriu el component de control de la placa i activeu "Activa Virtual COM UART"
      6. Feu clic amb el botó dret a l'adaptador al tauler "Depurar adaptadors" i seleccioneu "Inicia la consola". Seleccioneu la pestanya "Sèrie 1" i col·loqueu el cursor al camp d'entrada de text de la finestra de la consola i premeu Intro per activar la consola.
  4. Creeu una variable local a sl_bt_on_event(), que es troba a app.c, per desar el controlador de connexió. La variable ha de ser estàtica ja que aquesta funció es crida cada cop que la pila genera un esdeveniment i volem que el valor sigui persistent. El mànec de connexió s'utilitzarà més endavantsecció del laboratori.
  5. Inseriu algunes declaracions app_log() per als esdeveniments per veure quan estem connectats, modes de seguretat, etc.
      1. Inclou la capçalera app_log.h file
      2. sl_bt_evt_connection_opened: imprimeix l'identificador de connexió i desa l'identificador de connexió. Si el mànec d'enllaç és 0xFF, no existeix cap vincle entre els dispositius connectats. Modifiqueu el controlador d'esdeveniments existent perquè sembli una cosa així:
      3. sl_bt_evt_connection_parameters: mode de seguretat. Això es fa perquè pugueu veure quan canvia el mode de seguretat. Hi ha una diferència en la numeració dels modes de seguretat on el mode de seguretat 1 s'enumera amb el valor 0, etc. Afegiu el controlador d'esdeveniments següent a la vostra aplicació:
      4. sl_bt_evt_connection_closed_id. Aquest controlador d'esdeveniments es modifica per actualitzar el controlador de connexió. El valor 0xFF s'utilitza per indicar que no hi ha cap connexió activa. L'ordre app_log() s'utilitza per imprimir el motiu del tancament de la connexió, la llista de codis d'estat és aquí. Modifiqueu el controlador d'esdeveniments existent perquè sembli una cosa així:
  6. Construeix i flash el projecte. En aquest punt, executarem el sampl'aplicació per veure com es comporta sense cap canvi, a més de la base de dades del GATT.
  7. Connecteu-vos amb l'aplicació mòbil EFRConnect de la següent manera:
      1. Toqueu la icona "Navegador Bluetooth".
      2. Toqueu la icona "Connexió" al dispositiu anomenat "Formació".
  8. Llegeix la característica no protegida de la següent manera:
      1. Toqueu l'enllaç "Més informació" sota el servei desconegut amb UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
      2. Llegiu la característica no protegida, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c tocant la icona "Llegir". Aquí no hi ha sorpreses. Com que la característica no està protegida de cap manera, s'enviarà en text pla.
  9. Ara llegiu la característica protegida, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. El vostre telèfon mòbil us hauria de demanar que aparelleu i connecteu, el missatge pot variar segons el vostre sistema operatiu mòbil. Després d'acceptar la sol·licitud de vinculació, hauríeu d'un missatge a la consola com el següent: Nota: L'apèndix A al final d'aquest manual inclou un resum de les capacitats d'E/S i mètodes d'aparellament com a referència. L'apèndix B resumeix els modes de seguretat de Bluetooth.

Configuració del gestor de seguretat

El gestor de seguretat forma part de la pila Bluetooth que determina quines funcions de seguretat s'utilitzen. Aquestes característiques inclouen protecció man-in-the-middle (MITM), connexions LE Secure (també conegut com ECDH), que requereixen confirmació per a la vinculació, etc. El gestor de seguretat també gestiona les capacitats d'E/S que s'utilitzen per determinar quin mètode s'utilitza per a l'aparellament. /bonding (vegeu l'Apèndix A per a un resum). En aquesta secció veureu una configuració senzilla.

  1. Configura SM amb la configuració desitjada. El maquinari d'aquest laboratori facilita la visualització d'una clau d'accés a la consola. L'entrada de clau de pas és un requisit per habilitar la protecció MITM. Afegiu el codi següent al vostre gestor d'esdeveniments sl_bt_system_boot_id. Això permet l'home del mig i informa al dispositiu remot que tenim la possibilitat de mostrar una clau de pas, però això és tot.
  2. Per mostrar la clau d'accés a la consola, cal un gestor d'esdeveniments com es mostra a continuació:
  3. Establiu el mode d'enllaç, el nombre màxim d'enllaços, etc. Utilitzeu el codi següent per començar:Aquesta configuració es pot utilitzar per limitar la capacitat d'un atacant d'unir-se amb el vostre dispositiu. Si el vostre producte només necessita tenir un usuari, podeu limitar els enllaços màxims a 1. Un bon lloc per afegir aquestes trucades és al gestor d'esdeveniments sl_bt_system_boot_id. No habilitarem la vinculació en aquest moment perquè la resta del laboratori funcioni més bé, però establim una política d'enllaç per permetre només una vinculació. Com a referència, la documentació d'aquestes API es troba aquí i aquí .
  4. Afegiu controladors d'esdeveniments per a sl_bt_evt_sm_bonded_id i sl_bt_evt_sm_bonding_failed_id. L'ús principal d'aquests esdeveniments és informatiu actualment, però més endavant al laboratori afegireu funcionalitats.
  5. Construeix i flash al tauler objectiu. Connecteu-vos amb EFRConnect i llegiu la característica protegida com abans. Aquesta vegada, veureu una clau d'accés a la consola. Introduïu aquesta clau d'accés al telèfon mòbil quan se us demani.
  6. Proveu la confirmació de l'enllaç. Aquesta característica ofereix a l'usuari la possibilitat d'exigir que es confirmin les sol·licituds d'enllaç. En fer-ho, l'aplicació controla amb quins dispositius iguals s'enllaça. Una possibilitat és demanar a l'usuari que premeu un botó abans de permetre l'enllaç.
    1. Obriu la configuració de Bluetooth al vostre telèfon mòbil i elimineu la connexió amb el dispositiu EFR32. Les implementacions dels telèfons mòbils varien, de manera que pot ser que aquest pas no sigui necessari. Si no veieu el dispositiu "Formació" a la vostra configuració de Bluetooth, aneu al pas següent.
    2. Als components de programari, instal·leu una instància del gestor de botons simple.
    3. Incloeu la capçalera file sl_simple_button_instances.h a app.c
    4. Afegiu un controlador per a l'esdeveniment sl_bt_evt_sm_bonding_confirm_id. La funció principal d'aquest gestor d'esdeveniments és informar l'usuari que un dispositiu remot demana un nou enllaç.
    5. Afegiu una funció de devolució de trucada per al gestor de botons senzill per enviar un senyal a la pila Bluetooth que indica que s'ha premut un botó. Això anul·la la devolució de trucada predeterminada que simplement retorna.
    6. Afegiu un gestor d'esdeveniments de senyal extern. Aquest esdeveniment es produeix en resposta a la recepció d'un senyal, com en el pas anterior. L'esdeveniment de senyal extern s'utilitzarà per confirmar l'enllaç.
    7. Canvieu la trucada a sl_bt_sm_configure per requerir la confirmació de l'enllaç, com ara
    8. Reconstrueix i flash.
    9. Connecteu-vos amb EFRConnect i llegiu la característica protegida com abans. Ara veureu un missatge a la consola com el següent:Premeu PB0 per confirmar l'enllaç. Ara la consola mostrarà la clau d'accés que s'ha d'introduir al telèfon mòbil per a la vinculació. Introduïu la clau d'accés per completar el procés d'enllaç.

 

Consell: Utilitzeu el cas predeterminat al controlador d'esdeveniments per imprimir un missatge quan la pila envia un esdeveniment que no es gestiona. La pila pot estar intentant dir-vos alguna cosa important.

Més enllà dels bàsics

En aquest punt, us heu avançattaguna de les funcions de seguretat que ofereix la nostra pila. Ara millorem la implementació mitjançant un ús intel·ligent de les funcions a la nostra disposició. Els passos següents són opcionals i independents els uns dels altres, podeu crear i flashejar després de cadascun per veure el comportament o provar-los tots junts.

  1. Desconnecteu-vos en intents fallits d'enllaç. Aquest és un bon lloc per detectar amenaces. Si el dispositiu remot no admet el xifratge/autenticació o simplement no té les claus correctes, podria ser un pirata informàtic. Per tant, trenquem la connexió. Proveu d'afegir una crida a sl_bt_connection_close() a l'esdeveniment sl_bt_sm_bonding_failed_id. L'API està documentada aquí.Podeu provar aquesta funció introduint la contrasenya incorrecta.
  2. Només permet l'enllaç en determinats moments. Això limita el temps que té un atacant per formar un vincle i fa possible utilitzar la funció "permet només connexions vinculades". El dissenyador pot triar com activar o desactivar el mode vinculable. Amb finalitats de demostració aquí, habilitarem un "mode de configuració" amb PB1 i utilitzarem un temporitzador per desactivar-lo després de 30 segons.
    1. Instal·leu una segona instància de la interfície de botó simple. Això permetrà l'ús de PB1.
    2. Modifiqueu la devolució de trucada per enviar un senyal diferent a la pila per activar/desactivar l'enllaç. El resultat hauria de semblar a això:
    3. Modifiqueu el gestor d'esdeveniments de senyal extern perquè gestioni aquest nou senyal. El resultat hauria de ser així:
    4. Afegiu un gestor d'esdeveniments per a l'esdeveniment sl_bt_evt_system_soft_timer_id. Això s'utilitzarà per desactivar el mode de configuració.
    5. El codi següent es pot utilitzar per habilitar el mode vinculable i permetre totes les connexions o per desactivar el mode vinculable i només permetre connexions des de dispositius vinculats:
    6. Afegiu la següent crida al gestor d'esdeveniments sl_bt_system_boot_id
    7. Creeu el projecte i flasheu-lo al dispositiu.
    8. Proveu de connectar-vos al dispositiu amb EFRConnect. La connexió hauria de fallar.
    9. Ara proveu de prémer PB1 abans de connectar-vos amb EFRConnect. Aquesta vegada la connexió serà correcta. Després de 30 segons, veureu un missatge a la consola que indica que el dispositiu està sortint del mode de configuració. Això vol dir que ara el mode vinculable està desactivat.
  3. Augmentar la seguretat en formar una connexió. Com que la seguretat és opcional, hauríem de sol·licitar una connexió xifrada tan aviat com sigui possible en lloc de confiar-nos en les característiques del GATT. L'API està documentada aquí. Un bon lloc per trucar a aquesta API és a l'esdeveniment sl_bt_evt_connection_opened_id. El controlador de connexió està disponible a la variable de connexió.

Identitat segura

Ara que tenim un dispositiu Bluetooth més segur, millorem el pas d'autenticació. Ja heu vist com verificar la identitat segura dels dispositius de volta amb la línia d'ordres als laboratoris de formació anteriors. En aquesta secció, veurem com un dispositiu BLE pot verificar la identitat d'un altre dispositiu BLE sol·licitant la seva cadena de certificats i enviant un repte. Totes les parts segures de la volta tenen el seu propi certificat de dispositiu i certificat de lot. Els certificats de fàbrica i arrel estan codificats en dur a l'aplicació client per permetre la verificació de tota la cadena de certificats. Consulteu AN1268 per obtenir més detalls sobre la identitat segura.

  1. Definiu una memòria intermèdia global per emmagatzemar la signatura d'acreditació del dispositiu de la següent manera:
  2. Configureu la configuració del gestor de seguretat per utilitzar l'aparellament de JustWorks. Això es fa perquè la connexió estigui xifrada. A la pràctica, s'hauria d'utilitzar la protecció MITM, però per mantenir el laboratori senzill, utilitzarem JustWorks. Torneu a canviar la trucada a sl_bt_sm_configure al següent:A més, comenta la trucada a setup_mode(true) al gestor d'esdeveniments system_boot.
  3. Obriu helpers.c des dels materials proporcionats i copieu-ne el contingut a app.c. Aquestes funcions de devolució de trucada realitzen tasques com ara segmentar els certificats perquè es puguin enviar a través de BLE, verificar la cadena de certificats i generar/verificar el repte.
  4. Cal determinar la mida màxima de la unitat de transferència (MTU) perquè els certificats es puguin segmentar i tornar a muntar. Definiu una variable global per desar la MTU tal com es mostra aquí:A continuació, afegiu un gestor d'esdeveniments per a l'esdeveniment intercanviat GATT MTU tal com es mostra a continuació:
  5. Hi ha tres característiques de dades d'usuari que es poden llegir. Aquestes característiques s'utilitzen per comunicar el certificat del dispositiu, el certificat de lot i el repte. S'utilitza una funció de devolució de trucada per gestionar aquestes sol·licituds de lectura dels usuaris. Afegiu un controlador per cridar aquesta funció com es mostra a continuació:La devolució de trucada utilitza la MTU del pas 2 per segmentar i enviar els certificats segons sigui necessari. També s'encarrega de l'enviament del repte signat.
  6. El client envia un repte, un número aleatori que ha de signar el servidor, escrivint una de les característiques del GATT. Per aquest motiu, l'aplicació ha de tenir un controlador per a l'esdeveniment de sol·licitud d'escriptura de l'usuari com a continuació:
  7. Afegiu suport d'identitat segur files al projecte:
    1. app_se_manager_macro.h, app_se_manager_secure_identity.c i app_se_secure_identity.h dels materials proporcionats al projecte. Aquests filecontenen algunes funcions d'ajuda per a tasques com ara obtenir la mida del certificat, obtenir la clau pública del dispositiu i signar un repte.
    2. Inclou app_se_manager_secure_identity.h a app.c.
  8. Importeu el gatt_configuration-attest.btconf proporcionat dels materials proporcionats. Aquesta base de dades GATT anomenada certificació segura que inclou quatre característiques que s'utilitzaran per verificar la identitat del nostre dispositiu. Aquests inclouen el certificat del dispositiu, el certificat del lot, el desafiament i la resposta.
  9. El client, que s'utilitza per simular un dispositiu com la passarel·la, es proporciona com un projecte complet ja que és més complex de construir. En general, el funcionament del client és el següent:
    1. Busca dispositius que anuncien el servei de certificació segura i es connecta a ells.
    2. Descobreix els serveis i les característiques de la base de dades del GATT.
    3. Llegeix els certificats del dispositiu i del lot i verifica la cadena de certificats mitjançant el certificat de fàbrica i arrel que té emmagatzemats al flash.
    4. Envia un repte aleatori al servidor.
    5. Intents de verificar la resposta al repte.
    6. Tanca la connexió si alguna de les verificacions falla.
  10. Creeu i flasheu el projecte del servidor al vostre servidor WSTK /radioboard.
  11. Importeu el projecte del client des de la carpeta del client als materials proporcionats. Creeu i flasheu el projecte client al vostre client WSTK/radioboard.
  12. Premeu Reset al client WSTK i obriu la consola sèrie. El client comença a buscar dispositius que anuncien el nostre servei d'identitat segura i es connectarà quan en trobi un.
  13. El client mostrarà alguns missatges per indicar que ha trobat el servidor amb el servei desitjat i missatges d'estat sobre la verificació de la cadena de certificats.
  14. Si la verificació passa, el client generarà un número aleatori, anomenat desafiament, i l'enviarà al servidor. El servidor signarà el desafiament amb la seva clau de dispositiu privada de manera segura i la signatura tornarà al client, això s'anomena resposta al desafiament. Aleshores, el client utilitza la clau pública del certificat del dispositiu rebut anteriorment per verificar la signatura. Això es fa per confirmar que el servidor realment té la clau privada que deia tenir. Si el desafiament es verifica correctament, es mostra un missatge en aquest sentit; en cas contrari, es tanca la connexió i es mostra un missatge que explica per què.
  15. Ara envieu un certificat no vàlid per confirmar que la verificació funciona realment. Podeu modificar user_read_request_cb() per danyar les dades del certificat o la resposta al desafiament.

Apèndix A – Capacitats d'E/S i mètodes d'aparellament
Apèndix B – Modes i nivells de seguretat

El mode de seguretat 1 és l'únic mode compatible amb Bluetooth Low Energy a la pila de Silicon Labs. Els nivells són els següents:

  • Nivell 1 sense seguretat
  • Emparejament no autenticat de nivell 2 amb xifratge
  • Parellament autenticat de nivell 3 amb xifratge
  • Connexions segures autenticades de nivell 4 amb xifratge fort (intercanvi de claus ECDH)

 

Documents/Recursos

Dispositiu BLE segur silabs 21Q2 Security Lab [pdfManual d'usuari
Laboratori de seguretat del dispositiu BLE segur del 21Q2, laboratori de seguretat del dispositiu BLE segur, laboratori de seguretat

Referències

Deixa un comentari

La teva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats *