Bezpieczeństwo czujników ciśnienia w oponach
Zastanawialiście się kiedyś jak to jest z czujnikami ciśnienia w oponach w nowoczesnych autach? Tzn. przede wszystkim rzecz jasna… są, ale jakby się zastanować, to przecież bezprzewodowo przesyłają dane do komputera pokładowego samochodu. Jak to wygląda? Może da się podsłuchać? Sporo ma o tym do powiedzenia Konrad Kamiński, a publikował to – tak, zgadliście! – na łamach Raportu CERT Orange Polska 2018. Oczywiście jak zawsze zapraszamy do lektury całego raportu, który znajdziecie tutaj.
Analiza czujników ciśnienia w oponach
na przykładzie czujników w pojazdach marki Toyota
(SDR, Arduino)
Wstęp
Od listopada 2014 producenci samochodów mają obowiązek wyposażać nowe pojazdy w czujniki ciśnienia w oponach. System monitorowania ciśnienia nazywany w skrócie TPMS (Tire Pressure Monitoring System) – składa się zwykle z czujników montowanych w kołach oraz centralki zbierającej pomiary i sygnalizującej ewentualne anomalie do komputera pojazdu i kierowcy.
Jako uzasadnienie dla systemu TPMS, wskazuje się następujące korzyści:
- bezpieczeństwo (utrzymanie prawidłowego ciśnienia to właściwa trakcja, stabilność i optymalna droga hamowania)
- ekonomia i ekologia (za niskie ciśnienie powoduje większe zużycie paliwa i opon)
- oszczędność czasu w eksploatacji (możliwość monitorowania ciśnienia bez podłączania koła do manometru).
Symbol systemu TPMS
W literaturze wskazuje się dwa rozwiązania TPMS: pośrednie i bezpośrednie. Sposób pośredni, który jest poza zakresem artykułu, wykorzystuje elementy systemu ABS do oszacowania promienia koła pod naciskiem, który zależy od ciśnienia. Sposób bezpośredni wykorzystuje czujniki w kołach, zwykle zintegrowane z zaworem (wentylem), które drogą radiową wysyłają raport o ciśnieniu do centrali TPMS. W artykule zostanie opisana analiza sygnałów oraz budowa narzędzia do przechwytywania tych sygnałów oraz wysyłania własnych sygnałów (emulacja czujników).
Czujniki – rozpoznanie
W fazie rozpoznania systemu TPMS stosowanego w pojazdach marki Toyota wykorzystano informacje dostępne w internecie. Stosowane w japońskich pojazdach części są w 99% produktami z Japonii (Pacific Industrial Co.), dlatego ilość dostępnych informacji jest mniejsza niż dla rozwiązań marek europejskich. Jednak nie zdecydowano się na demontaż koła ze sprawnego pojazdu. Aukcje internetowe oraz dołączone do nich zdjęcia są źródłem wielu cennych informacji, i tak było w tym przypadku. Dodatkowo producenci urządzeń do diagnostyki systemu TPMS umieszczają wiele informacji o stosowanych typach i producentach czujników dla danej marki i modelu. Nie było zatem problemem znalezienie zdjęcia z widocznym numerem FCC. Dzięki amerykańskiemu zamiłowaniu do udostępniania informacji, podstawowe informacje o czujnikach można uzyskać na stronach FCC.
Czujnik TPMS Toyota
Przechwytywanie
Do wykrywania oraz wstępnego identyfikowania sygnałów z czujników TPMS wykorzystano RTL-SDR, czyli tani tuner radiowy. Przetestowano wiele rozwiązań, ale ostatecznie identyfikacja została przeprowadzona w oparciu o projekt open source https://github.com/jboone/gr-tpms. Projekt zawiera zarówno narzędzia do przechwytywania, jak i do analizy sygnałów – w szczególności zastosowanej modulacji (FSK), pomiaru prędkości bitowej oraz dewiacji częstości, jak również do wyznaczania długości pakietu, a potem parametrów CRC (wartość inicjująca i maska wielomianu) metodą brute force.
Narzędzie burst_inspect do analizy parametrów modulacji FSK
Oryginalne czujniki w kołach wysyłają dane co około minutę, niezależnie od tego czy pojazd się porusza czy jest zaparkowany. Utrata kilku pakietów danych nie jest sygnalizowana kierowcy, dopiero brak danych przez ponad 20 minut powoduje, że system TPMS zgłasza problem z funkcjonowaniem kierowcy.
Analiza sygnału
Z użyciem wyżej wymienionych narządzi wraz z własnymi modyfikacjami (japońskie czujniki są trochę egzotyczne i brak było ich obsługi w użytych narzędziach) uzyskano przykładowe próbki danych dla czterech czujników (część identyfikatorów zaciemniono znakami X; wartości HEX i binarne):
Hardware
W założeniach narządzie do przechwytywania i wysyłania sygnałów TPMS miało być proste, tanie i energooszczędne. Zastosowane podczas wstępnych testów tandem Banana PI (komputerek podobny do Raspberry PI) i RTL-SDR, umieszczony w pobliżu samochodu, nie spełniał tych założeń. Wybór padł na platformę Arduino. Jako odbiornik i nadajnik sygnałów wybrano tani moduł transceiver-a RFM69 na pasmo 433MHz, sterowany za pomocą interfejsu SPI. Znając zastosowaną modulację, wartości częstotliwości, prędkości bitowej oraz dewiacji, można łatwo, w oparciu o dokumentację modułu RMF69, zaprogramować odpowiedni tryb pracy odbiornika i nadajnika modułu. Zaprogramowany moduł umożliwia zarówno odbiór, jak i nadawanie pakietów danych zgodnych z systemem TPMS. Całość zarządzana jest za pomocą programu dla Arduino, który komunikuje się za pomocą łącza szeregowego.
Prototypowy shield z radiem RFM69. Zdjęcie własne
Na płytce prototypowej dla Arduino Uno został umieszczony wspomniany moduł radiowy (na środku, zielony) oraz konwerter poziomów napięć (Arduino UNO używa zasilania i logiki 5V, moduł RMF69 3.3v).
Za pomocą tego urządzenia można dowolnie powtarzać przechwycone wcześniej rzeczywiste próbki oraz generować własne pakiety z prawidłową sumą kontrolną. Ponieważ nadal nieznane były przesyłane parametry ani ich lokalizacja w pakietach, wykorzystano prosty programator TPMS do odczytu danych z przechwyconych wcześniej i odtwarzanych pakietów danych:
Metodą prób i błędów wyznaczono lokalizację danych w pakiecie (obecnie format pakietów jest dostępny w internecie, w czasie przeprowadzania analizy brak było takich danych).
Ostatecznie ustalono format pakietu (pierwsze koło, ID1-ID3 – unikalny identyfikator czujnika):
W programie dla Arduino zaimplementowano możliwość manipulacji bajtami odpowiedzialnymi za wartości ciśnienia i temperatury oraz wyświetlania wartości z przechwyconych pakietów w formie czytelnej dla człowieka za pomocą konsoli szeregowej.
Docelowe urządzenie i jego funkcje
Do zastosowań „polowych”, Arduino Uno z proto shieldem nadal jest duże i niewygodne, na przykład do umieszczenia w kieszeni. Dlatego docelowe urządzenie wykorzystuje Arduino Pro Mini wersja 8MHz/3.3V, transceiver RFM69 oraz do wygodnej komunikacji bez kabli – moduł Bluetooth HC-05. Całość została zamknięta w małej obudowie z tworzywa sztucznego, mieszczącego też dwie baterie LR6.
Moduł z bateriami | Moduł w obudowie |
Do konsoli szeregowej został podłączony moduł Bluetooth HC-05 (profil SPP Bluetooth) umożliwiając wyświetlanie przechwyconych pakietów TPMS własnych i okolicznych samochodów marki Toyota (z prawidłową sumą CRC i sensownymi wartościami ciśnienia i temperatury) z poziomu np. telefonu z aplikacją konsoli Bluetooth (TerminalBT). Aplikacja umożliwia także modyfikację parametrów wartości ciśnienia oraz temperatury i wysyłania tak zmodyfikowanych sygnałów. Planowana aplikacja przeznaczona do wygodnej obsługi urządzenia z poziomu smartfonu, z braku czasu, nie powstała.
Przykładowy atak – symulacja prawidłowego ciśnienia
Jednym z testowanych scenariuszy ataku było wysyłanie z większą częstotliwością (co 1 sekundę) preparowanych pakietów z prawidłowym ciśnieniem w kole. Natomiast oryginalny czujnik w kole zgłaszał niskie wartości ciśnienia z częstotliwością jeden pakiet na minutę. System TPMS nie zgłaszał problemu utraty ciśnienia w kole. Dopiero zatrzymanie wysyłania fałszowanych pakietów powodowało zapalenie się kontrolki utraty ciśnienia i poinformowanie kierowcy o problemie.
Możliwy jest też atak odwrotny, mimo prawidłowego ciśnienia w kołach, można wywołać zapalenie się kontrolki systemu TPMS, poprzez wysyłanie z dużą częstotliwością pakietów z zaniżoną wartością ciśnienia. Prawdopodobnie kierowca zatrzyma pojazd w celu kontroli stanu opon. Może to być wykorzystane np. w nowoczesnej wersji ataku „na kapcia”, aby okraść kierowcę w odludnym miejscu.
Dla testowanego przypadku normalne ciśnienie (według instrukcji) to 220-240 kPa. Podczas testu obniżenie wartości poniżej 187 kPa powodowało sygnalizację problemu z ciśnieniem (kontrolka TPMS na desce rozdzielczej zapala się na pomarańczowo). Wartość ciśnienia powyżej 201 kPa powodowała gaśnięcie alarmu TPMS. Histereza około 20kPa zapobiega migotaniu kontrolki przy niższych, ale jeszcze akceptowalnych przez system wartościach ciśnienia.
Zapalona kontrolka TPMS przez wysłanie zaniżonego ciśnienia
Oba przypadki pokazują możliwość oszukania systemu TPMS, a co za tym idzie kierowcy. Stwarza to w pierwszym przypadku realne niebezpieczeństwo – np. lekko odkręcony przez atakującego wentyl powoduje utratę ciśnienia, która jest maskowana przez przytwierdzony do samochodu emulator czujnika. Utrata stabilności toru jazdy i wykonywanych manewrów ze znacznie obniżonym ciśnieniem stwarza poważne zagrożeniem w ruchu drogowym, szczególnie przy większych prędkościach.
Podsumowanie
Przesyłanie danych drogą radiową bez zabezpieczeń podatne jest na przechwycenie, zmianę i zagłuszenie, czyli nie spełnia żadnego z podstawowych wymagań bezpieczeństwa (Triada Bezpieczeństwa – CIA – confidentiality, integrity, availability). Praca [1] wskazuje na zagrożenia prywatności, związane m.in. z identyfikacją pojazdów za pomocą unikalnych identyfikatorów kół. Własne badania (za pomocą SDR i przeznaczoną dla pasma 433MHz anteną oraz opisanego prototypu) wykazały możliwość odbierania sygnału z opon z odległości kilkudziesięciu metrów oraz skutecznego wysyłania spreparowanych sygnałów z co najmniej kilkunastu metrów. Umożliwia to łatwe generowanie sztucznych alarmów utraty ciśnienia w kołach samochodu ofiary.
Innym wnioskiem jest to, że w zastosowanym w marce Toyota systemie TPMS RAV4 (IV generacja), nie ma znaczenia lokalizacja koła, zamiana kół miejscami nie wpłynie na prawidłowość działania systemu. Jest to o tyle istotne, że czasami spotyka się zalecenia zamiany kół miejscami co sezon, aby zapewnić ich równomierne zużycie. Nie jest w związku z tą operacją wymagana dodatkowo płatna rekonfiguracja systemu czujników.
Literatura
- Ishtiaq Roufa i inni „Security and Privacy Vulnerabilities of In-Car Wireless Networks: A Tire Pressure Monitoring System Case Study”
- https://github.com/jboone/gr-tpms
- Dokumentacja modułu RFM69 https://www.hoperf.com/data/upload/portal/20181127/5bfcb767eb0f2.pdf
- Aplikacja konsoli Bluetooth https://play.google.com/store/apps/details?id=main.terminalBT