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