Linux e la sicurezza fisica

Problematiche di sicurezza su server fisicamente non protetti

Introduzione alla sicurezza fisica

Un aspetto che spesso viene sottovalutato o totalmente ignorato è la sicurezza fisica dei vari sistemi, l’accesso non autorizzato a dati sensibili può avvenire anche da locale, il classico esempio è quello della propria workstation contenente informazioni personali come numeri di carte di credito o numeri di conto correnti accessibile senza nessuna protezione di sorta come le password di sistema.

Di fatto l’accesso in locale dei propri sistemi deve essere permesso ai soli addetti ai lavori, ma dobbiamo considerare anche l’ipotesi di un “attacco” effettuato dall’interno.
Il termine sicurezza si deve estendere anche ad altre problematiche come ad esempio l’uso di un locale adeguato, con accesso controllato, per ospitare più host o la stesura di policy per il disaster recovery.
In linea di massima possiamo tracciare tre gruppi di check list per migliorare la sicurezza fisica dei propri sistemi.

Sicurezza Fisica del luogo
Ovvero tutto ciò che bisognerebbe fare per rendere più sicuro l’ambiente che ospita i sistemi.
Accesso limitato e controllato alla sala macchina.
Sarebbe appropriato limitare e controllare tutti gli accessi ai vari locali e avvalendosi di sistemi di sicurezza elettronici come controllo. Ad esempio badge o scanner biometrici.
Adeguare l’ambiente all’uso.
Adottare sistemi di:
Climatizzazione per mantenere l’ambiente ad un temperatura adeguata.
Anti-incendio a gas, approriati per i locali contenenti apparati elettronici ed elettrici.
Gruppi elettrogeni per l’erogazione continua di elettricità anche in caso di down della linea principale.
Disaster recovery
Sarebbe opportuno stendere policy ed installare sistemi per il disaster recovery, effettuare il backup e spostarli dal luogo dei sistemi in produzione.

Sicurezza fisica del singolo host
I punti fondamentali per aumentare la sicurezza fisica del singolo host:
Accesso limitato alla singola macchina
E’ opportuno limitare la possibilità di accedere direttamente all’host, è bene togliere video e tastiere e impedire ove è possibile l’uso dei cdrom e dei floppy drive.
Nella maggior parte dei casi si hanno i sistemi messi in appositi armadi con serratura (rack) che limitano sia l’accesso al singolo host sia la possibilità di accedere a cavi di alimentazione o di rete. L’accesso dei sistemi dovrebbe avvenire tramite network o, in subordine, via console.
Password sul BIOS
I comuni BIOS mettono a disposizione vari livelli di protezione basati sull’autenticazione utente tramite password. E’ possibile usufruire di questa protezione sia in caso di reboot della macchina o per il solo cambiamento delle impostazioni del BIOS, la soluzione consigliata è la seconda perchè in caso di reboot volontario non verrà richiesto l’inserimento della password che dovrà essere inserita da locale.
Boot Loader
Ulteriore possibilità di protezione al boot è la password del proprio boot loader.
In caso di un server è bene che al boot non venga richiesta nessuna password a meno che non venga modificata la procedura standard di boot, come ad esempio l’aggiunta di parametri all’avvio del kernel, questo per evitare la presenza fisica di un operatore ad ogni reboot. Analogamente va richiesta una password nei caso si cerchi di passare opzioni di boot diverse da quelle di default.
Tenere presente che queste password sono facilmente superabili nel caso in cui il sistema venga riavviato effettuando un boot da cd-rom o da floppy.
Disattivare il reboot via ctrl-alt-del
Commentando la seguente linea in /etc/inittab è possibile eliminare la possibilità di riavvio tramite tastiera con la sequenza ctrl-alt-del
# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Attenzione: il tasto di reset sul case, continua a funzionare!

Cosa deve fare l’utente di un sistema
Le azioni comuni di un operatore per aumentare la sicurezza fisica del suon sistema.
Lock della propria postazione
Ogni qual volta ci si allontana dall’host è necessario chiudere tutte le shell aperte e in caso di X attivo lanciare lo screensaver impostato con la password, in modo tale che chi non conosce la password non possa accedere al sistema.
Info cartacee ed elettroniche
Evitare assolutamente di scrivere password o qualsiasi altra informazione considerata strategica o sensibile al contesto in cui si opera come ad esempio password scritte sotto le tastiere o sui video oppure attaccare post-it con informazioni rilevanti come numeri di conto corrente o qualsiasi altra informazione che potrebbe rivelarsi utile per introdursi nei propri sistemi informatici.
Nel caso in cui si debba annotare tali informazioni utilizzare filesystem cryptati in caso di supporti informatici o archiviare in posti “sicuri” (cassaforti, armadi con serratura) i documenti cartacei.

Le fasi del boot di Linux (su un sistema x386 Intel-like)

Il processo di boot di una macchina Linux su sistemi x86 Intel compatibili comporta diverse fasi.
Conoscerle e saperle interpretare è fondamentale per il troubleshooting di problemi di avvio.

Il boot di un sistema Linux su un sistema x386 (su altri si possono essere differenze nelle prime fasi) prevede i seguenti stadi:
1- All’accensione il BIOS su ROM non volatile definisce l’ordine dei device da utilizzare per effettuare il boot.
2- Il BOOT SECTOR del primo device di boot contiene il codice (o i riferimenti su dove trovarlo) del loader che esegue il bootstrap del sistema operativo. Nel caso di Linux il più diffuso loader è LILO, una recente alternativa evoluta è GRUB.
3- Il loader lancia il caricamento del kernel di Linux, che si copia in memoria ed esegue i controlli e il riconoscimento dell’hardware presente.
4- A fine caricamento il kernel esegue il processo init, padre di tutti i processi, che gestisce il caricamento di tutti gli altri programmi da eseguire per completare il boot.

IL BIOS SU ROM
Ogni sistema Intel ha sulla motherboard un BIOS su ROM con cui gestire l’hardware del sistema.
All’avvio di un computer non c’è nulla in RAM e nessun programma predefinito da caricare.
Le istruzioni su come procedere sono nella memoria non volatile del BIOS, in cui, fra le impostazioni definibili dall’utente, c’e’ la sequenza dei dispositivi da usare per il boot.
Nei BIOS più recenti è possibile bootare da floppy, cdrom, hard disk (potendo scegliere se dare precedenza a HD IDE o SCSI) e altri dispositivi quali Zip o scheda di rete.
Il BIOS cerca, nell’ordine configurato, il boot sector sui diversi dispositivi di boot previsti.
Gli hard disk hanno un boot sector per ogni partizione e un unico Master Boot Record (MBR) che è il primo boot sector dell’intero hard disk. Se si esegue il boot da un hard disk, è il codice contenuto nel MBR che viene eseguito.

IL LINUX LOADER
Esistono diversi loader che eseguono il bootstrap del sistema operativo per Linux:
Su sistemi Intel Based: LILO, GRUB, LOADLIN, SYSLINUX, BOOTLIN;
su sistemi Alpha: MILO;
su sistemi Sparc: SILO.
Tutti di fatto eseguono la stessa funzione, alcuni (loadlin e syslinux) sono programmi DOS che eseguono il kernel caricandolo da una partizione DOS, altri sono adattamenti di LILO che riguardano sistemi non basati su processori Intel.
Nella pagina LILO, GRUB e Master Boot Record vengono analizzati nel dettaglio:
LILO – Il più conosciuto e diffuso
GRUB – Un loader più recente e versatile di LILO in rapida diffusione.

IL KERNEL
Il kernel, invocato dal loader, viene caricato in memoria ed inizializza i vari device driver, visualizzando vari messaggi utili per capire e conoscere il proprio sistema.
I dettagli sull’avvio del kernel, il riconoscimento e l’inizializzazione dell’hardware sono riportati nel TOPIC dedicato.

INIT E I SUOI FIGLI
L’ultima operazione eseguita dal kernel alla fine del suo caricamento è il lancio del processo init, il padre di tutti i processi.
Da questo momento tutto il codice eseguito lavora in user space (in kernel space lavorano solo il kernel e i suoi moduli).
L’init, tramite il suo file di configurazione /etc/inittab, provvede a lanciare tutti i programmi che completano il processo di caricamento.

Introduzione a LILO

LILO è il Linux loader più diffuso, permette il boot sia di Linux che di altri sistemi operativi.
Generalmente l’installazione di Linux provvede a creare ed installare LILO sulla macchina (se si è scelto di installare il loader direttamente sull’hard disk e non su floppy) ma in caso di kernel upgrade o aggiunta di un nuovo sistema operativo sulla macchina è necessario modificare le sue impostazioni.

Tutte queste impostazioni sono definite nel file /etc/lilo.conf che contiene una parte globale e una o più parti relative alle diverse immagini del kernel o sistemi operativi che si vogliono poter caricare.
Il comando
/sbin/lilo installa sul MBR o sul settore di boot di una partizione il LILO secondo le indicazioni date in /etc/lilo.conf.
Ogni volta che viene modificato /etc/lilo.conf è necessario eseguire il comando lilo per installare il nuovo LILO sul settore di boot (notare la differenza, comunemente adottata, fra il comando lilo, tutto in minuscolo, e il Linux Loader vero e proprio LILO, in maiuscolo).
Al momento del boot LILO inoltre presenta la possibilità di dare comandi vari e di scegliere quale sistema operativo o quale versione del kernel caricare, a seconda delle confgiurazioni impostate in /etc/lilo.conf.
ATTENZIONE: Operare maldestramente con LILO e il MBR può impedire il boot del sistema operativo, si suggerisce sempre di avere un dischetto di ripristino disponibile da utilizzare in caso di danni o problemi con l’MBR.

Usare il prompt di LILO

LILO dispone di un command prompt che permette di eseguire operazioni più evolute della scelta del sistema operativo da caricare.
La possibilità di digitare i seguenti comandi può essere, per sicurezza, soggetta all’introduzione di una password.

TAB Visualizza l’elenco delle label disponibili, cioè dei sistemi operativi e delle versioni del kernel selezionabili al boot.
linux rescue Carica l’immagine con label linux in modalità single user mode (init 1) per interventi di amministrazione straordinaria sul sistema.
linux single Come rescue, con la differenza che viene tentato il boot da disco.
root=/dev/... Come nel file lilo.conf, definisce il dispositivo di boot permettendo di bootare, per esempio dal CDROM senza modificare il BIOS.
vga=80x25 Definisce la modalità video della console: colonne x righe.

Introduzione a Grub

GRUB è un boot loader multipiattaforma estremamente flessibile e potente.

Ha una propria CLI in cui inserire a mano i parametri di boot o può presentare un’interfaccia a menu configurabile tramite il file /etc/grub.conf.
Per installare grub sul settore di avvio basta dare il comando:
grub-install /dev/hda (o altro nome di device di boot valido).
A differenza di LILO non c’è bisogno di ridare il comando ogni volta che si cambia la configurazione.
Per la sintassi di
/etc/grub.conf si rimanda alla relativa sezione: si consideri che avendo le stesse funzioni di Lilo, la sua logica è affine a /etc/lilo.conf.
Solitamente all’avvio Grub si presenta con un menu da cui è possibile scegliere quale sistema operativo caricare, ma è possibile entrare in modalità comandi, simile ad una shell, in si possono eseguire svariate operazioni: dalla scelta del path del kernel, al boot via rete.

/boot/grub/grub.conf

Il file /boot/grub/grub.conf (spesso referenziato con il symlink /etc/grub.conf) è il file di configurazione del boot loader GRUB.
La sua logica è simile a quella del classico lilo.conf, ma la sintassi è leggermente diversa e le opzioni più numerose.
Di fatto permette di predefinire gli stessi comandi che possono essere inseriti a mano quando Grub viene avviato, rendendo ovviamente più rapida ed automatica la fase di boot.

Il file presenta una struttura di questo tipo (esempio da un RedHat standard dual boot Win-Linux):
boot=/dev/hda Device dal quale bootare
default=0 Label (sezione) selezionata di default (0 è la prima visualizzata, in questo caso Red Hat Linux)
timeout=10 Tempo, in secondi, dopo il quale se non si effettua alcuna azione grub boota la label di default
splashimage=(hd0,2)/boot/grub/splash.xpm.gz Path della immagine di sfondo mostrata da grub al boot
password --md5 $1$6ðòüZßXÈ$bXTLL8IbDhnwmjyaNNcPG. Password (criptata) per poter modificare i parametri di avvio al boot

title Red Hat Linux (2.4.9-31) Titolo della prima label, può essere un testo arbrario
root (hd0,2) Disco (0, 1, 2…) (e partizione, dove 0 è la prima partizione e le altre a seguire) dove si trova la root directory ( / ). Notare che Grub ha una propria naming conventon sugli hard disk diversa da quella tipica di Linux: hd0 può corrispondere sia a /dev/hda che a /dev/sda.
kernel /boot/vmlinuz-2.4.9-31 ro root=/dev/hda3 Path dell’immagine del kernel. Qui possono essere definite eventuali opzioni da passare al kernel (es: vga=ext)
initrd /boot/initrd-2.4.9-31.img Path dell’immagine da mettere in un RamDisk nelle prime fase del boot (necessario se il supporto di driver fondamentali per il caricamento del kernel (device SCSI, filesystem di / e /boot) è gestito tramite moduli).

title Win2K Titolo della seconda label
rootnoverify (hd0,0) Disco (e partizione) su cui procedere per il boot di un sistema operativo non supportato (lascia al settore di boot della partizione indicata l’onere del bootstrap dell’OS)
chainloader +1 Passa il compito di bootare ad un altro boot loader (in questo caso quello di Windows)

A differenza di Lilo, con Grub quanto scritto in questo file di configurazione è immediatamente attivo e non va eseguito alcun comando per rendere definitive le modifiche (con Lilo va eseguito il comando lilo ogni volta che si modifica lilo.conf (riscrive il MBR)).

Linux Password recovery

E’ possibile tramite semplici operazioni effettuare un password recovery di un sistema linux.
Tutto quello che si deve avere a disposizione è un cd-rom o un dischetto bootabile con un kernel linux ed un editor di testo come vi.

La prima operazione è quella di riavviare il sistema inserendo il cd o dischetto contenente un’immagine di un kernel funzionante.Il primo cd della propria distribuzione è piu’ che sufficiente. Ovviamente sul BIOS vanno impostati il floppy disk o il CDROM come device di boot primari.
Una volta che il sistema ha completato il boot da cd-rom o da dischetto abilitare il caricamento del kernel in modalità rescue:
boot: linux rescue

Verrà caricato un sistema Linux in INIT 1 in cui viene presentato il prompt di una shell senza la necessità di inserire login o password.
Quando si avrà una shell disponibile montare la partizione di root.
Ammettiamo che sia hda3 e che si scelga un mount point arbitrario come /mnt/cdrom:
[bash-2.0.3]$ mount -t ext3 /dev/hda3 /mnt/cdrom
Nel caso in cui si utilizza il primo CD della distribuzione RedHat in modo del tutto automatico il sistema salvato sul proprio hard-disk verrà montato in /mnt/sysimage/ e si verrà avvisati dal seguente messaggio:
The rescue environment will now attempt to find your Red Hat
Linux installation and mount it under the directory
/mnt/sysimage.  You can then make any changes required to your
system.  If you want to proceed with this step choose
‘Continue’. You can also choose to mount your filesystem
read-only instead of read-write by choosing ‘Read-only’.
If for some reason this process fails you can choose ‘Skip’
and this step will be skipped and you will go directly to a
command shell.

Ora si ha completo accesso ai file presenti nella partizione montata, senza limitazioni su permessi e owner, per cui basta disabilitare la vecchia, non più nota, password, cancellando la entry opportuna nel file /etc/shadow.
Ammettiamo di effettuare il password recovery per l’utente root:
sh-2.05a# vi /mnt/cdrom/etc/shadow
root:
$1$Uowq9pDe$.76a1DuKc9rxSSk.P25xP.:12017:0:99999:7:::
[….]
Cancellare il campo relativo alla password, come nell’esempio
root::12017:0:99999:7:::

Salvare il file  e riavviare il sistema. (Ricordarsi di togliere il cd-rom o il dischetto utilizzato per il boot)
In questo caso al momento del login, se si inserirà come username root non verrà chiesta nessuna password e l’utente verra autenticato come root.
Ricordarsi di settare una nuova password per root.

Come si può notare se si ha accesso fisico ad un PC con Linux installato è facile poter cambiare la password di root ed avere completo controllo del sistema. Per proteggere fisicamente una macchina da simili modifiche di deve quindi:
– Mettere una password su BIOS per evitare che qualcuno possa alterare l’ordine dei device di boot e impostare l’hard disk dove è installato Linux come device primario.
– Mettere una password su LILO o su GRUB, in modo da evitare che si possa eseguire un boot in init 1 con un comando tipo linux single.
– Impedire (da veri paranoici) la possibilità di aprire il case del PC evitando che possa essere spostato il jumper sulla motherboard  che resetta le impostazioni del BIOS.

Root Password Recovery da Bootloader

Qualora il bootloader lo permetta (password di protezione, etc…) è possibile eseguire un root password recovery senza dover necessariamente montare la partizione da una live distro et simila.

Si riportano le istruzioni per i bootloader grub e lilo:
GRUB
– selezionare il SO interessato, premere e;
– selezionare l’immagine del kernel (abitualmente la stringa comincia per “kernel…”) e premere
e nuovamente;
– inserire, in fondo alla stringa, la parola
single, confermare e premere b per eseguire il boot;
– il sistema effettuerà il boot come da manuale con l’eccezione di non richiedere user e password, finendo dritto in bash; è pertanto possibile digitare:
passwd root
per modificare la password di sistema;
– lanciare il comando
sync per assicurarsi il completamento delle operazioni di sincronia della cache con i/l disco/i;
– lanciare il comando
reboot per riavviare il sistema.

LILO
– una volta riavviato il sistema, al prompt digitare linux single
– non appena caricato il SO, sarà possibile digitare:
passwd root per modificare la password di sistema;
– lanciare il comando
sync per assicurarsi il completamento delle operazioni di sincronia della cache con i/l disco/i;
– lanciare il comando
reboot per riavviare il sistema.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger hanno fatto clic su Mi Piace per questo: