Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Zhackował infotainment Hyundaia Ioniq, bo programiści użyli prywatnego klucza RSA… z publicznie dostępnego tutoriala :-)
Japoński programista o nicku “greenluigi1” twierdzi, że udało mu się uruchomić własne oprogramowanie w pokładowym systemie rozrywkowym IVI (In-Vehicle Infotainment) w samochodzie Hyundai Ioniq SEL z 2021 r. Odkrył on, że producent pojazdu zabezpieczył swój system Hyundai Mobis za pomocą kluczy, które nie tylko były publicznie znane, ale zostały wyjęte z przykładów z publikacji dostępnych w Internecie. Przyjrzyjmy się sposobowi od początku.
Rys. 1. Strona aktualizacji IVI w Hyundai Mobis
W pierwszej kolejności należało włączyć Engineering Mode w aplikacji (red. odpowiednik trybu dewelopera w smartfonach). Okazało się, że dzięki temu poradnikowi, na stronie aktualizacji trzeba było 10 razy wcisnąć klawisz w lewo, a następnie jeden w prawo. Pojawiło się okno uwierzytelniania PINem jednak, w tym samym poradniku udało się ustalić jego wartość na “2400”. PIN jednak zmienia się co wersję firmware.
Rys. 2. Panel uwierzytelniania PINem
Po wejściu do trybu inżynierskiego, haker odnalazł mnóstwo informacji diagnostycznych, odczytów debuggera oraz dostęp do ukrytych ustawień, min. kopia logów na USB, oraz, że przytrzymanie przycisku “Radio” powoduje zbieranie danych do dziennika. Odnalazł także informacje o module “Ustawienia ISV” z opcją interfejsu ADB TCP do “Narzędzi testowych SW”. Naturalną konsekwencją odnalezienia tych ustawień, zwłaszcza w kontekście znanego standardu Androidowego interfejsu pokładowego była próba połączenia się z systemem IVI. Jednak próba wpięcia smartfona do tej samej sieci i odnalezienie otwartego portu nie dała rezultatów. Udało się natomiast na pendrive USB zrzucić bardzo dużo logów spakowanych do postaci pliku “daudio2.0v_{Data}-{Czas}.tar.gz”.
Rys. 3. Przykładowy bogaty log z systemu D-Audio2V Hyundai Mobis
Haker przejrzał logi i wywnioskował, że ma do czynienia z systemem D-Audio2V, czyli drugą generacją systemu Display Audio OS firmy Hyundai stosowaną w wielu pojazdach tej marki, a także w samochodach Kia. Odkrył, że na stronie systemu Mobis jest dostępna część kodu źródłowego do pobrania, a gotowe paczki można pobrać ze strony update.hyundai.com.
System IVI akceptuje aktualizacje oprogramowania układowego w postaci archiwów ZIP chronionych hasłem. Po pobraniu aktualizacji ZIP ze strony internetowej Hyundai udało mu się uruchomić narzędzie bkcrack wykorzystując znaleziony na stronie serwisowej Hyundai rozpakowany plik \MODEM\us\modem_version.txt, a następnie partition.mbn (red. narzędzie bkcrack potrzebuje co najmniej 12-bajtowego ciągu ze skompresowanego pliku by móc rozszyfrować całe zaszyfrowane archiwum).
Rys. 4. Dostęp do rozpakowanego pliku z aktualizacją firmware dla IVI.
Dodatkowy traf chciał, że “greenluigi1” wykorzystując prawdopodobnie dirBuster znalazł na stronie Mobis skrypt instalacyjny na Linuksa, który tworzy odpowiedni plik ZIP do przeprowadzenia aktualizacji. Skrypt zawierał w nieszyfrowanej formie hasło ZIP wraz z symetrycznym kluczem szyfrowania AES (CBC) IV z dopełnieniem. Skoro klucz jest symetryczny to może on też służyć do odszyfrowywania obrazów, modyfikowania ich i następnie ponownego szyfrowania. Oczywiście sprawa nie mogła być tak prosta, bo przynajmniej część dostarczanych danych musiała być podpisana kryptograficznie przy użyciu prywatnego klucza RSA, którego haker nie posiadał. Mechanizm aktualizacji IVI w samochodzie używa odpowiedniego klucza publicznego RSA by sprawdzić czy dane zostały podpisane prawidłowo przy użyciu tajnego klucza prywatnego.
Rys. 5. Fragment skryptu uploadera firmware odnalezionego na stronie Mobis
Rys. 6. Odnalezione hasło do pliku ZIP ze skryptu uploadera
Jeden z plików zawierał także klucz RSA, który haker wygooglował…
Rys. 7. Klucz AES wraz ze sposobem szyfrowania, dopełnieniem
Jak się okazało, ten klucz to nie taki zwykły, wygenerowany klucz, a pierwszy 128-bitowy przykład używany w rekomendacji NIST SP 800-38A z 2001 r…
Rys. 8. Fragment NIST SP 800-38A z opublikowanym kluczem i dopełnieniem
Dzięki pozyskanej wiedzy i za pośrednictwem narzędzia binwalk udało mu się rozpakować zawartość obrazu updateboot.img i stamtąd w katalogu /usr/bin znalazł ciekawe narzędzie updateAgent.
Rys. 9. Fragment kodu narzędzia updateAgent z zapisanym kluczem.
Dla własnej ciekawości także i ten klucz wpisał do przeglądarki i… ponownie okazało się, że został użyty klucz z przykładu, tym razem poradnika dostępnego na stronie hayageek.
Z tego miejsca mając dostęp do kluczy, po dłuższej nauce i sposobie umieszczania aktualizacji udało mu się podmienić firmware na własny o czym możecie poczytać w japońskim źródle. Całość zmienionego oprogramowania wraz z uploadującymi skryptami bash opublikował także na swoim githubie.
Na marginesie, wydaje się, że konsensus w społeczności kryptograficznej jest taki, że CBC jest trudne do prawidłowego użycia i zalecane są inne podejścia. Sam Microsoft w zeszłym roku ostrzegł, że korzystanie z AES CBC z dopełnieniem może nie być bezpieczne. Jednak ewidentna wina jest po stronie Hyundai / Mobis przez niewłaściwą implementację AES CBC używając na dodatek innego klucza prywatnego dostępnego publicznie w Internecie.
Źródło:
- https://gigazine.net/news/20220816-hyundai-car-hacking/
- https://github.com/greenluigi1/DAudio2GuiTemplate
~tt
Link do paczek aktualizacyjnych jest błędny. Poprawny to: update.hyundai.com – dlaczego brakuje przycisku „zgłoś błąd w artykule”?
Dzięki za zgłoszenie, poprawione!
Szkoda, że nie skorzystaliście z oryginalnych źródeł https://programmingwithstyle.com/tags/howihackedmycar/
tzn? bo ten link mamy w pierwszym zdaniu newsa ;-)
Ciekawe czy da się stamtąd wskoczyć w jakieś ciekawsze miejsce samochodu? Pewnie jakaś ogólna magistralka tam wchodzi.
Tak, ECS 7-pin
Nie ma takiego modelu jak Hyundai Ionic SEL
Hm… https://www.hyundaiusa.com/us/en/vehicles/ioniq-5/sel