(delsi) buffer overflow - prunik
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Pondělí Srpen 7 22:47:43 CEST 2000
On Mon, 7 Aug 2000, Jaroslav Gratz wrote:
> > > To máte pravdu, tady by to nepomohlo. Ale přepsání zásobníku a
> > > překrývající se segmenty jsou mnohem nebezpečnější, protože dávají
> > > útočníkovi možnost spustit jeho vlastní kód.
> >
> > Varianty 2 a 3 (ktere jste rafinovane vymazal) ano.
>
> Vzhledem k tomu, že jsem navrhoval oddělit navzájem instrukční, datový a
> stack segment, tak ne.
Oops. To mam z toho, ze si nepamatuju, co jsem vlastne napsal, nicmene
se z toho jeste pokusim vylhat. :)
> 2.
> char b[...]; int (*x)() = &y;
> /* nebezpecna manipulace s b[] */
> (*x)();
>
> Tady sice útočník může přepsat ukazatel na funkci, ale ten musí ukazovat
> někam do instrukčního segmentu, kam zase nedostane svůj kód.
Nikdy nelze vyloucit, ze je v programu kod, ktery lze pouzit lepe ci hure
jako interpreter (napr. neco jako funkce system()). Rozdil mezi kodem a
daty je koneckoncu umela zalezitost (kdo neveri, at si v knihovne pujci
ucebnici vycislitelnosti).
> 3.
...
> Tady opravdu nevím, jak to rozumně zneužít. K čemu mi bude, že přepíšu x a
> někam do paměti uložím 1? Tím přece přímo nemůžu spustit nějaký kód.
Rekneme, ze ten priklad upravim na
> char b[...]; int *x = &y; int z = 1;
> /* nebezpecna manipulace s b[] */
> *x = z;
Pak uz je myslim ten problem nazornejsi (prinejmensim se da casto
prevest na predchozi pripad tak, ze prepisu nejaky ukazatel na kod,
kterych v kazdem programu par je (stdio, atexit())).
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux