LG webOS TV hekkelés - I. rész

Az okostévék piaca egy nagyon zárt világ a tapasztalataim szerint. De ma már az ember nehezen ússza meg, hogy új TV vásárlásakor ne smart TV-be ruházzon be. Igen ám, de az okos TV fogalma meglepő módon 2021-ben is kimerül azzal, hogy a TV-d felmegy az otthoni wifire, telepíthetsz rá pár előre megírt alkalmazást és esetlegesen az adott TV keretrendszerét kihasználva fejleszthetsz rá újabb alkalmazásokat. Ennyiben viszont ki is merül a tudomány. Ennek ellenére vannak modellek, amelyek egészen használhatóak Netflixezni stb.

Így történt, hogy én is utánanéztem a lehetőségeimnek az okos TV fronton. A Samsung TV-ket azonnal ki kellett zárnom, mivel az általuk futtatott Tizen OS-ra még nem létezett Jellyfin/Emby kliens, ami saját médiák lejátszásánál jól jönne. A Sony Braviakról nem hallottam ekkoriban sokat, de több fórumon is azt olvastam, hogy külsős appoknak nem is engedi a hardveres gyorsítást médialejátszás közben, tehát egy Plex például igencsak nehézkesen boldogulna meg egy 4K-s tartalommal. Maradt egy harmadik nagyobb gyártó, az LG, akik szintén elkövettek pár ármányt az elmúlt évek során (pl a DTS támogatás kivétele 2020 utáni modelleknél), de ez még elfogadható korlátozásnak tűnt a többi gyártóval szemben. Így esett a végső választás egy LG TV-re.

Ez az LG TV egy évet szépen le is húzott a lakásban, azonban az anomáliák 2021 szeptemberében kezdődtek, amikoris lejárt a Let's Encrypt tanusítvány és a gyártó a mai napig nem adott ki szoftverfrissítést, hogy ezt a problémát orvosolja. Ez annyit jelent, hogy a TV böngészőjében egyetlen Let's Encrypt kulccsal titkosított weboldalt sem tudunk meglátogatni, de ez még számomra nem is lenne olyan nagyon nagy trauma. Azonban a Plex szerverek is ilyen kulcsokat használnak, így az egy éves TV-n egyik pillanatról a másikra volt-nincs Plex.

Nyilván megoldás lett volna a kliensben engedélyezni a titkosítatlan kapcsolatokat, de azt semmiképp nem akartam, hogy titkosítás nélkül streamelje a Plex a távoli szerverről haza a családi videókat.

Így azt a megoldást választottam, hogy várok, hátha az LG frissíti a tanúsítványokat egy még garanciális termékén. Nos, hát nem így történt. Viszont a napokban belefutottam egy LG webOS rootolási megoldásba, aminek a lényege, hogy egy jó pár exploit segítségével gyakorlatilag 2 gombnyomás segítségével be lehet jutni a TV lelkébe és szabadon garázdálkodni rajta. Annyit kell tenni, hogy az ember felmegy a https://rootmy.tv/ oldalra a TV böngészőjével, megnyomja a távirányító ötös gombját és már települ is a homebrew channel, ahonnan többek között root ssh-t is lehet nyitni.

Érdekes módon az LG ezen exploitok kikerülését követően azonnal kiadott egy frissítést a legtöbb modelljére, ami megakadályozta a bejutást. Ez érthető, hiszen egy támadónak csak annyit kellene tennie, hogy bejut az otthoni wifi hálózatra, ahol a TV is van és azonnal teljesen átveheti a kontrollt a TV felett. Azt már kevésbé tudom megérteni, hogy ha már kiadták a frissítést, miért nem tudták a tanúsítványokat is frissíteni, de megértem. Az LG-nek az az érdeke, hogy az emberek új TV-t vegyenek, ha nem mennek az alkalmazások, amire remek alkalmam lenne nekem is.

Ugyanakkor szerencsére a TV-m nem frissítettem jó ideje, így sikerült rootolni az eszközt, majd az első dolgom volt a következő szkript segítségével frissíteni a certet: [link]. Ezt követően csodák csodájára újra elindult és működött a Plex és minden weboldal újra. Fordítottam egy wireguard modult is a TV-re, ami szintén csodásan teszi a dolgát és a segítségével közvetlenül a TV képes VPN-ezni. Illetve körülnéztem a rendszeren.

Mint kiderült egy 4.4.84-es kernel alapú linux rendszer fut a vason. Ami viszont igazán meglepett, hogy a grafikus felületet a zárt moduljaikkal karöltve a desktop rendszereken jól ismert Wayland szerver futtatja. Ezen a ponton határoztam el, hogy márpedig nekem Kodi fog futni a TV-men.

Mivel a korábbi wireguard VPN-es próbálkozásaim eredményeképpen volt szerencsém hozzájutni a kernel forrásokhoz, az volt a tervem, hogy készítek egy módosított kernelt, amit szépen betöltök a TV-n. Azonban mint kiderült a TV hardveresen ellenőrzi a bootloader aláírását, azaz ezt módosítva tégláztam a TV készüléket. A fájlrendszert módosítva pedig a bootloader nem fogja többé soha betölteni a rendszert, így szintúgy tégláztam a TV-t. Tehát ahhoz, hogy nekem egyedi kernel futhasson a TV-n, először mindenképpen meg kell várnom, hogy az eredeti rendszer elinduljon és túljussunk a bootloaderen. Utána pedig egy kexec hívással be tudnám tölteni az új kernelt.

Itt két akadályba ütköztem. Az első a következő:

[mrdini@hal-9000 kernel]$ cat ./.config | grep KEXEC
# CONFIG_KEXEC is not set

A kernel nem támogatja gyárilag a kexec hívást, amivel a futó rendszert újra tudnám indítani egy egyedileg fordított kernelre. Semmi gond, létezik ez a projekt: [link]. Azonban ezt telepítve a TV-re, majd az új kernelbe bootolva fekete képernyőt kapok csak és rebootol a TV. Úgy tűnik az LG itt is gondolt a drága userekre, akik szeretnék ténylegesen felokosítani a TV-jüket és egy tvservices névre hallgató userspace alkalmazást is telepített a TV-kre, amelynek futását egy hardveres watchdog figyeli, és ahogy ezt kilőjük, azonnal újraindul a TV. Érdekes módon, ha debug módba rakjuk a TV-t, akkor ez a watchdog nincs jelen, így ez a probléma áthidalható, bootolható az egyedi kernel. :C Minden működik, ahogy kell, csak okosabb lesz a TV, mint amennyire okos már eddig is volt. :D

Amire még felfigyeltem, az az orbitálisan nagy load average állandóan a rendszeren. Konkrétan az én modellemben egy 4 magos ARMv7 CPU van, ami állandóan 6-7 es load alá van helyezve. Kis körülnézés után találtam rá a miértre, van 2 zombie folyamat, aminek az égvilágon semmi haszna, feltehetően az LG fejlesztői vagy szándékosan, vagy véletlenül, de nagyon durván elbaltáztak valamit, aminek az eredményeképp ez a folyamat rommá terheli a ketyere processzorát, aminek következményeképp a TV minden induláskor kb 1.5x annyi áramot fogyaszt, mint amúgy kéne neki és lassabb is az egész felhasználói élmény. Kis kutatás után rájöttem, hogy a webos-bluetooth folyamat bugos a rendszeremben, amit a beállításokban letiltva, vagy ssh-n kilőve megint gyors a TV, mint régen.

Ezeken végigjárva végre elérkezett a pillanat a Kodira térni! Bár létezik egy remek toolchain a TV-kre, ezekkel nem igazán sikerült GUI-s appokat fordítani, mivel ehhez az kéne, hogy a rendszerfájlokat is lássa a fordító, amit nyilván nem lehet egy cross compile környezetben egyszerűen meegoldani. Így jött az ötlet, hogy kinyerem a TV rendszerét, fordítok hozzá a toolchain segítségével natív gcc-t, majd az aarch64 szerveremen chrootból fogok mindent fordítani. Sajnos az aarch64 alapú fedorám nem volt képes arm soft float binárisokat futtatni:

[root@fedora rootfs]# LD_LIBRARY_PATH=$PWD/lib chroot . /bin/bash
Segmentation fault

És miután meggyőződtem róla, hogy ez nem a processzor hibája, hanem a Fedora kernelé, kipróbáltam ugyanezt egy friss ubuntu telepítést követően:

root@buildah:/home/ubuntu/rootfs# LD_LIBRARY_PATH=$PWD/lib chroot . /bin/bash
/ # cat /etc/os-release
ID="webos"
NAME="webOS OSE"
VERSION="1.0.g"
VERSION_ID="1.0.g"
PRETTY_NAME="webOS OSE 1.0.g"
/ #

Innen pedig folyt. köv., lassan kifogyok a tintából. :B

Még van hozzászólás! Tovább