Gentoo Logo

Guida rapida per PaX su Gentoo Hardened

Indice:

1.  Che cos'è Gentoo Hardened?

Gentoo Hardened è un progetto il cui scopo è rendere più sicuro un sistema Gentoo. Sono supportate varie soluzioni differenti e presenta una buona dose di flessibilità per personalizzare la propria installazione. Il cuore di una normale installazione di Gentoo Hardened è PaX.

2.  Che cos'è PaX?

PaX è una patch per il kernel Linux che aumenta la sicurezza in due modi.

Il primo, ASKR (Address Space Layout Randomization), consente di rendere casuale lo schema di indirizzamento di tutti i dati caricati nella memoria. Quando una applicazione è compilata come PIE (Position Independent Executable), PaX è in grado inoltre di rendere casuale anche gli indirizzi della base dell'applicazione.

La seconda protezione fornita da PaX è la memoria non eseguibile. Questo previene una forma di attacco piuttosto comune in cui un attaccante inserisce codice eseguibile nella memoria. Si possono trovare altre informazioni su PaX in questa guida, ma la homepage del progetto è http://pax.grsecurity.net.

3.  Introduzione a PIE e a SSP

Come si è accennato in precedenza, il complemento di PaX è PIE. Questa tecnica per compilare applicazioni salva le informazione necessarie a spostare parti dell'eseguibile nella memoria, da cui il nome Position Independent.

SSP (Stack Smashing Protector) è la seconda tecnologia complementare che è introdotta in fase di compilazione dell'eseguibile. SSP fu originariamente introdotto dalla IBM sotto il nome ProPolice. Esso modifica il compilatore C per inserire codice di inizializzazione nelle funzioni che creano un buffer nella memoria.

Nota: Nelle nuove versioni di SSP, è possibile applicare SSP a tutte le funzioni aggiungendo una protezione alle funzioni i cui buffer normalmente avrebbero una dimensione inferiore al limite imposto da SSP. Questo si può abilitare attraverso la CFLAG -fstack-protector-all.

In fase di esecuzione, quando un buffer viene creato, SSP aggiunge un valore casuale segreto, il canary, alla fine del buffer. Quando la funzione effettua il return, SSP si accerta che il canary sia ancora intatto. Se un attaccante volesse attuare un buffer overflow, sovrascriverebbe questo valore e farebbe scattare lo stack smashing handler. Attualmente questo uccide il processo.

Ulteriori informazioni su SSP.

4.  Compilare un kernel con PaX abilitato

Diversi sorgenti dei kernel di Gentoo sono già modificati con PaX.

Per i sistemi 2.4/2.6, i kernel consigliati sono gli hardened-sources.

Si deve scegliere uno dei sorgenti consigliati oppure applicare la patch corretta da http://pax.grsecurity.net al proprio albero e configurarlo come si farebbe normalmente per il proprio sistema.

In Security Options -> PaX, attivare le seguenti opzioni.

Codice 4.1: Configurazione Kernel

[*] Enable various PaX features

PaX Control ->

 [ ] Support soft mode
 [*] Use legacy ELF header marking
 [*] Use ELF program header marking
     MAC system integration (none)  --->

Non-executable page ->

 [*] Enforce non-executable pages
 [*]   Paging based non-executable pages
 [*]   Segmentation based non-executable pages
 [*] Emulate trampolines
 [*] Restrict mprotect()
 [ ]   Disallow ELF text relocations

Address Space Layout Randomization ->

 [*] Address Space Layout Randomization
 [*]   Randomize kernel stack base
 [*]   Randomize user stack base
 [*]   Randomize mmap() base
 [*]     Randomize ET_EXEC base

Si deve compilare questo kernel come si farebbe normalmente e installarlo in /boot.

5.  Compilare un ambiente utente con PIE/SSP abilitato

Gentoo Hardened supporta la compilazione PIE/SSP trasparente tramite lo specfile di GCC. Questo implica che ogni utente che stia aggiornando una installazione Hardened precedente debba rimuovere le LDFLAGS e le CFLAGS utilizzate per attivare PIE/SSP. Inoltre, hardened-gcc è ora deprecato e si dovrebbe rimuovere (la versione 5.0 è un pacchetto dummy). Per ottenere la versione aggiornata di GCC, è necessario aggiungere USE="hardened pic" a /etc/make.conf se non si sta utilizzando il profilo hardened.

Per mantenere una toolchain corretta, prima è necessario un emerge binutils gcc virtual/libc. In seguito, occorre ricompilare l'intero sistema con emerge -e world. Tutti i pacchetti futuri saranno compilati con PIE/SSP.

Avvertenza: È noto che sia PIE che SSP possano provocare incompatibilità con qualche pacchetto. Se si incontra un pacchetto la cui compilazione fallisce, si prega di segnalare a http://bugs.gentoo.org/ un bug report dettagliato che includa un log della compilazione fallita e l'output di emerge info.

Probabilmente è utile installare pax-utils. Spesso se un ELF presenta spostamenti dell'eseguibile nel segmento di testo, questi possono causare problemi. scanelf -BRylptq

6.  Quando le cose non funzionano correttamente (Controllo di PaX)

Alcune applicazioni legittime proveranno a generare in fase di esecuzione codice che viene eseguito al di fuori della memoria. Naturalmente, PaX non lo consente e terminerà immediatamente l'applicazione.

Nota: Le applicazioni di questo tipo più comuni sono XFree/Xorg, mplayer e strumenti multimediali che si basano sulle xine-lib. La soluzione più semplice a questi problemi consiste nel disabilitare le protezioni PaX.

Fortunatamente esiste una utilità per abilitare le protezioni a seconda dell'applicazione, paxctl. Come per ogni altro pacchetto Gentoo, si può installare paxctl con il comando emerge paxctl. Le informazioni sull'utilizzo di paxctl si possono vedere con paxctl -h.

Nota: Se si dispone di una vecchia versione di binutils, è necessario usare chpax, che modifica le configurazioni precedenti di PaX. Si può usare chpax quasi allo stesso modo di paxctl. Questo richiede che nel proprio kernel sia built-in il supporto legacy marking. Versioni recenti di paxctl rendono chpax obsoleto.

Codice 6.1: paxctl -h

usage: paxctl <options> <files>

options:
        -p: disable PAGEEXEC            -P: enable PAGEEXEC
        -e: disable EMUTRMAP            -E: enable EMUTRMAP
        -m: disable MPROTECT            -M: enable MPROTECT
        -r: disable RANDMMAP            -R: enable RANDMMAP
        -x: disable RANDEXEC            -X: enable RANDEXEC
        -s: disable SEGMEXEC            -S: enable SEGMEXEC

        -v: view flags                  -z: restore default flags
        -q: suppress error messages     -Q: report flags in short format flags

La prima opzione che si nota è -v, che può visualizzare le flag impostate su un binario specifico.

Codice 6.2: paxctl -v

shell user # paxctl -v /usr/bin/Xorg
PaX control v0.2
Copyright 2004 PaX Team <pageexec@freemail.hu>

- PaX flags: -p-sM--x-eR- [/usr/bin/Xorg]
        PAGEEXEC is disabled
        SEGMEXEC is disabled
        MPROTECT is enabled
        RANDEXEC is disabled
        EMUTRAMP is disabled
        RANDMMAP is enabled

Questo mostra un binario XFree con tutte le protezioni disabilitate.

Per impostare le flag su un binario, la flag -z è utile in quanto riporta le flag alla configurazione iniziale.

Per disabilitare le protezioni su Xorg, si deve eseguire il comando paxctl -zpeMRxs /usr/bin/Xorg.

Si può giocare ad abilitare e disabilitare le protezioni per vedere le richieste minime necessarie per far funzionare il sistema. Spesso si scoprirà che servirà la combinazione -m -sp.



Stampa

Aggiornato il 11 settembre 2007

Oggetto: Una guida veloce a PaX e a Gentoo Hardened.

Brandon Hale
Autore

Blackace
Redazione

solar
Redazione

Ju Liu
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.