Usare Xorg su Gentoo Hardened
1.
Introduzione
Che cosa c'è di diverso nell'usare Xorg su Gentoo Hardened?
PaX, una patch per il kernel Linux, è la parte centrale del progetto Gentoo
Hardened. PaX fornisce varie funzionalità come ad esempio ASLR e la memoria NX.
Ulteriori informazioni sono disponibili su
http://www.gentoo.org/proj/en/hardened/docs/pax-howto.xml. Per lo
scopo di questo documento, si assumerà che il lettore abbia una conoscenza
generale di come funzioni PaX e del concetto di Position Independent Executables
(PIE).
La funzionalità specifica di PaX di interesse in questo articolo è MPROTECT, che
protegge contro il codice eseguibile posto nello spazio di indirizzamento di un
programma. Una delle principali caratteristiche di Gentoo Hardened è la capacità
di eseguire PaX in modo efficace grazie alla base ET_DYN/PIE. L'obiettivo finale
per Xorg è avere il binario stesso compilato come ET_DYN/PIE per rimuovere da
esso le rilocazioni di testo e rendere casuale la base di indirizzamento senza
il calo di prestazioni causato da EX_EXEC.
A questo punto, compilare Xorg con codice PIC sembra una scelta ovvia e logica.
Gentoo Hardened offre una versione di gcc hardened per questo scopo, che
permette una compilazione PIE/SSP trasparente. Questo è il punto in cui
cominciano i problemi con Xorg. Attualmente Xorg usa elfloader per gestire il
caricamento dei moduli necessari, e tuttavia, elfloader non è in grado di
risolvere vari tipi di simboli rilocabili che vengono sempre generati dal codice
PIC. Ciò che è più importante, elfloader non supporta nè i simboli di tipo
Global Offset Table (GOT) nè quelli Procedure Linkage Table (PLT), entrambi
essenziali per le librerie condivise.
Allora che cosa può funzionare al posto di elfloader? Fortunatamente, esiste già
installato sul proprio sistema un loader dinamico completamente funzionante, ben
testato e maturo: ld-linux.so, il quale è fornito da glibc. L'idea ovvia che può
venire in mente ora è che teoricamente ci potrebbe essere un'interfaccia
programmata al loader glibc, e il loader di X potrebbe essere modificato per
poter usare quello invece di modificare a mano il proprio loader. Questa
interfaccia esiste già e si chiama dlopen(3), ed è esattamente ciò che usa
dlloader.
Nota:
A partire da Xorg 7.0, dlloader è il loader predefinito dei moduli per X.
|
2.
Opzioni di configurazione del kernel
CONFIG_PAX_KERNEXEC
L'opzione 'CONFIG_PAX_KERNEXEC' è l'equivalente a livello kernel di PAGEEXEC e
MPROTECT. Attivando questa opzione sarà reso più difficile inserire ed eseguire
codice esterno nella stessa memoria del kernel. Questa opzione può anche causare
strani comportamenti della vostra installazione di Xorg hardened (per esempio il
puntatore del mouse che si blocca nella parte sinistra dello schermo). Pertanto
si suggerisce di disabilitare questa opzione deselezionandola nella propria
configurazione.
CONFIG_GRKERNSEC_IO
Attivare questa opzione porterà tutte le chiamate ioperm(2) e iopl(2) a
restituire un errore. ioperm(2) e iopl(2) potrebbero essere utilizzate per
modificare il kernel in uso. Se si desidera eseguire un server Xorg sopra ad un
kernel hardened (la maggior parte delle volte GRsecurity), sarà necessario
disabilitare questa opzione di configurazione, affinchè il server X funzioni
completamente.
3.
Installazione
Opzioni attuali di installazione
A partire da Xorg 7.0 in avanti, si utilizza in modo predefinito dlloader al
posto di elfloader, e quindi non è necessario fare nulla di speciale per poter
compilare e far funzionare Xorg su un profilo hardened.
4.
Configurazione
/etc/X11/xorg.conf
Si può modificare il proprio file di configurazione di Xorg usando la guida
disponibile su http://www.gentoo.org/doc/it/xorg-config.xml
5.
Problemi noti
Esperienze con dlloader
Gentoo Hardened sceglie come strategia standard di link di risolvere tutti i
simboli in fase di caricamento, e sottolinea questa scelta su tutte le librerie
condivise quando queste vengono compilate. Normalmente il loader usa una
risoluzione "pigra" se richiesto, dove i simboli sono risolti se e quando sono
utilizzati. Sfortunatamente alcuni moduli di Xorg hanno dipendenze tra di loro e
altri problemi, il che implica che non si possano caricare a meno di abilitare
la risoluzione "pigra" dei simboli. Per risolvere in modo temporaneo questo
problema, attualmente Gentoo compila i moduli di Xorg e lo stesso server con la
flag -nonow di gcc. Questo risolve gli errori di tipo "dlopen: undefined symbol"
in modo che i metodi precedenti di trovare manualmente e caricare i moduli non
siano più necessari.
Importante:
Si prega di segnalare a bugs.gentoo.org tutti i problemi allegando i log e i
file di configurazione completi.
|
Driver Binari
I driver binari non sono attualmente supportati dal profilo hardened e si
consiglia invece di utilizzare i driver opensource.
Le flag di PaX
Le flag di PaX -P (PAGEEXEC), -S (SEGMEXEC), -M (MPROTECT) come -R (RANDMMAP)
funzionano ora con Xorg.
|