Laboratorio de seguridade do dispositivo BLE seguro silabs 21Q2
Manual de laboratorio de seguridade BLE
Neste laboratorio, verás como deseñar un dispositivo BLE máis seguro. Comezaremos cun remateview de como usar algunhas das funcións da pila e pasar a algúns consellos xerais sobre técnicas para conexións máis seguras e, finalmente, veremos como usar certificados de dispositivos sobre BLE para identificar un periférico como auténtico.
Comezando
O Bluetooth sampA aplicación na que vai construír está pensada para ser usada cun cargador de arranque. Se está a traballar cun novo EFR32MG21B, non terá un cargador de arranque. Podes atopar un cargador de arranque predefinido na plataforma\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a do seu SDK.
- Comeza cun s soc-baleiroampa aplicación. Este sampa aplicación le úsase como modelo e é un bo punto de partida para calquera aplicación BLE.
- Abre o asistente de proxectos de Silicon Labs desde Simplicity Studio File menú -> novo.
- Seleccione o BRD4181C e prema no botón "Seguinte".
- Fai clic na caixa de verificación "Bluetooth (9)" baixo o tipo de tecnoloxía.
- Resalte "Bluetooth - SoC baleiro" e prema en seguinte.
- Fai clic no botón "Finalizar".
- Agora podes engadir algunhas características para ver como se tratan de forma diferente as características protexidas e non protexidas.
- Abre o slcp do proxecto file facendo dobre clic nel na xanela do Explorador de proxectos
- Destaque a pestana "COMOÑENTES DO SOFTWARE" e abra a ferramenta de configuración GATT como se mostra a continuación:
E use a ferramenta de importación que se mostra a continuación para importar o gatt_configuration.btconf file desde o cartafol do servidor nos materiais proporcionados.
A base de datos do GATT ten un servizo personalizado, chamado "Formación", con algúns datos que están protexidos e outros que non. Isto permítelle comparar o que ocorre ao tentar acceder a unha característica protexida fronte a unha non protexida. Esta é unha forma rápida de facer un dispositivo cunha seguridade moi básica.
- Usaremos o porto serie para imprimir na consola en Simplicity Studio para rastrexar o que está a suceder na aplicación. O xeito máis sinxelo de atopar estes compoñentes é buscándoos no diálogo COMPOÑENTES DE SOFTWARE como se mostra:
-
- Instale o compoñente IO Stream USART
- Instale o compoñente IO Stream Retarget STDIO
- Instale o compoñente de E/S estándar
- Instala o compoñente Log
- Abre o compoñente de control da placa e activa a opción "Activar Virtual COM UART"
- Fai clic co botón dereito no adaptador no panel "Depurar adaptadores" e selecciona "Iniciar consola". Seleccione a pestana "Serial 1" e coloque o cursor no campo de entrada de texto da xanela da consola e prema Intro para activar a consola.
-
- Crea unha variable local en sl_bt_on_event(), que se atopa en app.c, para gardar o identificador de conexión. A variable debe ser estática xa que esta función chámase cada vez que a pila provoca un evento e queremos que o valor sexa persistente. O controlador de conexión empregarase máis tarde
sección do laboratorio.
- Insira algunhas instrucións app_log() para eventos para ver cando estamos conectados, modos de seguridade, etc.
-
- Inclúe a cabeceira app_log.h file
- sl_bt_evt_connection_opened: imprime o identificador de enlace e garda o identificador de conexión. Se o identificador de enlace é 0xFF, non existe ningunha conexión entre os dispositivos conectados. Modifique o controlador de eventos existente para que se vexa así:
- sl_bt_evt_connection_parameters: modo de seguridade. Isto faise para que poidas ver cando cambia o modo de seguranza. Hai unha diferenza na numeración dos modos de seguranza onde o modo de seguridade 1 se enumera co valor 0, etc. Engade o seguinte controlador de eventos á túa aplicación:
- sl_bt_evt_connection_closed_id. Este controlador de eventos modifícase para actualizar o controlador de conexión. O valor 0xFF úsase para indicar que non hai ningunha conexión activa. O comando app_log() úsase para imprimir o motivo do peche da conexión, a lista de códigos de estado está aquí. Modifique o controlador de eventos existente para que se vexa así:
- Inclúe a cabeceira app_log.h file
-
- Construír e flashear o proxecto. Neste punto, executaremos o sampa aplicación para ver como se comporta sen ningún cambio, ademais da base de datos do GATT.
- Conéctate coa aplicación móbil EFRConnect do seguinte xeito:
-
- Toca a icona "Navegador Bluetooth".
- Toca a icona "Conectar" no dispositivo chamado "Adestramento".
-
- Le a característica desprotexida do seguinte xeito:
-
- Toca a ligazón "Máis información" baixo o servizo descoñecido co UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Le a característica desprotexida, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c tocando a icona "Ler". Aquí non hai sorpresas. Dado que a característica non está protexida de ningún xeito, enviarase en texto plano.
-
- Agora le a característica protexida, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. O teu teléfono móbil debería pedirche que emparejas e te conectes, a mensaxe pode variar dependendo do teu sistema operativo móbil. Despois de aceptar a solicitude de vinculación, debes enviar unha mensaxe na consola como segue:
Nota: o Apéndice A ao final deste manual ten un resumo das capacidades de E/S e métodos de emparejamento como referencia. O apéndice B resume os modos de seguranza Bluetooth.
Configuración do xestor de seguridade
O xestor de seguranza forma parte da pila Bluetooth que determina que funcións de seguranza se utilizan. Estas funcións inclúen protección home-in-the-middle (MITM), conexións LE Secure (tamén coñecido como ECDH), que requiren confirmación para a vinculación, etc. O xestor de seguridade tamén xestiona as capacidades de E/S que se usan para determinar que método se usa para emparellar /bonding (ver Apéndice A para un resumo). Nesta sección verás unha configuración sinxela.
- Configure SM coa configuración desexada. O hardware deste laboratorio facilita a visualización dunha clave de acceso na consola. A entrada da clave de acceso é un requisito para activar a protección MITM. Engade o seguinte código ao teu xestor de eventos sl_bt_system_boot_id. Isto permite o home-in-the-middle e informa ao dispositivo remoto de que temos a posibilidade de mostrar unha clave de acceso, pero iso é todo.
- Para mostrar a clave de acceso na consola, é necesario un controlador de eventos como se mostra a continuación:
- Establece o modo de vinculación, o número máximo de enlaces, etc. Utiliza o seguinte código para comezar:
Esta configuración pódese usar para limitar a capacidade dun atacante para conectarse co teu dispositivo. Se o teu produto só precisa ter un usuario, podes limitar os vínculos máximos a 1. Un bo lugar para engadir estas chamadas é o controlador de eventos sl_bt_system_boot_id. Non activaremos a vinculación neste momento para que o resto do laboratorio funcione con máis fluidez, pero establecemos unha política de vinculación para permitir só un enlace. Como referencia, a documentación destas API atópase aquí e aquí.
- Engade controladores de eventos para sl_bt_evt_sm_bonded_id e sl_bt_evt_sm_bonding_failed_id. O uso principal destes eventos é informativo actualmente, pero máis tarde no laboratorio engadirás funcionalidades.
- Constrúe e flash para o taboleiro de destino. Conéctate con EFRConnect e le a característica protexida como antes. Esta vez, verás unha clave de acceso na consola. Introduza esta clave de acceso no seu teléfono móbil cando se lle solicite.
- Proba a confirmación da vinculación. Esta característica dálle ao usuario a posibilidade de esixir que se confirmen as solicitudes de vinculación. Ao facelo, dálle á aplicación control sobre os dispositivos pares cos que se vincula. Unha posibilidade é esixir ao usuario que prema un botón antes de permitir o enlace.
- Abre a configuración de Bluetooth no teu teléfono móbil e elimina o enlace ao dispositivo EFR32. As implementacións dos teléfonos móbiles varían polo que é posible que este paso non sexa necesario. Se non ves o dispositivo "Adestramento" na túa configuración de Bluetooth, continúa co seguinte paso.
- Nos compoñentes de software, instale unha instancia do controlador de botón simple.
- Inclúe a cabeceira file sl_simple_button_instances.h na aplicación.c
- Engade un controlador para o evento sl_bt_evt_sm_bonding_confirm_id. O traballo principal deste xestor de eventos é informar ao usuario de que un dispositivo remoto está solicitando un novo enlace.
- Engade unha función de devolución de chamada para o manejador de botóns sinxelo para enviar un sinal á pila Bluetooth indicando que se premeu un botón. Isto anula a devolución de chamada predeterminada que simplemente devolve.
- Engade un controlador de eventos de sinal externo. Este evento lévase en resposta á recepción dun sinal, como no paso anterior. O evento de sinal externo utilizarase para confirmar a conexión.
- Cambia a chamada a sl_bt_sm_configure para requirir a confirmación da vinculación, como
- Reconstruír e flashear.
- Conéctate con EFRConnect e le a característica protexida como antes. Agora verás unha mensaxe na consola como segue:
Prema PB0 para confirmar a unión. Agora a consola mostrará a clave de acceso que se introducirá no teléfono móbil para a vinculación. Introduza a clave de acceso para completar o proceso de vinculación.
Consello: use o caso predeterminado no manejador de eventos para imprimir unha mensaxe cando a pila envía un evento que non se xestiona. A pila pode estar intentando dicirche algo importante.
Máis aló do Básico
Neste punto, aproveitousetage das funcións de seguridade que ofrece a nosa pila. Agora imos mellorar a implementación mediante un uso racional das funcións á nosa disposición. Os seguintes pasos son opcionais e independentes entre si, podes construír e flashear despois de cada un para ver o comportamento ou probalos todos xuntos.
- Desconéctese en intentos de conexión errados. Este é un bo lugar para detectar ameazas. Se o dispositivo remoto non admite o cifrado/autenticación ou simplemente non ten as claves correctas, pode ser un hacker. Entón, imos romper a conexión. Proba a engadir unha chamada a sl_bt_connection_close() no evento sl_bt_sm_bonding_failed_id. A API está documentada aquí.
Podes probar esta función introducindo o contrasinal incorrecto.
- Só permite a vinculación en determinados momentos. Isto limita o tempo que ten un atacante para formar un vínculo e fai posible utilizar a función "Permitir só conexións vinculadas". O deseñador pode escoller como activar ou desactivar o modo vinculable. Para fins de demostración aquí, activaremos un "modo de configuración" con PB1 e usaremos un temporizador para desactivalo despois de 30 segundos.
- Instala unha segunda instancia da interface de botón simple. Isto permitirá o uso de PB1.
- Modifica a devolución de chamada para enviar un sinal diferente á pila para activar/desactivar a vinculación. O resultado debería ser algo así:
- Modifica o controlador de eventos de sinal externo para que xestione este novo sinal. O resultado debería ser o seguinte:
- Engade un controlador de eventos para o evento sl_bt_evt_system_soft_timer_id. Usarase para desactivar o modo de configuración.
- O seguinte código pódese usar para activar o modo vinculable e permitir todas as conexións ou para desactivar o modo vinculable e só permitir conexións desde dispositivos vinculados:
- Engade a seguinte chamada no xestor de eventos sl_bt_system_boot_id
- Constrúe o proxecto e flashao no dispositivo.
- Proba a conectarte ao dispositivo con EFRConnect. A conexión debería fallar.
- Agora intente premer PB1 antes de conectarse con EFRConnect. Esta vez a conexión será exitosa. Despois de 30 segundos, verás unha mensaxe na consola que indica que o dispositivo está a saír do modo de configuración. Isto significa que agora o modo vinculable está desactivado.
- Aumente a seguridade ao establecer unha conexión. Dado que a seguridade é opcional, deberíamos solicitar unha conexión cifrada canto antes en lugar de confiar nas características do GATT. A API está documentada aquí. Un bo lugar para chamar a esta API é no evento sl_bt_evt_connection_opened_id. O controlador de conexión está dispoñible na variable de conexión.
Identidade segura
Agora que temos un dispositivo Bluetooth máis seguro, imos mellorar o paso de autenticación. Xa viches como verificar a identidade segura dos dispositivos de bóveda coa liña de comandos en laboratorios de formación anteriores. Nesta sección, veremos como un dispositivo BLE pode verificar a identidade doutro dispositivo BLE solicitando a súa cadea de certificados e enviando un desafío. Todas as pezas da bóveda segura posúen o seu propio certificado de dispositivo e certificado de lote. Os certificados de fábrica e raíz están codificados na aplicación cliente para permitir a verificación de toda a cadea de certificados. Consulte AN1268 para obter máis detalles sobre a identidade segura.
- Defina un búfer global para almacenar a sinatura de certificación do dispositivo como se indica a continuación:
- Establece a configuración do xestor de seguranza para usar a sincronización de JustWorks. Isto faise para que a conexión estea cifrada. Na práctica, debería usarse a protección MITM, pero para que o laboratorio sexa sinxelo, usaremos JustWorks. Cambia a chamada a sl_bt_sm_configure ao seguinte:
Ademais, comenta a chamada a setup_mode(true) no controlador de eventos system_boot.
- Abre helpers.c desde os materiais proporcionados e copia o contido en app.c. Estas funcións de devolución de chamada realizan tarefas como segmentar os certificados para que se poidan enviar a través de BLE, verificar a cadea de certificados e xerar/verificar o desafío.
- É necesario determinar o tamaño máximo da unidade de transferencia (MTU) para que os certificados poidan ser segmentados e reensamblados. Defina unha variable global para gardar o MTU como se mostra aquí:
A continuación, engade un controlador de eventos para o evento intercambiado GATT MTU como se mostra a continuación:
- Hai tres características de datos de usuario que se poden ler. Estas características utilízanse para comunicar o certificado do dispositivo, o certificado de lote e o desafío. Utilízase unha función de devolución de chamada para xestionar estas solicitudes de lectura dos usuarios. Engade un controlador para chamar a esta función como se mostra a continuación:
A devolución de chamada usa o MTU do paso 2 para segmentar e enviar os certificados segundo sexa necesario. Tamén se encarga do envío do desafío asinado.
- O cliente envía un desafío, un número aleatorio para ser asinado polo servidor, escribindo unha das características do GATT. Por este motivo, a aplicación debe ter un controlador para o evento de solicitude de escritura do usuario como se indica a continuación:
- Engade soporte de identidade segura files ao proxecto:
- app_se_manager_macro.h, app_se_manager_secure_identity.c e app_se_secure_identity.h dos materiais proporcionados ao proxecto. Estes fileOs contidos conteñen algunhas funcións auxiliares para tarefas como obter o tamaño do certificado, obter a clave pública do dispositivo e asinar un desafío.
- Inclúe app_se_manager_secure_identity.h en app.c.
- Importe o gatt_configuration-attest.btconf proporcionado desde os materiais proporcionados. Esta base de datos do GATT denominada certificación segura que inclúe catro características que se utilizarán para verificar a identidade do noso dispositivo. Estes inclúen o certificado do dispositivo, o certificado de lote, o desafío e a resposta.
- O cliente, que se usa para simular un dispositivo como pasarela, preséntase como un proxecto completo xa que é máis complexo de construír. En xeral, o funcionamento do cliente é o seguinte:
- Busca dispositivos que anuncian o servizo de certificación segura e conéctase a eles.
- Descobre os servizos e as características da base de datos do GATT.
- Le os certificados do dispositivo e do lote e verifica a cadea de certificados usando o certificado de fábrica e raíz que gardou en flash.
- Envía un desafío aleatorio ao servidor.
- Intentos de verificar a resposta ao desafío.
- Pecha a conexión se falla algunha das verificacións.
- Constrúe e flashea o proxecto do servidor no teu servidor WSTK/radioboard.
- Importe o proxecto do cliente desde o cartafol do cliente nos materiais proporcionados. Constrúe e flasheo o proxecto do cliente para o seu cliente WSTK/radioboard.
- Prema reiniciar no cliente WSTK e abra a consola serie. O cliente comeza a buscar dispositivos que anuncian o noso servizo de identidade seguro e conectarase cando atope un.
- O cliente mostrará algunhas mensaxes para indicar que atopou o servidor co servizo desexado e mensaxes de estado sobre a verificación da cadea de certificados.
- Se a verificación pasa, o cliente xerará un número aleatorio, chamado desafío, e enviarao ao servidor. O servidor asinará o desafío coa súa clave de dispositivo privada protexida e a sinatura devolverá ao cliente, isto chámase resposta ao desafío. A continuación, o cliente usa a clave pública no certificado do dispositivo recibido previamente para verificar a sinatura. Isto faise para confirmar que o servidor realmente ten a clave privada que afirmou ter. Se o desafío se verifica correctamente, móstrase unha mensaxe para tal efecto; en caso contrario, pecharase a conexión e móstrase unha mensaxe explicando por que.
- Agora envía un certificado non válido para confirmar que a verificación funciona realmente. Pode modificar user_read_request_cb() para corromper os datos do certificado ou a resposta ao desafío.
Apéndice A – Capacidades de E/S e métodos de emparellamento 
Apéndice B – Modos e niveis de seguridade
O modo de seguridade 1 é o único modo compatible con Bluetooth Low Energy na pila de Silicon Labs. Os niveis son os seguintes:
- Nivel 1 sen seguridade
- Emparejamento non autenticado de nivel 2 con cifrado
- Emparejamento autenticado de nivel 3 con cifrado
- Conexións seguras autenticadas de nivel 4 con cifrado forte (intercambio de claves ECDH)
Documentos/Recursos
![]() |
Laboratorio de seguridade do dispositivo BLE seguro silabs 21Q2 [pdfManual do usuario Laboratorio de seguridade do dispositivo BLE seguro 21Q2, laboratorio de seguridade do dispositivo BLE seguro, laboratorio de seguridade |