(delsi) buffer overflow - prunik

Martin MaD Douda martin na douda.net
Neděle Srpen 6 08:26:24 CEST 2000


Měl bych několik dotazů a připomínek.

Chystáte se oddělit segmenty, mám to chápat tak, že
např. CS:offset!=DS:offset?

Debata na téma buffer overflow & trampolíny & ... proběhla nedávno v
linux-kernel, doporučuju k přečtení.

Pokud se danou úpravu povede implementovat a rozšíří se, stejně to
nepovede k žádnému (nebo jen malému) zlepšení situace. Útočníkovi se sice
nepovede podstrčit kód, ale povede se mu podstrčit data a to nakonec
stejně může vést k porušení bezpečnosti, byť ne tak přímočaře, že se
prostě spustí shell s euid=0. Doporučuju k přečtení také článek na
hysterce (www.hysteria.sk) o heap overflow, většina věcí tam popsaných by
se vztahovala na takhle upravený systém. A tam se jedná o exploity bez
spuštění útočníkova kódu.


					Martin


>                                   |---stack segment---|
> 
> Prostě v rámci jednoho procesu se segmenty překrývají a je možné
> beztrestně přepsat zásobník z datového segmentu a spustit kód na
> zásobníku.
> 

> > Nevim jak "obecne asi vsechny", ale gcc to dela pouze v pripade, ze jsou
> > pouzity vnorene funkce, coz je jeho vlastni rozsireni jazyka (na zasobnik 
> > se pak ulozi "trampolina", coz je maly kus kodu umoznujici vnorenou
> > funkci volat jako by nebyla vnorena a pritom zajistit, aby vedela, kde se 
> > na zasobniku nachazi zaznam nadrazene funkce).
> 
> Špatné řešení. Generovat za běhu programu dynamicky nějaký kód na zásobník
> a ten potom spouštět je nesystémové a nepřehledné. Zásobník potom musí být
> spustitelný se všemi důsledky, co z toho vyplývají. Když už měli vývojáři
> gcc potřebu použít dynamicky generovaný kód, měli to udělat jinde než na
> zásobníku.



--------------------------------------------------------------------------------
                        Martin "MaD" Douda
WEB:http://martin.douda.net/                 EMAIL:martin na douda.net
SMS:mad na gate.mobil.cz (up to 160 characters) PHONE:+420603752779
PGP:ID=0x6FE43023 Fingerprint:E495 11DA EF6E 0DD6 965A 54F3 888E CC9E 6FE4 3023
--------------------------------------------------------------------------------
God is real, unless declared integer.



Další informace o konferenci Linux