[linux] Stack v C

Andrej Hosna adino na uid0.sk
Úterý Květen 2 22:13:31 CEST 2006


> Existuje patch pre linuxove jadro volajuci sa GrSecurity
> http://grsecurity.net/features.php . Ten rozdeluje pamatove stranky
> mapovane do pamati na 2 skupiny:
>
> - read-only executable - odtial mozno asemblerovsky kod spustat, kedze
> tieto pamatove stranky su priamo nacitane z disku (kniznice, ELF binarky)
>
> - read-write non-executable - do tychto pamatovych stranok mozno
>   zapisovat, ale nemozno z nich asemblerovsky kod spustat. Tieto stranky
>   su napr. dynamicky alokovane za behu programov
>
> Zaver je taky, ze program, ktory by mal zapisovat do premennych
> ulozenych v stacku by nefungoval na serveroch pouzivajucich takto
> patchnute jadro a skoncil by s chybu typu SIGSEGV - segmentation fault.

> Ak sa mylim, tak ma opravte.
Mylis sa ... resp. tvoje zaver je mylny. ako si sam napisal stranky po grsec 
su r-- alebo rw- (pouzivam zamerne rwx zapis). Samozrejme stack nemoze byt 
read only pretoze sa na nom ukladaju nielen premenne ale aj parametre 
funkcii. A kedze druha moznost je rw- moze donho uzivatel a teda hocikto 
zapisovat. Tvoj zaver popisuje situaciu ked do stacku nakopirujeme (vlozime) 
spustitelny kod a potom don skocime napr cez:

void (fn_ptr*) () = (&a) - 20;
// kod predpoklada ze a) na stacku je 20b funkcia a prem. a je na zaciatku 
stacku
&fn_ptr();

v pripade nonexec stacku to vyvola SIGSEG pre dany program.
Adino
 



Další informace o konferenci linux