silabs 21Q2 secure BLE zařízení Security Lab
Příručka bezpečnostní laboratoře BLE
V této laboratoři uvidíte, jak navrhnout bezpečnější zařízení BLE. Začneme koncemview jak používat některé funkce zásobníku a přejít k některým obecným radám o technikách pro bezpečnější připojení a nakonec uvidíme, jak používat certifikáty zařízení přes BLE k identifikaci periferie jako autentické.
Začínáme
Zařízení Bluetooth sampAplikace, na které budete stavět, je určena k použití s bootloaderem. Pokud pracujete se zbrusu novým EFR32MG21B, nebude mít bootloader. Předpřipravený bootloader najdete v platform\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a vaší sady SDK.
- Začněte soc-prázdným sampaplikace. Tato sample app se používá jako šablona a je dobrým výchozím bodem pro jakoukoli aplikaci BLE.
- Otevřete Průvodce projektu Silicon Labs ze Simplicity Studio File menu -> nové.
- Vyberte BRD4181C a klikněte na tlačítko 'další'.
- Zaškrtněte políčko „Bluetooth (9)“ pod typem technologie.
- Zvýrazněte „Bluetooth – SoC Empty“ a klikněte na tlačítko Další.
- Klikněte na tlačítko 'Dokončit'.
- Nyní můžete přidat některé charakteristiky, abyste viděli, jak se s chráněnými a nechráněnými charakteristikami zachází odlišně.
- Otevřete slcp projektu file poklepáním na něj v okně Project Explorer
- Zvýrazněte záložku 'SOFTWARE COMPONENTS' a otevřete konfigurační nástroj GATT, jak je znázorněno níže:
K importu souboru gatt_configuration.btconf použijte nástroj pro import zobrazený níže file ze složky serveru v poskytnutých materiálech.
Databáze GATT má vlastní službu nazvanou „Školení“, kde jsou některá data chráněna a některá nikoli. To vám umožní porovnat, co se stane při pokusu o přístup k chráněné charakteristice s nechráněnou charakteristikou. Jedná se o rychlý způsob, jak vytvořit zařízení s velmi základním zabezpečením.
- Sériový port použijeme k tisku do konzole v Simplicity Studio, abychom mohli sledovat, co se v aplikaci děje. Nejjednodušší způsob, jak najít tyto součásti, je vyhledat je v dialogovém okně SOFTWAROVÉ KOMPONENTY, jak je znázorněno:
-
- Nainstalujte komponentu IO Stream USART
- Nainstalujte komponentu IO Stream Retarget STDIO
- Nainstalujte komponentu Standard I/O
- Nainstalujte komponentu Log
- Otevřete komponent Board Control a zapněte 'Enable Virtual COM UART'
- Klepněte pravým tlačítkem myši na adaptér na panelu 'Debug adapters' a vyberte 'Launch Console'. Vyberte kartu 'Serial 1', umístěte kurzor do pole pro zadávání textu v okně konzoly a stisknutím klávesy Enter probuďte konzoli.
-
- Vytvořte místní proměnnou v sl_bt_on_event(), která se nachází v app.c, pro uložení popisovače připojení. Proměnná musí být statická, protože tato funkce je volána pokaždé, když zásobník vyvolá událost a my chceme, aby byla hodnota trvalá. Připojovací úchyt bude použit později
část laboratoře.
- Vložte nějaké příkazy app_log() pro události, abyste viděli, kdy jsme připojeni, režimy zabezpečení atd
-
- Zahrňte záhlaví app_log.h file
- sl_bt_evt_connection_opened – vytiskne popisovač vazby a uloží popisovač připojení. Pokud je úchyt vazby 0xFF, mezi připojenými zařízeními neexistuje žádná vazba. Upravte existující obslužnou rutinu události tak, aby vypadala nějak takto:
- sl_bt_evt_connection_parameters – bezpečnostní režim. To se provádí proto, abyste viděli, kdy se změní režim zabezpečení. Je rozdíl v číslování bezpečnostních režimů, kde je bezpečnostní režim 1 vyčíslen hodnotou 0 atd. . Přidejte do aplikace následující obslužnou rutinu události:
- sl_bt_evt_connection_closed_id. Tato obslužná rutina události je upravena tak, aby aktualizovala popisovač připojení. Hodnota 0xFF se používá k označení, že neexistuje žádné aktivní připojení. Příkaz app_log() se používá k vytištění důvodu uzavření spojení, seznam stavových kódů je zde. Upravte existující obslužnou rutinu události tak, aby vypadala nějak takto:
- Zahrňte záhlaví app_log.h file
-
- Sestavte a flashujte projekt. V tomto okamžiku spustíme sampaplikace, abyste viděli, jak se chová bez jakýchkoli změn, kromě databáze GATT.
- Připojte se k mobilní aplikaci EFRConnect následovně:
-
- Klepněte na ikonu 'Bluetooth Browser'.
- Klepněte na ikonu 'Připojit' na zařízení s názvem 'Trénink'.
-
- Přečtěte si nechráněnou charakteristiku následovně:
-
- Klepněte na odkaz „Další informace“ pod neznámou službou s UUID a815944e-da1e-9d2a-02e2-a8d15e2430a0.
- Přečtěte si nechráněnou charakteristiku, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c klepnutím na ikonu 'Read'. Tady žádné překvapení. Vzhledem k tomu, že charakteristika není nijak chráněna, bude odeslána jako prostý text.
-
- Nyní si přečtěte chráněnou charakteristiku, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Váš mobilní telefon by vás měl vyzvat ke spárování a připojení, zpráva se může lišit v závislosti na vašem mobilním OS. Po přijetí požadavku na spárování by se na konzole měla zobrazit následující zpráva:
Poznámka: Dodatek A na konci této příručky obsahuje přehled možností I/O a metod párování. Dodatek B shrnuje režimy zabezpečení Bluetooth.
Konfigurace správce zabezpečení
Správce zabezpečení je součástí sady Bluetooth, která určuje, které funkce zabezpečení se použijí. Mezi tyto funkce patří ochrana man-in-the-middle (MITM), LE Secure Connections (aka ECDH), vyžadující potvrzení pro spojení atd. Správce zabezpečení také zpracovává I/O funkce, které se používají k určení, která metoda se použije pro párování. /bonding (shrnutí viz příloha A). V této části uvidíte jednoduché nastavení.
- Nastavte SM s požadovanou konfigurací. Hardware pro tuto laboratoř usnadňuje zobrazení přístupového klíče na konzole. Zadání přístupového klíče je požadavkem pro aktivaci ochrany MITM. Přidejte následující kód do obslužné rutiny události sl_bt_system_boot_id. To umožňuje man-in-the-middle a informuje vzdálené zařízení, že máme možnost zobrazit přístupový klíč, ale to je vše.
- Chcete-li zobrazit přístupový klíč na konzole, je vyžadována obsluha události, jak je uvedeno níže:
- Nastavte režim lepení, maximální počet lepení atd. Pro začátek použijte následující kód:
Tato nastavení lze použít k omezení schopnosti útočníka spojit se s vaším zařízením. Pokud váš produkt potřebuje mít pouze jednoho uživatele, můžete omezit maximální vazby na 1. Dobrým místem pro přidání těchto volání je obslužná rutina události sl_bt_system_boot_id. V tuto chvíli nepovolíme spojování, aby zbytek laboratoře proběhl hladce, ale nastavili jsme politiku spojování, která umožňuje pouze jeden spoj. Dokumentaci k těmto rozhraním API naleznete zde a zde .
- Přidejte obslužné rutiny událostí pro sl_bt_evt_sm_bonded_id a sl_bt_evt_sm_bonding_failed_id. Hlavní využití pro tyto události je aktuálně informativní, ale později v laboratoři přidáte další funkce.
- Stavte a flashujte na cílovou desku. Připojte se pomocí EFRConnect a přečtěte si chráněnou charakteristiku jako dříve. Tentokrát se na konzole zobrazí přístupový klíč. Po výzvě zadejte tento přístupový klíč na svém mobilním telefonu.
- Vyzkoušejte potvrzení spojení. Tato funkce dává uživateli možnost vyžadovat potvrzení požadavků na spojení. Aplikace tak získá kontrolu nad tím, se kterými peer zařízeními se spojí. Jednou z možností je vyžadovat, aby uživatel před povolením vazby stiskl tlačítko.
- Otevřete nastavení Bluetooth ve svém mobilním telefonu a odstraňte vazbu se zařízením EFR32. Implementace mobilních telefonů se liší, takže tento krok nemusí být nutný. Pokud v nastavení Bluetooth nevidíte zařízení 'Trénink', pokračujte dalším krokem.
- V softwarových komponentách nainstalujte jednu instanci jednoduchého ovladače tlačítka.
- Zahrnout záhlaví file sl_simple_button_instances.h v aplikaci app.c
- Přidejte obslužnou rutinu pro událost sl_bt_evt_sm_bonding_confirm_id. Hlavním úkolem této obsluhy události je informovat uživatele, že vzdálené zařízení požaduje nové spojení.
- Přidejte funkci zpětného volání pro jednoduchý ovladač tlačítek, aby se do zásobníku Bluetooth poslal signál, že bylo stisknuto tlačítko. To přepíše výchozí zpětné volání, které se jednoduše vrátí.
- Přidejte obslužnou rutinu události externího signálu. Tato událost je vyvolána v reakci na přijetí signálu, jako v předchozím kroku. Událost externího signálu bude použita k potvrzení spojení.
- Změňte volání na sl_bt_sm_configure, aby vyžadovalo potvrzení spojení, jako je např
- Znovu sestavit a flash.
- Připojte se pomocí EFRConnect a přečtěte si chráněnou charakteristiku jako dříve. Nyní se na konzole zobrazí následující zpráva:
Stiskněte PB0 pro potvrzení spojení. Nyní konzola zobrazí přístupový klíč, který je třeba zadat na mobilním telefonu pro spojení. Pro dokončení procesu spojování zadejte přístupový klíč.
Tip: Použijte výchozí velikost písmen v obslužné rutině události k vytištění zprávy, když zásobník odešle událost, která není zpracována. Zásobník se vám možná snaží říct něco důležitého.
Nad rámec základů
V tomto okamžiku jste získali náskoktage z bezpečnostních funkcí, které náš zásobník nabízí. Nyní pojďme zlepšit implementaci pomocí moudrého používání funkcí, které máme k dispozici. Následující kroky jsou volitelné a na sobě nezávislé, po každém můžete sestavit a flashnout, abyste viděli chování nebo je vyzkoušeli všechny dohromady.
- Při neúspěšných pokusech o spojení odpojte. Toto je dobré místo pro detekci hrozeb. Pokud vzdálené zařízení nepodporuje šifrování/ověření nebo jen nemá správné klíče, může to být hacker. Takže přerušme spojení. Zkuste přidat volání sl_bt_connection_close() v události sl_bt_sm_bonding_failed_id. API je zdokumentováno zde.
Tuto funkci můžete vyzkoušet zadáním nesprávného přístupového klíče.
- Povolení lepení pouze v určitých časech. To omezuje dobu, po kterou musí útočník vytvořit vazbu, a umožňuje použít funkci „povolit pouze spojená spojení“. Návrhář si může vybrat, jak povolit nebo zakázat bondovatelný režim. Pro demonstrační účely zde povolíme „režim nastavení“ u PB1 a pomocí časovače jej po 30 sekundách deaktivujeme.
- Nainstalujte druhou instanci rozhraní jednoduchého tlačítka. To umožní použití PB1.
- Upravte zpětné volání tak, aby posílalo do zásobníku jiný signál, abyste povolili/zakázali spojování. Výsledek by měl vypadat nějak takto:
- Upravte obsluhu události externího signálu tak, aby zpracovávala tento nový signál. Výsledek by měl vypadat takto:
- Přidejte obslužnou rutinu události pro událost sl_bt_evt_system_soft_timer_id. Slouží k deaktivaci režimu nastavení.
- Následující kód lze použít k aktivaci bondable režimu a povolení všech připojení nebo k deaktivaci bondable režimu a povolení pouze připojení z připojených zařízení:
- Přidejte následující volání do obslužné rutiny události sl_bt_system_boot_id
- Sestavte projekt a flashujte jej do zařízení.
- Zkuste se připojit k zařízení pomocí EFRConnect. Připojení by mělo selhat.
- Nyní zkuste před připojením pomocí EFRConnect stisknout PB1. Tentokrát bude připojení úspěšné. Po 30 sekundách se na konzole zobrazí zpráva oznamující, že zařízení opouští režim nastavení. To znamená, že bondable režim je nyní zakázán.
- Zvyšte bezpečnost při vytváření spojení. Vzhledem k tomu, že zabezpečení je volitelné, měli bychom požádat o šifrované připojení co nejdříve, než se spoléhat na charakteristiky GATT. API je zdokumentováno zde. Vhodným místem pro volání tohoto rozhraní API je událost sl_bt_evt_connection_opened_id. Popisovač připojení je k dispozici v proměnné připojení.
Zabezpečená identita
Nyní, když máme bezpečnější zařízení Bluetooth, můžeme zlepšit krok ověřování. Jak ověřit bezpečnou identitu zařízení trezoru pomocí příkazového řádku jste již viděli v předchozích školicích laboratořích. V této části uvidíme, jak může jedno zařízení BLE ověřit identitu jiného zařízení BLE tím, že si vyžádá jeho řetězec certifikátů a odešle výzvu. Všechny součásti zabezpečeného trezoru mají vlastní certifikát zařízení a certifikát šarže. Tovární a kořenové certifikáty jsou pevně zakódovány do klientské aplikace, aby bylo možné ověřit celý řetězec certifikátů. Další podrobnosti o zabezpečené identitě naleznete v AN1268.
- Definujte globální vyrovnávací paměť pro uložení atestačního podpisu zařízení, jak je uvedeno níže:
- Nastavte konfiguraci správce zabezpečení tak, aby používala párování JustWorks. To se provádí tak, že připojení je šifrováno. V praxi by se měla používat ochrana MITM, ale aby byla laboratoř jednoduchá, použijeme JustWorks. Změňte volání na sl_bt_sm_configure zpět na následující:
Také zakomentujte volání setup_mode(true) v obslužné rutině události system_boot.
- Otevřete helpers.c z poskytnutých materiálů a zkopírujte obsah do app.c. Tyto funkce zpětného volání provádějí úkoly, jako je segmentace certifikátů, aby mohly být odeslány přes BLE, ověření řetězce certifikátů a generování/ověření výzvy.
- Je nutné určit maximální velikost přenosové jednotky (MTU), aby bylo možné certifikáty segmentovat a znovu sestavit. Definujte globální proměnnou pro uložení MTU, jak je znázorněno zde:
Poté přidejte obslužnou rutinu události pro událost vyměněnou GATT MTU, jak je znázorněno níže:
- Existují tři charakteristiky uživatelských dat, které lze číst. Tyto charakteristiky se používají ke komunikaci certifikátu zařízení, certifikátu šarže a výzvy. Ke zpracování těchto uživatelských požadavků na čtení se používá funkce zpětného volání. Přidejte obslužnou rutinu pro volání této funkce, jak je znázorněno níže:
Zpětné volání používá MTU z kroku č. 2 k segmentaci a odeslání certifikátů podle potřeby. Zvládá i odeslání podepsané výzvy.
- Klient odešle výzvu, náhodné číslo, které má podepsat server, zapsáním jedné z charakteristik GATT. Z tohoto důvodu musí mít aplikace obslužnou rutinu pro událost uživatelského zápisu, jak je uvedeno níže:
- Přidejte podporu zabezpečené identity filek projektu:
- app_se_manager_macro.h, app_se_manager_secure_identity.c a app_se_secure_identity.h z poskytnutých materiálů do projektu. Tyto files obsahují některé pomocné funkce pro úkoly, jako je získání velikosti certifikátu, získání veřejného klíče zařízení a podepsání výzvy.
- Zahrnout app_se_manager_secure_identity.h do app.c.
- Importujte poskytnutý gatt_configuration-attest.btconf z poskytnutých materiálů. Tato databáze GATT se nazývá bezpečná atestace, která zahrnuje čtyři charakteristiky, které budou použity k ověření identity našeho zařízení. Patří mezi ně certifikát zařízení, dávkový certifikát, výzva a odpověď.
- Klient, který se používá k simulaci zařízení, jako je brána, je poskytován jako kompletní projekt, protože je složitější na sestavení. Obecně je činnost klienta následující:
- Vyhledá zařízení inzerující zabezpečenou atestační službu a připojí se k nim.
- Objevuje databázové služby a vlastnosti GATT.
- Načte certifikáty zařízení a dávky a ověří řetězec certifikátů pomocí továrního a kořenového certifikátu, který má uložený ve flashi.
- Odešle na server náhodnou výzvu.
- Pokusy ověřit odpověď na výzvu.
- Uzavře připojení, pokud se některé ověření nezdaří.
- Sestavte a flashujte projekt serveru na váš server WSTK /radioboard.
- Importujte klientský projekt ze složky klienta v poskytnutých materiálech. Sestavte a flashujte klientský projekt na klientskou WSTK/radioboard.
- Stiskněte reset na klientském WSTK a otevřete sériovou konzolu. Klient začne vyhledávat zařízení inzerující naši službu zabezpečené identity a připojí se, když nějaké najde.
- Klient zobrazí několik zpráv, které označují, že našel server s požadovanou službou a stavové zprávy o ověření řetězce certifikátů.
- Pokud ověření projde, klient vygeneruje náhodné číslo, které se nazývá výzva, a odešle ho na server. Server podepíše výzvu svým bezpečně uloženým klíčem soukromého zařízení a podpisem zpět klientovi, tomu se říká odpověď na výzvu. Klient poté použije veřejný klíč v dříve přijatém certifikátu zařízení k ověření podpisu. To se provádí za účelem potvrzení, že server skutečně má soukromý klíč, který tvrdil, že má. Pokud je výzva ověřena správně, zobrazí se zpráva s tímto účinkem; jinak se spojení ukončí a zobrazí se zpráva vysvětlující proč.
- Nyní odešlete neplatný certifikát, abyste potvrdili, že ověření skutečně funguje. Můžete upravit user_read_request_cb() tak, aby poškodila buď data certifikátu, nebo odpověď na výzvu.
Dodatek A – I/O schopnosti a metody párování 
Dodatek B – Režimy a úrovně zabezpečení
Bezpečnostní režim 1 je jediný režim podporovaný pro Bluetooth Low Energy v zásobníku Silicon Labs. Úrovně jsou následující:
- Úroveň 1 bez zabezpečení
- Neověřené párování úrovně 2 se šifrováním
- Ověřené párování úrovně 3 se šifrováním
- Ověřená zabezpečená připojení úrovně 4 se silným šifrováním (výměna klíčů ECDH)
Dokumenty / zdroje
![]() |
silabs 21Q2 secure BLE zařízení Security Lab [pdfUživatelská příručka Zabezpečená laboratoř zabezpečení BLE zařízení 21Q2, bezpečnostní laboratoř zabezpečení zařízení BLE, bezpečnostní laboratoř |