Jeffrey Cross
Jeffrey Cross

Prekoračitev medpomnilnika, ki temelji na kopici: kako je mogoče vdreti iPhone in iPod Touch

Najnovejša novica v forumih za razvijalce iPhone in iPod Touch je, da v kodi, ki se uporablja za nalaganje slik TIFF v Safari (libtiff), pride do napake pri prelivanju medpomnilnika. Razočaranje je, da stack ni izvedljiv na napravah, zaradi česar mnogi mislijo, da je to slepa ulica.

Kopica, vendar _is_ izvršljiva, in kopica, ki temelji na prelivu medpomnilnika, ki izkorišča libtiff napako, je lahko način, kako pridobiti uporaben dostop do iPod Toucha in nadgrajenega iPhonea 1.1.1. podatki, ki jih je dal uporabnik, presegajo prostor, ki je bil dodeljen zadržanju. Ko se to zgodi, presežek podatkov prepiše sosednja področja pomnilnika programa, in sicer "stack". Stack je program, kjer program shrani podatke o spremenljivki funkcije in vrne informacije o kazalcu, ki jih program potrebuje, da ve, kam naj se vrne, ko njegove funkcije so končane.

Nenamerno prelivanje medpomnilnika lahko povzroči, da se program zruši ali pride do neželene napake. Če ste kdaj uporabili varnostno posodobitev za sistem, vendar ste verjetno slišali omeniti, da je bilo ugotovljeno, da je določeno prelivanje medpomnilnika takšno, da »lahko v posebnih okoliščinah izkoriščanje prelivnega medpomnilnika povzroči izvedbo ali poljubno kodo ali sistem To sem naredil, toda opozorilo na stalež je ponavadi nekaj takega.

Običajno se napaka pri prelivnem medpomnilniku izkoristi tako, da zapolni sklad z izvršljivo kodo in prepiše kazalec povratnega naslova, spremeni ga tako, da kaže na kodo namesto prave funkcije kliče. To je izkoristek prekoračitve medpomnilnika, ki temelji na skladih. V primeru iPhone in iPod touch pa te metode ni mogoče uporabiti.

Naprave imajo mehanizem, ki preprečuje izvajanje kode v skladu. Še huje, povratni kazalec je shranjen v registru in ne v kupu.

Beseda na ulici pa je, da naprave ne preprečujejo izvajanja kode v kopici. Kopica je mesto, kjer so shranjeni podatki o spremenljivki, ki so dodeljeni v času izvajanja, in to je lahko koristno pri izkoriščanju prekoračitve medpomnilnika na osnovi kopice. Sumim, da bo briljantna oseba, ki bo ugotovila, kako priti do popolnega dostopa do iPod toucha ali firmwarea 1.1.1 iPhone, to storila s prelivom, ki temelji na kopici.

Pri prekoračitvi, ki temelji na kopici, se želeni izvršljiv tovorni kod nahaja v kopici. Tj. v pomnilniku, ki je dodeljen med izvajanjem, pravijo kot del velike slike TIFF, ki jo naloži Safari. Izkoristek za prelivanje medpomnilnika v bistvu deluje enako, toda namesto, da bi prepisoval kazalec skladov z naslovom v skladu, ga prepišemo s kazalcem na kopico in usmerjamo izvajanje programa nazaj v korist.

Počakajte trenutek ... kaj pa stack, ki se ne uporablja za povratni kazalec? To je velik zaplet. Ker je povratni kazalec shranjen v registru povezav, ni tako enostavno kot prepisati povratni kazalec v sklad. Namesto tega se boste morali spotakniti čez shranjeno vrednost registra povezav ali morda kazalec funkcije v sklad in jo prepisati z lokacijo podatkov o naloženem tiffu v kopici. Všeč mi je.

Programsko opremo za iPhone 1.0.2 je mogoče razhroščiti in vemo, kakšni so notranji deli libtiffa, zato to morda ni povsem nemogoče. To je prek moje glave, toda tam je veliko višjih programerjev.

Navzgor je, da za razliko od sklada, kup ni zelo omejen v prostoru. V TIFF-u lahko naredite absolutno velik tovor, ga napolnite z veliko praznih "no op" navodil in želenim tovorom na koncu. Ob predpostavki, da bi lahko spreminjali ustrezen kazalec funkcije in bi lahko naredili grobo ugibanje o tem, kje v kopici je bil TIFF, bi imeli zelo dobre možnosti, da bi zadeli kodo koristnega tovora. Zmagate, če naletite na katero koli lokacijo v delu brez koristnega tovora in večji je tovor, lažje je.

Več o tem: Razprava o prelivanju medpomnilnika na iPhoneu Dev Wiki - Link TIFF Izkoristite razpravo o iPod Touch Dev Wiki - Povezava w00w00 na Heap Overflows: odličen tehnični članek o več pristopih, ki temeljijo na kopici - Link Buffer overflow @ Wikipedia

Delež

Pustite Komentar