iOS app security 6. – Jailbreaking

Ez a cikk legalább 1 éve frissült utoljára. A benne szereplő információk a megjelenés idején pontosak voltak, de mára elavultak lehetnek.

Az alábbi cikket Ys. írta a 0x90 blogon, és mivel a cikksorozata kapcsolódik az iPhone-hoz, mi érdekesnek gondoljuk a számotokra is, így ezeket engedelmével egymás után át is emelnénk ide, a Szifonra.

***

Azt hiszem, az iOS-szel kapcsolatos biztonsági kérdések tekintetében az egy négyzetméterre eső hülyeség együtthatója a jailbreak tekintetében a legmagasabb. Egészen elképesztő, mekkora marhaságokat hallottam már a témakörben…

Először is tisztázzunk néhány alapfogalmat.

A jailbreaking szó a történelmi idők során (értsd: mióta kiadták az első iPhone-t) több mindent jelentett, jelenlegi értelmezésében az Apple digitális aláírására vonatkozó biztonsági kontrolljainak kikapcsolását értjük alatta. Az Apple igencsak szigorú gyártó olyan szempontból, hogy az eszközein nem enged bármilyen forrásból származó kódot futni, csak olyat, amit a zsenik végigtúrtak és jóváhagytak. A hivatalos álláspont szerint ez a malicsüsz alkalmazások kiszűrésére szolgál, a rossz nyelvek szerint az Apple ellenőrzi, hogy ugye nem használsz olyan API hívásokat, amiket még nem publikáltak – mindegy is, hogy mit csinálnak a kismókusok a kóddal, mert a végén aláírják és kigórják az AppStore-ba a kész terméket. Az iOS, mielőtt berántaná a memóriába az alkalmazásodat, legelőször is megnézi ezt az aláírást és ha nem stimmel, akkor nem indítja el. A legtöbb esetben még eddig se lehet eljutni, ugyanis az iPhone Configuration Utility egyszerűen nem fogja feltenni az alkalmazásodat az eszközre, ha nem stimmel az aláírás. Amikor jailbreakelünk, ezt a kontrollt iktatjuk ki.

Ennyi. Nem azt jelenti, hogy feltöröd a mobilszolgáltatód hálózatát a GSM felől. Még csak azt sem, hogy bármilyen szolgáltató kártyáját bele tudod rakni a hűségszerződéses szolgáltatód készülékébe. Olvastam már arról, hogy jailbreakelt iPhone-ok veszélyt jelentenek az AppStore-ra, ezért az Apple blokkolta őket, vagy hogy a jailbreakelt iPhone-ok kritikus infrastruktúra (nem, nem az elektromos hálózat, hanem a GSM) elleni támadás végrehajtására alkalmasak. A jailbreaking azért is nagyon szexi téma, ugyanis GeoHot nevét ekkor kapta fel először a szaksajtó – akkor még csak egy, az átlagnál némileg talán tehetségesebb (understatement warning!) tejfelesszájú csávó volt valahonnét Amerikából, aki valahogy borsot tört Steve Jobs orra alá. Nos, a jailbreaking azóta iparággá nőtte ki magát, különféle “szolgáltatók” versenyeznek, hogy ki tudja az aktuális iOS verziót megdönteni.

Mielőtt belevágunk az iOS bootmódok lelkivilágába, még néhány fontos fogalom. A jailbreak módszerek között vannak különbözőek, de van két szó, amit gyakran látunk: ez pedig a tethered és a non-tethered jailbreak. Ha tethered jailbreaket hajtasz végre, a változások addig tartanak (addig lesz rootjogod) a telódon, amíg újra nem indítod, ugyanis az ilyen jailbreaket tisztára söpri a ribút. Ennek az ellentétei a non-tethered módszerek, amikor a változtatás ribút után is megmarad. Aztán itt van még a brickelés, amikor a iPhone-odat átminősíted azzá, aminek anyukám is látja: nagyon szép, ám hasznos funkció nélküli drága és értelmetlen fémdarabbá.

A jailbreak konkrét módja az iOS verziójától függ. Nem célja ennek a bejegyzésnek, hogy elmondja a három arcpirítóan egyszerű lépést, aminek a végén ott lesz a kezedben a jailbreakelt telefon, de annyit talán elmondhatunk, hogy a régi iOS verziók esetében (4.3.5 előtt) egy Safari bugon keresztül újraindítás nélkül is lehet jailbreaket csinálni egy megfelelő weboldal meglátogatásával, míg a többihez legalább egyszer újra kell indítani az eszközt. A teszt iPhone-jainkon pont emiatt 4.3.3 fut és köszöni szépen, jól van.

A jailbreak módszerek többnyire telepítenek valamit, ami permanenssé teszi a dolgot és még akár különféle extra szoftverek felgyógyítását is lehetővé teszi, ilyen pl. a Cydia nevű app – ez az esetek 99%-ában megtörténik, de nem kötelező. A jailbreaknek tehát elégséges, de nem szükséges feltétele a Cydia megléte.

Még egy apró gondolat, mielőtt fejest ugrunk a DFU mód és a RAMdiskek világába – az a tapasztalatunk, hogy a kedves szoftvergyártók egész egyszerűen nem vágják, hogy mit jelent a jailbreak és vagy nem gondolnak arra, hogy a szoftverüket ilyen eszközön fogják futtatni (és pont emiatt olyan iOS kontrollokban is bíznak, amikben nem kéne), vagy pedig, ha gondolnak rá, akkor azt mondják, hogy bocs, ilyen eszközt nem támogatunk. Még bele is gyötörnek valami jailbreak detektáló kódot, amit elég egyszerű átverni, de erről majd később(i részben). Amikor pedig valahogy mégis széjjelszedjük a binárist, kipatkoljuk belőle a jailbreakdetektálást és támadást dolgozunk ki egy ellopott és lezárt eszközből minden vonatkozó adat kinyerésére egy másik, jailbreakelt eszköz használatával, akkor pedig megkapjuk, hogy dehátizé, ez így nem ér, ti BELEÍRTATOK a binárisba! Igen, és? Fizikailag hozzáfértünk a binárisotokhoz, és egy megfelelő potenciállal rendelkező támadó pontosan ezt fogja csinálni. Kedves iOS fejlesztők, akik olvassátok a blogot, ne értsetek félre: nem azt akarom sugallni, hogy balf@szok vagytok vagy szakmailag inkompetensek – az üzenet inkább az, hogy bár fejlesztési szempontból olcsóbb és kényelmesebb kijátszani “az alkalmazásunk nem futtatható jailbreakelt eszközön”-kártyát, mint ennek megfelelően megdizájnolni és implementálni a kriptót, vannak szkenáriók, amikor sajnos nem valós a feltételezés.

Na, de ennyi bevezető után lássuk, hogy mi történik, amikor jailbreakeljük az eszközünket. Egy iEszközt alapvetően három módban lehet elindítani:

  1. Normál boot. Ez történik az esetek 99%-ában, túl sokat nem is beszélek róla.
  2. Recovery mód. Ilyenkor jelenik meg a képernyőn a “dugd be az eszközödet egy iTunes-ba!”-képernyő.
  3. DFU (Device Firmware Upgrade) mód. Alacsonyszintű diagnosztikai üzemmód – annyira low-level a dolog, hogy még a képernyőt se kapcsolja be ilyenkor, USB kábelen keresztül lehet mindenfélét csinálni az eszközön. Eléggé hülyebiztosra van megcsinálva a dolog, ugyanis véletlenül nem lehet ilyen módba kapcsolni a divájszot: összesen húsz másodpercig kell ilyen-olyan sorrendben nyomva tartani-lenyomni-elengedni a fizikai gombokat. Jailbreak szempontjából ez az üzemmód érdekes.

A DFU-módban elinduló ROM-ban vannak sebezhetőségek. A jailbreakelő eszköz ezeket a sebezhetőségeket használja ki arra, hogy feltöltsön egy nem Apple-aláírt RAMdisket, amit aztán felbootol az eszköz és ez beleír az oprendszert tartalmazó partíció inidítószkriptjeibe, plusz felmásol ezt-azt a programkönyvtárakba. A redsn0w nevű eszköz elég jól használható akár arra is, hogy saját kódot gyógyíts fel – a biztosított framework megcsinálja a piszkos munkát a háttérben, ezzel saját kód írásakor nem kell foglalkozni.

Ha már egyszer jailbreakelted az eszközt, akkor nagyon kell figyelni arra, hogy frissítesz-e iOS-t, vagy nem – vannak verzióátmenetek, amikor megmarad a jailbreak, de vannak (főleg főverzió-ugrásnál) olyan esetek, amikor nem ajánlott az update, hacsak nem akarod levélnehezékként használni az eszközt a továbbiakban. Ha meguntad a jailbreaket, akkor annyi dolgod van, hogy az iTunes-ban visszaállítod a legutóbbi nem-jailbreakelt mentésedet és kész.

Miért jó az, ha jailbreakelt az eszközünk?

  1. Bármilyen iOS-es binárist telepíteni/futtatni tudsz. Lesz SSH-d, apt-geted. Le tudod kapcsolni a telefonodat SSH-ról.
  2. Csicsapicsa témákat tudsz applikálni az iOS-re (azaz eléred azt, amit az android alapból tud :-P)
  3. Hekkerszempontból ideális, hogy tudsz alkalmazásokat statikusan is és dinamikusan is analizálni. Lesz mindight commandered és gdb-d (!), az otoolról nem is beszélve.

A következő részben mutatok néhány példát arra, hogy hogy lehet egy alkalmazást gdb-nél szofisztikáltabban analizálni és bökdösni.

Ezek még érdekelhetnek:


  1. Vaze….Ez tényleg hasznos cikk volt.Örülök,hogy itt is megjelent.De tényleg.Gratula a cikk írójának,nagyon jó cikk lett.Ha tudtok még ilyen cikkeket írni/gyűjteni akkor én örömmel fogom elolvasni. 🙂

  2. @hSn0wQ: valójában ezt már mi is többször leírtuk, van róla több GYIK cikk is, bár azok nem teljesen ebből a megközelítésből. de írtunk mind a jailbreak kapcsán terjedő tévhitekről, mind a jailbreak típusairól külön-külön. 😉

  3. @Jadeye: Írtatok jailbreak típusokról ? 🙂
    Linkelj légyszi egy párat…
    De most nem úgy értem,hogy megjelent az x.x.x-re az untethered jailbreak,hanem olyat ami tényleg a működéséről szól és nem csak hír értékü.Például a baseband-es vagy az SHSH-ről szóló cikk vagy akár a GEVEY SIM-es cikk kifejezetten azért tetszett mert részletesek voltak és pontosan leírtátok a működésüket

  4. Sziasztok!
    Én azon gondolkodtam, hogyha a jailbreak kikapcsolja az apik aláírásának ellenőrzését, akkor lehetséges hogy ha letöltök pl egy játékot, vagy programot, mondjuk az apptrackr-ról, vagy a cydiából akkor abban vírusok is lehetnek?
    Vagy mondjuk hívásokat kezdeményez emelt telefonszámokra?
    Vagy egszerűen csak egy olyan ember írta, aki nem ért hozzá, és elcseszi a telefont?Ilyesmik megtörténhetnek?

    Bocs ha hülyeségeket kérdeztem, csak eszembe jutott.

  5. @Abel: fejlesztőként mondom: semmi értelme a védelemnek. Mi védjük és figyeljük a felhasználói szokásokat a Parkolás appban. 30% feletti a JB aránya és bár letiltjuk az app használatát JB készüléken egy idő után, de csak összesen 3% a “megtérők” aránya. Legtöbb JB-s gyűjtögeti az appokat, nem is nagyon használja azokat. A többi meg hazudozik, hogy csak próbaként tölt le törött appot.

    A free=>fizetős áttérő kb. 10-15% körül van. Jobban megéri free/lite verziókra időt pazarolni, mint JB-re.

  6. @se87tet: Egy szimpla app nem tudja elcseszni a telefont.Egy tweak na az már inkább…
    Egyébként nem nagyon mert egy app feltörésének a metódja most már hihetetlenül egyszerü.Igazából az appok feltörését szintén tudja már egy Cydia-s app is kezelni (neveket nem említenék).Tulajdonképpen szabadon bárki törhet már appokat,és ezeket az appokat szabadon fel lehet tölteni például a fileape.com-ra ahonnan bárki letöltheti például Installous segítségével.

    Lényeg a lényeg mivel egy-egy app törést szintén egy app kezel nem valószinű,hogy vírusosak.Persze mindig érdemes megvenni az AppStore-ból az appokat 200-300 ft-ért és akkor nem kell ettől tartani.
    Minden esetre amíg én warezoltam ami olyan fél éve volt addig én nem ütköztem bele
    ilyesmibe.
    ye

  7. @endy: Mostanában kezdtem el a “hivatalos” iOS fejlesztést, így már ezek után is érdeklődöm. Nagyon szépen köszönöm ezt a hasznos infót! 🙂 Ebben az irányban megyek tovább akkor én is.

  8. @se87tet: a binárist szinte sohasem írják át, így az nem lesz neked vírusos vagy ilyesmi.

    minden app binárisa (a futtatható állománya) kódolva van, és aláírással van ellátva. ezt futtatáskor az aláírás segítségével dekódolja az iOS, és betölti azt a memóriába. a töréshez használt alkalmazás meg azt teszi, hogy az így dekódolt binárist visszaolvassa a memóriából, és kiírja kódolatlanul, és készít belőle egy IPA-t, amit utána terjeszteni lehet.

    viszont az iOS alapból ellenőrzi ezt az aláírást, és ha nem találja, akkor sem nem indul el az adott app, sem nem telepíti azt fel az iTunes.

    lehet, kicsit bonyolult, de ebből így érthetőbb?

    @endy: a DFU azért van benne, mert a DFU mód esetén a készülék szoftvere akkor is visszaállítható, ha recovery módig már nem jutna el a bootolás bármi okból.

    aztán attól, hogy valaki jailbreakel, még nem biztos, hogy az appokat is warezolja. ha tehát magát a jailbreaket bünteted, azzal nem csak a warezolókat zárod ki. azt meg te sem gondolhatod komolyan, hogy majd pont egy alkalmazás miatt adja fel a jailbreaket… inkább akkor keres másik appot, ahol nincs ilyen megkötés. véleményem szerint nem magát a jailbreaket kell üldözni, hanem a warezt. erre pedig vannak módszerek, csak hát arra vagy sok időt kell szánni, és úgy megírni az appot, vagy megvenni, asszem ripdev kínál olyan modult, amivel úgy titkosítható az app, hogy aztán nem lehet feltörni. vagy egy jól megírt IAP is nehezen kerülhető ki.

    most akkor a 30% az a jailbreak, vagy a warez nálatok? mert a kettő nem ugyanaz, a jailbreak önmagában még nem teszi lehetővé a tört appok telepítését.

    @hSn0wQ: azért az, hogy “szabadon”, az a legkevésbé sem állja meg a helyét…

  9. @Jadeye: Mit szépítsek ?
    Ez van a jailbreaket egy csomóan az appok lopására használja és sajnos vannak emberek akik ebben segítenek.Nem örülök neki,de ez van.Appok feltörését ugyan nem,de appok lopását azt én is csináltam (kb egy olyan fél éve).Nem vagyok rá büszke,de ha a tapasztalataimról kérdez valaki akkor arra csak annyit tudok felelni (bunkó módon),hogy bizony a hackulos csapat nagyon baráti és bárki számára könnyen értelmezhető kezelő felületet hozott létre.Ez az igazság nem tudunk tenni ellene.

    Már nem warezolok mert nem éri meg és mert nem fair a fejlesztőkkel szemben,rádásul a jailbreak nem erre való.

  10. @hSn0wQ:

    Ehhez a warez dologhoz annyit tennék hozzá, hogy addig minden rendben hogy nem fair meg miegymás, de sok olyan progi van, amire kíváncsi voltam, feltettem warezból (szerencsére) de olyan selejt volt, amiért kár lett volna pénzt adni.
    Velem úgy volt, hogy megkaptam az applefont, jailbreak (kell mindenképp a függetlenítés miatt) aztán feltelepítettem minden hülyeséget a telefonra.
    Aztán rájöttem hogy a fele dolog amit leszedtem nem is érdekel, meg ki sem próbáltam, viszont mivel egy 3gs memóriája nem végtelen, lassabb lett a telefon.Mostanában, már nincs, vagy csak minimális tört app van a telefonomon, (amiből nincs ingyen alternatíva, vagy nagyon drága lenne) de nem ítélem el azokat akik tört appokat használnak.

    Másik dolog a navigáció, szerintem azok irreálisan drágák.Nekem csak nagyon ritkán kell navigáció, nem adnék már érte több ezer (tízezer) forintot.

    Múltkor olvastam egy jó megoldást a warez visszaszorítására. Ahhoz hogy vissza szorítsák a warezt elég lenne kicsit megnehezíteni a juzerek dolgát egyszerűen úgy, hogy .deb fileba legyenek elérhetőek a játékok a warez oldalakon, egyből megritkulna a warez. 😀

  11. @se87tet: Én már nem warezolok.”Mindenem” meg van ami kell.Tudom mik azok az alkalmazások/kiegészítők..stb. amik kellenek.Nincs szükségem annyi szarra.Van az a néhány cucc ami kell és ennyi.

    A jailbreak nálam is alap (az a rengeteg kiegészítő,téma amit használok,iPhone 3G-met én is Ultrasn0w-val függetlenítem,SAM-vel aktiválom,Carrier fix és logo…stb.).Tudom ez egy kicsit beteges,de jailbreak nélkül el se tudnám képzelni az Apple készülékeim.

    Szerintem zárjuk le ezt a warez témát és felejtsük el.Mindenkinek meg van a maga véleménye róla.Én teszek rá,hogy ki,hogyan,milyen módon szerzi be a cuccait.Véleményem és tapasztalataim szerint nem a legjobb út,de erre vagy rájössz vagy nem.

  12. Én bevallom. Ha nem lehetne ingyen beszerezni az appokat, akkor nem vettem volna iPhone-t. Ez van. Nincs rá kp. Persze, lehet mondani, hogy akinek van pénze iPhone-ra, annak lesz az appokra is, és azok a párszáz forintos appok nem drágák, de aki csóró, és egy félévnyi ösztöndíjából veszi az iPhone-t, mint pl én is, annak igenis jó, hogy ott a JB. És ha megnézem, hogy a tört appjaimból mennyit használok, nem lenne valami jó az arány. Most csak a hasamra ütök, de legalább 20 000 Ft-ot szórtam volna ki az ablakon hasztalan appokra (navigáció nélkül). Na és erre nincs szerintem pénze nagyon sok embernek. Egy jó példa: a szanaszét hypeolt Instapaper van vagy $5. Lewarezoltam, és 3 perc után dobtam ki a szemétbe. Sokkal jobb a Pocket. És az még ingyenes is.
    … De most komolyan, vannak akik nem érdemlik meg a pénzt az alkalmazásaikért. Akkor már inkább – akinek van pénze – az a JB-t támogassa! Mert ők ugye ingyen teszik az iOS-szel a legjobb dolgot, ami vele történhet.
    És persze ha minden egyes alkalommal minden sz*rt a beállításokból kéne kapcsolgatni, akkor sem vettem volna iPhone-t. Erre van nekünk az SBSettings és az NCSettings. De az is teljesen kizárt, hogy mindig én írjam be a jelszavamat, ha le akarok tölteni egy appot vagy frissítést -> PasswordPilot.
    Egy csomó tweak van amire ugyanúgy szükségem van mint a tört appokra.
    És ott van még a JB-vel szintén elérhető iAP cracker, ami tul. képp. szintén warez. Még így is majdnem felrúgtam a telefonom meg a Jetpack Joyride-ot a Holdig, amikor 74-es szinten fc, és amikor újra beléptem le voltam nullázva. Az ki volt zárva, hogy újrajátszam az egészet. Még jó, hogy meg lehetett vásárolni a küldetéseket, ami ugye iAP cracker segítségével ingyen volt, így csak egy fél napom ment rá, hogy visszahozzam magam.

    Szóval igen, JB nélkül én nem vennék iPhone-t. És mivel az android sz*r, így duplán örülök a JB-nek, különben nem tudom mit vennék.

  13. Két komment:

    1. “Mire jó, ha jailbreakelt az eszközünk?” 4. pont: Lesz GCC. Programírás on-the-fly. “Must have” dolog.

    2. “Kedves iOS fejlesztők, akik olvassátok a blogot, ne értsetek félre: nem azt akarom sugallni, hogy balf@szok vagytok vagy szakmailag inkompetensek – az üzenet inkább az, hogy bár fejlesztési szempontból olcsóbb és kényelmesebb kijátszani “az alkalmazásunk nem futtatható jailbreakelt eszközön”-kártyát, mint ennek megfelelően megdizájnolni és implementálni a kriptót, vannak szkenáriók, amikor sajnos nem valós a feltételezés.” <- ez itten egy csöppet nagyképű állítás (bár ezt a szerzőtől már megszokhattuk...). Bár nem fejlesztek AppStore-ba, egészen biztos vagyok benne, hogy nem tennék hülye módjára minden alkalmazásomba "Nem futok JB-elt készüléken"-popupot, mivel - a cikket író úriember feltételezésével ellentétben - van fogalmam arról, hogy a warez és a jailbreak között van különbség, azt is tudom, hogy ez a "védelem" nagyon egyszerűen átvágható (magam is meg tudom csinálni), illetve azzal is tisztában vagyok, hogy a jailbreak nem egyenlő azzal, hogy automatikusan vírusok települnek és a NASA elleni DDoS-támadásokra használják a telefont. Ennyi.

  14. @crayo: gratulálok! Több sebből vérzik, amit írsz. Gyakorlatilag nem engedhetsz meg magadnak egy iPhone-t mégis veszel. Olyan mint ha azt mondanád, hogy éppen csak ki tudtam csengetni a BMW árát, de tankolni már nem tudok és csak a benzinlopásnak hála engedhetem meg magamnak a használatát. Vettél volna Androidot inkább.

    Miért hiszi mindenki, hogy az iPhone mindenkinek születési joga és hogy a programok használata is az?

  15. @crayo: lehet figyelni az appokat, és megvenni, amikor lecsapják az árat 200Ft környékére (0.79€). a megvett appok esetén pedig, ha nem vagy elégedett, visszakérheted az árát – ekkor az aktuálisan letöltött verziós IPA is megmarad ugyan az adott appból, viszont nem tudod majd frissíteni. persze ez a fejlesztőnek kerül plusz pénzbe, mert az Apple jutalékát is neki kell állni, tehát bukja az ár 30%-át. tehát nem buktál volna felesleges pénzt.

    @endy: a “JB app” megint nem jó, azok ugyanis a cydiás appok lennének, viszont egy feltört App Store-os alkalmazás nem a Cydiából érhető el. mondj helyette nyugodtan warezt vagy tört appot, mert így továbbra is azt sugallod, hogy jailbreak az warez, ami ugye nem állja meg a helyét, de erősíti a sztereotípiát.

  16. @endy: Azt nem engedhetem meg magamnak, hogy havonta csak kipróbálás céljából vegyek más telefont, de fél év gyűjtögetés után már beleférhet Na jó, csak engem a kocsik nem annyira érdekelnek. Jelenleg még vezetni sem tudok. 😀 És ha majd kell, elég lesz olyan ami gurul.
    Viszont a telefonok annál is inkább érdekelnek. És fél évig néztem az (akkori) csúcs android telót tesómnál, de mondhatni idegesítően sz*r volt. Úgyhogy eldöntöttem, hogy muszáj iPhone-t vennem, kerül amibe kerül. Az iPhone igenis túl van árazva. De a minőség tényleg jó. Ezért is mondtam, hogy kell egy iPhone.
    Ja és igen, van 20 000-rem (sőt bőven több is), de azt félretenném mondjuk egy jó gitárra, mert a 40 000-res sz*r is szól, de nem új mint egy Gibson, aminek szintén van egy ilyen iPhone feelingje. Vagy mondjuk egy kocsira, ami gurul.

    @Jadeye: Tudom, hogy vissza lehet kérni a pénzt, de ezzel nem akarok sz*rakodni. És így még a fejlesztő is bukna rajta, ahogy mondtad.

Írd le a véleményedet! (Moderációs elveinket ide kattintva olvashatod.)

Hozzászólás írásához be kell jelentkezned!