Das Gute vorweg – mein Web-Server hat einen Kernel kleiner 2.6.17 und scheint nicht angreifbar:
user@host:~/projekte/kernel$ ./vmsplice
-----------------------------------
Linux vmsplice Local Root Exploit
By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7e5f000 .. 0xb7e91000
[-] vmsplice: Function not implemented
user@host:~/projekte/kernel$ uname -r
2.6.9-xxx
user@host:~/projekte/kernel$
Auf den anderen Hosts sah es aber leider nicht so gut aus.
Der Exploit ist, wenn man einen lokalen Login auf einen Linux-Server bekommt, tatsächlich derart leicht zu nutzten, dass man (als Admin) auf jeden Fall reagieren sollte. Ich habe mir für meine (debian-) Server einen kleinen Script gebastelt (der auch erkennt, was schon geklappt hat):
#!/bin/bash
projektdir="~/projekte/kernel/novmsplice"
Kernel=`uname -r`
cd ${projektdir}/
if [ ! -f ${projektdir}/${Kernel}/novmsplice.ko ]
then
if [ ! -f ${projektdir}/novmsplice.c ]
then
wget -N http://www.linux.it/~md/software/novmsplice.tgz
cd ..
tar xzf ${projektdir}/novmsplice.tgz
cd ${projektdir}
fi
if [ ! -d ${projektdir}/${Kernel} ]
then
mkdir -p ${projektdir}/${Kernel}
fi
for f in novmsplice.c Makefile
do
cp -p $f ${projektdir}/${Kernel}
done
if [ `dpkg --list 2>/dev/null | grep linux-headers-${Kernel} | wc -l` -eq 0 ]
then
if [ "$UID" -eq 0 ]
then
apt-get install linux-headers-${Kernel}
fi
if [ `dpkg --list 2>/dev/null | grep linux-headers-${Kernel} | wc -l` -eq 0 ]
then
echo "Kann Paket linux-headers-${Kernel} nicht installieren!"
exit
fi
fi
cd ${projektdir}/${Kernel}
make
echo "Module ${Kernel}/novmsplice.ko erzeugt!"
else
echo "Module ${Kernel}/novmsplice.ko schon vorhanden!"
fi
if [ "$UID" -eq 0 ]
then
cd ${projektdir}/${Kernel}
if [ -f ${projektdir}/${Kernel}/novmsplice.ko ]
then
if [ ! -f /lib/modules/${Kernel}/kernel/lib/novmsplice.ko ]
then
cp -p novmsplice.ko /lib/modules/${Kernel}/kernel/lib
chown 0.0 /lib/modules/${Kernel}/kernel/lib/novmsplice.ko
fi
cd /lib/modules/${Kernel}/kernel/lib
depmod novmsplice.ko
modprobe novmsplice
fi
fi
if [ `lsmod | grep novmsplice | wc -l` -eq 0 ]
then
echo "Modul novmsplice nicht geladen!"
else
echo "Module /lib/modules/${Kernel}/kernel/lib/novmsplice.ko eingebunden?!"
lsmod | grep novmsplice
fi
Nun muss ich mich nur noch auf alle Rechner verbinden und den Script absetzten. :-(
noch ein paar Links als Nachtrag:
Hinterlasse einen Kommentar