Stan zagrożeń w internecie znajduje się obecnie na poziomie standardowym. Nie występują duże epidemie a eksperci z Kaspersky Lab nie zanotowali żadnych poważnych incydentów związanych z bezpieczeństwem. Poziom zagrożenia: 1

Jak przechytrzyć czujniki ruchu drogowego

Dodany 21 kwietnia 2016, 09:08 CEST
Tagi:

W ciągu ostatnich dwóch lat czujniki ruchu drogowego wyrosły w rosyjskich miastach jak grzyby po deszczu. Pierwszymi, którzy zauważyli białe skrzynki zamontowane na słupach przy drodze, byli kierowcy wyposażeni w wykrywacze fotoradarów. Urządzenia te, służące do ostrzegania kierowców przed fotoradarami, reagują na sygnały emitowane przez czujniki tak samo jak na wykorzystywane przez drogówkę radary. Jednak to, że pomagają w wyegzekwowaniu ograniczenia prędkości, stanowi jedynie pozytywny skutek uboczny ich działania; władze miasta zainstalowały te czujniki z zupełnie innego powodu. Urządzenia te rejestrują liczbę samochodów różnego rozmiaru na każdym pasie, określają ich średnią prędkość i wysyłają te dane do ujednoliconego centrum kontroli ruchu drogowego.

road_sensors_en_1_auto.jpg

Czujnik ruchu drogowego w Moskwie

Dzięki czujnikom władze miasta otrzymują informacje dotyczące intensywności ruchu drogowego, co pozwala im dostosować organizację sygnalizacji świetlnej lub planować dalszą infrastrukturę drogową. Tygodniowe raporty publikowane przez moskiewskie władze odpowiedzialne za ruch drogowy zawierają informacje dotyczące najwolniejszych i najszybszych autostrad oparte o dane pochodzące zarówno z Centrum zarządzania ruchem drogowym jak i wyszukiwarki Yandex. O ile informacje z drugiego źródła pochodzą z aplikacji działających na smartfonach użytkowników, Centrum zarządzania ruchem drogowym nie mogłaby gromadzić swoich danych bez infrastruktury drogowej, która zostanie omówiona w tym tekście.      

road_sensors_en_2_auto.png

Co tydzień moskiewskie władze miasta publikują dane dotyczące najszybszych i najwolniejszych autostrad

Czujniki te stanowią najniższą warstwę infrastruktury „inteligentnego miasta” – gromadzą surowe dane dotyczące ruchu drogowego i przesyłają je dalej; bez tych danych nie można przeprowadzić żadnej analizy ani poprawnie skonfigurować systemu. Dlatego informacje pochodzące z takich czujników muszą być dokładne. Czy tak jest w rzeczywistości? Czy osoba z zewnątrz może manipulować działaniem czujników i gromadzonymi przez nie informacjami? Postaramy się odpowiedzieć na te pytania i wskazać wszelkie usprawnienia, jakie można wprowadzić do miejskiej infrastruktury IT.

Jak wyszukiwać urządzenia i informacje na ich temat

Każde badanie rozpoczyna się od zbierania wszelkich dostępnych danych, a badanie systemów osadzonych, do których należą czujniki ruchu drogowego, nie jest tutaj wyjątkiem. Nawet w wąskim segmencie rynkowym nie sposób znać wszystkich rodzajów i modeli czujników z wyglądu, jeśli na co dzień nie ma się z nimi do czynienia zawodowo. Istnieje duże prawdopodobieństwo, że nie będziesz w stanie od razu zidentyfikować producenta urządzenia jedynie na podstawie oględzin. Tym bardziej nieocenione okazują się wszelkie logotypy i etykietki producentów, jakie można znaleźć na urządzeniach.  

Jeśli uda ci się rozpoznać model czujnika ruchu drogowego oglądając go jedynie, dotrzesz do niezbędnej dokumentacji na stronie producenta (lub integratora), a przy odrobinie szczęścia - także oprogramowanie wykorzystywane w pracy z takimi urządzeniami. Bez trudu znajdziesz ulotkę marketingową na temat tego urządzenia, a może nawet trafisz na obszerniejszy dokument sprzedażowy. Natknięcie się na dokumentację to nie żaden fart, ale potrzeba już dużego szczęścia, żeby znaleźć pełny opis technologiczny wraz z systemem kontroli urządzenia.   

Praktycznym podejściem jest zautomatyzowanie procesu pracy z czujnikami, tak aby nie trzeba było siedzieć pod każdym takim urządzeniem z laptopem. Dzisiaj taka automatyzacja jest zupełnie normalna – połączenia bezprzewodowe nie stanowią już rzadkości w przypadku komponentów „inteligentnego miasta”. Jednak aby automatyzacja była możliwa, należy najpierw dowiedzieć się, jaki protokół komunikacyjny jest wykorzystywany przez każdy czujnik i jak oddzielić urządzenia, które nas interesują, od wszystkich innych.   

W tym celu można wykorzystać wszelkie identyfikatory, łącznie z niuansami dotyczącymi sposobu przekazywania danych przez urządzenia. Na przykład, większość adresów MAC jest zarezerwowanych dla określonych producentów (istnieją jednak również anonimowe adresy MAC). Oprócz identyfikatorów numerycznych urządzenia zwykle posiadają również nazwy alfabetyczne, które również mogą byś zgodne ze standardem określonego typu, tj. model urządzenia plus indeks przyrostowy. 

Wszystko to pozwala napisać skaner umożliwiający wyszukiwanie interesujących nas urządzeń. Jeden z modeli czujników zainstalowanych w Moskwie wykorzystuje technologię Bluetooth w celu przesyłania danych. Urządzenia te posiadają zarówno adresy MAC jak i „przyjazne nazwy”, które są dość charakterystyczne, przez co wystarczy jedynie dodać te czujniki ruchu drogowego do listy i odfiltrować wszystkie pobliskie smartfony i odbiorniki telewizyjne. Dyskusja na temat bezpieczeństwa technologii Bluetooth wykracza poza zakres tego tematu, dlatego nie będziemy tutaj rozwodzili się na temat włamywania się do urządzeń z technologią Bluetooth. W listopadzie 2015 r. poinformowaliśmy władze miasta Moskwy o błędach w konfiguracji.      

road_sensors_en_3_auto.png

Zapisane w bazie danych informacje z czujnika ruchu drogowego

Korzystałem z systemu Python, PostgreSQL i trochę C. W czasie rzeczywistym, gdy przejeżdżam obok każdego czujnika ruchu drogowego, skaner identyfikuje adres MAC każdego urządzenia, jego przyjazną nazwę oraz współrzędne. Pola dotyczące nazwy producenta i adresu fizycznego zostają wypełnione później w oparciu o zebrane już dane. Określenie fizycznego adresu urządzenia na podstawie współrzędnych jest czasochłonnym procesem, dlatego nie należy go wykonywać równocześnie z wyszukiwaniem urządzeń. Nawiązanie połączenia za pośrednictwem technologii Bluetooth również nie przebiega szybko, dlatego jeśli chce się znaleźć czujniki ruchu drogowego, trzeba jechać powoli. 

Co można zrobić z firmware’m

Otwartość, jaką producenci okazują inżynierom zajmującym się instalacją, oraz ich gotowość zapewnienia dostępu do narzędzi i dokumentacji, automatycznie pociąga za sobą otwartość wobec badaczy (Szanuję tego rodzaju podejście; w mojej opinii taka otwartość w połączeniu z podejściem "bug bounty" daje lepsze rezultaty niż tajność informacji). Wybrawszy dowolny spośród zidentyfikowanych czujników, można zainstalować na laptopie oprogramowanie konfiguracji urządzenia dostarczone przez producenta, pojechać na miejsce (adres fizyczny zapisany w bazie danych) i połączyć się z urządzeniem.

Jak w przypadku każdego badania dotyczącego bezpieczeństwa systemu osadzonego, przede wszystkim sprawdzamy, czy jest możliwe przeinstalowanie firmware’u na urządzeniu.

road_sensors_en_4.png

Oprogramowanie konfiguracyjne pozwala zmienić firmware na czujniku ruchu drogowego

Tak, możemy zainstalować nowy firmware na urządzeniu za pośrednictwem tego bezprzewodowego połączenia przeznaczonego do celów konserwacji. Znalezienie firmware’u producenta jest równie łatwe jak znalezienie jego oprogramowania. Firmware przypomina Intel iHex lub Motorola SREC, jednak jest to produkt własny producenta. Jeśli usuniemy informacje umieszczone na górze (‘:’ – instrukcje zapisu, numery seryjne, adresy pamięci i sumy kontrolne) z bloków danych dla procesora DSP oraz mikroprocesora, uzyskamy czysty kod. Jednak nie znamy architektury kontrolerów w urządzeniu, dlatego nie możemy po prostu otworzyć pliku przy użyciu deasemblera.  

road_sensors_en_5_auto.png

road_sensors_en_5a_auto.png
Firmware czujnika ruchu drogowego

Co ciekawe, z pomocą przyszedł nam portal LinkedIn – okazuje się, że nie jest to zasób przydany jedynie dla osób nastawionych na karierę i działów HR. Czasami architektura urządzenia nie stanowi tajemnicy, a inżynierowie, którzy kiedyś pracowali dla producenta, mogą chcieć podzielić się swoją wiedzą. Teraz rozumiemy nie tylko plik, ale również architekturę, dla której został skompilowany firmware. Jednak szczęście nam sprzyja tylko do momentu uruchomienia IDA. 

road_sensors_en_6.png

Można znaleźć typy kontrolera, nawet jeśli nie zostały określone w dokumentacji

Chociaż znamy architekturę, firmware pozostaje nic nieznaczącym zestawem bajtów. Jednak od tego samego inżyniera moglibyśmy dowiedzieć się, jak firmware został zaszyfrowany, oraz jakie są algorytmy szyfrowania i tabele kluczy. Nie miałem pod ręką urządzenia, dlatego na tym etapie stwierdziłem, że ten tryb czarnej skrzynki modyfikacji firmware’u nie jest zbyt obiecujący i zrezygnowałem. Należy przyznać, że w tym konkretnym przypadku inżynierowie mikroelektroniki wiedzą, jak zabezpieczyć firmware. Nie oznaczało to jednak końca naszego badania czujników.    

Tylko ciężarówki podróżują nocą

Modyfikacja firmware’u jest „w porządku” pod tym względem, że umożliwia dodanie nowych możliwości funkcjonalnych. Jednak standardowe oprogramowanie producenta zawiera wystarczającą funkcjonalność. Na przykład, urządzenie posiada około 8 MB pamięci, która jest wykorzystywana do utrzymywania kopii danych dotyczących ruchu drogowego do czasu zapełnienia pamięci. Do tej pamięci można uzyskać dostęp. Firmware pozwala zmienić sposób klasyfikacji przejeżdżających pojazdów według ich długości lub zmienić liczbę pasów. Chcesz mieć kopię zgromadzonych informacji na temat ruchu drogowego? Nie ma problemu. Chcesz sklasyfikować wszystkie pojazdy jako ciężarówki poruszające się na prawym pasie? To również jest do zrobienia. Naturalnie wpłynie to na dokładność gromadzonych statystyk ze wszystkimi konsekwencjami, jakie pociąga to za sobą.          

road_sensors_en_7.png

Próbka danych gromadzonych i przekazywanych przez czujniki. Te same dane są przechowywane na urządzeniu

Jeśli ktoś chce zdobyć kopię statystyk dotyczących moskiewskiego ruchu ulicznego lub manipulować tymi danymi, będzie musiał przespacerować się lub przejechać obok wszystkich czujników ruchu drogowego; jednak nie ma potrzeby uruchamiania oprogramowania dla każdego z tysięcy czujników ani ręcznego modyfikowania ustawień. W tym konkretnym przypadku, istnieje opis systemu poleceń dla urządzeń. Coś takiego nie zdarza się często podczas badania systemów osadzonych. W każdym razie po ustanowieniu połączenia z czujnikiem ruchu drogowego przy użyciu oprogramowania producenta polecenia nie stanowią już tajemnicy – wystarczy użyć narzędzia do nasłuchiwania (sniffer), aby były widoczne. Istnieje ponadto opis w języku angielskim, który oszczędza nam wysiłku związanego z analizą protokołu komunikacji języka maszynowego. 

road_sensors_en_8_auto.png

Ujęte w dokumencie polecenia urządzenia sprawiają, że analiza ruchu drogowego jest niepotrzebna 

Usługi Bluetooth w rzeczywistości nie są implementowane w czujniku ruchu drogowego; w tym przypadku protokół bezprzewodowy stanowi jedynie środowisko komunikacji danych. Dane są przesyłane za pośrednictwem zwykłego portu szeregowego. Obsługa takich portów przez oprogramowanie nie różni się od odczytu czy zapisu do plików, a kod wysyłania poleceń jest banalny. W tym celu nie jest nawet konieczne implementowanie zwykłej obsługi portu wielowątkowego – wystarczy wysłać bajty i dostać odpowiedź w jednym wątku.  

Podsumowując, wystarczy pojazd jadący wolno przez miasto, laptop z silnym nadajnikiem Bluetooth oraz oprogramowanie skanera, aby zarejestrować lokalizacje czujników ruchu drogowego, pobierając z nich informacje dotyczące ruchu drogowego i, jeśli taki jest nasz cel, zmieniając ich konfigurację. Nie twierdzę, że statystyki dotyczące ruchu drogowego stanowią wielką tajemnicę, ale majstrowanie przy konfiguracji takich czujników mogłoby wpłynąć na ich wiarygodność. Ponadto, dane te mogłyby stanowić podstawę kontrolowania „inteligentnej” sygnalizacji świetlnej i innego sprzętu wykorzystywanego w ruchu drogowym.   

road_sensors_en_9_auto.png

Czujnik wysłał odpowiedź, polecenie zostało przyjęte. Ponieważ znamy system poleceń, łatwo jest „przetłumaczyć” odpowiedź  

Co można zrobić?

 

Okazuje się, że odpowiedzi na obydwa pytania postawione na początku są negatywne: dane dotyczące ruchu drogowego nie są zabezpieczone i można nimi manipulować. Dlaczego tak jest? Otóż, nie istniało żadne uwierzytelnienie z wyjątkiem tego wymaganego dla technologii Bluetooth, jednak ono również nie zostało odpowiednio skonfigurowane. Producent zbadanych przez nas czujników ruchu drogowego jest bardzo szczodry jeśli chodzi o techników serwisowych, udostępniając publicznie wiele informacji dotyczących tych urządzeń na swojej oficjalnej stronie i w innych miejscach. Osobiście, zgadzam się z producentem i szanuję go za to, uważając, że podejście „bezpieczeństwo poprzez ukrywanie” nie sprawdza się dzisiaj; każdy, kto jest wystarczająco zdeterminowany, odkryje system poleceń i uzyska dostęp do oprogramowania inżynieryjnego. Według mnie, bardziej sensowne jest połączenie otwartości, szerokich programów premiowania oraz szybkiej reakcji na wszelkie zidentyfikowane luki w zabezpieczeniach, chociażby z takiego powodu, że liczba badaczy zawsze będzie większa niż liczba pracowników w dowolnym dziale bezpieczeństwa informacji.       

Na etapie instalacji uzasadnione jest unikanie wykorzystywania wszelkich standardowych identyfikatorów. Naturalnie, producenci muszą reklamować swoje produkty, a zespoły serwisowe czasem muszą zebrać dodatkowe informacje z nalepek na urządzeniu, jednak oprócz wygody należy uwzględnić kwestie bezpieczeństwa informacji. Na koniec nie mniej istotna sprawa: nie warto polegać wyłącznie na standardowej identyfikacji zaimplementowanej w znanych protokołach. Każde dodatkowe zabezpieczenie własne, które zostało odpowiednio zaimplementowane, będzie miało znaczenie i utrudni penetrację.