[successivo] [precedente] [inizio] [fine] [indice generale] [licenze] [indice analitico] [tomo] [parte]


Capitolo 239.   SATAN o SANTA

SATAN (1) (Security Administration Tool for Analyzing Networks, ovvero SANTA, per chi lo preferisce), è un applicativo in grado di scandagliare uno o più elaboratori connessi in rete allo scopo di verificarne le debolezze. Per sua natura, si tratta di uno strumento di aggressione, ma il suo scopo è quello di aiutare gli amministratori a eliminare gli errori comuni di configurazione e a scoprire difetti conosciuti di programmi determinati.

In qualità di strumento di aggressione, SATAN non può essere usato contro sistemi al di fuori della propria amministrazione o per i quali non si è ottenuta l'autorizzazione a farlo. L'utilizzo di SATAN produce normalmente delle tracce nel registro del sistema del nodo analizzato, pertanto queste azioni possono essere considerate un'attività ostile e scatenare la reazione degli amministratori rispettivi.

A parte queste considerazioni, il difetto maggiore di SATAN è quello di essere un lavoro piuttosto vecchio e non più aggiornato sulle nuove tecniche di attacco per le quali si vorrebbe poter verificare la solidità dei propri sistemi. Quindi, SATAN va bene come verifica di massima, cosa che comunque non è trascurabile.

SATAN è un pacchetto applicativo composto da una serie di eseguibili binari, ognuno specifico per un tipo di verifica, una serie di programmi Perl e una serie di moduli HTML. In teoria si potrebbe usare SATAN esclusivamente attraverso un programma per la navigazione, ma per ottenere questo si va incontro a una serie di complicazioni che forse non è il caso di affrontare, per il semplice fatto che non ne vale la pena e il risultato pratico non cambia. In queste sezioni verrà mostrato come utilizzare SATAN specificando quanto serve per avviare la scansione attraverso la riga di comando, e come analizzare il risultato ottenuto attraverso un navigatore.

239.1   Preparazione

SATAN non viene distribuito in forma già compilata. Si tratta di un pacchetto rivolto a persone esperte, per cui, reperire SATAN in forma già compilata e pronta da installare, è solo un sintomo sospetto di una possibile manomissione.

La versione originale di SATAN potrebbe offrire delle difficoltà impreviste alla compilazione nei sistemi GNU/Linux. A questo proposito esistono delle versioni accompagnate da file di differenze appositi (patch), che risolvono i problemi. A titolo di esempio si suppone di avere ritrovato il pacchetto satan-1.1.1.linux-3.src.rpm.

SATAN è un pacchetto particolare e la sua destinazione predefinita nel file system è al di fuori delle collocazioni normali. Dovendo essere uno strumento esclusivamente nelle mani dell'amministratore, la sua collocazione più conveniente dovrebbe essere /root/satan/. La ricompilazione del pacchetto potrebbe non giungere alla collocazione definitiva dei file, lasciando l'amministratore libero di scegliere.

cd /tmp

rpm --recompile /usr/src/redhat/SRPMS/satan-1.1.1.linux-3.src.rpm

Al termine della compilazione, SATAN potrebbe essere stato collocato nella sua destinazione finale predefinita, oppure in una directory transitoria, a partire da quella corrente. Nel caso particolare del pacchetto indicato come esempio, SATAN si trova collocato sotto ./satantmp/root/satan/. Il tutto viene spostato nella directory /root/.

mv ./satantmp/root/satan /root

239.1.1   Navigatore

Il programma satan che è scritto in Perl, se viene utilizzato senza argomenti avvia un navigatore; precisamente avvia quanto determinato in fase di configurazione prima della compilazione dei sorgenti. Se è stato installato Netscape, sarà questo il navigatore predefinito, ma Netscape può creare qualche problema, a causa delle particolarità dell'organizzazione di SATAN.

Lynx sarebbe più che sufficiente per il lavoro che si vuole fare con SATAN; a tale proposito, conviene modificare il file /root/satan/config/paths.pl.

$MOSAIC="/usr/bin/netscape";

La riga mostrata va modificata come nel modo seguente:

$MOSAIC="/usr/bin/lynx";

239.2   Perl

SATAN dipende dall'interprete Perl, che quindi deve essere installato. Se per qualche motivo non si riesce ad avviare i programmi Perl, conviene controllare l'intestazione ed eventualmente provvedere a rendere disponibili i collegamenti necessari. In generale, questo problema non dovrebbe esistere, dal momento che in fase di compilazione dei sorgenti vengono modificate queste intestazioni in modo da puntare all'interprete Perl installato effettivamente.

Un altro problema che può essere generato da questi programmi Perl è la configurazione delle variabili per la localizzazione: LANG e la serie LC_*. Se la loro configurazione non è corretta in base all'impostazione del proprio sistema, Perl mostra una segnalazione di errore per ogni programma avviato, attraverso lo standard error.

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LC_ALL = "mia_locale",
        LANG = "it_IT.ISO-8859-1"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

Nell'esempio si mostra che Perl ha scoperto una definizione impropria della variabile LC_ALL, dal momento che non esiste il tipo di localizzazione mia_locale.

Per risolvere il problema, se non si trova la definizione giusta per la localizzazione, conviene eliminare la configurazione del variabili di localizzazione, oppure impostare LC_ALL al valore C.

export LC_ALL=C

239.3   Configurazione

La configurazione di SATAN è contenuta in alcuni file collocati nella directory satan/config/.

Tra tutti questi file, merita attenzione satan/config/satan.cf. Dalla sua corretta configurazione dipende il buon funzionamento di SATAN. Si tratta di un pezzo di file Perl, all'interno del quale si annotano una serie di assegnamenti a variabili di vario tipo (scalari, array, hash), secondo le regole di Perl. Di seguito vengono indicate alcune direttive più importanti.

# Where do we keep the data? This is just a default.
$satan_data = "satan-data";

La variabile $satan_data permette di definire il nome della directory all'interno della quale inserire i file contenenti il rapporto delle scansioni fatte da SATAN. Questa directory discenderà da satan/results/ e solitamente, come mostra l'esempio, si tratta di satan/results/satan-data/.

# Default attack level (0=light, 1=normal, 2=heavy).
$attack_level = 2;

Il livello dell'attacco, definito attraverso la variabile $attack_level, permette di specificare tre valori, da zero a due. L'attacco più pesante è rappresentato dal numero due.

# status file; keeps track of what SATAN is doing.
$status_file = "status_file";

SATAN accumula la registrazione sommaria delle operazioni compiute all'interno di un file. Generalmente si tratta di satan/status_file, come mostra l'esempio in cui si definisce la variabile omonima.

# How far out from the original target do we attack? Zero means that we only
# look at the hosts or network that you specify. One means look at neighboring
# hosts, too. Anything over two is asking for problems, unless you are on the
# inside of a firewall.
$max_proximity_level = 1;

La variabile $max_proximity_level permette di definire il cosiddetto livello di prossimità, cioè quali nodi scandire. In pratica, zero significa limitare la scansione all'unico nodo indicato come punto di inizio, che rappresenta la scelta migliore fino a quando non si conosce l'uso di SATAN; uno indica a SATAN di provare tutti i nodi vicini. Usando un valore superiore a due, si inizia in pratica una scansione su tutto ciò che è raggiungibile attraverso la rete (cosa da evitare).

# Attack level drops by this much each proximity level change
$proximity_descent = 1;

Per evitare la proliferazione degli attacchi, si può stabilire la riduzione del livello dell'attacco, ogni volta che si passa a uno strato più esterno di nodi, cioè ogni volta che si attraversa un livello di prossimità.

# when we go below zero attack, do we stop (0) or go on (1)?
$sub_zero_proximity = 0;

Attraverso la variabile $sub_zero_proximity è possibile dire a SATAN cosa fare quando il livello di attacco è arrivato sotto il numero zero. Assegnando zero si intende concludere la scansione; assegnando uno si intende proseguire fino all'esaurimento degli strati di prossimità.

# a question; do we attack subnets when we nuke a target?
# 0 = no; 1 = primary target subnet
$attack_proximate_subnets = 0;

È possibile dire a SATAN di attaccare l'intera sottorete di un nodo individuato. Generalmente, non si utilizza questa possibilità, a meno che si stia tentando di individuare un possibile elaboratore collocato nella propria rete locale senza permesso. Assegnando il valore uno alla variabile $attack_proximate_subnets si ottiene l'attacco alla sottorete.

# Does SATAN run on an untrusted host? (0=no; 1=yes, this host may appear
# in the rhosts, hosts.equiv or NFS export files of hosts that are being
# probed).
#
$untrusted_host = 1;

Attraverso questa variabile, è possibile richiedere a SATAN una verifica della «fiducia» accordata al sistema locale presso quelli che vengono scandagliati. In pratica, se si assegna il valore uno alla variabile $untrusted_host, SATAN tenta di accedere attraverso rsh presso i nodi da verificare, provando anche a eseguire il montaggio se questi offrono l'esportazione NFS.

# If $only_attack_these is non-null, *only* hit sites if they are of this
# type.  You can specify a domain (podunk.edu) or network number
# (192.9.9). You can specify a list of shell-like patterns with domains
# or networks, separated by whitespace or commas.
$only_attack_these = "brot.dg, 192.168";

Per evitare di sconfinare oltre la propria sottorete o il proprio dominio, è possibile utilizzare la variabile $only_attack_these, a cui assegnare una stringa contenente un elenco di domini e di indirizzi IP parziali, come si vede nell'esempio.

# Stay away from anyone that matches these patterns.
#
$dont_attack_these = "gov, mil";

Nello stesso modo, è possibile evitare esplicitamente domini e indirizzi IP, attraverso l'uso della variabile $dont_attack_these. Nell'esempio si vogliono evitare i domini gov e mil.

# Set the following to nonzero if DNS (internet name service) is unavailable.
#
$dont_use_nslookup = 0;

Per SATAN è importante che il servizio DNS sia disponibile. Se non è così, si deve assegnare il valore uno alla variabile $dont_use_nslookup.

# Should SATAN ping hosts to see if they are alive?
#
$dont_use_ping = 0;

SATAN utilizza ping per verificare la presenza dei nodi. Nel caso si volesse evitare il suo utilizzo, si può assegnare il valore uno alla variabile $dont_use_ping.

Il file di configurazione termina con la riga seguente. Si tratta di qualcosa che riguarda Perl, e non deve essere cambiato.

1;

239.4   # satan

satan [opzioni] [obiettivo_primario]

satan è il programma Perl che si utilizza per la scansione dei nodi da verificare e anche per avviare l'interfaccia HTML, attraverso un navigatore come definito attraverso la variabile $MOSAIC nel file satan/config/paths.pl.

Se satan viene avviato con l'indicazione di un nodo da controllare (attaccare), inizia l'operazione in base alla configurazione contenuta nel file satan/config/satan.cf, con le varianti apportate attraverso le opzioni della riga di comando. Ciò che si ottiene alla fine dell'elaborazione è l'aggiornamento dei file contenuti a partire dalla directory satan/results/. Per la lettura dei risultati, si utilizza normalmente il sistema HTML, avviato attraverso satan senza argomenti.

Per utilizzare satan, non occorre sistemare la variabile di ambiente PATH. Tuttavia, è necessario che la directory corrente corrisponda alla posizione iniziale del pacchetto. Per esempio, se il tutto si trova a partire da /root/satan/, occorrerà che questa sia la directory corrente prima dell'avvio del programma.

Alcune opzioni
-a {0|1|2}

Permette di ridefinire il livello di attacco: zero è il minimo, due è il massimo.

-l {0|1|2}

Definisce il livello di prossimità: zero rappresenta solo il nodo di partenza; uno i nodi prossimi. Non è conveniente usare un valore superiore a due, perché questo rappresenta implicitamente qualunque nodo raggiungibile.

-s

Allargamento alla sottorete: con questa opzione, ogni volta che si individua un nodo si allarga la ricerca anche a tutta la sottorete (l'ultimo ottetto dell'indirizzo IP).

-v

Visualizza le azioni compiute da satan durante la sua scansione.

Esempi

./satan roggen.brot.dg

Inizia la verifica del nodo roggen.brot.dg in base alla configurazione stabilita nel file satan/config/satan.cf.

./satan -s roggen.brot.dg

Come nell'esempio precedente, espandendo la scansione a tutta la sottorete a cui appartiene il nodo indicato.

./satan

Avvia il navigatore con l'interfaccia HTML.

239.5   Verifica del risultato

Il risultato dell'elaborazione (degli attacchi) di SATAN viene memorizzato all'interno di file collocati a partire dalla directory satan/results/. Si tratta di file di testo che potrebbero essere interpretati così come sono, con qualche piccola difficoltà.

In alternativa, si può usare convenientemente un navigatore, avviato tramite l'eseguibile satan. La figura 239.1 mostra il menù principale che si ottiene all'inizio.

                          SATAN Control Panel
                                       
          (Security Administrator Tool for Analyzing Networks)
   
   * SATAN Data Management
   * SATAN Target selection
   * SATAN Reporting & Data Analysis
   * SATAN Configuration Management
   * SATAN Documentation
   * SATAN Troubleshooting
   
   * Getting the Latest version of SATAN
   * Couldn't you call it something other than "SATAN"?
   * 'Bout the SATAN image
   * 'Bout the authors

Figura 239.1. Il menù principale che si ottiene quando l'eseguibile satan viene avviato in modo da utilizzare il navigatore.

Dal menù principale, si seleziona normalmente il riferimento Reporting & Data Analysis, per visualizzare il rapporto sulla scansione eseguita. Si ottiene un altro menù, con il quale selezionare il tipo di informazione desiderata.

                     SATAN Reporting and Analysis

   Vulnerabilities 
     * By Approximate Danger Level 
     * By Type of Vulnerability 
     * By Vulnerability Count 
       
   Host Information 
     * By Class of Service
     * By System Type
     * By Internet Domain
     * By Subnet
     * By Host Name
       
   Trust
     * Trusted Hosts
     * Trusting Hosts

Figura 239.2. Il menù che permette di accedere alle informazioni accumulate.

A titolo di esempio, la figura 239.3 mostra il responso di una scansione che ha rivelato alcuni elementi di vulnerabilità. In corrispondenza di ognuna delle due voci si trova un riferimento che porta a delle spiegazioni più dettagliate.

                      Vulnerabilities - By Type
   
  Number of hosts per vulnerability type.
  
     * unrestricted NFS export - 1 host(s)
     * remote shell access - 1 host(s)
       
   Note: hosts may appear in multiple categories. 

Figura 239.3. Esempio del responso di vulnerabilità di un nodo, distinto in base al tipo.

Appunti di informatica libera 2001.01.30 --- Copyright © 2000-2001 Daniele Giacomini --  daniele @ swlibero.org

1) SATAN   software non libero


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome satan_o_santa.html

[successivo] [precedente] [inizio] [fine] [indice generale] [licenze] [indice analitico] [tomo] [parte]