[linux] Stack v C

Lubomir Host rajo na platon.sk
Úterý Květen 2 21:54:52 CEST 2006


On Tue, May 02, 2006 at 07:56:00PM +0200, Peter Fodrek wrote:
> Zdravim!
> 
> Prosim Vas o radu
> Brat dostal uloha pristupovat k premennym v C nie cez ich mena, ale cez ich 
> poziciu na stack-u a zmanipulovat stack.  (cez int *=0x.....  cize cez adresu 
> v RAM to viem, ale nejaky manual co by to robil cez stack som nenasiel- okrem 
> mne nie velmi vyhovujuceho assembler-u cez pop a push)

Zdravim,

ja by som mal poznamku/otazku z hladiska bezpecnosti a vlastne aj
uzitocnosti takejto ulohy.

Ucel takejto ulohy moze byt jedine pedagogicky. Ziak by mal pochopit,
ako sa ukladaju premenne na stack. Citat premenne takymto pristupom je
sice mozne a zmysluplne, ale zapis nie. Kvoli nasledujucemu
bezpecnostnemu obmedzeniu:

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.

Z hladiska bezpecnosti je jeden z prinosov (okrem inych) zvysenie
bezpecnosti servera proti utokom typu buffer overflow (znamym aj
BUDUCIM), kedy sa cielene prepise navratova adresa z funkcie ulozena
v stacku.

Popis tychto technik je napr. v knihe Linux - bezpecnost a exploity od
M Dobsiceka a R. Ballnera, vydavatelstvo Kopp Ceske Budejovice, 2004.

Ak sa mylim, tak ma opravte.

rajo

-- 
Lubomir Host 'rajo' <rajo AT platon.sk>   ICQ #:  257322664   ,''`.
Platon Group                              http://platon.sk/  : :' :
Homepage: http://rajo.platon.sk/                             `. `'
http://www.gnu.org/philosophy/no-word-attachments.html         `-



Další informace o konferenci linux