Home Mappa Indice Ricerca News Archivi Link A proposito di LF
[Barra superiore]
[Barra inferiore]
[Foto dell'autore]
di Serge Lozovsky

Notizie sull'autore:

20 anni complessivi di esperienza nei sistemi informatici come programmatore/manager. 5 anni di tecnologia Internet, 9 anni di UNIX, 4 anni di Intelligenza Artificiale (conoscenza e rappresentazione dei dati).

Contenuto:

VXE, uno strumento per la sicurezza di Linux

[Illustrazione]

Sommario:

Serge Lozovsky presenta un pacchetto software da lui sviluppato per rendere più sicuri i sistemi UNIX. Il software è disponibile su licenza non free. E' possibile usarlo gratuitamente per scopi educativi non commerciali.


Un grande problema della sicurezza dei sistemi UNIX è che il super-utente può fare quello che vuole con il sistema. Ci sono programmi ("demoni") che vengono eseguiti con i privilegi del super utente, come ad esempio popd e sendmail, e sono accessibili dalla rete (Internet/Intranet). In questi programmi potrebbero esserci dei bachi, sicché un intruso potrebbe connetersi a uno di questi dalla rete e, sfruttando i bachi presenti, prendere il controllo di tutte le macchine.

VXE (Virtual eXecuting Environment, ambiente di esecuzione virtuale) protegge i server UNIX da questi intrusi, dagli attacchi dei pirati dalla rete e altro ancora. Protegge i sottosistemi software, come SMTP, POP, HTTP e ogni altro sottosistema già installato sul server. Non occorre cambiare la configurazione del software esistente - basta PROTEGGERLO.

VXE risolve i seguenti problemi: protegge il sistema e i particolari sottosistemi che operano coi privilegi di superutente e possono avere bachi. Questa è la situazione tipica che ci si presenta nella realtà.



Un ambiente di esecuzione virtuale (VXE) protegge il sistema e i sottosistemi particolari che operano con i privilegi di superutente e potrebbero avere bachi. Quando il programma opera in modalità superutente, può accedere a tutte le risorse del sistema operativo (S.O.). VXE crea un ambiente virtuale per ogni sottosistema, nel quale sono visibili e disponibili solo le risorse necessarie per le normali operazioni. Un sottosistema è costituito da un programma e da tutti i suoi sottoprocessi (lanciati tramite fork()). Ogni sottoprocesso viene eseguito nello stesso VXE del genitore. Per operare sulle risorse del sistema, il programma usa chiamate di sistema del S.O.. VXE consente di descrivere quali chiamate di sistema sono disponbili ad ogni sottosistema, e con quali parametri. Per esempio, è possibile stabilire (per le chiamate di sistema delle operazioni sui file) che alcuni file sono leggibili e alcuni eseguibili, che non sono disponibili operazioni di rete (nel caso di un server POP, vengono gestite le connessioni di rete, ma non ne vengono create di nuove) e queste restrizioni non possono essere violate neanche da un programma con i privilegi del superutente.

Queste restrizioni possono essere efficaci quanto serve. Se un intruso prende sse il controllo di uno dei sottosistemi, non potrebbe usare i metodi comuni per intercettare informazioni o alterare il sistema. Tutto quello che potrebbe fare in teoria, usando metodi sofisticati, sarebbe alterare il funzionamento del sottosistema violato, ma non del S.O. stesso o di altri sottosistemi. Per "metodi comuni" qui intendiamo quelli usati in situazioni in cui un intruso ottiene privilegi di superutente e tipicamente esegue un interprete di comandi (shell) e altre comuni utilità, come un editor di testi, un comando di copia e così via. Per esempio, un server POP non necessita di un editor di testi e di un programma di copia per fare il suo lavoro, sicché questi programmi non vengono inclusi nell'ambiente VXE creato per la protezione del POPD (demone POP).

Più esattamente, VXE protegge un sistema e i suoi sottosistemi dall'interferenze dei sottosistemi violati (che operano sotto il controllo di VXE), e come effetto collaterale fornisce protezione al sottosistema stesso (nel modo descritto prima). Per semplicità, nel testo che segue diremo che VXE protegge sottosistemi.

 

VXE description e activation

VXE description (VXED) è un piccolo programma LISP (insieme di funzioni) che usa una descrizione dichiarativa dei parametri accettabili per le varie chiamate di sistema. Questo VXED viene caricato nel kernel dove controlla i parametri delle chiamate di sistema per il sottosistema specificato. Così i VXED sono moduli dinamicamente caricabili gestiti dal piccolo interprete LISP inserito nel kernel. Nella versione attuale di VXE si tratta di vxelisp, derviati da RefLisp  (Bill Birch bbirch@ctp.com). Vxelisp ha una nuova rappresentazione interna delle bigstring e un insieme completo di funzioni per stringhe e bit. La versione per il kernel di vxelisp è rientrante, per consentire la gestione simultanea di più VXED.

Ci sono due metodi per attivare VXED. Esplicitamente e implicitamente (automaticamente). L'attivazione esplicita viene fatta usando il programma vxe. I parametri sono il percorso per il VXED, il percorso e i parametri dell'eseguibile che deve essere eseguito con le restrizioni. Per il metodo automatico, l'utilità vxed precarica tutti VXED necessari nel kernel. Ogni VXED contiene un pattern di attivazione. All'esecuzione del programma (exec), il kernel confronta il percorso dell'eseguibile con i vari pattern e in caso di riscontro attiva il corrispondente VXED. Questo metodo può essere usato per attivare protezioni all'avvio di ogni programma di una data directory (e di tutte le sottodirectory). Per esempio, per proteggere gli script CGI degli utenti, si può definire un VXED per la sottodirectory di ogni utente.

 

Il sistema di sviluppo di VXE

Ogni VXED, anche sofisticata, può essere creata manualmente, usando tutta la potenza di vxelisp. Ma VXE non costringe gli amministratori ad imparare ed usare il LISP. Si può pensare a VXE come ad un sistema ad apprendimento automatico. Il sistema di sviluppo di VXE (DS) esegue VXE in modo trace.

In tale modalità vengono stampate le descrizioni delle chiamate di sistema consentite (usate). La creazione e la modifica di un VXED vengono effettuate tramite un'interfaccia WWW. Il sistema di sviluppo supporta due tipi di VXED: il tipo "strict" e il tipo "filesystem". Il VXED di tipo "strict" descrive esplicitamente tutte le chiamate di sistema consentite. Quelle di tipo "filesystem" descrivono i permessi di lettura, scrittura ed esecuzione per un certo percorso. Le restrizioni specificato valgono per le chiamate di sistema verso il filesystem, tutte le altre chiamate di sistema rimangono consentite. Dopo che è stato creato un VXED per un certo sottosistema, esso opera in modo "soft". In questo modo tutte le violazioni al VXED vengono registrate, ma le chiamate di sistema vengono effettuate. Il sistema di sviluppo di VXE può aggiornare le VXED automaticamente, usando le informazioni registrate.

Ovviamente, le modifiche necessarie a un VXED possono essere fatte manualmente usando l'editor di VXED. Le violazioni possono essere causate dall'attività di un intruso o dalle deviazioni del comportamento del sottosistema sotto svariate circostanze. L'amministratore di VXE esamina il registro con l'aiuto del DS e decide se effettuare un aggiornamento. Se non ci sono violazioni, il VXED può essere usato in modalità produzione. In questa modalità vengono registrate le violazioni e vengono bloccate le chiamate di sistema (che falliscono). Anche in questo caso il registro può essere usato per l'individuazione degli intrusi o per migliorare i VXED.

Per ragioni di sicurezza, tutte le azioni di controllo su VXE possono essere effettuate solo dal super utente e fuori da VXE.

 

Prestazioni

VXE altera le prestazioni nei modi seguenti. Se un programma opera al di fuori di VXE, ogni chiamata di sistema richiede due istruzioni assembler in più (controllo se VXE è in uso per il processo attuale e salto in caso negativo). Per ogni chiamata di sistema exec una piccola funzione in C controlla se esiste un VXED da applicare già disponibile nel kernel. Per i programmi eseguiti sotto il controllo di VXE, qualche riga di codice C controlla se occorre verificare i parametri. Alcune chiamate di sistema possono essere marcate in VXED come non controllabili (per esempio, di regola, le operazioni di lettura e scrittura). Solo le rimanenti chiamate di sistema vengono controllate da piccolissime funzioni in LISP. Queste funzioni sono localizzate nei VXED e possono essere facilmente osservate dall'amministratore.

Supporto VXE: vxe@intes.odessa.ua
Home page di VXE: http://www.intes.odessa.ua/vxe


Pagine web mantenute dal Team degli Editori di LinuxFocus
© Serge Lozovsky
LinuxFocus 2000

Clicca qui per segnalare un errore o per mandare un commento a Linuxfocus
Informazioni sulla traduzione:
en -> -- Serge Lozovsky
en -> it Antonio Schifano

2000-02-25, generated by lfparser version 1.1