silabs 21Q2 secure BLE zariadenie Security Lab

Príručka bezpečnostného laboratória BLE

V tomto laboratóriu uvidíte, ako navrhnúť bezpečnejšie zariadenie BLE. Začneme koncomview o tom, ako používať niektoré funkcie zásobníka a prejsť na niekoľko všeobecných rád o technikách bezpečnejšieho pripojenia a nakoniec uvidíme, ako používať certifikáty zariadení cez BLE na identifikáciu periférneho zariadenia ako autentického.

Začíname

Zariadenie Bluetooth sampAplikácia, na ktorej budete stavať, je určená na použitie s bootloaderom. Ak pracujete s úplne novým EFR32MG21B, nebude mať bootloader. Predpripravený bootloader nájdete v platform\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a vášho SDK.

  1. Začnite so soc-prázdnym sample app. Táto sample app sa používa ako šablóna a je dobrým východiskovým bodom pre akúkoľvek aplikáciu BLE.
    1. Otvorte sprievodcu projektu Silicon Labs zo Simplicity Studio File menu -> nové.
    2. Vyberte BRD4181C a kliknite na tlačidlo 'ďalší'.
    3. Kliknite na začiarkavacie políčko „Bluetooth (9)“ pod typom technológie.
    4. Zvýraznite „Bluetooth – SoC Empty“ a kliknite na tlačidlo Ďalej.
    5. Kliknite na tlačidlo 'Dokončiť'.
  2. Teraz môžete pridať niektoré charakteristiky, aby ste videli, ako sa s chránenými a nechránenými vlastnosťami zaobchádza rozdielne.
    1. Otvorte slcp projektu file dvojitým kliknutím naň v okne Project Explorer
    2. Zvýraznite kartu „SOFTWARE COMPONENTS“ a otvorte konfiguračný nástroj GATT, ako je to znázornené nižšie: Na import súboru gatt_configuration.btconf použite nástroj na import zobrazený nižšie file z priečinka servera v poskytnutých materiáloch.Databáza GATT má vlastnú službu nazývanú „školenie“, pričom niektoré údaje sú chránené a niektoré nie. To vám umožní porovnať, čo sa stane pri pokuse o prístup k chránenej charakteristike s nechránenou charakteristikou. Toto je rýchly spôsob vytvorenia zariadenia s veľmi základným zabezpečením.
  3. Sériový port použijeme na tlač do konzoly v Simplicity Studio, aby sme mohli sledovať, čo sa deje v aplikácii. Najjednoduchší spôsob, ako nájsť tieto komponenty, je vyhľadať ich v dialógovom okne SOFTVÉROVÉ KOMPONENTY, ako je znázornené:
      1. Nainštalujte komponent IO Stream USART
      2. Nainštalujte komponent IO Stream Retarget STDIO
      3. Nainštalujte komponent Standard I/O
      4. Nainštalujte komponent Log
      5. Otvorte komponent Board Control a zapnite „Enable Virtual COM UART“
      6. Kliknite pravým tlačidlom myši na adaptér na paneli 'Debug adapters' a vyberte 'Launch Console'. Vyberte kartu 'Serial 1' a umiestnite kurzor do poľa na zadávanie textu v okne konzoly a stlačením klávesu Enter prebuďte konzolu.
  4. Vytvorte lokálnu premennú v sl_bt_on_event(), ktorá sa nachádza v app.c, na uloženie popisovača pripojenia. Premenná musí byť statická, pretože táto funkcia sa volá vždy, keď zásobník vyvolá udalosť a chceme, aby hodnota bola trvalá. Rukoväť pripojenia sa použije neskôrčasť laboratória.
  5. Vložte nejaké príkazy app_log() pre udalosti, aby ste videli, kedy sme pripojení, režimy zabezpečenia atď
      1. Zahrňte hlavičku app_log.h file
      2. sl_bt_evt_connection_opened – vytlačí rukoväť väzby a uloží rukoväť pripojenia. Ak je rukoväť väzby 0xFF, medzi pripojenými zariadeniami neexistuje žiadna väzba. Upravte existujúci obslužný program udalosti tak, aby vyzeral asi takto:
      3. sl_bt_evt_connection_parameters – bezpečnostný režim. Deje sa tak, aby ste videli, kedy sa zmení bezpečnostný režim. Je rozdiel v číslovaní bezpečnostných režimov, kde bezpečnostný režim 1 je označený hodnotou 0 atď. Pridajte do svojej aplikácie nasledujúcu obsluhu udalosti:
      4. sl_bt_evt_connection_closed_id. Tento obslužný program udalosti je upravený tak, aby aktualizoval rukoväť pripojenia. Hodnota 0xFF sa používa na označenie, že neexistuje žiadne aktívne pripojenie. Príkaz app_log() sa používa na vytlačenie dôvodu zatvorenia spojenia, zoznam stavových kódov je tu. Upravte existujúci obslužný program udalosti tak, aby vyzeral asi takto:
  6. Zostavte a flashujte projekt. V tomto bode spustíme sample app vidieť, ako sa správa bez akýchkoľvek zmien, okrem databázy GATT.
  7. Pripojte sa k mobilnej aplikácii EFRConnect nasledovne:
      1. Klepnite na ikonu „Bluetooth Browser“.
      2. Klepnite na ikonu „Pripojiť“ na zariadení s názvom „Tréning“.
  8. Prečítajte si nechránenú charakteristiku takto:
      1. Klepnite na odkaz „Viac informácií“ pod neznámou službou s UUID a815944e-da1e-9d2a-02e2-a8d15e2430a0.
      2. Prečítajte si nechránenú charakteristiku UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c klepnutím na ikonu 'Prečítať'. Žiadne prekvapenia tu nie sú. Keďže charakteristika nie je žiadnym spôsobom chránená, bude odoslaná ako čistý text.
  9. Teraz si prečítajte chránenú charakteristiku, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Váš mobilný telefón by vás mal vyzvať na spárovanie a pripojenie, správa sa môže líšiť v závislosti od vášho mobilného operačného systému. Po prijatí žiadosti o spárovanie by sa na konzole mala zobraziť správa takto: Poznámka: Príloha A na konci tejto príručky obsahuje prehľad možností I/O a metód párovania. Príloha B sumarizuje režimy zabezpečenia Bluetooth.

Konfigurácia správcu zabezpečenia

Správca zabezpečenia je súčasťou zásobníka Bluetooth, ktorý určuje, ktoré funkcie zabezpečenia sa použijú. Medzi tieto funkcie patrí ochrana typu man-in-the-middle (MITM), LE Secure Connections (aka ECDH), vyžadujúce potvrdenie pre spojenie atď. Bezpečnostný manažér tiež spracováva I/O schopnosti, ktoré sa používajú na určenie, ktorá metóda sa použije na párovanie. /bonding (pozri prílohu A pre zhrnutie). V tejto časti uvidíte jednoduché nastavenie.

  1. Nastavte SM s požadovanou konfiguráciou. Hardvér pre toto laboratórium uľahčuje zobrazenie prístupového kľúča na konzole. Zadanie prístupového kľúča je požiadavka na aktiváciu ochrany MITM. Pridajte nasledujúci kód do vašej obsluhy udalosti sl_bt_system_boot_id. To umožňuje man-in-the-middle a informuje vzdialené zariadenie, že máme možnosť zobraziť prístupový kľúč, ale to je všetko.
  2. Na zobrazenie prístupového kľúča na konzole je potrebný obslužný program udalosti, ako je uvedené nižšie:
  3. Nastavte režim lepenia, maximálny počet lepení atď. Na začiatok použite nasledujúci kód:Tieto nastavenia možno použiť na obmedzenie schopnosti útočníka spojiť sa s vaším zariadením. Ak váš produkt potrebuje mať iba jedného používateľa, môžete obmedziť maximálne väzby na 1. Dobré miesto na pridanie týchto volaní je v obslužnom programe udalosti sl_bt_system_boot_id. Momentálne neumožníme lepenie, aby zvyšok laboratória prebehol hladšie, ale nastavili sme politiku spájania, aby sme umožnili iba jeden zväzok. Dokumentáciu k týmto rozhraniam API nájdete tu a tu .
  4. Pridajte obslužné nástroje udalostí pre sl_bt_evt_sm_bonded_id a sl_bt_evt_sm_bonding_failed_id. Hlavné využitie týchto udalostí je momentálne informatívne, ale neskôr v laboratóriu pridáte funkcie.
  5. Postavte a preblesknite na cieľovú dosku. Spojte sa s EFRConnect a prečítajte si chránenú charakteristiku ako predtým. Tentoraz uvidíte prístupový kľúč zobrazený na konzole. Po zobrazení výzvy zadajte tento prístupový kľúč na svojom mobilnom telefóne.
  6. Vyskúšajte potvrdenie spojenia. Táto funkcia dáva používateľovi možnosť požadovať potvrdenie žiadostí o spojenie. Aplikácia tak získa kontrolu nad tým, s ktorými partnerskými zariadeniami sa spojí. Jednou z možností je požadovať od užívateľa, aby pred povolením väzby stlačil tlačidlo.
    1. Otvorte nastavenia Bluetooth vo svojom mobilnom telefóne a odstráňte väzbu so zariadením EFR32. Implementácie mobilných telefónov sa líšia, takže tento krok nemusí byť potrebný. Ak v nastaveniach Bluetooth nevidíte zariadenie „Tréning“, pokračujte ďalším krokom.
    2. V softvérových komponentoch nainštalujte jednu inštanciu jednoduchého ovládača tlačidiel.
    3. Zahrňte hlavičku file sl_simple_button_instances.h v aplikácii app.c
    4. Pridajte obslužný program pre udalosť sl_bt_evt_sm_bonding_confirm_id. Hlavnou úlohou tejto obsluhy udalosti je informovať používateľa, že vzdialené zariadenie požaduje novú väzbu.
    5. Pridajte funkciu spätného volania pre jednoduchý ovládač tlačidiel na odoslanie signálu do zásobníka Bluetooth oznamujúceho, že bolo stlačené tlačidlo. Toto prepíše predvolené spätné volanie, ktoré sa jednoducho vráti.
    6. Pridajte obsluhu udalosti externého signálu. Táto udalosť je vyvolaná ako odpoveď na prijatie signálu, ako v predchádzajúcom kroku. Udalosť externého signálu sa použije na potvrdenie spojenia.
    7. Zmeňte volanie na sl_bt_sm_configure, aby sa vyžadovalo potvrdenie väzby, ako napr
    8. Prestavať a flashovať.
    9. Spojte sa s EFRConnect a prečítajte si chránenú charakteristiku ako predtým. Teraz sa na konzole zobrazí nasledujúca správa:Stlačte PB0 na potvrdenie spojenia. Teraz konzola zobrazí prístupový kľúč, ktorý sa má zadať na mobilnom telefóne na spojenie. Zadajte prístupový kľúč na dokončenie procesu spájania.

 

Tip: Použite predvolenú veľkosť písmen v obsluhe udalosti na vytlačenie správy, keď zásobník odošle udalosť, ktorá nie je spracovaná. Zásobník sa vám možno snaží povedať niečo dôležité.

Nad rámec základov

V tomto bode ste urobili výhodutage z bezpečnostných prvkov, ktoré náš zásobník ponúka. Teraz poďme zlepšiť implementáciu rozumným využívaním funkcií, ktoré máme k dispozícii. Nasledujúce kroky sú voliteľné a navzájom nezávislé, po každom ich môžete zostaviť a blikať, aby ste videli správanie alebo ich vyskúšali všetky spolu.

  1. Odpojte pri neúspešných pokusoch o spojenie. Toto je dobré miesto na detekciu hrozieb. Ak vzdialené zariadenie nepodporuje šifrovanie/overovanie alebo jednoducho nemá správne kľúče, môže ísť o hackera. Takže prerušme spojenie. Skúste pridať volanie funkcie sl_bt_connection_close() v udalosti sl_bt_sm_bonding_failed_id. Rozhranie API je zdokumentované tu.Túto funkciu môžete otestovať zadaním nesprávneho prístupového kľúča.
  2. Lepenie povoľuje len v určitých časoch. To obmedzuje čas, ktorý má útočník na vytvorenie väzby, a umožňuje použiť funkciu „povoliť iba viazané spojenia“. Návrhár si môže vybrať, ako povoliť alebo zakázať režim spájania. Pre demonštračné účely tu povolíme „režim nastavenia“ s PB1 a pomocou časovača ho po 30 sekundách deaktivujeme.
    1. Nainštalujte druhú inštanciu rozhrania s jednoduchým tlačidlom. To umožní použitie PB1.
    2. Upravte spätné volanie tak, aby odoslalo do zásobníka iný signál, aby ste povolili/zakázali viazanie. Výsledok by mal vyzerať asi takto:
    3. Upravte obsluhu udalosti externého signálu tak, aby spracovávala tento nový signál. Výsledok by mal vyzerať takto:
    4. Pridajte obsluhu udalosti pre udalosť sl_bt_evt_system_soft_timer_id. Toto sa použije na deaktiváciu režimu nastavenia.
    5. Nasledujúci kód možno použiť na aktiváciu viazaného režimu a povolenie všetkých pripojení alebo na zakázanie viazaného režimu a povolenie len pripojení z viazaných zariadení:
    6. Pridajte nasledujúce volanie do obsluhy udalosti sl_bt_system_boot_id
    7. Vytvorte projekt a flashujte ho do zariadenia.
    8. Skúste sa pripojiť k zariadeniu pomocou EFRConnect. Spojenie by malo zlyhať.
    9. Teraz skúste stlačiť PB1 pred pripojením pomocou EFRConnect. Tentoraz bude pripojenie úspešné. Po 30 sekundách sa na konzole zobrazí správa oznamujúca, že zariadenie opúšťa režim nastavenia. To znamená, že režim spájania je teraz zakázaný.
  3. Zvýšte bezpečnosť pri vytváraní spojenia. Keďže zabezpečenie je voliteľné, mali by sme čo najskôr požiadať o šifrované pripojenie, a nie spoliehať sa na charakteristiky GATT. Rozhranie API je zdokumentované tu. Dobré miesto na volanie tohto API je v udalosti sl_bt_evt_connection_opened_id. Rukoväť pripojenia je k dispozícii v premennej pripojenia.

Bezpečná identita

Teraz, keď máme bezpečnejšie zariadenie Bluetooth, vylepšite krok autentifikácie. Ako overiť bezpečnú identitu trezorových zariadení pomocou príkazového riadku ste už videli v predchádzajúcich tréningových laboratóriách. V tejto časti uvidíme, ako môže jedno zariadenie BLE overiť identitu iného zariadenia BLE požiadaním o reťaz certifikátov a odoslaním výzvy. Všetky časti zabezpečeného trezoru majú svoj vlastný certifikát zariadenia a certifikát šarže. Továrenské a koreňové certifikáty sú pevne zakódované do klientskej aplikácie, aby bolo možné overiť celý reťazec certifikátov. Ďalšie podrobnosti o bezpečnej identite nájdete v AN1268.

  1. Definujte globálnu vyrovnávaciu pamäť na ukladanie atestačného podpisu zariadenia, ako je uvedené nižšie:
  2. Nastavte konfiguráciu správcu zabezpečenia na používanie párovania JustWorks. To sa deje tak, že spojenie je šifrované. V praxi by sa mala používať ochrana MITM, ale aby bolo laboratórium jednoduché, použijeme JustWorks. Zmeňte volanie na sl_bt_sm_configure späť na nasledovné:Zakomentujte tiež volanie setup_mode(true) v obslužnom programe udalosti system_boot.
  3. Otvorte helpers.c z poskytnutých materiálov a skopírujte obsah do app.c. Tieto funkcie spätného volania vykonávajú úlohy, ako je segmentácia certifikátov, aby sa dali odoslať cez BLE, overenie reťazca certifikátov a generovanie/overenie výzvy.
  4. Je potrebné určiť maximálnu veľkosť prenosovej jednotky (MTU), aby bolo možné certifikáty segmentovať a znova zostaviť. Definujte globálnu premennú na uloženie MTU, ako je znázornené tu:Potom pridajte obslužný program udalosti pre udalosť vymenenú v rámci GATT MTU, ako je uvedené nižšie:
  5. Existujú tri charakteristiky používateľských údajov, ktoré možno prečítať. Tieto charakteristiky sa používajú na komunikáciu certifikátu zariadenia, certifikátu šarže a výzvy. Na spracovanie týchto požiadaviek používateľa na čítanie sa používa funkcia spätného volania. Pridajte obslužný program na volanie tejto funkcie, ako je uvedené nižšie:Spätné volanie používa MTU z kroku č. 2 na segmentovanie a odoslanie certifikátov podľa potreby. Zaoberá sa aj odoslaním podpísanej výzvy.
  6. Klient odošle výzvu, náhodné číslo, ktoré má podpísať server, zapísaním jednej z charakteristík GATT. Z tohto dôvodu musí mať aplikácia obslužný program pre udalosť požiadavky používateľa na zápis, ako je uvedené nižšie:
  7. Pridajte podporu bezpečnej identity filek projektu:
    1. app_se_manager_macro.h, app_se_manager_secure_identity.c a app_se_secure_identity.h z poskytnutých materiálov do projektu. Títo files obsahujú niektoré pomocné funkcie pre úlohy, ako je získanie veľkosti certifikátu, získanie verejného kľúča zariadenia a podpísanie výzvy.
    2. Zahrňte app_se_manager_secure_identity.h do app.c.
  8. Importujte poskytnutý súbor gatt_configuration-attest.btconf z poskytnutých materiálov. Táto databáza GATT sa nazýva bezpečná atestácia, ktorá obsahuje štyri charakteristiky, ktoré sa použijú na overenie identity nášho zariadenia. Patria sem certifikát zariadenia, certifikát šarže, výzva a odpoveď.
  9. Klient, ktorý sa používa na simuláciu zariadenia, akým je brána, je poskytovaný ako kompletný projekt, pretože jeho zostavenie je zložitejšie. Vo všeobecnosti je činnosť klienta nasledovná:
    1. Vyhľadá zariadenia propagujúce službu zabezpečenej atestácie a pripojí sa k nim.
    2. Objavuje databázové služby a vlastnosti GATT.
    3. Číta certifikáty zariadenia a dávky a overuje reťazec certifikátov pomocou továrenského a koreňového certifikátu, ktorý má uložený vo flashi.
    4. Odošle na server náhodnú výzvu.
    5. Pokusy o overenie odpovede na výzvu.
    6. Zatvorí spojenie, ak jedno overenie zlyhá.
  10. Zostavte a flashujte projekt servera na váš server WSTK /radioboard.
  11. Importujte projekt klienta z priečinka klienta v poskytnutých materiáloch. Zostavte a flashujte klientsky projekt do vášho klienta WSTK/rádioboard.
  12. Stlačte reset na klientskom WSTK a otvorte sériovú konzolu. Klient začne vyhľadávať zariadenia propagujúce našu službu zabezpečenej identity a pripojí sa, keď nejaké nájde.
  13. Klient zobrazí niekoľko správ, ktoré indikujú, že našiel server s požadovanou službou a stavové správy o overení reťazca certifikátov.
  14. Ak overenie prebehne, klient vygeneruje náhodné číslo, ktoré sa nazýva výzva, a odošle ho na server. Server podpíše výzvu svojim bezpečne uloženým súkromným kľúčom zariadenia a podpisom späť klientovi, nazýva sa to odpoveď na výzvu. Klient potom použije verejný kľúč v predtým prijatom certifikáte zariadenia na overenie podpisu. Toto sa robí, aby sa potvrdilo, že server skutočne má súkromný kľúč, ktorý tvrdil, že má. Ak je výzva overená správne, zobrazí sa správa o tom; v opačnom prípade sa spojenie ukončí a zobrazí sa správa vysvetľujúca dôvod.
  15. Teraz odošlite neplatný certifikát, aby ste potvrdili, že overenie naozaj funguje. Môžete upraviť user_read_request_cb(), aby ste poškodili buď údaje certifikátu, alebo odpoveď na výzvu.

Príloha A – I/O schopnosti a metódy párovania
Príloha B – Režimy a úrovne zabezpečenia

Bezpečnostný režim 1 je jediný režim podporovaný pre Bluetooth Low Energy v zásobníku Silicon Labs. Úrovne sú nasledovné:

  • Úroveň 1 bez zabezpečenia
  • Neoverené párovanie úrovne 2 so šifrovaním
  • Overené párovanie úrovne 3 so šifrovaním
  • Overené bezpečné pripojenia úrovne 4 so silným šifrovaním (výmena kľúčov ECDH)

 

Dokumenty / zdroje

silabs 21Q2 secure BLE zariadenie Security Lab [pdfPoužívateľská príručka
Zabezpečené laboratórium zabezpečenia BLE zariadenia 21Q2, bezpečnostné laboratórium zabezpečenia BLE zariadenia, bezpečnostné laboratórium

Referencie

Zanechajte komentár

Vaša emailová adresa nebude zverejnená. Povinné polia sú označené *