Internet Of Things: IoT Security - Rozdział 3

1. OWASP zidentyfikował różne obszary podatności w systemach IoT, które wymagają szczególnej uwagi:
  • Czujniki sprzętowe często umieszcza się w miejscach, które ułatwiają ich narażenie na manipulacje. Dodatkowe zabezpieczenia fizyczne na obwodzie, a także kamery bezpieczeństwa, mogą być potrzebne do udaremnienia manipulacji. Środowisko czujników może być manipulowane celowo lub nieumyślnie. Przykładem tego może być wentylator umieszczony w pobliżu czujnika temperatury, który dmucha chłodnym powietrzem na czujnik. Ponieważ czujnik nie wykrywa wzrostu temperatury, temperatura pomieszczenia będzie wyższa, niż powinna. W zależności od tego, jak krytyczna jest temperatura dla działania sprzętu, może to być sytuacja szkodliwa. Czujniki mogą być również umieszczone w miejscach, gdzie są narażone na uszkodzenia fizyczne.
  • Pamięć urządzenia, ma potencjał do bycia dostępną. Dostarcza to atakującemu wrażliwe dane. Wiele urządzeń jest produkowanych i wysyłanych z domyślnymi nazwami użytkowników i hasłami. Aktywiści zagrożeń mogą używać tych domyślnych danych uwierzytelniających do dostępu do pamięci urządzenia, potencjalnie ujawniając wrażliwe dane, takie jak jawne dane logowania i klucze szyfrowania.
  • Różne fizyczne interfejsy urządzenia mogą być atakowane. Wiele urządzeń IoT używa wymiennych nośników, takich jak karty SD, do przechowywania informacji i systemu operacyjnego. Jeśli aktor zagrożenia uzyskał fizyczny dostęp do urządzenia, karta mogłaby zostać usunięta i skopiowana lub skradziona. Urządzenie mogłoby zostać zresetowane przez wyłączenie go lub przeprowadzenie fizycznej procedury resetowania, takiej jak przytrzymanie przycisku resetowania przez 10 sekund. Fizyczny dostęp do urządzenia może również ujawnić identyfikatory urządzenia, takie jak numer seryjny.
  • Urządzenia IoT często używają protokołów innych niż Ethernet do komunikacji z czujnikami i siłownikami. Te protokoły używają interfejsów szeregowych, takich jak UART, JJTAG, I2C i SPI do komunikacji. Aktor zagrożenia mógłby podłączyć się do jednego z tych interfejsów, uzyskując dostęp do terminala, i potencjalnie kraść lub modyfikować dane. Następnie jest możliwe, że aktor zagrożenia zainstaluje tylną furtkę, aby zapewnić ciągły dostęp.
  • Firmware urządzenia może być wydobyty i potencjalnie zmodyfikowany na korzyść atakującego, jeśli nie jest odpowiednio chroniony, firmware urządzenia może zostać wydobyty i potencjalnie zmodyfikowany na korzyść atakującego. Bardzo ważne jest, aby klucze szyfrowania były odpowiednio zabezpieczone. Aktualizowanie aplikacji i systemów operacyjnych jest kluczowe. Po tym, jak atakujący są w stanie określić wersję systemu operacyjnego lub aplikacji, mogą szukać podatności, aby wykorzystać urządzenie.
2. Internet rzeczy (IoT) składa się głównie z urządzeń ograniczonych, które mają bardzo ograniczoną moc, pamięć i cykle przetwarzania. Komunikacja między tymi urządzeniami jest również ograniczona i często nie jest szyfrowana, co jest jednym z problemów wymienionych przez OWASP. Wśród urządzeń ograniczonych o są inteligentne czujniki, urządzenia wbudowane i urządzenia do prototypowania, takie jak Raspberry Pi i Arduino. Inteligentne czujniki mają zdolność do komunikacji z systemem monitorującym za pomocą wbudowanego mikroprocesora. Urządzenia wbudowane to produkty, które zawierają system komputerowy zaprojektowany do specjalnego celu. Raspberry Pi i Arduino są urządzeniami do prototypowania systemów wbudowanych.


3. Główne typy procesorów używane w IoT to ARM, MIPS i x86. Procesory te dzielą się na dwie główne kategorie: Reduced Instruction Set Computing (RISC) i Complex Instruction Set Computing (CISC).

RISC

Procesory RISC zwykle mają mniej tranzystorów niż procesory CISC. Mniejsza liczba tranzystorów przekłada się na niższy koszt, mniejsze zużycie energii i mniejszą produkcję ciepła. Te cechy czynią procesory RISC dobrymi kandydatami zarówno do urządzeń mobilnych, jak i IoT. Architektura zestawu instrukcji (ISA) zasadniczo używa jednego cyklu komputerowego na każdą instrukcję i zawiera mały zestaw prostych instrukcji. Dwa główne dostawcy procesorów RISC to:
  • ARM – Jest to architektura zazwyczaj licencjonowana innym firmom do projektowania własnego procesora. Procesory ARM są dostępne zarówno w architekturach 32-bitowych, jak i 64-bitowych. Głównym procesorem dla Raspberry Pi jest procesor ARM.
  • MIPS - Architektura MIPS jest używana dla wielu procesorów w systemach wbudowanych, a także w sieciach, urządzeniach mobilnych i urządzeniach IoT. Procesory MIPS są dostępne w implementacjach 32-bitowych i 64-bitowych.
Rynek komputerów mobilnych jest obecnie zdominowany przez procesory RISC, głównie rozwijane wokół procesora ARM.

CISC

Procesory CISC mają zdolność wykonywania kilku operacji za pomocą jednej instrukcji. Do przechowywania bardziej złożonych instrukcji potrzebne są więcej tranzystorów. Dodatkowe tranzystory generują więcej ciepła, wymagają więcej energii i zwiększają koszt procesora. Jednak użycie złożonych instrukcji redukuje rozmiar kodu programu. Daje to korzyść przy ładowaniu i przechowywaniu aplikacji, w porównaniu do architektury RISC. Głównymi dostawcami procesorów opartych na CISC są Intel i Advanced Micro Devices (AMD). Zarówno Intel, jak i AMD aktywnie dążą do rynku IoT, próbując zmniejszyć zużycie energii i ciepła w swoich procesorach.

4. Najnowszym trendem w redukcji wymagań dotyczących mocy i zwiększaniu wydajności jest wykorzystanie obliczeń heterogenicznych. Zasadniczo obliczenia heterogeniczne polegają na użyciu więcej niż jednego rodzaju procesora o różnych możliwościach. Powszechnym podejściem stosowanym przez kilka firm jest wykorzystanie jednostki przetwarzania grafiki (GPU) do wykonywania złożonych obliczeń matematycznych lub do obsługi zadań związanych z szyfrowaniem i deszyfrowaniem.

5. ARM posiada technologię o nazwie big.LITTLE, która wykorzystuje procesory (rdzenie) o różnych możliwościach przetwarzania i wymaganiach dotyczących mocy. Procesor LITTLE zużywa mniej energii, gdy zadanie nie wymaga tak dużej zdolności przetwarzania. Procesor big zapewnia największą wydajność obliczeniową, kosztem wyższych wymagań dotyczących mocy. Wykorzystanie tego typu architektury heterogenicznej może przedłużyć żywotność baterii w urządzeniach znajdujących się w odległych lokalizacjach.

6. Urządzenia IoT wykorzystują różne rodzaje pamięci do przechowywania danych, firmware i przetwarzania. 
  • Pamięć SD i MicroSD są używane do przechowywania danych niezbędnych do działania IoT.
  • Pamięć nieulotna, tak jak EPROM i EEPROM, zachowuje informacje nawet po wyłączeniu zasilania i jest często używana do przechowywania firmware. 
  • Wbudowana karta MultiMedia (eMMC) to szybka i tania pamięć nieulotna, często lutowana bezpośrednio do płyty systemowej. 
  • Pamięć ulotna, tak jak SRAM i DRAM, służy do przechowywania kodu operacyjnego i zapewnia tymczasowe przechowywanie podczas działania urządzenia.
7. Urządzenia IoT mogą mieć różne porty fizyczne, takie jak USB i Ethernet, a także inne interfejsy nieznajdowane w typowych urządzeniach komputerowych. Te interfejsy mogą zapewniać komunikację szeregową, w której bity są przesyłane jeden po drugim. 
  • UART, I2C, SPI to różne typy portów komunikacyjnych, które mogą być wykorzystywane do komunikacji z innymi urządzeniami peryferyjnymi lub do przechowywania danych. 
  • JTAG to protokół używany do testowania i debugowania, który może pozwolić atakującemu na zrozumienie logiki mikrokontrolera. Standardowe procedury ochrony portów USB i Ethernet powinny być stosowane, ponieważ te porty mogą potencjalnie być używane do wydobycia informacji z urządzenia.
8. Układ wbudowany jest zaprojektowany do realizacji konkretnej funkcji w ramach większego systemu, na przykład systemu zabezpieczeń domu. Wszystkie operacje systemu są kontrolowane przez mikrokontroler, który może być zaprogramowany dla specyficznych czujników, takich jak czujniki dymu, ruchu, gazu, temperatury itp. Mikrokontroler może wyświetlać informacje na ekranie lub komunikować się z innym sprzętem komputerowym.

9. Niektóre układy wbudowane korzystają z mikroprocesorów, które wymagają zewnętrznych komponentów, takich jak pamięć. System oparty na mikrokontrolerze jest samowystarczalny i może zawierać pamięć flash, RAM, komunikację szeregową i inne peryferia.

10. Układy wbudowane mogą korzystać z wbudowanego systemu operacyjnego lub być programowane bezpośrednio za pomocą kodu maszynowego dla procesora. Są one dostosowane do obsługi operacji w czasie rzeczywistym i mogą korzystać z różnych systemów operacyjnych, takich jak Linux, Java Embedded czy Windows IoT.

11. Debugowanie oprogramowania układu wbudowanego jest obsługiwane inaczej niż typowe debugowanie oprogramowania komputerowego. W układzie wbudowanym oprogramowanie jest tworzone poza środowiskiem, w którym będzie działać, dlatego do debugowania korzysta się z portu JTAG.

12. Programiści mają wybór co do rodzaju języka programowania. Języki programowania dzielą się na dwie szerokie kategorie: skompilowane lub interpretowane.
  • Skompilowany kod - kod źródłowy jest zapisany w formacie, który jest czytelny za pomocą edytora tekstu, a następnie konwertowany (kompilowany) na kod maszynowy, który jest odczytywany i wykonywany przez procesor. Programista musi zakończyć proces kompilacji przed użyciem programu. Jeśli konieczne są zmiany, kod tekstowy jest zmieniany, a następnie ponownie kompilowany przed użyciem. Przykłady języków kodu skompilowanego to C, C++, Rust i Visual Basic.
  • Interpretowany kod - w przypadku kodu interpretowanego, każda instrukcja jest wykonywana jedna po drugiej. Interpreter tłumaczy instrukcję na formę kodu maszynowego, który może być wykonany przez procesor. Jeśli wystąpi błąd, program zatrzyma się w tym miejscu i można dokonać korekt. Python może być obecnie najpopularniejszym językiem kodu interpretowanego dla urządzeń IoT. Inne interpretowane języki, które mogą być używane, to JavaScript, Perl i PHP.
13. Biorąc pod uwagę powierzchnię ataku OWASP, kod programu może stanowić duże ryzyko. Kod interpretowany jest łatwy do modyfikacji, ponieważ jest zazwyczaj przechowywany w formacie tekstowym. Nawet skompilowany kod może być zmieniony przez atakującego za pomocą debugera i zastąpienia instrukcji kodu maszynowego złośliwym kodem. W przypadku skompilowanego kodu możliwe jest sprawdzenie cyfrowego podpisu binarnego pliku wykonywalnego, aby sprawdzić, czy nie został on zmieniony.

14. Urządzenia IoT zwykle korzystają z okrojonej wersji systemu operacyjnego, a programiści mają do wyboru opcje open source i komercyjne. Busybox to otwarte źródło skompilowanego pliku wykonywalnego, który zawiera wiele podstawowych narzędzi, które zwykle znajdują się w dystrybucjach Linuxa. Android Embedded to lekka wersja Linuxa, używana głównie w urządzeniach mobilnych, ale może być również używana w urządzeniach IoT. 

15. Urządzenia IoT wymagają oprogramowania układowego do działania. Oprogramowanie układowe to w zasadzie wbudowane oprogramowanie, które zawiera minimalny system operacyjny i powiązane programy do sterowania urządzeniem IoT. Urządzenia IoT są podatne na szeroki zakres ataków; jednak podatności związane z oprogramowaniem układowym są dość powszechne. Podatności związane z oprogramowaniem układowym dla urządzeń IoT są podobne do tych innych komputerów lub urządzeń sieciowych. Obejmują one:
  • domyślne dane logowania (w przypadku, gdy na urządzeniu nie zostały one zmienione na silniejsze hasła)
  • DDoS (po tym, jak znane są słabe dane logowania, haker może napisać automatyczny skrypt do logowania się do zdalnych urządzeń IoT i kopiowania zainfekowanego oprogramowania do ich systemów)
  • przestarzałe oprogramowanie układu (jeśli haker próbuje zaatakować konkretne urządzenie IoT lub grupę urządzeń, zwykle sprawdzi, czy oprogramowanie układowe jest przestarzałe lub szuka jakichkolwiek luk, które nie zostały jeszcze zaadresowane za pomocą aktualizacji)
  • ataki typu buffer overflow mogą wystąpić w przypadku podatnego oprogramowania, gdy programista nie uwzględnia rozmiaru danych wejściowych, które użytkownik może wprowadzić. Atak typu buffer overflow może spowodować uszkodzenie danych, odmowę usługi lub może pozwolić na uruchomienie złośliwego kodu na systemie docelowym
  • instalacja "tylnych drzwi" zwykle występuje po tym, jak atakujący uzyska zdalny dostęp do urządzenia IoT.
16. Rootowanie urządzenia IoT następuje, gdy atakujący uzyskuje dostęp na poziomie użytkownika root do systemu operacyjnego urządzenia. Atakujący z dostępem root ma pełną kontrolę nad urządzeniem. Interfejsy JTAG i UART są głównymi celami do zdobycia dostępu root do urządzenia. Po uzyskaniu dostępu, atakujący może odczytać pamięć urządzenia i zmodyfikować oprogramowanie układowe, wprowadzając nowe luki bezpieczeństwa. Może to osiągnąć, pobierając oprogramowanie układowe, modyfikując je i przesyłając je z powrotem do urządzenia z tylnymi drzwiami lub inną nowo wprowadzoną podatnością.

17. W przypadku przedsiębiorstw ważną rolę ogrywa chronienie zasobów sieciowych oraz systemów informatycznych. Dlatego stosuje się m.in.:
  • Obowiązkowa kontrola dostępu (MAC) - stosuje najbardziej rygorystyczną kontrolę dostępu i jest zwykle używana w aplikacjach wojskowych lub krytycznych dla misji. Przypisuje etykiety poziomu bezpieczeństwa do informacji i udziela użytkownikom dostępu na podstawie ich uprawnień do poziomu bezpieczeństwa. 
  • Dyskrecjonalna kontrola dostępu (DAC) - pozwala użytkownikom kontrolować dostęp do ich danych jako właścicielom tych danych. DAC może korzystać z list ACL lub innych metod do określania, którzy użytkownicy lub grupy użytkowników mają dostęp do informacji.
  • Niedyskrecjonalna kontrola dostępu - decyzje o dostępie są oparte na rolach i obowiązkach jednostki w organizacji, znanej również jako kontrola dostępu oparta na rolach (RBAC).
  • Kontrola dostępu oparta na atrybutach (ABAC) - pozwala na dostęp na podstawie atrybutów obiektu (zasobu), który ma być dostępny, podmiotu (użytkownika) uzyskującego dostęp do zasobu i czynników środowiskowych dotyczących sposobu dostępu do obiektu, takich jak pora dnia. 
Innym modelem kontroli dostępu jest zasada najmniejszych uprawnień, która określa ograniczone podejście “według potrzeb” do przyznawania użytkownikom i procesom praw dostępu do określonych informacji i narzędzi. Zasada najmniejszych uprawnień stanowi, że użytkownikom powinno być przyznane minimum dostępu wymaganego do wykonania ich funkcji pracy.

Powszechnym wykorzystaniem jest tzw. eskalacja uprawnień. W tym wykorzystaniu, podatności w serwerach lub systemach kontroli dostępu są wykorzystywane do przyznania nieautoryzowanemu użytkownikowi, lub procesowi oprogramowania, wyższych poziomów uprawnień, niż powinien mieć. Po przyznaniu uprawnienia, sprawca zagrożenia może uzyskać dostęp do poufnych informacji lub przejąć kontrolę nad systemem.

18. Protokół autoryzacji OAuth 2.0 to standaryzowany protokół dla autentykacji i autoryzacji opartej na Internecie. Może być używany do kontroli dostępu do urządzeń IoT, aby uczynić je bardziej bezpiecznymi, poprzez obsługę autoryzacji zasobów przez serwer autoryzacji. Jest to bardzo korzystne w środowisku, w którym istnieją aplikacje stron trzecich, które potrzebują ograniczonego dostępu do zasobów. Bez tego zasoby musiałyby dzielić się danymi uwierzytelniającymi ze stronami trzecimi. Jest w stanie to osiągnąć poprzez delegowanie autoryzacji do zasobów za pomocą następującego procesu:
I. Klient wysyła żądanie autoryzacji do właściciela zasobu. Właściciel zasobu to podmiot, który kontroluje zasób.
II. Właściciel zasobu wysyła z powrotem grant autoryzacji do klienta. Klient to urządzenie wysyłające żądanie.
II. Klient wysyła grant autoryzacji do serwera autoryzacji, żąda tokenu dostępu i próbuje się uwierzytelnić. Serwer autoryzacji to podmiot, który wydaje i kontroluje tokeny dla klientów po uwierzytelnieniu.
IV. Jeśli uwierzytelnienie było udane, serwer autoryzacji sprawdza grant autoryzacji i wysyła token dostępu z powrotem do klienta.
V. Klient wysyła token dostępu do serwera zasobów, aby złożyć żądanie zasobu. Serwer zasobów to serwer, który hostuje zasoby, które są żądane.

Po zweryfikowaniu tokenu dostępu, serwer zasobów umożliwia dostęp do żądanego zasobu.

19. Szyfrowanie to mechanizm, który jest używany do zapewnienia poufności danych. Polega on na zastosowaniu algorytmu do danych, który sprawi, że będą one nieczytelne dla osób, które nie są uprawnione do przeglądania informacji. Algorytm może być zastosowany do pliku zawierającego tajny e-mail, lub do całego ruchu sieciowego, który może zawierać e-mail lub hasła. Aby odszyfrować wiadomość i uczynić ją znowu czytelną, wymagany jest tajny klucz.

Hasła są zwykle przechowywane jako wartości skrótu. Są one zwykle szyfrowane podczas transmisji. Skrócona wartość przesyłanego hasła jest następnie porównywana ze skróconą wartością przechowywanego hasła w celu uwierzytelnienia użytkownika. Skróty są zaprojektowane tak, aby były nieodwracalne. Szyfrowanie musi być odwracalne, aby zaszyfrowane przesyłane dane mogły być odczytane przez odbierające urządzenie lub proces.

Szyfrowanie jest kluczowe dla bezpieczeństwa danych w IoT, ponieważ przesyłane informacje mogą zawierać wrażliwe dane ludzi. Przechwycenie lub manipulacja takimi danymi mogą mieć poważne konsekwencje. Urządzenia IoT są szczególnie narażone na ataki, ponieważ wiele starszych urządzeń IoT nie obsługuje szyfrowania, a komunikacja bezprzewodowa, często stosowana w urządzeniach IoT, ułatwia przechwytywanie transmisji danych, jeśli nie są one szyfrowane.

Ze względu na naturę i rozmiar urządzeń IoT, zwykle mają one ograniczoną ilość zasobów. Konsekwencją tego jest to, że większość urządzeń IoT nie ma mocy obliczeniowej ani zasobów niezbędnych dla bardziej zaawansowanych algorytmów szyfrowania. Ponieważ szyfrowanie jest nadal niezbędnym elementem ich funkcjonalności, mogą być używane lekkie algorytmy szyfrowania. Te algorytmy mogą być implementowane w oprogramowaniu lub za pośrednictwem układu scalonego (IC) za pomocą sprzętu. 

20. W kryptografii każda osoba otrzymuje parę kluczy: jeden nazywany kluczem publicznym, a drugi kluczem prywatnym. Te dwa klucze są matematycznie powiązane ze sobą. Klucz publiczny każdej osoby jest publikowany, podczas gdy klucz prywatny jest trzymany w tajemnicy. Eliminuje to potrzebę dzielenia się tajnymi informacjami między nadawcą a odbiorcą, a wszystkie komunikaty dotyczą tylko kluczy publicznych, a żaden klucz prywatny nie jest nigdy przesyłany ani udostępniany. W tym systemie każdy może wysłać poufną wiadomość, korzystając z informacji publicznej (publicznego klucza zamierzonego odbiorcy), ale wiadomość można odszyfrować tylko za pomocą klucza prywatnego zamierzonego odbiorcy. Ponadto, kryptografia z kluczem publicznym może być używana nie tylko do zapewnienia prywatności (szyfrowania), ale także do potwierdzenia autentyczności i pochodzenia danych lub oprogramowania (podpisy cyfrowe).