Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Alexa, daj mi dostęp do lokalnego shella. Alexa: kernel panic ;-)
Może Alexa sama nie udostępni ssh z rootshellem, ale mamy ładny opis jak można zrootować sobie Amazon Echo:
Procedura jest względnie prosta, od lokalizacji portów debug (ogólny tutorial tutaj), przez bootowanie w trybie debug:
$ screen /dev/ttyUSB0 115200 8N1 Texas Instruments X-Loader 1.51 (Oct 2 2016 - 09:08:33) LAB126 Rev 0 Starting X-loader on mmc-0...failed! Starting X-loader on mmc-0...failed! Booting from eMMC . . . Starting X-loader on mmc-1...Reading boot sector 156780 Bytes Read from MMC Starting OS Bootloader from MMC... Starting OS Bootloader...(time = 785 ms) U-Boot 2010.06-00005-g2e50740 (Jan 30 2017 - 17:24:38) OMAP34xx/35xx-GP ES2.1, CPU-OPP2 L3-165MHz OMAP3 LAB126 board + LPDDR/NAND I2C: ready DRAM: 256 MiB MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 Using default environment ...
…niestety bez możliwości zastopowania bootowania czy zalogowania się domyślnym użytkownikiem. Ale może uda się podłożyć własny bootloader (U-boot)?
Bingo, dalsza ścieżka prowadziła przez możliwość bootowania z zewnętrznej karty SD (dokładniej został tu uruchomiony zewnętrzny U-boot, z możliwością podania własnych parametrów bootowania):
During power-up the device boots from the MLO and U-Boot binaries on the SD Card. This U-Boot implementation allows us to interrupt the boot process and enter into the U-Boot command line interface. From here it is possible to inspect the contents of the file systems on the internal memory and reconfigure the kernel arguments.
Użytkownicy Linuksa, zapewne znają trick z odzyskiwaniem hasła do roota, przez podanie w standardowym bootloaderze parametru do kernela: init=/bin/sh
Właśnie tą technikę widzimy tutaj:
uboot> setenv mmc_part 1:6 # or 1:7 depending where the kernel and file system are uboot> setenv root /dev/mmcblk0p6 # or mmcblk0p7 depending where the file system is uboot> setenv mmcargs 'setenv bootargs console=${console} root=${root} ${mount_type} rootfstype=ext3 rootwait ${config_extra} init=/bin/sh' uboot> setenv mount_type rw uboot> boot
Efekt jest dość przewidywalny:
sh-3.2# whoami root
Dalej jesteśmy już w hackerskim raju – możemy śmiało analizować samo urządzenie – szukać podatności, zmieniać jego działanie, itp.
–ms
Przewaznie wystarczy podmienic zmienne srodowiska uboot, a w szczegolnosci zmienna bootcmd. Troche urzadzen juz zdebrickowalem. W 90% urzadzen dane bootloadera nie sa zaszyfrowane, wiec mozna to zrobic nawet na iglach. Do tej pory spotkalem tylko jedno urzadzenie ktore wymagalo podania hasla przed wejsciem w tryb interaktywny. Ale w tym wypadku dalo wgrac sie bootloader przez uart (pozwarciu 2 pinow)
Często tak, jak się da przerwać bootowanie jakoś i b) można podmienić odpowiednie parametry. Np. taki tp-link pozwala na pauzę ale nie pozwala (AFAIK) na podmianę krytycznego parametru…