Oprogramowanie dla urządzeń IoT
| TechnikaRola oprogramowania w procesie projektowania urządzeń IoT jest niewątpliwie niezwykle istotna. Staje się ono coraz bardziej rozbudowane oraz skomplikowane, jednocześnie zaś proces jego wytwarzania ma kluczowe znaczenie dla dostarczenia produktu końcowego na rynek w wymaganym czasie oraz w wymaganej jakości. Stopień skomplikowania oprogramowania bez wątpienia zależy od rodzaju urządzenia.
Nie ulega wątpliwości, że firmware przeznaczony dla czujnika temperatury będzie kilka rzędów wielkości mniej złożony niż w przypadku kontrolera pełniącego kluczową funkcję w skomplikowanym przemysłowym procesie produkcyjnym. Ogólny trend pokazuje jednak istotny wzrost liczby funkcji realizowanych przez pojedynczy moduł IoT.
Jeszcze kilka lat temu urządzenia z tego segmentu bardzo często charakteryzowały się prostotą konstrukcji – realizowały z reguły pojedyncze funkcje, bez istotnych możliwości rozbudowy. Współcześnie nie są rzadkością układy wyposażone w systemy operacyjne, obsługę całego katalogu różnych protokołów komunikacyjnych oraz szereg innych rozbudowanych możliwości.
Ewoluuje również koncepcja systemu IoT. Bardzo często zauważyć można odwrót od idei centralnego przetwarzania danych, gdzie moduł pełni w zasadzie przede wszystkim funkcję przekaźnika, do koncepcji rozproszonych systemów obliczeniowych, delegujących możliwie dużą liczbę zadań do poszczególnych węzłów sieci. Podejście to jest bardziej efektywne energetycznie oraz znacznie lepiej skalowalne – w przypadku systemów składających się z dużej liczby urządzeń charakteryzuje się znacznie mniejszym wykorzystaniem kanału komunikacyjnego oraz istotnie mniejszymi wymaganiami w zakresie mocy obliczeniowej centralnych elementów systemu.
Duża autonomia poszczególnych modułów pozwala również lepiej radzić sobie z sytuacjami awaryjnymi, takimi jak utrata łączności z siecią. Na poziomie modułów coraz częściej spotyka się też rozwiązania wykorzystujące techniki sztucznej inteligencji oraz uczenia maszynowego. Dzięki temu poszczególne urządzenia są w stanie szybko wykrywać zaistniałe zdarzenia i uruchamiać procedurę reakcji na nie – znacznie szybciej, niż ma to miejsce w systemach opartych o centralne przetwarzanie danych.
Wzrost liczby zadań realizowanych przez pojedyncze urządzenie sprawia, że synchronizacja pracy procesora i zarządzanie dostępnymi zasobami stają się coraz trudniejsze. W takiej sytuacji z pomocą przychodzą systemy operacyjne przeznaczone dla urządzeń embedded, jak na przykład FreeRTOS, Contiki, TinyOS czy Ubuntu Core.
Systemy takie posiadają wbudowane narzędzia pozwalające na zarządzanie pracą poszczególnych wątków, komunikację pomiędzy nimi, monitorowanie zajętości oraz przydział zasobów. Dla większości popularnych platform istnieją też bazy gotowych rozwiązań przeznaczonych do wykorzystania z określonym systemem operacyjnym – np. stosy protokołów komunikacyjnych oraz różnego typu biblioteki.
Typowy system operacyjny przeznaczony dla rozwiązań IoT charakteryzuje się niewielkimi rozmiarami oraz efektywnym wykorzystaniem dostępnych zasobów. Zazwyczaj zapewnia też wsparcie dla protokołów komunikacyjnych powszechnie wykorzystywanych w tego typu aplikacjach, takich jak MQTT, CoAP czy HTTP. Scheduler, będący jednym z głównych elementów każdego systemu operacyjnego, dba o podział czasu pracy procesora pomiędzy poszczególne procesy. Różnego typu mechanizmy wbudowane w OS, takie jak kolejki czy semafory, pozwalają na synchronizację oraz komunikację pomiędzy procesami.
Korzystanie z systemu operacyjnego zazwyczaj istotnie przyspiesza proces wytwarzania oprogramowania dla urządzeń IoT, ponadto zapewnia jego przenośność. Firmware napisany w oparcie o popularny system operacyjny jest z reguły dużo łatwiej przenieść na inną platformę sprzętową niż aplikację typu bare-metal.2
Podstawowe założenia
Oprogramowanie dla układu IoT powinno opierać się na architekturze, która pozwala na realizację wszystkich wymaganych funkcjonalności przy możliwie niewielkim wykorzystaniu zasobów oraz energii, przy czym umożliwia też pełną skalowalność oraz łatwość modyfikacji. Zaleca się konstruowanie soft ware'u w sposób modułowy – poszczególne moduły kodu mogą być dzięki temu wykorzystywane w innych projektach, co znacząco usprawnia proces wytwarzania oprogramowania.
Kolejnym niezwykle istotnym czynnikiem jest bezpieczeństwo. Urządzenia muszą być odporne na możliwie szeroki katalog cyberataków.
Cyberbezpieczeństwo
Produkty IoT są jednym z najpopularniejszych celów cyberataków. Koncepcja IoT niejako sprzyja temu zagrożeniu, ponieważ wymaga ciągłej (lub przynajmniej regularnej) dostępności urządzenia w sieci. Na przestrzeni lat zarówno częstotliwość ataków, jak i dotkliwość ich konsekwencji cały czas rosną. Udany atak na pojedynczy element systemu, jak np. układ inteligentnego czujnika, może pozwolić atakującemu na uzyskanie dostępu do całego systemu oraz wszystkich urządzeń w obrębie tej sieci. To zaś daje niemal nieograniczone pole do szkodliwego działania, np. poprzez ransomware, czyli oprogramowanie szyfrujące dostęp do systemu plików.
Niewątpliwym problemem branży IoT jest obecnie brak standaryzacji w zakresie bezpieczeństwa urządzeń. Nie istnieją żadne, nawet podstawowe, wymagania odnośnie do bezpieczeństwa, które muszą być spełnione, aby urządzenie zostało dopuszczone do obrotu. Nie ma też jednolitych wytycznych odnośnie do podejścia do tematu zabezpieczeń, przez co każdy z producentów może w zasadzie stosować dowolne rozwiązania w tym zakresie lub też nie stosować ich wcale. Nie jest rzadkością, szczególnie w przypadku masowo produkowanych oraz tanich modeli, bardzo niski poziom zabezpieczeń. Nie zawsze istnieje też skuteczny system wsparcia technicznego i bieżącego łatania znalezionych podatności. Tego typu urządzenia, po podłączeniu do sieci, stają się jej najsłabszym ogniwem, które pozwala na uzyskanie nieautoryzowanego dostępu do innych zasobów.
Producenci z branży IoT podjęli kroki w celu rozwiązania problemu związanego z brakiem standardów bezpieczeństwa. Organizacja TCG (Trusted Computing Group) przygotowała publikację opisującą standardy bezpieczeństwa dotyczące zarówno hardware, jak i soft ware, o nazwie DICE (Device Identity Composition Engine). Dokument ten może w przyszłości stać się podstawą do certyfikacji układów IoT.
Definiowanie wymagań bezpieczeństwa
Na etapie projektowania urządzenia IoT bardzo często pojawia się problem dotyczący określenia właściwych wymagań i oczekiwań odnośnie do bezpieczeństwa układu, następnie zaś implementacji odpowiednich rozwiązań. Jest to zagadnienie wieloetapowe i złożone. Według opinii ekspertów, pierwszym krokiem powinna być identyfikacja potencjalnych zagrożeń oraz analiza przyszłego środowiska pracy układu. Wymagania bezpieczeństwa muszą być też ściśle powiązane z wymaganiami funkcjonalnymi – przykładowo, jeśli urządzenie wymaga zdalnego dostępu, związane z tym wymagania bezpieczeństwa powinny określać m.in. sposób autoryzacji, przechowywania kluczy, danych dostępowych oraz szyfrowania połączenia.
Analiza zagrożeń nie powinna kończyć się w momencie wprowadzenia produktu na rynek, ponieważ techniki ataku podlegają stałej ewolucji. Produkt, który kilka lat temu uznawany był za bezpieczny, dziś może już posiadać niebezpieczne podatności. Producent powinien zatem przemyśleć oraz wprowadzić politykę reagowania na incydenty bezpieczeństwa, w niej zaś należy określić kwestie takie jak maksymalny czas na wprowadzenie poprawek w oprogramowaniu po wykryciu podatności, sposób dystrybucji nowych wersji, mechanizm aktualizacji firmware oraz kanały komunikacji z klientami dotyczącej tej tematyki.
Cyberbezpieczeństwo, tak jak wiele innych elementów procesu produkcji urządzeń elektronicznych, podlega zasadom ekonomii. Koszt oraz możliwości implementowanych zabezpieczeń silnie zależą od rodzaju urządzenia. Żaden producent nie będzie pewnie zbyt chętny, żeby zainwestować miliony dolarów w mechanizmy zabezpieczeń układu inteligentnego zraszacza ogródka, jednak zgoła inaczej przedstawiać będzie się sytuacja np. w przypadku układu pełniącego istotną funkcję w procesie przemysłowym.
Mechanizmy zabezpieczeń
Podstawowym narzędziem ochrony przed potencjalnymi atakami jest bezpieczne oprogramowanie, wolne od podatności oraz dostarczające odpowiednich mechanizmów zabezpieczeń. Jakość kodu poprawić można poprzez wdrożenie procedur i procesów kontroli jakości, takich jak automatyczne testowanie, będące częścią koncepcji CI/CD (Continuous Integration/Continuous Development). Do środków soft ware’owych zaliczyć można też wszelkiego rodzaju algorytmy kryptograficzne, pozwalające na autentykację oraz szyfrowanie przesyłanych danych.
Kolejnym elementem systemu bezpieczeństwa są mechanizmy sprzętowe. Odpowiednie układy, jak np. generatory kluczy kryptograficznych, jeszcze bardziej utrudniają zadanie potencjalnemu atakującemu.
W temacie bezpieczeństwa uwagę należy poświęcać nie tylko zabezpieczeniom każdego z modułów wchodzących w skład systemu IoT, ale też systemowi jako całości. Sposób integracji systemu, a w szczególności jego dogłębne przetestowanie, są niezwykle istotne z punktu widzenia cyberbezpieczeństwa.
Podsumowanie
Projekty systemów i urządzeń IoT są niezwykle zróżnicowane, zarówno pod względem złożoności, jak i potencjalnych zastosowań. Jednak niemal w każdym przypadku oprogramowanie pełni kluczową funkcję, wydatnie przyczyniając się do powodzenia lub upadku projektu. Przekłada się bezpośrednio na wydajność urządzenia oraz poziom jego bezpieczeństwa.
Aspekt bezpieczeństwa jest jednym z najbardziej krytycznych i najistotniejszych elementów w procesie projektowania układów IoT. Urządzenia te, z racji dostępu do sieci, są szczególnie narażone na próby ataków. Odpowiednio przygotowany firmware może znacząco ograniczyć możliwości atakujących oraz zapewnić bezpieczeństwo całego systemu IoT.
Damian Tomaszewski