Gentoo Logo

Usare Xorg su Gentoo Hardened

Indice:

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.



Stampa

Aggiornato il 23 dicembre 2006

Oggetto: Come installare e utilizzare Xorg su Gentoo Hardened

Adam Mondl
Autore

Kevin Quinn
Collaboratore

Ned Ludd
Collaboratore

Christian Heim
Collaboratore

Zaid A.
Collaboratore

Ju Liu
Traduzione

Donate to support our development efforts.

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