Infrastruktura sieciowa – sposoby zapewnienia dostępu w systemach IoT

| Technika

Każdy system oraz urządzenie IoT do poprawnego działania wymaga dostępu do sieci internetowej. Zapewnienie bezpiecznego i niezawodnego dostępu do Internetu oraz usług chmurowych jest jednym z podstawowych zadań projektantów tego typu produktów. Istnieje wiele sposób rozwiązania tego problemu, warto przyjrzeć się najpopularniejszym z nich, a także przeanalizować najważniejsze aspekty związane z tym zagadnieniem.

Infrastruktura sieciowa – sposoby zapewnienia dostępu w systemach IoT

Bez względu na to, czy zajmujemy się projektowaniem całkowicie nowego urządzenia, czy też jedynie ulepszamy już istniejący produkt zgodnie z koncepcją technologii IoT, na pewnym etapie projektu z całą pewnością konieczne będzie rozważenie sposobu zapewnienia bezpiecznego i niezawodnego dostępu do usług sieciowych. Rozwiązanie tego problemu wymaga podjęcia znaczących decyzji, których konsekwencje silnie wpłyną na sposób odbioru produktu przez użytkownika, a także na poziom bezpieczeństwa zapewnianego przez układ. Do podstawowych aspektów wymagających uwzględnienia należą: typ połączenia internetowego, sposób dystrybucji danych uwierzytelniających oraz identyfikacji poszczególnych urządzeń w sieci.

W celu efektywnego zarządzania dostępem do usług sieciowych systemów składających się z dużej liczby urządzeń, projektanci bardzo często decydują się na opracowanie oraz korzystanie z autorskich narzędzi programowych, które są odpowiedzialne za dystrybucję danych uwierzytelniających wśród układów wchodzących w skład systemu. Dane te obejmują zazwyczaj następujące zakresy:

  • Dane konfiguracyjne sieci, pozwalające na zdefiniowanie specyficznych parametrów połączenia sieciowego.
  • Informacje uwierzytelniające, pozwalające na jednoznaczną identyfikację i autentykację urządzenia oraz umożliwiające mu dostęp do chronionych zasobów sieci i systemu.
  • Dane konfiguracyjne usług chmurowych, pozwalające na dostęp do chmury, przeprowadzenie procesu autentykacji, autoryzacji oraz zdalne zarządzanie pracą urządzenia.

Wszystkie te trzy kategorie danych muszą zostać w sposób bezpieczny dostarczone do urządzenia, aby umożliwić jego poprawną konfigurację oraz późniejszą pracę w systemie.

Przykładowo, operatorzy telefonii komórkowej przesyłają niezbędne dane konfiguracyjne podczas pierwszego połączenia telefonu komórkowego z siecią. Proces ten jest dość prosty w realizacji, ponieważ tożsamość urządzenia rozpoznawana jest jednoznacznie za pomocą karty SIM oraz zapisanych na niej unikatowych danych identyfikujących. W przypadku systemów IoT, składających się czasami nawet z tysięcy urządzeń pracujących z wykorzystaniem różnych mediów oraz protokołów sieciowych, realizacja tego zadanie może być dużo trudniejsza i bardziej wymagająca.

Konfiguracja połączenia sieciowego

Finalnie każde urządzenie IoT musi zrealizować połączenie sieciowe oraz nawiązać komunikację z centralnym elementem systemu, pełniącym funkcję serwera czy huba. Aby być w stanie dotrzeć do elementu centralnego, urządzenie musi dołączyć do sieci za pomocą określonego medium transmisyjnego. Medium to może być przewodowe (np. Ethernet) lub bezprzewodowe (np. Wi-Fi). W zależności od rodzaju łącza, urządzenie musi mieć informacje o jego określonych parametrach konfiguracyjnych, dzięki czemu będzie w stanie nawiązać prawidłowe połączenie. W przytaczanym już przykładzie sieci komórkowej nie ma konieczności przeprowadzania dodatkowej konfiguracji parametrów łącza, ponieważ wszystkie niezbędne informacje zapisane są już na karcie SIM. W przypadku sieci Wi-fi do realizacji połączenia konieczna jest znajomość nazwy sieci (Wi-fi Access Point) oraz hasła.

Istnieje kilka różnych mechanizmów, które mogą zostać wykorzystane przez układy IoT do uzyskania dostępu do sieci. Współcześnie niemal każdy potencjalny użytkownik posiada smartfon wyposażony w możliwość komunikacji poprzez Bluetooth, dzięki czemu ta właśnie technologia stała się najpowszechniejszym sposobem konfiguracji układów. Nie jest to jednak jedyny sposób na przeprowadzenie konfiguracji połączenia. Niektóre urządzenia IoT wyposażone są w moduły Wi-fi zdolne do pełnienia funkcji punktu dostępowego, czyli do stworzenia własnej sieci bezprzewodowej. Dzięki temu konfiguracja może zostać zrealizowana poprzez samodzielnie zaprojektowaną prostą stronę internetową. Użytkownik po dołączeniu do sieci przekierowany zostaje na adres tej strony, gdzie może zarządzać konfiguracją i ustawieniami urządzenia. W przypadku układów nieprzeznaczonych dla rynku konsumenckiego wciąż popularnym sposobem pozostaje konfiguracja za pomocą interfejsu szeregowego lub kart microSD. W przypadku korzystania z interfejsu Bluetooth, normą jest udostępnianie aplikacji mobilnych przeznaczonych do tego celu. Aplikacje te mogą również wspierać inne poziomy konfiguracji urządzenia, takie jak np. dostęp do usług chmurowych, co zostanie omówione w dalszej części tekstu.

Dystrybucja danych uwierzytelniających

Proces dystrybucji danych uwierzytelniających do układów IoT jest bardzo zróżnicowany w zależności od rodzaju aplikacji. Dotychczas nie wypracowano żadnych standardów realizacji tego typu zadania, nie wydaje się również, aby ten stan rzeczy uległ zmianie w najbliższej przyszłości.

Większość dużych systemów IoT zaleca lub nawet wymaga wykorzystania połączenia szyfrowanego w standardzie TLS 1.2 (Transport Layer Security), będącego obecnie standardowym sposobem szyfrowania ruchu w sieci. Standard ten zakłada korzystanie z tzw. infrastruktury klucza publicznego (Public Key Infrastructure, PKI), czyli pewnego rodzaju systemu kryptograficznego składającego się z wielu różnych organów, takich jak urzędy certyfikacyjne, urzędy rejestracyjne oraz użytkownicy. Główną rolą tego systemu jest weryfikacja tożsamości użytkowników poprzez wiarygodny system dystrybucji i sprawdzenie certyfikatów, będących w zasadzie kluczami kryptograficznymi. W efekcie każdy z użytkowników systemu (np. pojedyncze urządzenie IoT) ma swój własny unikatowy klucz prywatny oraz certyfikat kryptograficzny, zawierający m.in. klucz publiczny.

Do nawiązania bezpiecznego połączenia za pomocą standardu TLS 1.2 konieczne jest posiadanie przez wszystkie strony komunikacji własnych kluczy prywatnych oraz certyfikatów (obecnie większość certyfikatów konstruowana jest w oparciu o standard X.509). Klucz prywatny przypisany jest do jednego urządzenia i nie podlega ujawnieniu innym uczestnikom komunikacji. Ochrona poufności klucza jest jednym z krytycznych zagadnień zapewnienia bezpieczeństwa systemom teleinformatycznym, w tym również systemom IoT. Certyfikat kryptograficzny może być zaś porównany do dowodu osobistego lub innego dokumentu identyfikującego daną osobę. Wydawany jest przez urząd certyfikacyjny, który za pomocą podpisu cyfrowego poświadcza jego autentyczność. Podczas procesu zestawiania połączenia obie strony komunikacji dokonują serii wymian informacji, pozwalających im z całkowitą pewnością potwierdzić tożsamość drugiej strony. Każda ze stron musi udowodnić, że jest prawowitym posiadaczem udostępnianego przez siebie certyfikatu kryptograficznego, czyli jest w posiadaniu klucza prywatnego powiązanego z danym certyfikatem. W dalszej fazie tego procesu urządzenia w sposób bezpieczny ustalają tzw. klucz sesji, czyli specjalny klucz kryptograficzny generowany na potrzeby szyfrowania danego połączenia. Istnieje kilka metod bezpiecznego ustalania oraz wymiany tego typu kluczy. Klucz ten wykorzystywany jest następnie do szyfrowania połączenia.

Podstawą modelu bezpieczeństwa przyjętego w tym protokole jest założenie, że klucz prywatny to liczba znana i przypisana jedynie do jednego urządzenia. Jeśli zatem informacja ta ulegnie ujawnieniu, podmiot będący w jej posiadaniu będzie w stanie ukraść tożsamość danego urządzenia.

W przypadku projektowania systemów IoT, jednym z ważniejszych wyborów jest decyzja o sposobie dystrybucji danych uwierzytelniających w dużej skali. Jak wspomniano, do realizacji bezpiecznej komunikacji każde urządzenie posiadać musi:

  • Unikatowy oraz niezmienny klucz prywatny reprezentujący dane urządzenie. W idealnej sytuacji, w celu ochrony przed zaawansowanymi technikami ataku, informacja ta powinna być fizycznie zabezpieczona przed odczytaniem oraz nigdy niewczytywana do głównej pamięci programu.
  • Dane uwierzytelniające, pozwalające na uzyskanie dostępu do aplikacji lub usług IoT.

Dystrybucja powyższych danych może być połączona z dystrybucją danych odnośnie do dostępu do usług chmurowych, nie jest to jednak jedyne rozwiązanie. Do najpopularniejszych metod realizacji tego typu zadania zalicza się:

  • Specjalizowane układy scalone realizujące zadania kryptograficzne. Mogą być umieszczone osobno na płytce drukowanej lub zintegrowane w formie SiP (System-In-Package), SoM (System-On-Module) lub SoC (System-On-Chip). Tego typu układy mogą przechowywać dostarczony lub samodzielnie wygenerowany klucz publiczny, dodatkowo mogą również posiadać własny certyfikat kryptograficzny w standardzie X.509.
  • Moduły SIM (Subscriber Identity Module), eSIM (embedded SIM) oraz iSIM (integrated SIM) to układy wykorzystywane powszechnie w rozwiązaniach komórkowych. W przypadku systemów IoT wykorzystanie tego typu modułów opiera się głównie na korzystaniu z infrastruktury i usług dostarczanych przez operatorów komórkowych. Użytkowanie tego typu rozwiązań jest powszechne w przypadku urządzeń korzystających z modułów GSM.
  • Dostosowane do potrzeb aplikacji mechanizmy automatycznego wgrywania danych uwierzytelniających do specjalnie zabezpieczonego obszaru pamięci Flash, najczęściej w połączeniu z wykorzystaniem modułów HSM (Hardware Security Module), realizowane na etapie produkcji urządzenia.
  • Ręczna dystrybucja danych uwierzytelniających do zabezpieczonego obszaru pamięci Flash, przydatna podczas prototypowania, jednak niezbyt efektywna w przypadku produkcji średniej i dużej skali.

Realizacji wszystkich operacji związanych z protokołem TLS 1.2 wymaga przeprowadzenia dość dużej liczby zadań obliczeniowych, co może wpłynąć na decyzję o wyborze mikroprocesora zarządzającego pracą urządzenia. Dedykowane moduły kryptograficzne implementują zazwyczaj całkowitą lub przynajmniej częściową obsługę protokołu szyfrowania, co pozwala na odciążenie procesora oraz zwiększa bezpieczeństwo systemu, ponieważ zapobiega wczytywaniu klucza prywatnego do głównej pamięci programu.

Sposób dystrybucji danych uwierzytelniających to zagadnienie wpływające w dużym stopniu na sprzętową stronę projektu. Decyzja o skorzystaniu z odpowiednich modułów kryptograficznych upraszcza realizację projektu, ułatwia skalowanie systemu dystrybucji kluczy, zwiększa jednak koszty systemu. Wymaga ponadto podjęcia już na wczesnym etapie projektowania, ponieważ wpływa na dobór innych komponentów, jak np. procesora sterującego. Brak oddzielnego modułu kryptograficznego zwiększa zapotrzebowanie na moc obliczeniową procesora, wymaga również posiadania odpowiednich peryferiów, takich jak koprocesor matematyczny czy bezpieczna pamięć Flash. W przypadku systemów składających się z tysięcy układów nie zaleca się raczej ręcznej dystrybucji kluczy, co również zachęca do korzystania z dedykowanych modułów lub innych zautomatyzowanych rozwiązań.

Procedura uwierzytelnienia urządzenia

Efektywne przeprowadzenie procedury uwierzytelnienia wymaga właściwej konfiguracji zarówno uwierzytelnianego urządzenia, jak i chmury. Kolejne etapy procesu uwierzytelnienia widziane z perspektywy usługi sieciowej polegają na identyfikacji podłączanego urządzenia (autentykacja), nadania uprawnień umożliwiających dostęp do określonych narzędzi i funkcji (autoryzacja), w efekcie zaś rozpoczęcia procesu sterowania pracą i konfiguracją układu (zarządzanie urządzeniem).

Dla celów autentykacji urządzenie IoT musi charakteryzować się unikalną właściwością, taką jak omawiany już klucz prywatny oraz certyfikat kryptograficzny. Dzięki odpowiednim algorytmom i protokołom wymiany danych usługa sieciowa jest w stanie z całkowitą pewnością zweryfikować tożsamość urządzenia.

Do przeprowadzenia autoryzacji usługa sieciowa musi posiadać zdefiniowane reguły oraz poziomy uprawnień, przypisane do poszczególnych egzemplarzy oraz grup urządzeń. Z punktu widzenia bezpieczeństwa systemu bardzo ważne jest przypisywanie urządzeniom IoT jedynie niezbędnego minimum uprawnień, koniecznych do realizacji stawianych im zadań. Zbyt szeroki zakres uprawnień może stanowić zagrożenie, ułatwiając potencjalnym atakującym zdobycie dostępu do systemu. W praktyce procedura autoryzacji polega na przypisaniu autoryzowanemu urządzeniu dostępu do określonych zasobów systemu. Rodzaj i ilość dostępnych zasobów określana jest zazwyczaj w plikach konfiguracyjnych systemu.

W przypadku rozległych systemów IoT zaleca się automatyzację procesu zarządzania urządzeniami, m.in. poprzez grupowanie ich w większe zbiory. Pojedyncze sterowanie setkami lub nawet tysiącami urządzeń wchodzących w skład systemu może okazać się nie tylko wysoce kłopotliwe, ale niekiedy również niemożliwe. W tym celu pomocnym narzędziem może być korzystanie z metadanych dołączanych do ustawień konfiguracyjnych układu. Informacje te określają zazwyczaj przynależność urządzenia do określonej kategorii i grupy produktów, umożliwiając późniejsze zbiorowe zarządzanie ich pracą.

Sposoby rejestracji urządzeń w chmurze

Sposób rejestracji urządzeń w chmurze lub innego rodzaju usłudze sieciowej może być w pewien sposób unikatowy dla każdego systemu IoT, w ogólności wyróżnić można jednak trzy rodzaje podejść do tego typu zagadnienia – rejestracja zbiorcza, rejestracja na żądanie oraz rejestracja losowa. Wszystkie te metody wymagają posiadania przez urządzenie wspomnianych już danych uwierzytelniających, czyli klucza prywatnego oraz certyfikatu kryptograficznego.

Rejestracja zbiorcza

W przypadku rejestracji zbiorczej lista urządzeń oraz powiązanych z nimi danych uwierzytelniających znana jest jeszcze przed rozmieszczeniem układów w terenie. Po opracowaniu tego typu wykazu jest on dostarczany do usługi sieciowej, która na podstawie otrzymanej listy rozpoczyna proces rejestracji urządzeń. Wszystkie niezbędne obiekty oraz powiązania pomiędzy nimi utworzone zostają jeszcze przed fizycznym uruchomieniem urządzeń. Rozwiązanie to obniża elastyczność systemu (utrudnia dodawanie nowych urządzeń), z drugiej strony utrudnia jednak potencjalnym atakującym uzyskanie nieautoryzowanego dostępu.

Rejestracja na żądanie

W przypadku rejestracji na żądanie usługa sieciowa nie posiada uprzedniej informacji na temat powiązania danych uwierzytelniających oraz umieszczonych w systemie urządzeń, ma jednak listę dopuszczalnych typów certyfikatów kryptograficznych. Po uruchomieniu urządzenia jest ono zobligowane do przeprowadzenia procedury rejestracji, w trakcie której potwierdzona zostaje zarówno tożsamość układu, jak i fakt posiadania odpowiedniego rodzaju certyfikatu. W ramach zautomatyzowanego procesu przedstawiony przez układ certyfikat podlega rejestracji w usłudze sieciowej, następnie tworzony jest obiekt oraz powiązania reprezentujące dany układ.

Rejestracja losowa

W przypadku rejestracji losowej usługa sieciowa nie ma informacji na temat układów wchodzących w skład systemu ani akceptowalnych typów certyfikatów. Z tego powodu tożsamość urządzenia musi zostać w jakiś sposób potwierdzona przez zaufaną trzecią stronę lub drugi stopień uwierzytelnienia. Do tego celu służyć może np. aplikacja zainstalowana na telefonie komórkowym, pozwalająca użytkownikowi na zalogowanie się za pomocą własnych danych uwierzytelniających. Powszechne jest również stosowanie bardziej zautomatyzowanych rozwiązań, opartych np. o listę autoryzowanych kluczy prywatnych lub potwierdzenie tożsamości przez urząd certyfikacyjny.

Wybór odpowiedniego sposobu uwierzytelniania urządzenia

Wybór odpowiedniego sposobu uwierzytelniania urządzenia wpływa zarówno na sprzętowy, jak i programowy projekt układu, może też zależeć od przyjętego sposobu wytwarzania produktów oraz zarządzania ich cyklem życia. Konieczność bezpiecznego przechowywania kluczy kryptograficznych może wymuszać zastosowanie pewnych rozwiązań sprzętowych, zaś wybrany sposób autoryzacji może znacząco wpłynąć na kształt oprogramowania. Przyjęty model produkcji w dużym stopniu defi- niuje stopień wytwarzania, przechowywania oraz zabezpieczenia danych poufnych, takich jak wartości prywatnych kluczy kryptograficznych.

W przypadku korzystania z produkcji kontraktowej może być bardzo trudno wymusić odpowiedni poziom kontroli poufności w procesie wytwarzania oraz przechowywania danych wrażliwych. Wiąże się z tym wysokie ryzyko ujawnienia tych danych, w efekcie zaś uzyskania nieautoryzowanego dostępu do systemu. Rozsądnym rozwiązaniem w takiej sytuacji może być wykorzystanie gotowych modułów kryptograficznych, w których konfiguracja danych wrażliwych wykonana jest już w czasie produkcji układu scalonego, co utrudnia potencjalny wyciek danych na etapie wytwarzania produktu.

Alternatywne podejście polegać może na skorzystaniu z mechanizmu rejestracji losowej, opartej jedynie o unikatowe lub losowo generowane klucze prywatne. Dane te mogą być również wgrane bezpośrednio do pamięci Flash układu, rozwiązanie to nie jest jednak zbytnio rekomendowane ze względu na wyższe ryzyko utraty poufności klucza.

Konfiguracja danych uwierzytelniających może opierać się również na rozwiązaniach programowych, co pozwala na większą elastyczność, umożliwiając wprowadzanie pewnych modyfikacji już w trakcie cyklu życia produktu (np. poprzez aktualizację firmware).

Podczas planowania potencjalnych funkcjonalności oraz przypadków użycia urządzenia warto również uwzględnić sytuację zmiany właściciela układu. W takim przypadku warto umożliwić przywrócenie produktu do stanu fabrycznego, kasując wszelkie certyfikaty i dane powiązane z poprzednim użytkownikiem. W takiej sytuacji należy przewidzieć możliwość dostarczenia nowego certyfikatu, np. poprzez dedykowaną aplikację mobilną.

Podsumowanie

Nieodłącznym elementem funkcjonowania każdego urządzenia IoT jest uzyskanie dostępu do sieci oraz umieszczonych tam zasobów i usług. Sposób realizacji tego zadania może być zróżnicowany, zawsze jednak musi zapewniać bezpieczeństwo oraz poufność przesyłanych danych. Podstawowe mechanizmy bezpieczeństwa większości systemów IoT opierają się na infrastrukturze klucza publicznego, czyli zestawie kluczy kryptograficznych, w pewnym zakresie poufnych (klucz prywatny), czyli znanych jedynie urządzeniu, do którego są przypisane. Ochrona poufności klucza prywatnego jest jednym z fundamentów bezpieczeństwa systemów IoT, musi być zatem realizowana za pomocą wszelkich dostępnych środków i mechanizmów. W wielu przypadkach wymusza to korzystanie z dedykowanych rozwiązań sprzętowych, takich jak np. gotowe moduły kryptograficzne lub dodatkowe układy szyfrujące.

Z punktu widzenia serwera sieciowego, będącego zazwyczaj centralnym elementem systemu IoT, każde urządzenie próbujące połączyć się z systemem musi przejść przez procedurę autentykacji oraz autoryzacji. Dostępnych jest kilka różnych metod autoryzacji układów, przy czym wszystkie wymagają posiadania przez autoryzowane urządzenia unikatowego klucza prywatnego, niekiedy zaś również certyfikatu kryptograficznego.

 

Damian Tomaszewski