Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

„Roboty z laserami, kamerami oraz brakiem zabezpieczeń” czyli hackowanie inteligentnych odkurzaczy

16 sierpnia 2021, 15:08 | W biegu | komentarzy 16
Tagi:

Podczas tegorocznej konferencji DEF CON Dennis Giese zaprezentował reverse engineering tzw. inteligentnych odkurzaczy produkowanych przez firmy Xiaomi i Roborock. Zapis prezentacji Robots with lasers and cameras (but no security): Liberating your vacuum został opublikowany na YouTubie. Badacz obecnie jest studentem Northeastern University; interesuje się inżynierią wsteczną.

W prezentacji wyjaśniono, że celem rootowania urządzeń IoT jest m.in. weryfikacja prawdziwości twierdzeń o prywatności związanej z eksploatacją tych sprzętów. Dobrą zasadę stanowi separacja IoT od domowej sieci. Komunikacja z chmurą producenta jest szyfrowana, więc bezpieczeństwo zostało zapewnione, ale ten proces z kolei utrudnia analizę zawartości.

Generalnie różne inteligentne urządzenia oferują wiele możliwości. Przykładowo Roborock S6 MaxV jest wyposażony w kamerę, co w zamyśle powinno być używane do kontroli domu podczas nieobecności mieszkańców. Oczywiście ma to wpływ na cenę produktu, co dla niektórych może być zachętą do zakupu używanego urządzenia. Nie jest to najlepszy pomysł, ponieważ poprzedni właściciel mógł zainstalować w nim złośliwe oprogramowanie. I, niestety, tylko uprawnienia roota pozwalają na weryfikację obecności malware’a.

Badacz już w 2017 roku wspólnie z Danielem Wegemerem odkrył istotne podatności w odkurzaczach wzmiankowanych producentów. Obrazy firmware nie były podpisane i zostały zaszyfrowane z wykorzystaniem klucza słabej jakości, a własne oprogramowanie sprzętowe można było „rozesłać” z lokalnej sieci, co mogło skutkować uprawnieniami roota bez większego nakładu pracy.

Na Sekuraku opisaliśmy też sposób kopania bitcoinów przy użyciu odkurzacza Xiaomi. Błędy zostały załatane, tzn. nie można już lokalnie „podmienić” podpisanego uprzednio firmware’a (każdy model – inną parą kluczy). Natomiast warstwa hardware’u nie zmieniła się w znaczący sposób.

Na oprogramowanie S5 Max składają się takie elementy, jak: Ubuntu 14.04, Player, iptables (blokuje porty 22 i 6665, czyli ten wykorzystywany przez Player) oraz inne własnościowe programy (np. narzędzie do zbierania danych).

Eskalacja uprawnień do roota zajęła autorowi badania dwa tygodnie od czasu wprowadzenia produktu na rynek. Hasło do konta root zostało „odzyskane” poprzez interfejs UART (bardzo łatwy i popularny, wykorzystuje go chociażby Arduino). Następnie odkurzacz uruchomiono w trybie single user za pomocą U-Boot.

Wszystkie odnalezione przez testera podatności załatano w kolejnych wersjach oprogramowania:

  • włączono Replay Protected Memory Block, czyli sposób przechowywania danych w pamięci, do których dostęp możliwy jest tylko po poprawnym uwierzytelnieniu,
  • integralność niektórych partycji zabezpieczono poprzez dm-verity (tak samo jest w Androidzie),
  • aktywowano SELinux,
  • niektóre partycje są zaszyfrowane (standardowy LUKS),
  • pliki wykonywalne i aktualizacje są podpisane,
  • iptables nie może odświeżać i usuwać reguł (zmodyfikowano program),
  • UART został zablokowany.

W związku z tym uzyskanie uprawnień roota było utrudnione. W modelu S7 UART nie mógł zostać wykorzystany, a rootfs był tylko do odczytu. Dlatego badacz zdecydował się na użycie FEL, czyli specyficznego podprogramu umożliwiającego wstępne programowanie urządzenia za pomocą USB. Ten sposób nie wymaga lutowania, ale trzeba zdemontować obudowę. Działa na wszystkich modelach firmy Roborock z pamięcią typu NAND.

Najpierw trzeba jednak dokonać reverse engineeringu płytki PCB. Układ pinów UART był znany, natomiast całkowicie nieprzydatny, bo interfejs został zablokowany. Okazuje się, że wszystkie układy scalone firmy Allwinner zawierają moduł FEL pozwalający na flashowanie urządzenia. Celem było więc uruchomienie systemu w wersji „custom” za pomocą tego modułu.

Plan działania był następujący:

  • wyodrębnienie konfiguracji kernela,
  • utworzenie initramfs zawierającego Dropbear (serwer SSH), klucze SSH i inne narzędzia,
  • kompilacja jądra z wykorzystaniem źródła Nintendo NES,
  • utworzenie własnej wersji U-Boot z wyodrębnioną konfiguracją Roborock,
  • aktywacja FEL poprzez zwarcie pinu TPA17 z masą,
  • załadowanie U-Boot, jądra i initramfs do pamięci operacyjnej poprzez USB.

Odkurzacz uruchomił się z działającym obrazem, SquashFS został zdekompresowany, rootfs (zawierający klucze SSH i Dropbear) – załadowany, SquashFS został skompresowany, po czym partycja zawierała już odpowiedni obraz. Poprzez SSH możliwy był już dostęp jako root. Warto zaznaczyć, że ten proces pozwala „uratować” zbrickowane urządzenie.

W przypadku modeli Xiaomi M1S i Roborock S6 problematyczne okazało się: zablokowanie wszystkich portów, zaszyfrowany lub z chronioną integralnością system plików i chroniony interfejs USB. Badacz spróbował obejść zabezpieczenia USB, wyłączyć SELinux i podmienić partycję zawierającą aplikację.

ADB jest dość dobrze zabezpieczony, więc należało podłączyć się do pamięci flash z użyciem interfejsu ISP lub go wylutować, wydobyć sekret VINDA i wyliczyć challenge–response.

Do podłączenia ISP autor badania użył adaptera. Za pomocą ADB ustawił sekret VINDA na UUUUUUUUUUUUUUUU. Potem, wpisując w Wierszu polecenia adb shell i podając sekret z identyfikatorem i nazwą powłoki bash, dostał się do terminala. Kolejny krok to wyłączenie SELinux, co jednak było utrudnione z uwagi na brak dostępu do sieci i /dev. Ale polecenie kill działało.

Tester postanowił skopiować /opt/rockrobo/miio do /tmp/milo, zamienić miio-client skryptem powłoki, użyć bind mount do zamontowania /tmp/miio w /opt/rockrobo/miio i poleceniem kill wyłączyć proces miio_client, co skutkowało wykonaniem skryptu (watchdog restartuje miio_client, jeśli zostanie wyłączone).

Badacz zamierzał uruchomić Valetudo, które jednak nie zadziałało z powodu własnej sygnatury, ale wystarczyło zmienić nazwę pliku wykonywalnego na librrafm.so, aby obejść kolejne zabezpieczenie.

Na zakończenie jeszcze kilka słów o odkurzaczach z serii Dreame. Pierwsze modele pojawiły się w 2019 roku, układy scalone ponownie dostarcza Allwinner, ale tym razem systemem operacyjnym jest Android, a oprogramowanie odkurzacza nazywa się AVA. Do warstwy sprzętowej w każdym z tych modeli można dostać się bardzo łatwo, nie naruszając przy tym gwarancji. Ponownie użyto FEL, wykorzystując Banana Pi, a za flashowanie odpowiadał Phoenix USB. Proces nie był zbyt skomplikowany.

Za to odkryte dane okazały się ciekawe. Są to na przykład zapisane poświadczenia do publicznego serwera SSH używanego do deploymentu. Użytkownik ma uprawnienia sudo, co jest dość specyficzną praktyką (podczas gdy zazwyczaj w projektach deweloperskich wystarczające są standardowe uprawnienia).

Skrypty służące do debugowania pobierały pliki z serwera NAS, należącego do programisty, protokołem FTP (więc bez szyfrowania). Z kolei przesyłane logi trafiały na konto administratora.

Hasło konta root można łatwo odzyskać, bo do jego utworzenia wykorzystano następującą funkcję: Base64(SHA1(Serial number)). Natomiast globalne hasło do debugowania problemów to #share!#. Funkcje debugujące przesyłały nagrane filmy i wykonane zdjęcia. Same urządzenia generowały wiele logów. Jedynym sposobem zablokowania tych funkcji jest rootowanie.

Wszystkie opisane sposoby nie są szczególnie skomplikowane. Potwierdza to fakt, że stan bezpieczeństwa urządzeń IoT wciąż jest skrajnie niski, a użytkownicy nie mają właściwie kontroli nad zbieranymi przez nie danymi.

–Michał Giza

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. nonqu

    Wszystkie IoT najlepiej podpiąć do HomeAssistant a im samym zablokować dostęp do WAN.

    Odpowiedz
    • siaomi

      niestety wówczas tracisz możliwość sterowania tym sprzętem – wszystko idzie przez chmurę xiaomi

      Odpowiedz
      • Ha

        Nieprawda. Wystarczy użyć miio.

        Odpowiedz
      • nonqu

        Właśnie po to jest HomeAssistant. Nadal można wszystkim sterować.

        Odpowiedz
      • Odpowiedz
      • meph

        Kiedy masz Valetudo, to możesz bimbać na chmurę producenta. Polecam.

        Odpowiedz
  2. Sequ

    Mam model S5 robota i zauważyłem, że późnym wieczorem (3-4 w nocy) coś przesyła, kontrolka na urządzeniu miga, a wyłączenie routera przerywa to miganie.
    Aby móc sterować tymi urządzeniami poza oficjalnymi aplikacjami wystarczy mieć token. Można go wydobyć instalując starszą wersję aplikacji MiHome. Zapomniano wtedy wyłączyć pewnie informacje, aby nie zapisywały się do pliku debugowania – m. in właśnie wspomniany token. Obecnie jest to niestety jeszcze bardziej utrudnione przez producenta.

    Separacja IoT w domowej sieci często jest niemożliwa na routerach od dostawcy internetu. Przykładowo FunBox6 nawet nie ma możliwości zmiany DNS, brak sieci „guest network”, brak trybu bridge i wielu innych rzeczy.

    Odpowiedz
    • nonqu

      To akurat fakt, ale korzystanie z routerów dostawcy jak wspomniałeś ogólnie utrudnia życie. Trzeba np. się bawić w oddzielny serwer DHCP, żeby móc urządzeniom bez konfiguracji przydzielać DNSy.

      Odpowiedz
    • Leszek

      >Separacja IoT w domowej sieci często jest niemożliwa na routerach od dostawcy internetu.

      A co przeszkadza w podpięciu osobnego AP z zablokowanym routingiem na sieć lokalną?

      Odpowiedz
  3. Marek

    „Przykładowo Roborock S6 MaxV jest wyposażony w kamerę, co w zamyśle powinno być używane do kontroli domu podczas nieobecności mieszkańców.”
    Ten robot ma kamerę, a właściwie dwie (widzenie stereoskopowe) działające cały czas podczas sprzątania. Służą one do „karmienia” AI, które rozpoznaje obiekty jak np.: obuwie, przedłużacze, skarpetki lub zwierzęce odchody i robi to po to żeby je omijać, a nie żeby monitorować dom.

    Odpowiedz
  4. kamilosxd678
    Odpowiedz
  5. Jaroslaw

    Moja frania nic nie wysyla, a dziala.

    Odpowiedz
  6. Łukasz

    Polecam wszystkim „głupie” odkurzacze, które sprzątają podłogi w sposób losowy. Są tańsze, efekt sprzątania tak samo świetny i zero troski o bezpieczeństwo.

    Odpowiedz
    • Marcin

      „efekt sprzątania tak samo świetny” – no niestety nie.

      Odpowiedz
  7. Juzek

    > Potwierdza to fakt, że stan bezpieczeństwa urządzeń IoT wciąż jest skrajnie niski

    Jednak trochę przesada. Spędzenie 2 tygodni na hakowaniu klucza, konieczność wylutowywania scalaków i inne dość zaawansowane opisane metody nie potwierdzają tej skandalizującej tezy.

    Odpowiedz
  8. milosz

    Czekam aż ktoś dooma na tym odpali

    Odpowiedz

Odpowiedz