silabs 21Q2 bezpieczne laboratorium bezpieczeństwa urządzeń BLE

Podręcznik laboratorium bezpieczeństwa BLE

W tym laboratorium zobaczysz, jak zaprojektować bezpieczniejsze urządzenie BLE. Zaczniemy od powtórkiview jak korzystać z niektórych funkcji stosu i przejść do ogólnych porad na temat technik bezpieczniejszych połączeń, a na koniec zobaczymy, jak używać certyfikatów urządzeń za pośrednictwem BLE, aby zidentyfikować urządzenie peryferyjne jako autentyczne.

Pierwsze kroki

BluetoothampAplikacja, na której będziesz budować, jest przeznaczona do użytku z bootloaderem. Jeśli pracujesz z zupełnie nowym EFR32MG21B, nie będzie on miał bootloadera. Gotowy program ładujący można znaleźć w katalogu platforma\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a folder Twojego zestawu SDK.

  1. Zacznij od pustego sampaplikacja. To sample służy jako szablon i stanowi dobry punkt wyjścia dla dowolnej aplikacji BLE.
    1. Otwórz Kreator projektu Silicon Labs w Simplicity Studio File menu -> nowy.
    2. Wybierz BRD4181C i kliknij przycisk „Dalej”.
    3. Kliknij pole wyboru „Bluetooth (9)” w obszarze typu technologii.
    4. Podświetl opcję „Bluetooth – SoC pusty”, a następnie kliknij przycisk Dalej.
    5. Kliknij przycisk „Zakończ”.
  2. Teraz możesz dodać pewne cechy, aby zobaczyć, jak cechy chronione i niechronione są traktowane inaczej.
    1. Otwórz plik slcp projektu file klikając dwukrotnie w oknie Eksploratora projektu
    2. Podświetl zakładkę „SKŁADNIKI OPROGRAMOWANIA” i otwórz narzędzie konfiguracyjne GATT, jak pokazano poniżej: Użyj także narzędzia do importowania pokazanego poniżej, aby zaimportować plik gatt_configuration.btconf file z folderu serwera w dostarczonych materiałach.Baza danych GATT ma niestandardową usługę zwaną „Szkoleniem”, w ramach której niektóre dane są chronione, a inne nie. Umożliwia to porównanie tego, co dzieje się podczas próby uzyskania dostępu do chronionej cechy i niechronionej cechy. Jest to szybki sposób na stworzenie urządzenia z bardzo podstawowymi zabezpieczeniami.
  3. Wykorzystamy port szeregowy do drukowania na konsoli w Simplicity Studio i śledzenia tego, co dzieje się w aplikacji. Najłatwiejszym sposobem znalezienia tych komponentów jest wyszukanie ich w oknie dialogowym SKŁADNIKI OPROGRAMOWANIA, jak pokazano:
      1. Zainstaluj komponent IO Stream USART
      2. Zainstaluj komponent IO Stream Retarget STDIO
      3. Zainstaluj komponent Standard I/O
      4. Zainstaluj komponent Log
      5. Otwórz komponent Board Control i włącz „Włącz wirtualny COM UART”
      6. Kliknij adapter prawym przyciskiem myszy w panelu „Debuguj adaptery” i wybierz „Uruchom konsolę”. Wybierz zakładkę „Serial 1”, umieść kursor w polu wprowadzania tekstu w oknie konsoli i naciśnij klawisz Enter, aby obudzić konsolę.
  4. Utwórz zmienną lokalną w funkcji sl_bt_on_event(), znalezionej w app.c, w celu zapisania uchwytu połączenia. Zmienna musi być statyczna, ponieważ ta funkcja jest wywoływana za każdym razem, gdy stos wywołuje zdarzenie, a chcemy, aby wartość była trwała. Uchwyt łączący zostanie użyty późniejczęść laboratorium.
  5. Wstaw instrukcje app_log() dla zdarzeń, aby zobaczyć, kiedy jesteśmy połączeni, tryby zabezpieczeń itp
      1. Dołącz nagłówek app_log.h file
      2. sl_bt_evt_connection_opened – wydrukuj uchwyt połączenia i zapisz uchwyt połączenia. Jeśli uchwyt wiązania to 0xFF, pomiędzy podłączonymi urządzeniami nie istnieje żadne połączenie. Zmodyfikuj istniejącą procedurę obsługi zdarzeń, aby wyglądała mniej więcej tak:
      3. sl_bt_evt_connection_parameters – tryb bezpieczeństwa. Dzieje się tak, abyś mógł zobaczyć, kiedy zmienia się tryb bezpieczeństwa. Istnieje różnica w numeracji trybów bezpieczeństwa, gdzie tryb bezpieczeństwa 1 ma wartość 0 itd. . Dodaj następującą procedurę obsługi zdarzeń do swojej aplikacji:
      4. sl_bt_evt_connection_closed_id. Ta procedura obsługi zdarzeń została zmodyfikowana w celu zaktualizowania uchwytu połączenia. Wartość 0xFF służy do wskazania, że ​​nie ma aktywnego połączenia. Komenda app_log() służy do wydrukowania przyczyny zamknięcia połączenia, lista kodów statusu znajduje się tutaj. Zmodyfikuj istniejącą procedurę obsługi zdarzeń, aby wyglądała mniej więcej tak:
  6. Zbuduj i flashuj projekt. W tym momencie uruchomimy sample, aby zobaczyć, jak się zachowuje bez żadnych zmian, poza bazą danych GATT.
  7. Połącz się z aplikacją mobilną EFRConnect w następujący sposób:
      1. Kliknij ikonę „Przeglądarka Bluetooth”.
      2. Naciśnij ikonę „Połącz” na urządzeniu o nazwie „Trening”.
  8. Przeczytaj niezabezpieczoną charakterystykę w następujący sposób:
      1. Kliknij link „Więcej informacji” pod nieznaną usługą o identyfikatorze UUID a815944e-da1e-9d2a-02e2-a8d15e2430a0.
      2. Przeczytaj niechronioną charakterystykę, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c, dotykając ikony „Odczyt”. Nie ma tu żadnych niespodzianek. Ponieważ cecha nie jest w żaden sposób chroniona, zostanie wysłana w postaci zwykłego tekstu.
  9. Teraz przeczytaj chronioną charakterystykę, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Twój telefon komórkowy powinien wyświetlić monit o sparowanie i połączenie. Komunikat może się różnić w zależności od mobilnego systemu operacyjnego. Po zaakceptowaniu prośby o parowanie na konsoli powinien pojawić się następujący komunikat: Notatka: Dodatek A na końcu tej instrukcji zawiera podsumowanie możliwości wejść/wyjść i metod parowania. Dodatek B podsumowuje tryby zabezpieczeń Bluetooth.

Konfiguracja menedżera zabezpieczeń

Menedżer zabezpieczeń jest częścią stosu Bluetooth, który określa, które funkcje zabezpieczeń są używane. Funkcje te obejmują ochronę typu man-in-the-middle (MITM), bezpieczne połączenia LE (znane również jako ECDH), wymagające potwierdzenia połączenia itp. Menedżer bezpieczeństwa obsługuje również funkcje we/wy, które są używane do określenia metody używanej do parowania /bonding (zobacz podsumowanie w Załączniku A). W tej sekcji zobaczysz prostą konfigurację.

  1. Skonfiguruj SM z żądaną konfiguracją. Sprzęt używany w tym laboratorium ułatwia wyświetlenie hasła na konsoli. Aby włączyć ochronę MITM, wymagane jest wprowadzenie hasła. Dodaj następujący kod do procedury obsługi zdarzeń sl_bt_system_boot_id. Umożliwia to działanie man-in-the-middle i informuje zdalne urządzenie, że mamy możliwość wyświetlenia hasła, ale to wszystko.
  2. Aby wyświetlić hasło na konsoli, wymagana jest procedura obsługi zdarzeń, jak pokazano poniżej:
  3. Ustaw tryb łączenia, maksymalną liczbę połączeń itp. Na początek użyj poniższego kodu:Tych ustawień można użyć do ograniczenia możliwości atakującego nawiązania połączenia z Twoim urządzeniem. Jeśli Twój produkt potrzebuje tylko jednego użytkownika, możesz ograniczyć maksymalną liczbę wiązań do 1. Dobrym miejscem na dodanie tych wywołań jest procedura obsługi zdarzeń sl_bt_system_boot_id. W tej chwili nie umożliwimy tworzenia więzi, aby reszta laboratorium przebiegała sprawniej, ale ustalamy zasady tworzenia więzi, aby umożliwić tylko jedną więź. Dla porównania, dokumentację tych interfejsów API można znaleźć tutaj i tutaj.
  4. Dodaj procedury obsługi zdarzeń dla sl_bt_evt_sm_bonded_id i sl_bt_evt_sm_bonding_failed_id. Głównym zastosowaniem tych wydarzeń jest obecnie charakter informacyjny, ale w dalszej części laboratorium dodasz funkcjonalność.
  5. Zbuduj i flashuj na planszę docelową. Połącz się z EFRConnect i odczytaj chronioną charakterystykę jak poprzednio. Tym razem na konsoli wyświetli się hasło. Po wyświetleniu monitu wprowadź to hasło w telefonie komórkowym.
  6. Wypróbuj potwierdzenie połączenia. Ta funkcja umożliwia użytkownikowi zażądanie potwierdzenia żądań połączenia. Dzięki temu aplikacja ma kontrolę nad urządzeniami równorzędnymi, z którymi się łączy. Jedną z możliwości jest wymaganie od użytkownika naciśnięcia przycisku przed zezwoleniem na połączenie.
    1. Otwórz ustawienia Bluetooth w telefonie komórkowym i usuń połączenie z urządzeniem EFR32. Implementacje telefonów komórkowych są różne, więc ten krok może nie być konieczny. Jeśli w ustawieniach Bluetooth nie widzisz urządzenia „Trening”, po prostu przejdź do następnego kroku.
    2. W komponentach oprogramowania zainstaluj jedną instancję prostej obsługi przycisków.
    3. Dołącz nagłówek file sl_simple_button_instances.h w app.c
    4. Dodaj procedurę obsługi zdarzenia sl_bt_evt_sm_bonding_confirm_id. Głównym zadaniem tej procedury obsługi zdarzeń jest poinformowanie użytkownika, że ​​urządzenie zdalne żąda nowego powiązania.
    5. Dodaj funkcję wywołania zwrotnego dla prostej obsługi przycisków, aby wysłać sygnał do stosu Bluetooth wskazujący, że przycisk został naciśnięty. Zastępuje to domyślne wywołanie zwrotne, które po prostu zwraca.
    6. Dodaj procedurę obsługi zdarzeń sygnału zewnętrznego. To zdarzenie jest wywoływane w odpowiedzi na odebranie sygnału, tak jak w poprzednim kroku. Zdarzenie sygnału zewnętrznego zostanie wykorzystane do potwierdzenia połączenia.
    7. Zmień wywołanie na sl_bt_sm_configure, aby wymagać potwierdzenia połączenia, np
    8. Odbuduj i flashuj.
    9. Połącz się z EFRConnect i odczytaj chronioną charakterystykę jak poprzednio. Teraz zobaczysz następujący komunikat na konsoli:Naciśnij PB0, aby potwierdzić wiązanie. Teraz konsola wyświetli hasło, które należy wprowadzić w telefonie komórkowym w celu połączenia. Wprowadź hasło, aby zakończyć proces łączenia.

 

Wskazówka: Użyj domyślnej wielkości liter w procedurze obsługi zdarzeń, aby wydrukować komunikat, gdy stos wyśle ​​zdarzenie, które nie jest obsługiwane. Stos może próbować powiedzieć Ci coś ważnego.

Poza podstawami

W tym momencie wziąłeś Advantagz funkcji bezpieczeństwa, które ma do zaoferowania nasz stos. Teraz udoskonalmy wdrożenie poprzez mądre wykorzystanie funkcji, którymi dysponujemy. Poniższe kroki są opcjonalne i niezależne od siebie. Możesz budować i flashować po każdym z nich, aby zobaczyć zachowanie lub wypróbować je wszystkie razem.

  1. Rozłącz przy nieudanych próbach połączenia. To dobre miejsce do wykrywania zagrożeń. Jeśli zdalne urządzenie nie obsługuje szyfrowania/uwierzytelniania lub po prostu nie ma odpowiednich kluczy, może to być haker. Zerwijmy więc połączenie. Spróbuj dodać wywołanie sl_bt_connection_close() w zdarzeniu sl_bt_sm_bonding_failed_id. Interfejs API jest udokumentowany tutaj.Możesz przetestować tę funkcję, wprowadzając nieprawidłowe hasło.
  2. Zezwalanie na wiązanie tylko w określonych momentach. Ogranicza to czas, jaki atakujący musi utworzyć powiązanie, i umożliwia użycie funkcji „zezwalaj tylko na połączenia łączone”. Projektant może wybrać sposób włączenia lub wyłączenia trybu łączenia. Dla celów demonstracyjnych włączymy „tryb konfiguracji” w PB1 i za pomocą timera wyłączymy go po 30 sekundach.
    1. Zainstaluj drugą instancję prostego interfejsu przycisków. Umożliwi to wykorzystanie PB1.
    2. Zmodyfikuj wywołanie zwrotne, aby wysłać inny sygnał do stosu w celu włączenia/wyłączenia wiązania. Wynik powinien wyglądać mniej więcej tak:
    3. Zmodyfikuj procedurę obsługi zdarzeń sygnału zewnętrznego, tak aby obsługiwała ten nowy sygnał. Wynik powinien wyglądać tak:
    4. Dodaj moduł obsługi zdarzenia dla zdarzenia sl_bt_evt_system_soft_timer_id. Służy do wyłączania trybu konfiguracji.
    5. Poniższego kodu można użyć, aby włączyć tryb z możliwością łączenia i zezwolić na wszystkie połączenia lub wyłączyć tryb z możliwością łączenia i zezwolić tylko na połączenia z połączonych urządzeń:
    6. Dodaj następujące wywołanie w procedurze obsługi zdarzeń sl_bt_system_boot_id
    7. Zbuduj projekt i wgraj go na urządzenie.
    8. Spróbuj połączyć się z urządzeniem za pomocą EFRConnect. Połączenie powinno zakończyć się niepowodzeniem.
    9. Teraz spróbuj nacisnąć PB1 przed połączeniem z EFRConnect. Tym razem połączenie się powiedzie. Po 30 sekundach na konsoli pojawi się komunikat informujący, że urządzenie wychodzi z trybu konfiguracji. Oznacza to, że tryb łączenia jest teraz wyłączony.
  3. Zwiększ bezpieczeństwo podczas tworzenia połączenia. Ponieważ bezpieczeństwo jest opcjonalne, powinniśmy jak najszybciej zażądać szyfrowanego połączenia, zamiast polegać na cechach GATT. Interfejs API jest udokumentowany tutaj. Dobrym miejscem do wywołania tego API jest zdarzenie sl_bt_evt_connection_opened_id. Uchwyt połączenia jest dostępny w zmiennej połączenia.

Bezpieczna tożsamość

Teraz, gdy mamy bezpieczniejsze urządzenie Bluetooth, ulepszymy etap uwierzytelniania. W poprzednich laboratoriach szkoleniowych widziałeś już, jak weryfikować bezpieczną tożsamość urządzeń skarbca za pomocą wiersza poleceń. W tej sekcji zobaczymy, jak jedno urządzenie BLE może zweryfikować tożsamość innego urządzenia BLE, żądając jego łańcucha certyfikatów i wysyłając wyzwanie. Wszystkie bezpieczne części skarbca posiadają własny certyfikat urządzenia i certyfikat partii. Certyfikaty fabryczne i główne są zakodowane na stałe w aplikacji klienckiej, aby umożliwić weryfikację całego łańcucha certyfikatów. Więcej szczegółów na temat bezpiecznej tożsamości można znaleźć w AN1268.

  1. Zdefiniuj globalny bufor do przechowywania podpisu atestującego urządzenia jak poniżej:
  2. Ustaw konfigurację menedżera bezpieczeństwa tak, aby korzystała z parowania JustWorks. Odbywa się to tak, aby połączenie było szyfrowane. W praktyce należy stosować ochronę MITM, jednak aby laboratorium było proste, użyjemy JustWorks. Zmień wywołanie sl_bt_sm_configure z powrotem na następujące:Skomentuj także wywołanie setup_mode(true) w procedurze obsługi zdarzeń system_boot.
  3. Otwórz plik helpers.c z dostarczonych materiałów i skopiuj zawartość do pliku app.c. Te funkcje wywołania zwrotnego wykonują takie zadania, jak segmentacja certyfikatów w celu umożliwienia ich przesłania za pośrednictwem BLE, weryfikacja łańcucha certyfikatów oraz generowanie/weryfikacja wezwania.
  4. Konieczne jest określenie maksymalnego rozmiaru jednostki transferu (MTU), aby można było segmentować i ponownie składać certyfikaty. Zdefiniuj zmienną globalną, aby zapisać MTU, jak pokazano tutaj:Następnie dodaj moduł obsługi zdarzeń dla wymienionego zdarzenia GATT MTU, jak pokazano poniżej:
  5. Istnieją trzy cechy danych użytkownika, które można odczytać. Te cechy służą do przekazywania certyfikatu urządzenia, certyfikatu partii i wyzwania. Do obsługi żądań odczytu użytkownika używana jest funkcja wywołania zwrotnego. Dodaj procedurę obsługi, aby wywołać tę funkcję, jak pokazano poniżej:Wywołanie zwrotne wykorzystuje MTU z kroku 2 do segmentacji i wysyłania certyfikatów w razie potrzeby. Obsługuje również wysłanie podpisanego wyzwania.
  6. Klient wysyła wyzwanie, losową liczbę do podpisania przez serwer, wpisując jedną z cech GATT. Z tego powodu aplikacja musi mieć procedurę obsługi zdarzenia żądania zapisu użytkownika, jak poniżej:
  7. Dodaj obsługę bezpiecznej tożsamości filedo projektu:
    1. app_se_manager_macro.h, app_se_manager_secure_identity.c i app_se_secure_identity.h z dostarczonych materiałów do projektu. Te files zawierają pewne funkcje pomocnicze do zadań takich jak pobieranie rozmiaru certyfikatu, pobieranie klucza publicznego urządzenia i podpisywanie wyzwania.
    2. Dołącz plik app_se_manager_secure_identity.h do pliku app.c.
  8. Zaimportuj dostarczony plik gatt_configuration-attest.btconf z dostarczonych materiałów. Ta baza danych GATT nazywa się bezpiecznym poświadczeniem i obejmuje cztery cechy, które zostaną wykorzystane do weryfikacji tożsamości naszego urządzenia. Należą do nich certyfikat urządzenia, certyfikat partii, wyzwanie i odpowiedź.
  9. Klient, który służy do symulacji urządzenia takiego jak bramka, jest dostarczany jako kompletny projekt, ponieważ jego zbudowanie jest bardziej złożone. Ogólnie rzecz biorąc, działanie klienta wygląda następująco:
    1. Wyszukuje urządzenia reklamujące usługę bezpiecznego atestowania i łączy się z nimi.
    2. Odkrywa usługi i cechy bazy danych GATT.
    3. Odczytuje certyfikaty urządzenia i partii oraz weryfikuje łańcuch certyfikatów przy użyciu certyfikatu fabrycznego i głównego, który jest przechowywany w pamięci flash.
    4. Wysyła losowe wyzwanie na serwer.
    5. Próbuje zweryfikować odpowiedź na wyzwanie.
    6. Zamyka połączenie, jeśli którakolwiek weryfikacja zakończy się niepowodzeniem.
  10. Zbuduj i wgraj projekt serwera na swój serwer WSTK /radioboard.
  11. Zaimportuj projekt klienta z folderu klienta w dostarczonych materiałach. Zbuduj i wgraj projekt klienta do swojego klienta WSTK/radioboard.
  12. Naciśnij reset na kliencie WSTK i otwórz konsolę szeregową. Klient rozpoczyna skanowanie w poszukiwaniu urządzeń reklamujących naszą usługę bezpiecznej tożsamości i łączy się, gdy je znajdzie.
  13. Klient wyświetli komunikaty wskazujące, że znalazł serwer z żądaną usługą oraz komunikaty o statusie dotyczące weryfikacji łańcucha certyfikatów.
  14. Jeśli weryfikacja przebiegnie pomyślnie, klient wygeneruje losową liczbę zwaną wyzwaniem i wyśle ​​ją na serwer. Serwer podpisze wyzwanie swoim bezpiecznie przechowywanym kluczem prywatnym urządzenia i zwróci podpis do klienta. Nazywa się to odpowiedzią na wezwanie. Następnie klient wykorzystuje klucz publiczny z otrzymanego wcześniej certyfikatu urządzenia do weryfikacji podpisu. Ma to na celu potwierdzenie, że serwer rzeczywiście posiada klucz prywatny, za który się twierdził. Jeżeli wyzwanie zostanie poprawnie zweryfikowane, zostanie wyświetlony odpowiedni komunikat; w przeciwnym razie połączenie zostanie zamknięte i wyświetlony zostanie komunikat wyjaśniający przyczynę.
  15. Teraz wyślij nieprawidłowy certyfikat, aby potwierdzić, że weryfikacja naprawdę działa. Możesz zmodyfikować funkcję user_read_request_cb(), aby uszkodzić dane certyfikatu lub odpowiedź na wezwanie.

Dodatek A – Możliwości wejść/wyjść i metody parowania
Dodatek B – Tryby i poziomy zabezpieczeń

Tryb bezpieczeństwa 1 to jedyny tryb obsługiwany przez technologię Bluetooth Low Energy w stosie Silicon Labs. Poziomy są następujące:

  • Poziom 1 bez zabezpieczeń
  • Nieuwierzytelnione parowanie poziomu 2 z szyfrowaniem
  • Uwierzytelnione parowanie poziomu 3 z szyfrowaniem
  • Uwierzytelnione bezpieczne połączenia poziomu 4 z silnym szyfrowaniem (wymiana kluczy ECDH)

 

Dokumenty / Zasoby

silabs 21Q2 bezpieczne laboratorium bezpieczeństwa urządzeń BLE [plik PDF] Instrukcja obsługi
21Q2 Laboratorium bezpieczeństwa bezpiecznych urządzeń BLE, Laboratorium bezpieczeństwa bezpiecznych urządzeń BLE, Laboratorium bezpieczeństwa

Odniesienia

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *