
PC sicuro? Molto dipende da file system e permessi
Le regole di base da applicare subito prima e dopo l’installazione per rendere la propria distribuzione più resistente agli attacchi
(pagina 2 di 3)
La fase di Partizionamento
La prima regola prevede una particolare configurazione dell’hard disk. In
questo caso specifico, proponiamo un sistema di partizionamento piuttosto
complesso dedicando un file system (partizione) specifico ad ogni funzionalità
del sistema o applicazione. Questo dovrebbe rendere più difficile ad
un aggressore compromettere l’intera macchina o perlomeno dare all’amministratore
di sistema il tempo necessario per intervenire e bloccare tentativi
di attacco in altri punti. In genere, la maggior parte delle distribuzioni
dispone di un tool di partizionamento grafico utilizzabile già durante la fase
di installazione, quindi basta seguire le indicazioni fornite senza servirsi
necessariamente dei programmi a riga di comando. La prima regola da seguire
è quella di definire un’area di swap per ospitare le operazioni di paging
della memoria, pari al doppio della memoria RAM del computer. Se,
dunque, abbiamo a disposizione 512MB di RAM bisogna creare una swap
di 1GB. A questo proposito ricordate che il sistema operativo ha bisogno
di una locazione fisica non formattata, ossia
raw device, proprio per poter salvare dati e
informazioni che vengono via via caricati in
memoria. Dobbiamo, poi, creare una partizione
chiamata /boot pari a circa 100MB
necessaria per ospitare il kernel e i file che
consentono l’avvio di GNU/Linux. Un’altra
partizione indispensabile è la cosiddetta root (/) dove vengono installati i file
del sistema operativo. Poi tocca a /usr, la partizione dove vengono copiati
i file eseguibili che consentono di avviare comandi e programmi, mentre /
usr/local è utile per ospitare le applicazioni di terze parti. La partizione /var
non può essere esclusa da questa configurazione, perché è qui che vengono
creati i log di sistema e le aree di spool. È consigliabile allocare molto spazio
per consentire la creazione e la crescita dei file di log che sono fondamentali
per le attività di gestione e monitoraggio della sicurezza. È anche necessario
definire la partizione /home, che contiene gli account utente, e /tmp, che
ospita i file temporanei. Non bisogna dimenticare, inoltre, che anche ogni applicazione server (FTP, database server, web, ecc.) dovrebbe essere creata
in una directory separata del disco.
 |
Documentazione relativa al comando mkfs |
 |
Il file /etc/shadow. Una x nel secondo campo indica una password cifrata, un asterisco che l’account è bloccato |
Creazione del file system
Questa fase, detta formattazione, è quella che ci consente di creare fisicamente
le varie partizioni con il file system che decideremo di utilizzare. In
generale si consiglia di utilizzare Ext3 in quanto consente veloci operazioni
sui file e garantisce un buon livello di sicurezza. Il comando che bisogna
eseguire per creare un file system è mkfs (quello che in Unix System V è
newfs). Le opzioni principali sono le seguenti: -t seguito dall’identificativo
del file system serve per definire quale file system creare. Ad esempio, mkfs
-t ext3 /dev/hdd1 crea il file system Ext3 sulla partizione /dev/hdd1 (magari
appartenente ad un nuovo disco aggiunto nel sistema); -c serve per forzare
mkfs a controllare i blocchi difettosi eventualmente presenti sulla partizione.
Ad esempio, mkfs -c -t ext2 /dev/hdd3 -V serve per fare in modo che mkfs
visualizzi i comandi che in quel momento sta eseguendo. Ad esempio, mkfs
-V -c -m 1 -t ext2 /dev/hdd3.
Opzioni di Mount
Un accorgimento importante riguarda le impostazioni di mount, cioè la modalità
con cui le partizioni vengono rese accessibili agli utenti. Al fine di evitare
che un aggressore possa caricare qualche rootkit e sostituire eseguibili
presenti nel sistema operativo con altri modificati ad-hoc è indispensabile
montare alcuni file system con i permessi in sola lettura (read only). In
particolare, è la partizione /usr a dover essere protetta più delle altre, per
via del fatto che contiene soprattutto comandi eseguibili che non devono
essere mai modificati a meno di aggiornamenti del sistema operativo. Come
al solito, dunque, procediamo prima al backup del file /etc/fstab nel modo
seguente: cp /etc/fstab /etc/fstab.bak. A questo punto, cambiamo la riga
che riguarda la partizione /usr per attivarla in sola lettura come indicato di
seguito: LABEL=/usr /usr ext3 ro 1 2. Ovviamente, ogni volta che bisogna
installare nuovi programmi o, comunque, aggiornamenti, è necessario rimontare
temporaneamente la partizione /usr in modalità read/write (lettura
e scrittura): mount –o remount, rw /usr. Terminate le operazioni di scrittura,
possiamo ritornare alla situazione precedente (solo lettura) con mount
–o remount, ro /usr.
Problemi connessi a suid e sgid
 |
I permessi che possono essere attribuiti a file e directory comprendono anche SUID, SGID e sticky bit |
Uno degli errori commessi più di frequente è quello di pensare che il sistema
di gestione delle password di GNU/Linux sia sufficientemente robusto per
rendere inattaccabile il sistema. Ma non è così! Purtroppo, i file binari (gli
eseguibili) con autorizzazioni (attributi) SUID e SGID (o GUID) costituiscono
un pericolo e per questo motivo il loro numero deve essere limitato
e tenuto sempre sotto controllo. La domanda a questo punto è : ma cosa
comporta l’uso di un file SUID (Set User IDentification). In pratica, tutte le
volte che un programma ha l’attributo SUID attivo, quando gli utenti lo eseguono,
lo fanno con le autorizzazioni del proprietario anziché con le proprie.
È chiaro, quindi, che un eseguibile di proprietà di root con SUID attivo, può
essere eseguito da un utente comune con gli stessi privilegi del proprietario, quindi come amministratore. Un esempio tipico è quello del file /etc/passwd,
al quale è possibile accedere direttamente solo da root e in sola lettura
da qualsiasi utente abilitato e appartenente agli utenti del sistema. In teoria,
quindi, solo l’amministratore di sistema (con diritti di root) può aggiornare
le password, tuttavia, esiste un comando che si chiama proprio passwd che,
avendo il SUID impostato, consente a qualsiasi utente di eseguirlo e di modificare
la propria password. Di conseguenza, quello che accade, è che il file
/etc/passwd (e anche /etc/shadow se il sistema utilizza le shadow password)
viene modificato da un utente non amministratore, proprio perché passwd
viene eseguito con diritti di root grazie a SUID. Il caso di SGID, Set Group
Identification, è molto simile a quello precedente, l’unica differenza è che
in questo caso vengono attribuiti i diritti di un particolare gruppo, anziché
quelli di un solo utente. In altre parole, il programma con l’attributo SGID
attivo, invece che con le autorizzazioni del gruppo relativo all’utente che lo
richiama, viene eseguito con i permessi del gruppo associato al programma
stesso. Per individuare tutti i file e i programmi con SUID e/o SGID attivo
bisogna utilizzare il comando seguente:
find /bin /usr/bin -type f \( -perm -04000 -o
-perm -02000 \) -ls
I file SUID o SGID più comuni sono ping, ping6, traceroute, traceroute6,
mount, umount, chage, gpasswd, wall, chfn, chsh, newgrp, write, passwd,
lockfile, rcp, rlogin, rsh, at, sudo e crontab. Probabilmente, la cosa migliore
da fare in questi casi è quella di eseguire il comando find non appena la
distribuzione è stata installata e salvare l’output su un file (in questo caso
check.txt) che può essere letto solo da root:
find /bin /usr/bin -type f \( -perm -04000 -o
-perm -02000 \) -ls > check.txt
Periodicamente (magari settimanalmente) è opportuno eseguire di nuovo il
primo comando e confrontate l’output ottenuto con quello contenuto nel file
salvato in precedenza. Se dovessero essere presenti delle variazioni e cioè se
sono aumentati i file con SUID e/o SGID attivi, allora è ragionevole pensare
che qualcuno abbia manomesso il sistema, introducendo dei programmi che
consentono di operare con i privilegi di root. Se lo ritenete opportuno, comunque,
è sempre possibile ridurre il numero di file binari che hanno SUID
e/o SGID impostato in maniera predefinita (subito dopo l’installazione del
sistema operativo). Buoni candidati per essere privati delle autorizzazioni
SUID e SGID sono: ping, ping6, traceroute, traceroute6, mount, umount,
chage, chfn, chsh. Il comando che bisogna eseguire per ottenere questo risultato
è il seguente: chmod 755 nome_del_file_binario.
 |
Eseguendo ls -la se sono attivi SUID e/o SGID è presente una s, mentre la t indica lo sticky bit |
 |
Le directory temporanee come /tmp e /var/tmp hanno lo sticky bit attivo |
Monitorare l’integrità dei file
Controlli e messaggi di avviso automatici
Al fine di monitorare l’integrità del file system è utile
installare e utilizzare appositi tool in grado di effettuare il
controllo e inviare messaggi di avviso a determinati utenti
tutte le volte che i file fondamentali di sistema vengono
modificati. Infatti, quando un aggressore prende il controllo
del computer cercherà subito dopo di modificare alcuni file
binari e di log, al fine di mascherare le sue attività illecite e
di perpetuarle nel tempo in tutta tranquillità. I tool più potenti
e utilizzati sono Tripwire (www.tripwire.com) e AIDE (
Advanced Intrusion Detection Environment – http://sourceforge.
net/projects/aide).
Creare file suid e sGid
Nonostante il pericolo insito in questo tipo di configurazione, a volte è necessario
attivare gli attributi SUID o SGID ad alcuni programmi, proprio per
dare agli altri utenti la possibilità di eseguire determinati compiti senza che
abbiano diritti dell’utente o del gruppo proprietario de file. Tuttavia, anche se
è consentito farlo, bisogna sempre prendere le dovute precauzioni: bisogna,
innanzitutto, utilizzare le autorizzazioni minime occorrenti per svolgere quel
determinato compito, ed è necessario fare attenzione alle cosiddette backdoor
(letteralmente “porte sul retro”); una sorta di programma/virus utilizzato
per aprire vie di ascesso “preferenziali” non autorizzate all’interno del
sistema. Utilizzare le autorizzazioni più basse consentite, significa evitare,
quando possibile, di dare a un file un SUID di root ed inoltre non attribuirgli
uno SGID del gruppo sys. Il concetto, invece, di back-door riguarda la
possibilità (non voluta) di consentire l’utilizzo di strumenti addizionali che
possano permettere, nei casi peggiori, di prendere il controllo del sistema
operativo. Se, ad esempio, date l’autorizzazione SUID di root ad un certo
programma che permette di aprire una shell, è ovvio che avete messo a
disposizione di utenti non amministratori un accesso di tipo root. Prima di procedere con la messa in sicurezza del sistema è importante ricordare che
con il comando chmod ciascun utente può modificare solo i propri diritti,
mentre root può modificarli tutti. Così, ad esempio, per dare ad un file tutti
i permessi bisogna eseguire chmod 777 nome_del_file, mentre il caso opposto,
cioè l’eliminazione di tutti i permessi, si ottiene con il comando chmod
000 nome_del_file. Infine, se vogliamo modificare i diritti di accesso
di tutti i file che si trovano in un certo percorso (modalità ricorsiva) bisogna
utilizzare il parametro -R. Ad esempio, per assegnare i diritti 755 a tutti i
file che si trovano nella directory /work bisogna eseguire chmod -R 755
/work. Detto questo, vediamo subito come attribuire gli attributi SUID e
SGID ad un file. In questo caso, è necessario aggiungere una cifra numerica
alla serie di tre appena considerata (777), tenendo presente che il numero 2
attribuisce il SUID, il 4 il SGID e il 6 entrambi. Quindi per attribuire SUID
e tutti i permessi ad un file, bisogna procedere come segue: chmod 2777
nome_del_file. Per assegnare SGID e tutti i permessi, invece, il comando
è chmod 4777 nome_del_file. Infine, per attribuire sia SUID che SGID
bisogna eseguire chmod 6777 nome_del_file. Ricordiamo, infine, che gli
attributi SUID e SGID sono utilizzabili solo con i file eseguibili.
Gestione dello sticky bit
Abbiamo considerato tutti i diritti che si possono attribuire ai file salvo l’ultimo,
lo sticky bit. Inizialmente, questa impostazione indicava la volontà di
mantenere il testo del programma sul device di swap (sticky significa, infatti,
appiccicoso). Adesso, invece, indica semplicemente che tutti i file che si trovano
all’interno di directory con lo sticky bit attivo non possono essere cancellati
se non dal proprietario della directory o del file stesso. Questa regola
vale anche se il file è di tipo 777 e, quindi, con i permessi in lettura, scrittura
ed esecuzione da parte di qualsiasi utente e gruppo. Per impostare lo sticky
bit si deve indicare un 1 prima delle normali cifre numeriche che indicano i
permessi standard: chmod 1777 nome_della_directory. Per impostare anche
il SUID, allora, questo valore deve essere sommato a 2: chmod 3777
nome_della_directory. Lo stesso accade nel caso di SGID (ma in questo
caso il valore è 4 + 1) e per impostare tutti e tre gli attributi (SUID, SGID e
sticky bit), rispettivamente i comandi sono: chmod 5777 nome_della_directory,
chmod 7777 nome_della_directory. Una buona regola consiste
nell’impostare lo sticky bit per tutte quelle directory che devono contenere
file condivisi e appartenenti a diversi utenti (ad esempio quella Desktop, /tmp o /var/tmp). Per ricercare le directory che hanno diritti di tipo 777 basta utilizzare il comando find / -type d \( -perm -0002 –a ! -perm -1000 \) -ls.
Installazione del software
Meglio limitarsi a quelli realmente necessari
Noi utenti GNU/Linux, in genere, dopo aver installato la
distribuzione abbiamo una “insensata” tendenza ad installare
la maggior parte del software presente sul CD/DVD di
setup. Questo non dovrebbe assolutamente accadere. Per
motivi di sicurezza, infatti, dobbiamo caricare sul computer
solo quei pacchetti che ci servono realmente, evitando tutti
gli altri che possono aprire potenziali brecce nel sistema:
più programmi sono presenti nel sistema e più alta è la
probabilità che un aggressore trovi un bug per violare le
nostre difese.
Setup dei drive rimovibili
 |
Nel caso di floppy, Cd-Rom e DVD è consigliabile attivare l’opzione NOSUID |
Poiché floppy, Cd-Rom e DVD possono essere utilizzati per caricare file
SUID nel sistema, è bene limitare questa possibilità utilizzando l’opzione di
mount NOSUID. Di conseguenza, il file /etc/fstab deve essere modificato
facendo riferimento alla configurazione relativa a questo tipo di periferiche:
/dev/cdrom /mnt/cdrom udf,iso9660 nosuid,nodev,
noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto
nosuid,nodev,noauto,owner,kudzu 0 0
Ovviamente, le opzioni di mount possono variare a seconda del sistema, ma
è importante che siano presenti NOSUID e anche NODEV. Quest’ultima
regola evita che vengano utilizzati i file di dispositivo presenti nel sistema.
L’opzione DEV, infatti, consentirebbe, ad esempio, il mount di un file system
Ext2 presente su un floppy sul quale è stato in precedenza memorizzato
un file scrivibile, /dev/kmem, che permetterebbe di accedere anche in scrittura
alla memoria del kernel.
 |
È fondamentale controllare i permessi attivi sui file passwd, shadow e group |