|
1.
Yleinen lukusuojaus
Tavallisilla käyttäjillä ei pitäisi olla oikeutta lukea asetustiedostoja
tai salasanoja. Hyökkääjä voi varastaa salasanat tietokannoista tai
WWW-sivustoilta ja käyttää niitä sotkemiseen tai tuhoamiseen. Tästä syystä
tiedostojen oikeuksien pitää olla oikein. Jos jotain tiedostoa tarvitsee
käyttää vain rootin, sille pitää asettaa oikeuksiksi 0600 ja omistajaksi
chownilla root.
1.
Yleinen ja ryhmäkirjoitussuojaus
Koodilistaus 1.1: Yleisesti kirjoitussuojaamattomien tiedostojen haku |
# /usr/bin/find / -type f \( -perm -2 -o -perm -20 \) \
-exec ls -lg {} \; 2>/dev/null >writable.txt
# /usr/bin/find / -type d \( -perm -2 -o -perm -20 \) \
-exec ls -ldg {} \; 2>/dev/null >>writable.txt
|
Tämä komento tekee tiedoston, jossa on kaikki lueteltuina kaikki tiedostot,
joihin joko kaikilla tai ryhmillä on kirjoitusoikeudet. Tarkista oikeudet ja
poista yleinen kirjoitusoikeus kaikista komennolla /bin/chmod o-w.
1.
SUID/SGID-oikeudet
SUID- ja SGID-bitit antavat suoritettavan ohjelman oikeudet ajettavan tiedoston
omistavan käyttäjän tai ryhmän oikeuksiksi vastaavasti. Näitä käytetään
tyypillisesti kun ohjelmalla pitää olla rootin oikeudet toimiakseen.
Tällaiset ohjelmat ovat alttiita paikallisille rootin oikeuksien
väärinkäytölle, jos ne sisältävät turvallisuusaukkoja. Tällaisia
tietoturvaongelmia tulee välttää niin paljon kuin suinkin mahdollista. Jos
näitä ohjelmia ei käytetä, oikeudet kannattaa tiputtaa komennolla
chmod 0 tai poistaa niitä vastaavat paketit järjestelmästä. Paketin
voi selvittää komennolla equery, jos se puuttuu, sen saa käyttöönsä
asentamalla emerge gentoolkit -komennolla. Muissa tapauksissa SUIDin
saa pois komennolla chmod -s
Koodilistaus 1.1: Setuid-tiedostojen hakeminen |
# /usr/bin/find / -type f \( -perm -004000 -o -perm -002000 \) \
-exec ls -lg {} \; 2>/dev/null >suidfiles.txt
|
Tämä komento luo tiedoston jossa on lueteltuna SUID- ja SGID-bitilliset
tiedostot.
Koodilistaus 1.1: Luettelo SUID-tiedostoista |
/bin/su
/bin/ping
/bin/mount
/bin/umount
/var/qmail/bin/qmail-queue
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/crontab
/usr/bin/chage
/usr/bin/expiry
/usr/bin/sperl5.6.1
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/procmail
/usr/bin/suidperl
/usr/lib/misc/pt_chown
/usr/sbin/unix_chkpwd
/usr/sbin/traceroute
/usr/sbin/pwdb_chkpwd
|
Oletusarvoisena Gentoo Linuxissa ei ole montaa SUID-tiedostoa (määrä toki
riippuu siitä mitä on asennettu), mutta lopputulos muistuttanee jonkin verran
edellä olevaa. Useimpia näistä tavan käyttäjät eivät tarvitse, vain
pääkäyttäjä. SUIDin voi pudottaa pingistä, mountista,
umountista, chfn:stä, chsh:sta, newgrp:stä,
suidperlistä, pt_chownista ja traceroutesta komennolla
chmod -s. Tiedostoista su, qmail-queue ja
unix_chkpwd SUIDia ei saa pudottaa, sillä se estäisi su-komennon
käytön ja sähköpostin toiminnan. Bittien poisto estää tavallisen käyttäjän
mahdollisuuden saada rootin oikeudet ohjelmia hyväksikäyttämällä.
Tarvittavat SUID-tiedostot tyypillisellä järjestelmällä voisivat olla
su, passwd, gpasswd, qmail-queue,
unix_chkpwd ja pwdb_chkpwd. Jos käytössä on X, niitä on jonkin
verran enemmän, sillä X käyttää SUIDia.
1.
SUID ja SGID sekä kovat linkit
Tiedostoja ei poisteta ennen kuin kaikki siihen osoittavat linkit on
poistettu. Määritelmä saattaa kuulostaa oudolta, mutta esimerkiksi
/usr/bin/perl olisi linkki, joka osoittaa inodeen, jossa
tiedoston data on. Samaan dataan voi osoittaa miten monta linkkiä vain, ja
kunnes kaikki on poistettu, tiedosto on olemassa.
Jos käyttäjillä on pääsy osioon, jossa ei ole nosuid- tai
noexec-asetusta (esimerkiksi /tmp, /home tai
/var/tmp voivat olla samalla osiolla), kannattaa varmistaa, että
käyttäjät eivät linkitä SUID- tai SGID-ohjelmiin, niin että Portagen
päivitysten jälkeen he voivat vielä ajaa niiden vanhempia versioita.
Varoitus:
Jos Portage varoittaa jäljellä olevista kovista linkeistä, ja käyttäjä voi
kirjoittaa osiolle, jolla SUID- tai SGID-ohjelma on, kannattaa tämä osio lukea
tarkkaan. Joku käyttäjistä saattaa pyrkiä ehkäistä ohjelman päivittämistä.
Jos käyttäjät eivät voi luoda SUID-tiedostoja tai voivat vain suorittaa
ohjelmia dynaamisen lataimen avulla (eli osiolla on noexec-asetus), ei
ongelmia pitäisi olla.
|
Huomaa:
Käyttäjät eivät tarvitse ohjelmatiedoston lukuoikeutta linkittääkseen siihen,
pelkkä lukuoikeus hakemistoon riittää.
|
Komennolla stat saa selville tiedostoon osoittavien linkkien määrän.
Koodilistaus 1.1: Statin käyttö |
$ stat /bin/su
File: `/bin/su'
Size: 29350 Blocks: 64 IO Block: 131072 regular file
Device: 900h/2304d Inode: 2057419 Links: 1
Access: (4711/-rws--x--x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2005-02-07 01:59:35.000000000 +0000
Modify: 2004-11-04 01:46:17.000000000 +0000
Change: 2004-11-04 01:46:17.000000000 +0000
|
Linkitetyt SUID- ja SGID-tiedostot voi hakea komennolla find.
Koodilistaus 1.1: Linkitettyjen SUID- ja SGID-tiedostojen haku |
$ find / -type f \( -perm -004000 -o -perm -002000 \) -links +1 -ls
|
|