Gentoo Hardened Frequently Asked Questions Adam Mondl solar Guillaume Destuynder The PaX Team Paolo Palana Domande che frequentemente occorrono sul canale IRC #gentoo-hardened e sulla mailing list gentoo-hardened. 1.9 2006-02-18 Domande
Generali
  • Cos'è esattaemte una "toolchain"?
  • Come dovrei usare: grsecurity, RSBAC o SELinux?
  • E' possibile usare grsecurity, RSBAC, SELinux e PaX tutti contemporaneamente?
  • E' necessario passare alcuni flags a LDFLAGS/CFLAGS per abilitare la compilazione PIE/SSP?
  • Come posso disabilitare la compilazione PIE/SSP?
  • La compilazione del mio kernel fallisce con l'errore"error: structure has no member named `curr_ip'", come posso correggere ciò?
  • Ho appena scoperto il progetto hardened, devo installare tutto quello che trovo sulla pagina del progetto prima di installare Hardened Gentoo?
  • Perchè i miei programmi non vanno quando uso CFLAGS="-O3" e hardened gcc?
  • Che cosa è accaduto a bootstrap-cascade.sh?
  • Come posso passare al profilo hardened?
  • Come faccio il debug con gdb?
PaX
  • Qual'è l'homepage di PaX?
  • Quale documentazione Gentoo esiste riguardo PaX?
  • Continuo ad ottenere il messaggio: "error while loading shared libraries: cannot make segment writable for relocation: Permission denied." Che cosa significa?
  • Da quando ho iniziato ad usare PaX Java non funziona, perchè?
grsecurity
  • Qual'è l'home page di grsecurity?
  • Quale documentazione Gentoo esiste riguardo grsecurity?
  • Posso usare grsecurity con i kernel 2.6.8, 2.6.8.1, or 2.6.9?
RSBAC
  • Qual'è l'home page di RSBAC?
  • Quale documentazione Gentoo esiste riguardo RSBAC?
  • Come usare un ramdisk iniziale con un kernel abilitato per RSBAC?
SELinux
  • Dove posso trovare le FAQ relative a SELinux?
Domande Generali
Cos'è esattamente una "toolchain"?

Il termine "toolchain" si riferisce ad una combinazione di pacchetti software comunemente usati per costruire e sviluppare una particolare architettura. La toolchain a cui ci si riferisce nel canale IRC gentoo-hardened consiste di GNU Compiler Collection (GCC), binutils e della libreria GNU C (glibc).

Come doverei usare: grsecurity, RSBAC o SELinux?

La risposta a questa domanda è altamente soggettiva, così il progetto Gentoo hardened tenta semplicemente di presentare ogni tecnologia e lasciare la scelta all'utente. Questa decisione ha richiesto molte ricerche che sono state fiduciosamente e chiaramente inserite nella documentazione inerente l'hardened. Tuttavia per qualsiasi domanda specifica riguardo i modelli di sicurezza che ciascuno fornisce ci si senta liberi di interpellare gli svilupptori sul relativo canale IRC o attraverso mailing list.

E' possibile usare grsecurity, RSBAC, SELinux e PaX tutti contemporaneamente?

Si, questa combinazione è possibile poichè PaX può lavorare con grsecurity, RSBAC e SELinux. Il solo conflitto che si può verificare è che si può usare un solo sistema di controllo degli accessi.

E' necessario passare alcuni flags a LDFLAGS/CFLAGS per abilitare la compilazione PIE/SSP??

No, la toolchain attuale implementa automaticamente l'equivalente di CFLAGS="-fPIE -fstack-protector-all" LDFLAGS="-Wl,-z,now -Wl,-z,relro" attraverso uno specfile di GCC che risulta essere una soluzione più appropriata. Per vecchi utenti di hardened-gcc aggiungere USE="hardened pic" al proprio /etc/make.conf e quindi procedere all'aggiornamento con il seguente comando:

# emerge --oneshot binutils gcc virtual/libc
# emerge -e world
Gentoo si occuperà di applicare delle patch al relativo GCC per permettere che gli specfiles possano essere passati attraverso variabili di ambiente. Attualmente sono installati nel sistema Gentoo diversi tipi di specfile che permettono agli utenti che utilizzano le architetture supportate di abilitare o meno le funzionalità della toolchain in maniera semplice. Per accedere gli specs come l'utente finale si può far uso dell'utilità gcc-config.
Come posso disabilitare la compilazione PIE/SSP?

A tale scopo si può utilizzare gcc-config:

# gcc-config -l
 [1] i686-pc-linux-gnu-3.4.4 *
 [2] i686-pc-linux-gnu-3.4.4-hardenednopie
 [3] i686-pc-linux-gnu-3.4.4-hardenednopiessp
 [4] i686-pc-linux-gnu-3.4.4-hardenednossp
 [5] i686-pc-linux-gnu-3.4.4-vanilla
 
Per disabilitare la compilazione SSP passare al profilo hardenednossp:
# gcc-config i686-pc-linux-gnu-3.4.4-hardenednossp

Alternativamente si può raggiungere lo stesso risultato modificando CFLAGS:

Per disabilitare la compilazione SSP, di default quando si usa l'hardened toolchain, aggiungere -fno-stack-protector-all -fno-stack-protector alla fine delle proprie CFLAGS.

Se si vuole disabilitare la compilazione di default PIE aggiungere -nopie alla fine delle proprie CFLAGS.

Il flag -fno-pic non dovrebbe essere usato perchè abilita il codice non-PIC. Invece, usando -nopie, si ritorna al comportamento del vanilla GCC che dovrebbe essere il risultato cercato. Se si è interessati ad usare per-package CFLAGS con Portage allora è interessante leggere a proposito di script solar sviluppato per lavorare con questo: http://article.gmane.org/gmane.linux.gentoo.hardened/1204
La compilazione del mio kernel fallisce con l'errore"error: structure has no member named `curr_ip'", come posso correggere ciò?

Per utilizzare PaX su sorgenti hardened, è necessario abilitare grsecurity nella configurazione del proprio kernel. Questo potrebbe essere corretto in future versioni del kernel.

Ho appena scoperto il progetto hardened, devo installare tutto quello che trovo sulla pagina del progetto prima di installare Hardened Gentoo?

No, il progetto Gentoo Hardened è una collezione di sottoprogetti che hanno tutti come obbiettivo la sicurezza. Mentre molti di questi progetti posso convivere l'uno al fianco dell'altro, alcuni sono in conflitto tra loro, come molte delle implementazioni delle ACL messe a disposizione da Hardened Gentoo.

Perchè i miei programmi non vanno quando uso CFLAGS="-O3" e hardened gcc?

E' noto che l'utilizzo del flag di ottimizzazione -O3 in molte situzioni crea problemi al stack-smashing protector (SSP). Questo flag di ottimizzazione non è ufficialmente supportato e quindi ne viene scoraggiato l'uso dall'hardened team. Compilazioni dove l'utente fa uso di CFLAGS="-O3" vengono chiuse come INVALID/CANTFIX e/o ignorate.

Che cosa è accaduto a bootstrap-cascade.sh?

Recentemente i vecchi bootstrap.sh e bootstrap-2.6.sh sono stati deprecati. Al loro posto bootstrap-cascade.sh è stato rinominato bootstrap.sh.

Come posso passare al profilo hardened?
# cd /etc
# rm make.profile
# ln -s ../usr/portage/profiles/hardened/x86 make.profile (Per i kernel 2.4)
# ln -s ../usr/portage/profiles/hardened/x86/2.6 make.profile (Per i kernel 2.6)

Dopo aver impostato il profilo bisogna ricompilare il proprio sistema usando l'hardened toolchain in modo da avere una base consistente:

# emerge --oneshot binutils gcc virtual/libc
# emerge -e world
Come faccio il debug con gdb?

La prima cosa da sottolineare è che GDB non può risolvere i simboli in PIEs; non riesce a capire che gli indirizzi sono relativi in PIEs, non assoluti. Questo si manifesta quando, per esempio, si tenta di fare un backtrace e viene visualizzato un flusso di linee di '??' dove dovrebbero essere i simboli.

Per aggirare questo, eseguire la fase finale di linkaggio con -nopie tutte le precedenti compilazioni possono ancora essere fatte normalmente con -fPIE (i.e. di default con il compilatore hardened) In maniera tale che il proprio eseguibile sia il più vicino possibile al caso reale, ma la fase finale di linkaggio da origine ad un eseguibile normale. E' possibile aggiungere -nopie alle LDFLAGS se si intende compilare utilizzando emerge.

Un'altra maniera per fare ciò consiste nel fare l'emerge di =sys-devel/gdb-6.3-r5, che contiene una patch particolare che rende possibile il debug di eseguibili lincati con -pie

Il secondo punto è che PaX potrebbe impedire a GDB di creare breakpoints, a seconda della configurazione del kernel. Questo include anche il breakpoint nel main di cui si necessita come punto di partenza. Per impedire a PaX di comportarsi in questo modo gli eseguibili da debuggare necessitano dei flag m e x. IL flag x è settato di default, così è sufficiente fare:

# /sbin/paxctl -m foo

A questo punto si dovrebbe essere pronti per partire! Avviate gdb come sempre e buona fortuna.

Domande su PaX
Qual'è l'homepage di PaX?

L'home page è reperibile all'indirizzo http://pax.grsecurity.net.

Quale documentazione Gentoo esiste riguardo PaX?

Attualmente l'unica documentazione Gentoo riguardante PaX è la PaX quickstart guide reperibile presso l'indirizzo http://www.gentoo.org/proj/en/hardened/pax-quickstart.xml.

Continuo ad ottenere il messaggio: "error while loading shared libraries: cannot make segment writable for relocation: Permission denied." Che cosa significa?

Questo errore si manifesta quando viene abilitato CONFIG_PAX_NOELFRELOCS nel seguente modo:

Non-executable page ->

 [*]   Disallow ELF text relocations

Se si sta utilizzando la toolchain hardened la compilazione dei propri programmi genererà librerie PIC ELF che non conterranno text relocations. Tuttavia alcune librerie potrebbero ancora contenere text relocations per diverse ragioni (spesso una è la presenza di codice assembly gestito in maniera non corretta). Questo può rappresentare un punto di vulnerabilità in quanto un attaccante potrebbe sfruttare librerie non-PIC per eseguire il proprio shellcode. Librerie non PIC hanno anche un impatto negativo dal punto di vista dell'uso della memoria visto che annullano la condivisione di codice, obiettivo delle librerie condivise.

Per eliminare questo errore e consentire ad i propri programmi di funzionare è necessario sacrificare la sicurezza e consentire la generazione di codice a runtime per quel programma. La caratteristica di PaX che consente di ottenere ciò è chiamata MPROTECT. Si può disabilitare MPROTECT su qualsiasi eseguibile che utilizzi librerie non-PIC.

Per testare il proprio sistema per textrels si può utilizzare il programma scanelf reperibile in app-misc/pax-utils. Per informazioni su come usare il pacchetto pax-utils consultare la guida Gentoo a PaX Utilities.

Le versioni più recenti di sys-apps/portage(>=2.0.53) operano controlli riguardo alla text relocation e stampano un messaggio di attenzione oppure interrompono il processo di merge a seconda delle FEATURES impostate nel proprio /etc/make.conf.
Da quando ho iniziato ad usare PaX Java non funziona, perchè?

Come parte di questo progetto la Java virtual machine genera una quantità considerevole di codice a runtime, cosa che non rende PaX felice. Ci sono due maniere per correggere questo problema:

# emerge chpax
# /etc/init.d/chpax start

O se già si ha chpax installato si può dare:

# chpax -pemrxs /opt/*-jdk-*/{jre,}/bin/*

Entrambe queste opzioni modificano leggermente l' ELF header al fine di impostare correttamente i falgs di PAX sui binari.

Se si sta utilizzando PaX in conbinazione con ulteriori strumenti per la sicurezza, come ad esempio RSBAC, grsecurity, o SELinux è necessario gestire PaX attraverso l'utilizzo dei kernel hooks previsti per ogni implementazione.

Con RSBAC si possono etichettare tutti i file Java utilizzando il seguente comando.

# for i in $(ls /opt/*(jdk|sdk)*/{jre,}/bin/*);do attr_set_file_dir FILE $i pax_flags pmerxs;done
Domande su grsecurity
Qual'è l'home page di grsecurity?

L'homepage di grsecurity è reperibile all'indirizzo http://www.grsecurity.net.

Quale documentazione Gentoo esiste riguardo grsecurity?

La documentazione più aggiornata su grsecurity è la Grsecurity2 quickstart guide, reperibile all'indirizzo http://www.gentoo.org/proj/en/hardened/grsecurity.xml.

Posso usare grsecurity con i kernel 2.6.8, 2.6.8.1, or 2.6.9?

Sono stati apportati dei cambiamenti significativi nel kernel 2.6.8 che hanno compromesso Pax, per i kernel 2.6.8.1 e 2.6.9 non sono diponibili patch ne per per PaX ne per grsecurity. Anche se per il kernel 2.6.10 è disponibile una patch sperimentale è bene prendere in considerazione la posizione ufficiale del team PaX nei confronti del kernel 2.6 prima di utilizzarlo: http://forums.grsecurity.net./viewtopic.php?t=968.

Domande su RSBAC
Qual'è l'home page di RSBAC?

L'homepage di RSBAC è reperibile all'indirizzo http://www.rsbac.org.

Quale documentazione Gentoo esiste riguardo RSBAC?

Tutta la documentazione Gentoo inerente RSBAC è reperebile presso la pagina del sottoprogetto RSBAC all'indirizzo http://www.gentoo.org/proj/en/hardened/rsbac/index.xml

Inoltre documentazione non-Gentoo su RSBAC può essere trovata nell'handbook per RSBAC all'indirizzo http://www.rsbac.org/documentation/rsbac_handbook

Come usare un ramdisk iniziale con un kernel abilitato per RSBAC?

Per usare un ramdisk iniziale con un kernel abilitato per RSBAC è necessario abilitare una particolare opzione, altrimenti RSBAC tratterà l'initrd come il root device:

    [*] Delayed init for initial ramdisk
Domande su SELinux
Dove posso trovare le FAQ relative a SELinux?

FAQ specifiche per SELinux possono essere reperite all'indirizzo http://www.gentoo.org/proj/en/hardened/selinux/selinux-handbook.xml?part=3&chap=3.