|
1.
Dostępne do odczytu dla wszystkich
Zwykli użytkownicy nie powinni mieć dostępu do plików konfiguracyjnych i
zawierających hasła. Jeśli włamywaczowi uda się wykraść hasła z bazy danych lub
strony internetowej to będzie mógł podmienić albo nawet usunąć nasze pliki.
Właśnie to jest powodem, dla którego warto uważnie ustawić prawa do wszystkich
ważnych plików. Jeśli jest się pewnym, że z danego pliku będzie korzystał
wyłącznie root należy ustawić jego prawa na 0600 i przypisać plik
odpowiedniemu użytkownikowi przy pomocy polecenia chown.
1.
Dostępne do zapisu dla wszystkich
Listing 1.1: Znajdowanie takich plików i katalogów |
# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \; 2>/dev/null >writable.txt
# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \; 2>/dev/null >>writable.txt
|
Polecenie to utworzy listę plików z prawami do zapisu dla wszystkich
użytkowników lub grup. Należy sprawdzić prawa, a następnie usunąć zapisywalność
przy pomocy polecenia /bin/chmod o-w dla każdego z plików.
1.
Pliki z bitami SUID i SGID
Pliki z ustawionymi bitami SUID i SGID uruchamiane są zawsze z prawami dostępu
swojego właściciela, a nie z prawami osoby je uruchamiającej. Normalnie
bity te są ustawiane na programach, które do poprawnej pracy wymagają praw
roota. Jeśli taki plik zawiera błąd może spowodować kompromitację lokalnego
konta root. W związku z takim niebezpieczeństwem należy za wszelką cenę unikać
ustawiania tych bitów. Jeśli któryś z takich plików nie jest używany wykonujemy
na nim polecenie chmod 0 lub odmergowujemy pakiet do którego należy
(pakiety do którego należą dane pliki wyszukujemy przy pomocy polecenia
equery; jeśli nie ma takiego polecenia należy zainstalować pakiet
gentoolkit). W każdym innym wypadku należy użyć polecenia chmod -s do
zdjęcia bitu SUID.
Listing 1.1: Znajdowanie plików z bitem SUID |
# find / -type f \( -perm -004000 -o -perm -002000 \) -exec ls -lg {} \; 2>/dev/null >suidfiles.txt
|
To polecenie utworzy plik z listą wszystkich programów, które mają ustawione
bity SUID i SGID.
Listing 1.1: Lista plików binarnych z suidem |
/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
|
Domyślnie Gentoo nie zawiera wielu plików SUID (chociaż ich ilość zależy od tego
jakie programy są zainstalowane). Większość komend nie powinna być uruchamiana
przez zwykłych użytkowników z prawami roota. Polecamy zdjęcie bitów SUID z
programów ping, mount, umount, chfn,
chsh, newgrp, suidperl, pt_chown i
traceroute. Dokonuje się tego przy pomocy polecenia chmod -s. Nie
należy usuwać tego bitu z su, qmail-queue czy unix_chkpwd.
Usunięcie setuid z tych plików spowoduje utratę możliwości przełączania się na
konto superużytkownika czy otrzymywania poczty. Usuwając SUID odbieramy zwykłemu
użytkownikowi (lub włamywaczowi) możliwość uzyskania dostępu do konta roota
przez któryś z tych plików.
Jedyne plikami z SUID w moim systemie to: su, passwd,
gpasswd, qmail-queue, unix_chkpwd i pwdb_chkpwd.
Każdy kto używa serwera X może potrzebować jeszcze kilku, ponieważ serwer
korzysta czasem z rozszerzonego dostępu, oferowanego przez bity SUID.
1.
Twarde dowiązania do plików binarnych z SUID/SGID
Plik można uznać za skasowany tylko wtedy gdy nie istnieją żadne na niego
wskazujące odnośniki. Może to wydawać się dziwne, ale na przykład plik
/usr/bin/perl jest wyłącznie odnośnikiem do inody gdzie znajdują
się właściwe dane. Do pliku może istnieć nieskończenie duża ilość dowiązań i
dopóki wszystkie nie zostaną skasowane plik wciąż istnieje.
Jeśli użytkownicy posiadają dostęp do partycji nie zamontowanej z opcjami
nosuid i noexec (na przykład gdy /tmp,
/home lub /var/tmp nie znajdują się na osobnych
partycjach) należy się upewnić, że nie będą mieli możliwości utworzenia twardego
dowiązania do plików binarnych i korzystania z nich np. po uaktualnieniu przez
Portage pliku do nowej, nie zawierającej błędów wersji.
Ostrzeżenie:
Jeśli otrzymamy od Portage ostrzeżenie o istniejących twardych dowiązaniach, a
użytkownicy mają dostęp do partycji umożliwiającej wykonywanie plików SUID/SGID
należy uważnie przeczytać ten rozdział. Jeden z użytkowników może podejmować
próbę obejścia uaktualnień poprzez zatrzymanie przestarzałej wersji
programu. Jeśli użytkownicy nie mogą tworzyć własnych plików SUID lub uruchamiać
programów poprzez dynamiczny program ładujący (partycje zamontowane jako
noexec) nie ma powodu do zmartwień.
|
Uwaga:
Użytkownik nie musi posiadać prawa odczytu pliku, aby móc utworzyć do niego
dowiązanie, wystarczy, że ma prawa do katalogu go zawierającego.
|
Aby sprawdzić ilość istniejących dowiązań do danego pliku należy skorzystać z
polecenia stat.
Listing 1.1: Polecenie stat |
$ 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
|
Do znajdowania plików z ustawionymi bitami SUID i SGID korzystamy z programu
find.
Listing 1.1: Znajdowanie wielokrotnie zlinkowanych plików binarnych z bitem suid/sgid |
$ find / -type f \( -perm -004000 -o -perm -002000 \) -links +1 -ls
|
|