Härdad Gentoo
Härdad Gentoo (Gentoo Hardened) är ett Gentoo-projekt som tillhandahåller ytterligare säkerhetstjänster ovanpå den välkända Gentoo Linux-installationen. Fastän varje alternativ kan väljas separat, möjliggör Gentoo Hardened för flera riskreducerande alternativ i verktygskedjan, som PaX, grSecurity, SELinux, TPE och mer.
Vare sig du kör en Internetriktad server eller en flexibel arbetsstation, när du hanterar flera säkerhetshot kommer du vilja härda ditt system ytterligare än att bara tillämpa de senaste programfixar. Härdandet av ett system betyder att du tar fler åtgärder gentemot attacker och andra risker och är ofta ett flertal aktiveteter du utför på ett system.
Inom Gentoo Hardened finns flera aktiva projekt som hjälper till att härda ett Gentoo-system genom att:
- Möjliggöra specifika alternativ i verktygskedjan (kompilator, länkare...), exempelvis att tvinga positionsoberoende körbara filer (eng: position-independent executables (PIE)), buffer-överflöde och buffertkontroller vid kompilering.
- Möjliggöra PaX-tillägg i Linux-kärnan, som erbjuder ytterligare skyddsåtgärder som slumpmässig layout av adressutrymme (eng: address space layout randomization) och icke-körbart minne.
- Möjliggöra grSecurity-tillägg i Linux-kärnan, därigenom ytterligare chroot-restriktioner, revisioner, processbegränsningar osv.
- Möjiggöra SELinux-tillägget i Linux-kärnan som erbjuder Mandatory Access Control-system som höjer standarden för Linux-tillståndsbegränsningar.
- Möjliggöra Integrity-relaterade teknologier, exempelvis Integrity Measurement Architecture för att göra system uthålliga mot manipulering.
Detta inkluderar givetvis de nödvändiga userspace-verktygen för att hantera dessa tillägg.
Växla till en Hardened-profil
Välj en härdad profil så att pakethantering görs på ett härdat vis.
root #
eselect profile list
root #
eselect profile set [den härdade profilens nummer]
root #
source /etc/profile
Genom att välja en härdad profil kan vissa inställningar för pakethantering (maskar, USE-flaggor osv.) bli standard för ditt system. Detta gäller för många paket, inklusive verktygskedjan. Verktygskedjan används för att bygga/kompilera dina program, och omfattar: GNU Compiler Collection (GCC), binutils (länkare osv.), och GNU C-biblioteket (glibc). Genom att omkompilera verktyskedjan, kommer de nya standarder att appliceras på verktyskedjan, som gör att all framtida paketkompilering görs på ett härdat sätt.
root #
emerge --oneshot gcc
root #
emerge --oneshot binutils virtual/libc
De ovanstående kommandon bygger om GCC, som nu kan användas för att kompilera härdad programvara. Se till att hardened-alternativet har valts för 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
In the example output above, the hardened GCC profile is the one without a suffix. If you want to disable PIE or SSP, choose the relevant hardenedno(pie|ssp) or both, hardenednopiessp. The vanilla profile is of course the one with hardening disabled. Finally source your new profile settings:
root #
source /etc/profile
If you use the "prelink" package, remove it, since it isn't compatible with the hardened profile:
root #
emerge --depclean prelink
Now you can reinstall all packages with your new hardened toolchain:
root #
emerge --emptytree --verbose @world
Install hardened kernel sources, so that the kernel will *manage your running system* in a hardened way (especially using PaX):
root #
emerge --ask hardened-sources
Now configure/compile the sources and add the new kernel to your boot manager (ie., GRUB).
Tips and tricks
Hardened Gentoo/Grsecurity chroot
If you want to chroot to a copied environment where the CONFIG_GRKERNSEC_CHROOT is enabled you must use the cd grub and change the root(cd) kernel(cd) initrd(cd) setting to from (cd) to (hdx,y).
Now you can install the grub environment.
Per package hardening settings
This method is not supported by Gentoo.
Changing the GCC profile to deal with specific packages can be a pain. A way to avoid this is to set per-package C(XX)FLAGS using package.env. Create the file /etc/portage/env/nossp and add to that:
/etc/portage/env/nossp
Disable SSPCFLAGS="${CFLAGS} -fno-stack-protector" CXXFLAGS="${CXXFLAGS} -fno-stack-protector"
To allow for disabling PIE, create and add to /etc/portage/env/nopie:
/etc/portage/env/nopie
Disable PIECFLAGS="${CFLAGS} -no-pie" CXXFLAGS="${CXXFLAGS} -no-pie" LDFLAGS="${LDFLAGS} -no-pie"
GCC version 4.x uses -nopie instead of -no-pie.
Finally add the package you want to disable either PIE or SSP for to /etc/portage/package.env and the relevant /etc/portage/env/<filename>, for this example sys-libs/zlib is used here:
/etc/portage/package.env
Disable PIE for sys-libs/zlibsys-libs/zlib nopie
See also
For more information, check out the following resources:
- Gentoo Hardened SELinux Project
- Project:Hardened/Grsecurity2_Quickstart
- Project:Hardened/PaX_Quickstart