Jeffrey Cross
Jeffrey Cross

Přetečení vyrovnávací paměti založené na haldě: jak lze iPhone a iPod Touch napadnout

Nedávné scuttlebutt v iPhone a iPod Touch vývojář fóra je, že existuje chyba přetečení vyrovnávací paměti v kódu používaném pro načítání obrázků TIFF v Safari (libtiff). Ztráta je, že zásobník není spustitelný na zařízeních, což vede mnoho k domněnce, že je to slepá ulička.

Halda, nicméně _is_ spustitelný, a přetečení vyrovnávací paměti založené na haldě, která využívá chybu libtiffu, může být způsob, jak získat použitelný přístup k zařízení iPod Touch a upgradovanému iPhonu 1.1.1. data dodaná uživatelem překračují úložný prostor, který byl přidržen. Když se to stane, přebytečná data přepíšou přilehlé oblasti paměti programu, jmenovitě „zásobník“. Zásobník je místo, kde program ukládá informace o proměnných funkcí a informace o návratovém ukazateli, které program potřebuje k tomu, aby věděl, kam se má vrátit, když se jedna z jeho funkce skončila.

Neúmyslné přetečení vyrovnávací paměti může způsobit selhání programu nebo nežádoucí závadu. Pokud jste někdy použili aktualizaci zabezpečení pro váš systém, ale pravděpodobně jste slyšeli zmínku o tom, že bylo zjištěno, že určité přetečení vyrovnávací paměti bylo zjištěno tak, že „za určitých okolností by využití přetečení vyrovnávací paměti mohlo vést ke spuštění nebo k libovolnému kódu nebo systému Udělal jsem to jeden nahoru, ale skladové varování je obvykle něco takového.

Obvykle je chyba přetečení vyrovnávací paměti zneužita vyplněním zásobníku spustitelným kódem a přepsáním ukazatele zpáteční adresy, změnou tak, aby ukazoval na váš kód namísto skutečné funkce volání. Jedná se o buffer overflow exploit exploit. V případě zařízení iPhone a iPod touch však tuto metodu nelze použít.

Zařízení mají mechanismus, který zabraňuje provedení kódu v zásobníku. Ještě horší je, že ukazatel návratu je uložen v registru a ne v zásobníku.

Slovo na ulici, ale je to, že zařízení nezabrání provedení kódu v haldě. Hromada je místo, kde jsou uložena proměnná data přidělená za běhu, a to je místo, kde by mohlo být užitečné využití přetečení vyrovnávací paměti založené na haldě. Mám podezření, že skvělý člověk, který zjistí, jak získat plný přístup k iPodu touch nebo 1.1.1 firmware iPhone, to udělá s přetečením na bázi haldy.

S přetečení založené na haldě je požadovaná užitečná hodnota spustitelného kódu umístěna v haldě. Tj. je v runtime přidělené paměti, řekněme jako součást velkého TIFF obrázku, který je načten Safari. Využívání přetečení vyrovnávací paměti v podstatě funguje stejně, ale místo přepsání ukazatele zásobníku adresou v zásobníku jej přepíšete ukazatelem na haldu, což povede spuštění programu zpět k užitečnému obsahu.

Počkejte minutu… co zásobník není použit pro ukazatel návratu? To je velká komplikace. Protože ukazatel návratu je uložen v registru odkazů, není to tak jednoduché, jak přepsat ukazatel návratu do zásobníku. Místo toho budete muset narazit na uloženou hodnotu registru odkazů nebo možná ukazatel funkce v zásobníku a přepsat ji umístěním dat tiffu v haldě. Yikes.

Software pro iPhone 1.0.2 může být laděn, a víme, co jsou interní libtiffy, takže možná to není úplně nemožné. Je to přes hlavu, ale je tam spousta vyšších programátorů.

Nahoru je, že na rozdíl od zásobníku není halda v prostoru příliš omezená. V TIFF můžete vytvořit naprosto obrovskou užitečnou zátěž, naplnit ji spoustou prázdných instrukcí „no op“ a požadovanou užitečnou zátěží na konci. Za předpokladu, že byste mohli narazit na vhodnou funkci ukazatele pro změnu, a vy byste mohli udělat hrubý odhad, kde v haldě, která TIFF byla, budete mít docela dobrou šanci zasáhnout kód užitečného zatížení. Vyhrajete, pokud narazíte na libovolné místo v žádné části užitečné zátěže, a čím větší je užitečná zátěž, tím snadnější je.

Více informací: Diskuse o přetečení bufferu na iPhone Dev Wiki - Link TIFF Diskuse o iPod Touch Dev Wiki - Link w00w00 na přetečení haldy: skvělý technický článek o několika přístupech přetečení založených na haldě - přetečení Link Buffer @ Wikipedia - Link

Podíl

Zanechat Komentář