silabs 21Q2 бяспечная прылада BLE Security Lab
Кіраўніцтва лабараторыі бяспекі BLE
У гэтай лабараторыі вы ўбачыце, як стварыць больш бяспечную прыладу BLE. Пачнем з надпісуview як выкарыстоўваць некаторыя функцыі стэка і пяройдзем да некаторых агульных парад аб метадах для больш бяспечных злучэнняў і, нарэшце, мы ўбачым, як выкарыстоўваць сертыфікаты прылады праз BLE для ідэнтыфікацыі перыферыйнага прылады як сапраўднага.
Пачатак працы
Bluetooth sampПрыкладанне, якое вы будзеце ствараць, прызначана для выкарыстання з загрузчыкам. Калі вы працуеце з новым EFR32MG21B, у яго не будзе загрузніка. Вы можаце знайсці загадзя ўбудаваны загрузнік у платформе\загрузнік\sampтэчка le-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a вашага SDK.
- Пачніце з soc-пустога sample дадатак. Гэта сample app выкарыстоўваецца ў якасці шаблону і служыць добрай адпраўной кропкай для любога прыкладання BLE.
- Адкрыйце майстар праектаў Silicon Labs з Simplicity Studio File меню -> новае.
- Выберыце BRD4181C і націсніце кнопку «Далей».
- Націсніце поле "Bluetooth (9)" пад тыпам тэхналогіі.
- Вылучыце «Bluetooth – SoC Empty» і націсніце «Далей».
- Націсніце кнопку «Завяршыць».
- Цяпер вы можаце дадаць некаторыя характарыстыкі, каб убачыць, як па-рознаму разглядаюцца абароненыя і неабароненыя характарыстыкі.
- Адкрыйце slcp праекта file двойчы пстрыкнуўшы яго ў акне Правадыра праекта
- Вылучыце ўкладку «ПРАГРАМНЫЯ КАМПАНЕНТЫ» і адкрыйце інструмент канфігурацыі GATT, як паказана ніжэй:
І выкарыстоўвайце інструмент імпарту, паказаны ніжэй, каб імпартаваць gatt_configuration.btconf file з папкі сервера ў прадстаўленых матэрыялах.
База дадзеных GATT мае спецыялізаваную службу пад назвай "Навучанне", частка даных якой абаронена, а частка - не. Гэта дазваляе параўнаць тое, што адбываецца пры спробе атрымаць доступ да абароненай характарыстыкі з неабароненай. Гэта хуткі спосаб зрабіць прыладу з элементарнай бяспекай.
- Мы будзем выкарыстоўваць паслядоўны порт для друку на кансолі ў Simplicity Studio, каб адсочваць, што адбываецца ў дадатку. Самы просты спосаб знайсці гэтыя кампаненты - выканаць пошук у дыялогавым акне КАМПАНЕНТЫ ПРАГРАМНАГА ЗАБЕСПЯЧЭННЯ, як паказана:
-
- Усталюйце кампанент IO Stream USART
- Усталюйце кампанент IO Stream Retarget STDIO
- Усталюйце стандартны кампанент уводу-вываду
- Усталюйце кампанент Log
- Адкрыйце кампанент кіравання платай і ўключыце "Уключыць віртуальны COM UART"
- Пстрыкніце правай кнопкай мышы адаптар на панэлі «Адаптары адладкі» і выберыце «Запусціць кансоль». Абярыце ўкладку «Серыйны нумар 1», пастаўце курсор у поле ўводу тэксту ў акне кансолі і націсніце клавішу ўводу, каб абудзіць кансоль.
-
- Стварыце лакальную зменную ў sl_bt_on_event(), якая знаходзіцца ў app.c, для захавання маркера злучэння. Пераменная павінна быць статычнай, паколькі гэтая функцыя выклікаецца кожны раз, калі стэк выклікае падзею, і мы хочам, каб значэнне было пастаянным. Ручка злучэння будзе выкарыстоўвацца пазней
раздзел лаб.
- Устаўце некалькі аператараў app_log() для падзей, каб бачыць, калі мы падключаны, рэжымы бяспекі і г.д
-
- Уключыце загаловак app_log.h file
- sl_bt_evt_connection_opened – надрукаваць маркер сувязі і захаваць маркер злучэння. Калі маркер сувязі 0xFF, сувязь паміж падлучанымі прыладамі не існуе. Змяніце існуючы апрацоўшчык падзей так, каб ён выглядаў прыкладна так:
- sl_bt_evt_connection_parameters – рэжым бяспекі. Гэта робіцца для таго, каб вы маглі бачыць, калі змяняецца рэжым бяспекі. Існуе розніца ў нумарацыі рэжымаў бяспекі, дзе рэжым бяспекі 1 пералічваецца са значэннем 0 і г.д. Дадайце ў дадатак наступны апрацоўшчык падзей:
- sl_bt_evt_connection_closed_id. Гэты апрацоўшчык падзей зменены для абнаўлення маркера злучэння. Значэнне 0xFF выкарыстоўваецца, каб паказаць, што няма актыўнага злучэння. Каманда app_log() выкарыстоўваецца для раздрукоўкі прычыны закрыцця злучэння, спіс кодаў стану знаходзіцца тут. Змяніце існуючы апрацоўшчык падзей так, каб ён выглядаў прыкладна так:
- Уключыце загаловак app_log.h file
-
- Збярыце і прашыце праект. У гэты момант мы запусцім sample app, каб убачыць, як ён паводзіць сябе без якіх-небудзь змен, акрамя базы дадзеных GATT.
- Падключыцеся да мабільнай праграмы EFRConnect наступным чынам:
-
- Дакраніцеся да значка «Bluetooth Browser».
- Дакраніцеся да значка «Падключыць» на прыладзе пад назвай «Навучанне».
-
- Прачытайце неабароненую характарыстыку наступным чынам:
-
- Дакраніцеся да спасылкі «Дадатковая інфармацыя» пад невядомай службай з UUID a815944e-da1e-9d2a-02e2-a8d15e2430a0.
- Прачытайце неабароненую характарыстыку UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c, націснуўшы на значок «Прачытаць». Тут без сюрпрызаў. Паколькі характарыстыка ніяк не абаронена, яна будзе адпраўлена адкрытым тэкстам.
-
- Цяпер прачытайце абароненую характарыстыку UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Ваш мабільны тэлефон павінен прапанаваць спалучэнне і падключэнне, паведамленне можа адрознівацца ў залежнасці ад вашай мабільнай АС. Пасля прыняцця запыту на спалучэнне на кансолі павінна з'явіцца наступнае паведамленне:
Заўвага: Дадатак А ў канцы гэтага кіраўніцтва змяшчае зводку магчымасцей уводу/вываду і метадаў спалучэння для даведкі. Дадатак B абагульняе рэжымы бяспекі Bluetooth.
Канфігурацыя менеджэра бяспекі
Менеджэр бяспекі з'яўляецца часткай стэка Bluetooth, які вызначае, якія функцыі бяспекі выкарыстоўваюцца. Гэтыя функцыі ўключаюць у сябе абарону "чалавек пасярэдзіне" (MITM), бяспечныя злучэнні LE (ён жа ECDH), патрабаванне пацверджання для злучэння і г. д. Менеджэр бяспекі таксама апрацоўвае магчымасці ўводу/вываду, якія выкарыстоўваюцца для вызначэння метаду спалучэння /bonding (зводку гл. у Дадатку A). У гэтым раздзеле вы ўбачыце простую наладу.
- Наладзьце SM з патрэбнай канфігурацыяй. Апаратнае забеспячэнне гэтай лабараторыі дазваляе лёгка паказваць ключ доступу на кансолі. Увод ключа доступу з'яўляецца патрабаваннем для ўключэння абароны MITM. Дадайце наступны код у свой апрацоўшчык падзей sl_bt_system_boot_id. Гэта ўключае "чалавека пасярэдзіне" і інфармуе аддаленую прыладу, што ў нас ёсць магчымасць паказаць ключ доступу, але гэта ўсё.
- Для адлюстравання ключа доступу на кансолі патрабуецца апрацоўшчык падзей, як паказана ніжэй:
- Усталюйце рэжым злучэння, максімальную колькасць злучэнняў і г.д. Выкарыстоўвайце наступны код, каб пачаць:
Гэтыя налады можна выкарыстоўваць для абмежавання магчымасці зламысніка звязацца з вашай прыладай. Калі ваш прадукт павінен мець толькі аднаго карыстальніка, вы можаце абмежаваць максімальную колькасць аблігацый да 1. Добрае месца, каб дадаць гэтыя выклікі, знаходзіцца ў апрацоўшчыку падзей sl_bt_system_boot_id. Зараз мы не будзем уключаць злучэнне, каб астатняя частка лабараторыі працавала больш гладка, але мы задалі палітыку злучэння, каб дазволіць толькі адно злучэнне. Для даведкі, дакументацыя для гэтых API знаходзіцца тут і тут.
- Дадайце апрацоўшчыкі падзей для sl_bt_evt_sm_bonded_id і sl_bt_evt_sm_bonding_failed_id. Асноўнае выкарыстанне гэтых падзей у цяперашні час інфарматыўнае, але пазней у лабараторыі вы дадасце функцыянальнасць.
- Зборка і флэш на мэтавай дошцы. Падключыцеся да EFRConnect і прачытайце абароненую характарыстыку, як і раней. На гэты раз вы ўбачыце ключ доступу, які адлюстроўваецца на кансолі. Калі будзе прапанавана, увядзіце гэты ключ доступу на мабільным тэлефоне.
- Паспрабуйце пацвярджэнне злучэння. Гэтая функцыя дае карыстальніку магчымасць патрабаваць пацверджання запытаў на злучэнне. Гэта дае прыкладанню кантроль над тым, з якімі аднарангавымі прыладамі яно звязваецца. Адна з магчымасцей - запатрабаваць ад карыстальніка націснуць кнопку, перш чым дазволіць сувязь.
- Адкрыйце налады Bluetooth у вашым мабільным тэлефоне і выдаліце сувязь з прыладай EFR32. Рэалізацыі мабільных тэлефонаў адрозніваюцца, таму гэты крок можа не спатрэбіцца. Калі вы не бачыце прылады «Навучанне» ў наладах Bluetooth, проста перайдзіце да наступнага кроку.
- У праграмных кампанентах усталюйце адзін асобнік простага апрацоўшчыка кнопак.
- Уключыце загаловак file sl_simple_button_instances.h у app.c
- Дадайце апрацоўшчык для падзеі sl_bt_evt_sm_bonding_confirm_id. Асноўная задача гэтага апрацоўшчыка падзей - інфармаваць карыстальніка аб тым, што аддаленая прылада запытвае новую сувязь.
- Дадайце функцыю зваротнага выкліку для простага апрацоўшчыка кнопак, каб адправіць сігнал у стэк Bluetooth, які паказвае, што кнопка была націснута. Гэта перавызначае зваротны выклік па змаўчанні, які проста вяртаецца.
- Дадайце знешні апрацоўшчык падзей сігналу. Гэта падзея ўзнікае ў адказ на атрыманне сігналу, напрыклад, на папярэднім этапе. Падзея знешняга сігналу будзе выкарыстоўвацца для пацверджання сувязі.
- Зменіце выклік на sl_bt_sm_configure, каб патрабаваць пацверджання злучэння, напрыклад
- Перабудаваць і прашыць.
- Падключыцеся да EFRConnect і прачытайце абароненую характарыстыку, як і раней. Цяпер вы ўбачыце на кансолі наступнае паведамленне:
Націсніце PB0, каб пацвердзіць злучэнне. Цяпер на кансолі будзе паказаны ключ доступу, які трэба ўвесці на мабільным тэлефоне для злучэння. Увядзіце ключ доступу, каб завяршыць працэс злучэння.
Парада: Выкарыстоўвайце рэгістр па змаўчанні ў апрацоўшчыку падзей, каб раздрукаваць паведамленне, калі стэк адпраўляе падзею, якая не апрацоўваецца. Магчыма, стэк спрабуе сказаць вам нешта важнае.
Па-за асновамі
На дадзены момант вы ўзялі наперадtage з функцый бяспекі, якія можа прапанаваць наш стэк. Зараз давайце палепшым рэалізацыю шляхам разумнага выкарыстання функцый, якія ёсць у нашым распараджэнні. Наступныя крокі з'яўляюцца неабавязковымі і не залежаць адзін ад аднаго, вы можаце ствараць і флэш пасля кожнага з іх, каб убачыць паводзіны або паспрабаваць іх усе разам.
- Адключыцеся пры няўдалых спробах злучэння. Гэта добрае месца для выяўлення пагроз. Калі аддаленая прылада не падтрымлівае шыфраванне/аўтэнтыфікацыю або проста не мае правільных ключоў, гэта можа быць хакер. Такім чынам, разрываем сувязь. Паспрабуйце дадаць выклік sl_bt_connection_close() у падзею sl_bt_sm_bonding_failed_id. API дакументаваны тут.
Вы можаце праверыць гэтую функцыю, увёўшы няправільны ключ доступу.
- Дазваленне злучэння толькі ў пэўны час. Гэта абмяжоўвае час, неабходны зламысніку для стварэння сувязі, і дазваляе выкарыстоўваць функцыю «дазволіць толькі звязаныя злучэнні». Дызайнер можа выбраць, як уключыць або адключыць рэжым злучэння. У дэманстрацыйных мэтах мы ўключым "рэжым наладкі" з PB1 і выкарыстаем таймер, каб адключыць яго праз 30 секунд.
- Усталюйце другі асобнік інтэрфейсу простых кнопак. Гэта дазволіць выкарыстоўваць PB1.
- Змяніце зваротны выклік, каб адправіць іншы сігнал у стэк, каб уключыць/выключыць злучэнне. Вынік павінен выглядаць прыкладна так:
- Змяніце апрацоўшчык падзей знешняга сігналу, каб ён апрацоўваў гэты новы сігнал. Вынік павінен выглядаць так:
- Дадайце апрацоўшчык падзеі для падзеі sl_bt_evt_system_soft_timer_id. Гэта будзе выкарыстоўвацца для адключэння рэжыму наладкі.
- Наступны код можа быць выкарыстаны для ўключэння рэжыму злучэння і дазволу ўсіх злучэнняў або для адключэння рэжыму злучэння і дазволу злучэнняў толькі з звязаных прылад:
- Дадайце наступны выклік у апрацоўшчык падзеі sl_bt_system_boot_id
- Стварыце праект і перазагрузіце яго на прыладу.
- Паспрабуйце падключыцца да прылады з дапамогай EFRConnect. Злучэнне павінна сарвацца.
- Цяпер паспрабуйце націснуць PB1 перад падключэннем да EFRConnect. На гэты раз злучэнне будзе паспяховым. Праз 30 секунд вы ўбачыце паведамленне на кансолі аб тым, што прылада выходзіць з рэжыму наладкі. Гэта азначае, што рэжым злучэння зараз адключаны.
- Павялічце бяспеку пры стварэнні злучэння. Паколькі бяспека не з'яўляецца абавязковай, мы павінны запытаць зашыфраванае злучэнне як мага хутчэй, а не спадзявацца на характарыстыкі GATT. API дакументаваны тут. Добрае месца для выкліку гэтага API знаходзіцца ў падзеі sl_bt_evt_connection_opened_id. Дэскрыптар злучэння даступны ў зменнай злучэння.
Бяспечная ідэнтыфікацыя
Цяпер, калі ў нас ёсць больш бяспечная прылада Bluetooth, давайце палепшыць этап аўтэнтыфікацыі. Вы ўжо бачылі, як правяраць бяспечную ідэнтычнасць прылад сховішча з дапамогай каманднага радка ў папярэдніх навучальных лабараторыях. У гэтым раздзеле мы ўбачым, як адна прылада BLE можа спраўдзіць ідэнтычнасць іншай прылады BLE, запытаўшы яе ланцужок сертыфікатаў і адправіўшы выклік. Усе часткі бяспечнага сховішча маюць уласны сертыфікат прылады і пакетны сертыфікат. Завадскія і каранёвыя сертыфікаты жорстка закадзіраваны ў кліенцкае прыкладанне, каб уключыць праверку ўсяго ланцужка сертыфікатаў. Звярніцеся да AN1268 для атрымання дадатковай інфармацыі аб бяспечнай ідэнтыфікацыі.
- Вызначце глабальны буфер для захавання подпісы атэстацыі прылады, як паказана ніжэй:
- Усталюйце канфігурацыю менеджэра бяспекі для выкарыстання спалучэння JustWorks. Гэта робіцца для таго, каб злучэнне было зашыфраваным. На практыцы трэба выкарыстоўваць абарону MITM, але каб зрабіць лабараторыю простай, мы будзем выкарыстоўваць JustWorks. Зменіце выклік sl_bt_sm_configure назад на наступны:
Таксама закаментуйце выклік setup_mode(true) у апрацоўшчыку падзеі system_boot.
- Адкрыйце helpers.c з прадстаўленых матэрыялаў і скапіруйце змесціва ў app.c. Гэтыя функцыі зваротнага выкліку выконваюць такія задачы, як сегментаванне сертыфікатаў, каб іх можна было адправіць па BLE, праверка ланцужка сертыфікатаў і стварэнне/праверка выкліку.
- Неабходна вызначыць максімальны памер адзінкі перадачы (MTU), каб можна было сегментаваць і сабраць сертыфікаты. Вызначце глабальную зменную для захавання MTU, як паказана тут:
Затым дадайце апрацоўшчык падзеі для падзеі абмену GATT MTU, як паказана ніжэй:
- Ёсць тры характарыстыкі карыстальніцкіх дадзеных, якія можна прачытаць. Гэтыя характарыстыкі выкарыстоўваюцца для перадачы сертыфіката прылады, сертыфіката партыі і выкліку. Для апрацоўкі гэтых запытаў карыстальніка на чытанне выкарыстоўваецца функцыя зваротнага выкліку. Дадайце апрацоўшчык для выкліку гэтай функцыі, як паказана ніжэй:
Зваротны выклік выкарыстоўвае MTU з кроку № 2 для сегментацыі і адпраўкі сертыфікатаў па меры неабходнасці. Ён таксама апрацоўвае адпраўку падпісанага выкліку.
- Кліент адпраўляе выклік, выпадковы лік, які павінен быць падпісаны серверам, напісаўшы адну з характарыстык GATT. Па гэтай прычыне ў дадатку павінен быць апрацоўшчык падзеі запыту карыстальніка на запіс, як паказана ніжэй:
- Дадайце падтрымку бяспечнай ідэнтыфікацыі files да праекта:
- app_se_manager_macro.h, app_se_manager_secure_identity.c і app_se_secure_identity.h з прадстаўленых матэрыялаў да праекта. Гэтыя files змяшчае некаторыя дапаможныя функцыі для такіх задач, як атрыманне памеру сертыфіката, атрыманне адкрытага ключа прылады і падпісанне выкліку.
- Уключыце app_se_manager_secure_identity.h у app.c.
- Імпартуйце прадстаўлены gatt_configuration-attest.btconf з прадастаўленых матэрыялаў. Гэтая база дадзеных GATT называецца бяспечнай атэстацыяй, якая ўключае чатыры характарыстыкі, якія будуць выкарыстоўвацца для праверкі ідэнтычнасці нашай прылады. Сюды ўваходзяць сертыфікат прылады, сертыфікат партыі, выклік і адказ.
- Кліент, які выкарыстоўваецца для мадэлявання такой прылады, як шлюз, прадастаўляецца як поўны праект, паколькі яго стварэнне больш складанае. У цэлым праца кліента выглядае наступным чынам:
- Сканіруе прылады, якія рэкламуюць бяспечную службу атэстацыі, і падключаецца да іх.
- Адкрывае паслугі і характарыстыкі базы дадзеных ГАТТ.
- Счытвае сертыфікаты прылады і пакета і правярае ланцужок сертыфікатаў, выкарыстоўваючы заводскі і каранёвы сертыфікаты, якія ён захаваў ва флэш-памяці.
- Адпраўляе выпадковы выклік на сервер.
- Спробы праверыць адказ на выклік.
- Закрывае злучэнне, калі праверка не ўдаецца.
- Стварыце і перазагрузіце праект сервера на свой сервер WSTK /radioboard.
- Імпартуйце кліенцкі праект з кліенцкай папкі ў прадстаўленых матэрыялах. Стварыце і перазагрузіце кліенцкі праект для вашага кліента WSTK/radioboard.
- Націсніце скід на кліенцкім WSTK і адкрыйце паслядоўную кансоль. Кліент пачынае пошук прылад, якія рэкламуюць наш сэрвіс бяспечнай ідэнтыфікацыі, і падключыцца, калі знойдзе.
- Кліент адлюструе некалькі паведамленняў, якія паказваюць, што ён знайшоў сервер з патрэбнай паслугай, і паведамленні аб стане праверкі ланцужка сертыфікатаў.
- Калі праверка пройдзеная, кліент згенеруе выпадковы лік, які называецца выклікам, і адправіць яго на сервер. Сервер падпіша выклік сваім надзейным закрытым ключом прылады і верне подпіс кліенту, гэта называецца адказам на выклік. Затым кліент выкарыстоўвае адкрыты ключ у раней атрыманым сертыфікаце прылады для праверкі подпісу. Гэта робіцца для таго, каб пацвердзіць, што сервер сапраўды мае прыватны ключ, які ён заяўляў. Калі выклік правераны правільна, пра гэта адлюстроўваецца паведамленне; у адваротным выпадку злучэнне закрываецца, і адлюстроўваецца паведамленне з тлумачэннем прычыны.
- Цяпер адпраўце несапраўдны сертыфікат, каб пацвердзіць, што праверка сапраўды працуе. Вы можаце змяніць user_read_request_cb(), каб пашкодзіць дадзеныя сертыфіката або адказ на выклік.
Дадатак A – Магчымасці ўводу/вываду і метады спалучэння 
Дадатак B – Рэжымы і ўзроўні бяспекі
Рэжым бяспекі 1 - гэта адзіны рэжым, які падтрымліваецца для Bluetooth Low Energy у стэку Silicon Labs. Узроўні наступныя:
- Узровень 1 без бяспекі
- Неаўтэнтыфікаванае спалучэнне ўзроўню 2 з шыфраваннем
- Аўтэнтыфікаванае спалучэнне ўзроўню 3 з шыфраваннем
- Аўтэнтыфікаваныя бяспечныя злучэнні 4-га ўзроўню з моцным шыфраваннем (абмен ключамі ECDH)
Дакументы / Рэсурсы
![]() |
silabs 21Q2 бяспечная прылада BLE Security Lab [pdfКіраўніцтва карыстальніка 21Q2 бяспечная лабараторыя бяспекі прылад BLE, бяспечная лабараторыя бяспекі прылад BLE, лабараторыя бяспекі |