Zameneni spousteni z scriptu z PHP

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Úterý Leden 3 23:28:01 CET 2006


On Tue, 3 Jan 2006, Petr Bartel wrote:

> ph na rook.cz wrote:
> >    Navíc fíčura glibcího ld.so to usnadňuje:
> > 
> > $ cp /bin/ls /tmp
> > $ chmod -x /tmp/ls
> > 
> > $ /tmp/ls
> > bash: /tmp/ls: Přístup odmítnut
> > 
> > $ /lib/ld-2.3.5.so /tmp/ls
> > gconfd-ph
> > ls
> > mapping-ph
> > orbit-ph
> > ...
> 
> To je zajimave jak je to mozne ? Diky CD

Jednoduse: V prvnim pripade (/tmp/ls) se vola execve() primo na soubor
v /tmp, takze jadro vidi, ze se nekdo pokousi spustit program na 
filesystemu, kde to neni povolene. Ale v druhem pripade se vola execve()
na povoleny soubor (/lib/ld-2.3.5.so) a ten pak otevre soubor v /tmp
a neco s nim dela.

Existuje nejaky jaderny patch, ktery zrovna tohle sabotuje (myslim, ze 
detekuje pokus udelat mmap() s PROT_EXEC), nicmene problem to neresi, 
jenom posunuje latku o nekolik centimetru vys.

Problem je obecne v tom, ze noexec ma branit "spusteni programu", ale
hranice mezi tim, co je prace s daty a co je spusteni kodu, muze byt velmi
mlhava (je skript kod nebo kus textu?) a na uplnem zablokovani spousteni
programu z urcite oblasti by musely participovat uplne vsechny programy,
ktere mohou nejaky kus dat interpretovat jako nejaky druh kodu (coz je
pohrichu vic programu nez je obcas zdravo). A nesmely by v nich byt zadne
diry.

(Jina vec je, ze pouziti noexec je casto motivovano snahou resit problem, 
jehoz koren je nekde uplne nekde jinde. Coz je i diskutovany pripad 
pruniku skrz deravy skript v PHP.)

--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