7
Il Tacacs + è sembrato inizialmente migliore del protocollo Radius, ma 
dopo un’analisi approfondita delle caratteristiche di entrambi, si è scelto di 
utilizzare il Radius. 
Valide motivazioni sono principalmente dovute al fatto che il TACACS+ è 
proprietario della Cisco System e quindi non viene garantita compatibilità 
con tutti gli apparati di rete(anche se diverse aziende si stanno 
aggiornando) inoltre da prove effettuate, risulta che il TACACS+ utilizza 
un’elevata quantità di memoria e sfrutta un elevato numero di cicli della 
CPU. 
Infine è stata rilevata una vulnerabilità di TACACS+ agli attacchi di tipo 
replay quindi, se sono aperte troppe sessioni, la cifratura potrebbe essere 
compromessa. 
In entrambi i casi dopo la scelta dei rispettivi protocolli, si è passati ad 
un’analisi accurata dei software esistenti per supportare questi 
meccanismi usando come criterio di valutazione principale la sicurezza e 
poi il costo del software cercando di puntare su progetti di tipo Open-
Source. 
Questo per problemi di licenza di utilizzo dei programmi e soprattutto per 
non fermarmi solamente all’interfaccia di un programma, ma per andare 
fino in fondo al codice per capire il reale funzionamento di esso. 
Come ultimo punto è stato realizzata una distribuzione di Linux (derivante 
dalla Slackware 10.2), la PMGslackware che racchiude al suo interno 
tutto il lavoro svolto. 
Una volta installata, come una normale distribuzione Linux, è possibile 
installare da una cartella apposita, i pacchetti presi in considerazione per 
realizzare gli obiettivi preposti(OpenVPN e FreeRadius). 
Sono inoltre presenti all’interno del cd due cartelle contenenti i files di 
configurazione(con relativi commenti) dei due pacchetti così da poter 
implementare in maniera facile e veloce i server. 
Si consiglia, per problemi di modularità e di sicurezza, di implementare 
due server diversi: in particolare il database relativo al server Radius 
dovrebbe essere memorizzato su un’altra machina così da garantire una 
 8
maggiore sicurezza, una migliore gestione del sistema e soprattutto, la 
privacy degli utenti. 
 9
CAPITOLO 1 
SICUREZZA E 
VIRTUAL PRIVATE 
NETWORKS (VPN)
 10
 
Sicurezza e Virtual Private Networks (VPN) 
 
1.1 Sicurezza Informatica 
 
Il mio crimine è la mia curiosità 
        (The Mentor) 
 
La sicurezza informatica mira a proteggere i dati personali da potenziali 
rischi o violazioni siano questi volontari o involontari. 
La protezione viene attuata secondo vari livelli sia astratti che fisici che 
sono a loro volta complementari tra loro; se ad un server, ad esempio, 
vengono applicati tutti i possibili criteri di protezione per renderlo 
invulnerabile dall’esterno e poi però viene lasciato in una stanza 
accessibile a chiunque…Mi sembra di aver reso l’idea!! 
Infatti secondo il D.D.L. 196/2003 i server devono essere posti in locali 
protetti contro i furti.[1] 
Il livello astratto viene identificato in genere come l’autenticazione e la 
verifica delle autorizzazioni di chiunque acceda ad un sistema così 
importante. 
In generale quindi si parla di sicurezza attiva e sicurezza passiva. 
Per sicurezza attiva si intendono tutte le tecniche, generalmente 
combinate tra loro, che servono a proteggere intrinsecamente i dati sia per 
quanto riguarda l’accesso e quindi la consultazione, sia per quanto 
concerne la loro modifica. 
Le tecniche di attacco per questi sistemi sono molteplici per cui è 
necessario cercare di interporre tra il “bersaglio” e l’ ”attaccante” più 
barriere possibili. 
 
 
 11
1.2 Fasi dell’attacco 
Per quanto possano essere svariati i tipi di attacco effettuabili è comunque 
possibile fornire delle indicazioni di massima riguardo alle fasi che 
costituiscono un attacco. 
1. HIDING(Mascheramento) 
Essa rappresenta la fase iniziale dell’attacco, nella quale l’attacker 
compie una serie di operazioni, spesso complesse, per camuffarsi 
ossia evitare di rivelare la sua identità o il luogo in cui si trova per 
scongiurare il pericolo di essere tracciato ed individuato. 
2. INFORMATION GATHERING(Raccolta informazioni) 
Affinché un attacco abbia esito positivo, l’attacker deve reperire il 
maggior numero di informazioni possibili della rete scelta come 
bersaglio. 
In questo caso non viene realizzata una vera e propria intrusione, ma 
si sfruttato informazioni pubbliche reperibili attraverso dei canali 
standard(database del NIC, record, DNS, traceroute, ping etc.). 
Le tecniche comunemente usate per questo scopo sono :  
Network Surveying : si tratta di una combinazione di elementi che 
sono ricerche dati, raccolta di informazioni e controllo di politiche di 
sicurezza. Al termine di questa sottofase, l’attacker, è in possesso dei 
nomi di dominio interessati, delle funzioni principali sui server, degli 
IP di proprietà dell’azienda bersaglio, di una mappa di rete 
approssimativa, di indirizzi e-mail validi(in genere del tipo info@ 
oppure webmaster@ etc.) e di informazioni specifiche sull’ISP che 
fornisce la connettività Internet.  
Port Scanning : con questo termine si intende l’attività di probing 
invasivo delle porte di sistema a livello di trasporto. Ogni sistema che 
implementa TCP/UDP ha 65536 porte disponibili per entrambi i 
protocolli: al termine di questa fase l’attacker conoscerà ancora 
meglio la conformazione della rete aziendale. 
Service Identification : una volta individuate le porte attive, con 
questa fase l’attacker cerca di esaminare le applicazioni in ascolto su 
 12
quelle porte. A volte più applicazioni possono stare in ascolto sulla 
stessa porta es, Perl e PHP considerati componenti dell’applicazione 
che ascolta sulla porta 80/TCP. Dopo questa fase l’attacker ha una 
visione tale da permettergli di individuare possibili punti deboli 
all’interno della rete target. 
System Identification : tramite questa operazione si cerca di capire 
quale tipo di sistema operativo è attivo su una determinata macchina, 
la sua versione ed altre informazioni specifiche. Una tecnica molto 
usata è quella del TCP/IP fingerprinting realizzata per ampliare la 
visione della rete e le possibili esposizioni. 
3. SYSTEM PENETRATION(Intrusione) 
Una volta che l’attacker è in possesso di tutte le informazioni 
necessarie riguardo alla rete, è arrivato il momento dell’attacco 
diretto vero e proprio. 
Questo varia sensibilmente a seconda delle tipologie di rete, dei 
sistemi adoperati, delle vulnerabilità, ma dipende soprattutto 
dall’attacker. 
Si perché ogni attacker ha un suo trademark che lo 
contraddistingue(un po’ come per chi fabbrica bombe!) ed è difficile 
staccarsi da una tecnica a meno che non si abbia una visione a 360° 
del sistema. 
Le possibili insicurezze possono essere raggruppate in 4 aree: 
System security : sono vulnerabilità a livello di sistema operativo e 
software di base. Tipicamente alcuni servizi, o programmi applicativi, 
non aggiornati o mal configurati si prestano ad essere attaccati per 
ottenere un accesso non autorizzato al sistema(vulnerabilità remote) 
oppure per realizzare una privilege escaleption tecnica che verrà 
descritta in seguito. Tipici esempi sono quelli che sfruttano 
l’esecuzione di codice arbitrario da remoto(exploit), la mancata 
gestione di eccezioni o la scorretta implementazione delle politiche di 
accesso al sistema(password guessing o brute force). 
 13
Network security : sono vulnerabilità che minano il livello di 
sicurezza dell’intera rete. Fattori che favoriscono queste tipologie di 
vulnerabilità sono principalmente la tipologia delle reti e la 
conseguente presenza di punti di accesso(poco o per niente protetti) 
alla rete privata, la tipologia e la configurazione dei sistemi che si 
occupano di routing e firewalling(servizi attivi, ACL, default password, 
Packet Filler) ed infine la possibilità di effettuare il monitoraggio 
passivo della rete(Network Sniffing) alla ricerca di informazioni 
private trasmesse in chiaro. 
Application security : vengono sfruttate le vulnerabilità dei software 
applicativi. In particolare un gran numero di applicazioni interne si 
prestano come obbiettivi di questi attacchi che mirano ad ottenere 
informazioni riservate o accesso non autorizzato ai sistemi. Un 
esempio molto diffuso è l’SQL injection oppure altri sono il cross-site 
scripting o l’hijacking(per applicazioni web). 
Procedural security : vengono sfruttate le vulnerabilità delle 
procedure utilizzate per tentare di proteggere il sistema tramite ad 
esempio relazioni di fiducia tra le singole macchine della rete che 
portano a human deception e social engineering. 
 
4. CLEANING(Pulizia) 
Una volta termina l’intrusione, l’attacker cerca di far sparire le sue 
tracce dal sistema procedendo alla cancellazione delle tracce 
lasciate nei file log, passando poi ad eventuali regioni del file system 
per finire ad eventuali IDS(Intrusion Detection System). 
 
 14
1.3 Tipologie di Attacco 
 
Dopo questa panoramica sui modi di attacco di un sistema bisogna 
analizzare anche i tipi di attacco perpetrabili contro il sistema :  
¾ Exploit 
¾ Buffer overflow 
¾ Spyware 
¾ Shellcode 
¾ Backdoor 
¾ Port Scanning 
¾ Sniffing 
¾ Spoofing 
¾ Trojan 
¾ Virus 
¾ DoS (Denial of Service) 
¾ DDoS (Distribuited Denial of Service) 
¾ Social Engineering 
¾ Privilegi Escaleption 
 
Dopo un elenco delle principali modalità di attacco, vediamo adesso di 
analizzarle più dettagliatamente :  
 
Exploit : è una tecnica mirata a sfruttare bug e vulnerabilità di un sistema 
allo scopo di acquisire privilegi o di portare a termine un DoS.[2] 
Tra i diversi modi che portano alla classificazione degli exploit, quello 
principale è in base al modo in cui viene contattata l’applicazione target. 
Si parla quindi di exploit remoto quando questo è compiuto attraverso la 
rete e sfrutta la vulnerabilità senza precedenti accessi al sistema. 
Si parla di exploit locale quando l’attacker effettua un preventivo accesso 
al sistema mirato in genere ad aumentare i suoi privilegi rispetto a quelli 
forniti dall’amministratore. 
 15
Gli exploit possono essere classificati anche a seconda del tipo di 
vulnerabilità trattate (es. buffer overflow, cross-site scripting etc.) 
Lo scopo della maggior parte di essi è quello di prendere i privilegi di root 
su un sistema. 
E’ comunque possibile acquisire, tramite accesso preventivo, un accesso 
con minori privilegi che poi vengono alzati fino a diventare root(Privilege 
Escaleption). 
In genere un exploit sfrutta una specifica falla del sistema, la quale una 
volta scoperta, viene riparata rendendo quindi vano l’attacco. 
Per questo molti attackers(da notare che non parlo di hacker o cracker…), 
i cosiddetti blackhat, non divulgano mai gli exploit trovati, ma li tengono 
riservati per loro o per la loro crew; in questo caso si parla di zero day 
exploit. 
 
Buffer Overflow : è una tecnica che prende di mira programmi 
software.[3] 
Consiste nel fatto che un programma non controlla in anticipo la 
lunghezza dei dati in arrivo, ma si limita a scrivere il loro valore in un buffer 
di dimensione prestabilita, confidando che l’utente non immetta più dati di 
quanto esso ne possa contenere. 
In genere questo accade quando il programma viene scritto usando 
librerie di input/output che non fanno controlli sulle dimensioni dei dati 
trasferiti. 
Quando capita, per errore o volutamente, che arrivino più dati della 
dimensione del buffer, i dati extra vanno a sovrascrivere quelle che sono 
le variabili interne del programma o il suo stesso stack; in questo caso il 
programma può bloccarsi, dare risultati errati o far bloccare il computer, 
tutto dipende da ciò che viene sovrascritto. 
Un attacker che conosce il programma ed il sistema operativo sul quale 
gira, può addirittura precalcolare quali e quanti dati malevoli inviare al 
computer target per provocare un buffer overflow ed in alcuni casi anche 
impossessarsi del computer.