[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