(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