Gentoo Hardened
Gentoo Hardened è un progetto di Gentoo che offre molteplici servizi di sicurezza aggiuntivi applicati ad una installazione di Gentoo Linux. Anche se ognuno di questi può essere selezionato separatamente, Gentoo Hardened abilita diverse opzioni per la mitigazione del rischio nella toolchain, supporta PaX, grSecurity, SELinux, TPE ed altro ancora.
Che si tratti di un server esposto su Internet o di una workstation flessibile, quando si ha a che fare con minacce molteplici si potrebbe desiderare di rinforzare il proprio sistema oltre alla normale applicazione delle ultime patch di sicurezza. "Hardenizzare" un sistema significa applicare contromisure aggiuntive contro attacchi ed altri rischi ed è solitamente una combinazione di attività fatte sul sistema stesso
All'interno di Gentoo Hardened, abbiamo diversi progetti attivi, che contribuiscono a rinforzare ulteriormente i sistemi Gentoo attraverso:
- l'abilitazione di specifiche opzioni nella "toolchain" (compilatore, linker ...) come forzare la creazione di eseguibili indipendenti dalla posizione ("position-independent executables", o PIE), protezione dallo stack overflow (SSP - "stack smashing protection") o dal buffer overflow (compile-time buffer checks).
- l'abilitazione delle estensioni PaX nel kernel Linux, che offrono delle misure di protezione aggiuntiva come l'ALSR (address space layout randomization) e rendere non eseguibili gli spazi di memoria
- l'abilitazione delle estensioni grSecurity nel kernel Linux, incluse restrizioni addizionali per il chroot, auditing aggiuntivo, restrizione dei processi, ecc...
- l'abilitazione di SELinux nel kernel Linux, che offre un controllo accessi esteso (MAC, Mandatory Access Control) oltre i normali permessi Linux.
- l'abilitazione di una serie di tecnologie relative all' Integrità dei dati, come l'Integrity Measurement Architecture, per rendere i sistemi più resistenti al "tampering" (corruzione/manomissione dei dati)
Di conseguenza, vengono incluse le utilità di sistema necessarie all'amministrazione di queste estensioni.
Passare ad un profilo Hardened
Read relevant documentation before performing any profile changes.
Scegliere il profilo hardened, in modo che l' amministrazione dei pacchetti sia fatta in modo hardenizzato.
root #
eselect profile list
root #
eselect profile set [numero del profilo hardened]
root #
source /etc/profile
Scegliendo il profilo hardened, certe impostazioni del gestore dei pacchetti (masks, flags USE, eccetera...) diventano di default sul sistema. Questo si applica a molti pacchetti, inclusa la toolchain. La toolchain è la serie di software utilizzata per compilare i programmi, ed include: la GNU Compiler Compilation (GCC), le binutils (linker, ecc.) e la libreria C di GNU (glibc). Reinstallando la toolchain, queste impostazioni di default verranno applicate, consentendo che tutta la compilazione di pacchetti futura venga fatta in modo hardened.
root #
emerge --oneshot gcc
root #
emerge --oneshot binutils virtual/libc
I comandi sopra ricompilano GCC, che può essere utilizzato ora per compilare software hardenizzato. Assicurarsi che l'opzione hardened sia selezionata per GCC.
root #
gcc-config -l
[1] i686-pc-linux-gnu-4.5.3 * [2] i686-pc-linux-gnu-4.5.3-hardenednopie [3] i686-pc-linux-gnu-4.5.3-hardenednopiessp [4] i686-pc-linux-gnu-4.5.3-hardenednossp [5] i686-pc-linux-gnu-4.5.3-vanilla
Finally source the new profile settings:
root #
source /etc/profile
Se utilizzate il pacchetto "prelink", rimuovetelo, dato che non è compatibile con il profilo hardened:
root #
emerge --depclean prelink
Potete ora reinstallare tutti i pacchetti con la nuova toolchain hardenizzata:
root #
emerge --emptytree --verbose @world
Installate i sorgenti del kernel hardened, in modo che il kernel vi permetta di *amministrare il sistema* in modalità sicura (specialmente utilizzando PaX):
root #
emerge --ask hardened-sources
Ora configurate/compilate i sorgenti ed aggiungete il nuovo kernel al vostro boot manager (es. GRUB).
Suggerimenti pratici
Hardenizzare singoli pacchetti
Questo metodo non è supportato da Gentoo.
Modificare il profilo GCC sulla base di singoli pacchetti può essere difficoltoso. Un modo per evitare questo è configurare delle C(XX)FLAGS ad-hoc per ogni pacchetto utilizzando package.env. Create il file /etc/portage/env/nossp ed aggiungetelo a:
CFLAGS="${CFLAGS} -fno-stack-protector"
CXXFLAGS="${CXXFLAGS} -fno-stack-protector"
Per permettere la disabilitazione di PIE, creare ed aggiungere a /etc/portage/env/nopie:
CFLAGS="${CFLAGS} -no-pie"
CXXFLAGS="${CXXFLAGS} -no-pie"
LDFLAGS="${LDFLAGS} -no-pie"
Infine aggiungete il pacchetto per cui volete disabilitare PIE o SSP a /etc/portage/package.env ed il relativo /etc/portage/env/<filename>, per l'esempio seguente utilizziamo sys-libs/zlib:
sys-libs/zlib nopie
Vedere anche
Per ulteriori informazioni, potete consultare: