VPN ad autenticazione forte con OTP - Rete

Pagina creata da Noemi Gatto
 
CONTINUA A LEGGERE
VPN ad autenticazione forte con OTP - Rete
Rete
VPN ad autenticazione forte con OTP
Sviluppare una soluzione di accesso all'ambiente aziendale affidabile e sicura
utilizzando software open-source è possibile, basta utilizzare gli strumenti corretti!

                                                                         Massimo Giaimo

Avendo la necessità di configurare, per motivi aziendali, un accesso il più possibile sicuro
all'ambiente di lavoro, sono state prese in considerazione diverse proposte, proprietarie e
non. Alla fine si è deciso di configurare una vpn ad autenticazione forte utilizzando
esclusivamente software open-source. La base dalla quale partire è stata identificata in
pfSense (www.pfsense.org), un firewall opensource basato su FreeBSD, che fin dal 2004
mette a disposizione un ambiente potente, sicuro e altamente configurabile. Il progetto
pfSense è portato avanti da un team di sviluppo guidato da Chris Buechler ed è sorretto
da una folta community che partecipa attivamente. La release corrente di pfSense è la
2.0.3, del 15 aprile 2013. L'installazione di base di pfSense non è parte integrante di
questo articolo e quindi si rimanda alla ottima documentazione reperibile alla url
doc.pfsense.org/index.php/Installing_pfSense.

La tipologia di vpn che si andrà a configurare è ad autenticazione forte. L'autenticazione
forte presupppone che ci siano almeno 2 fattori di autenticazione a disposizione. In questo
soluzione i due fattori sono identificabili nei seguenti:
    • token software
    • PIN.

Strong authentication
Cosa significa “autenticazione forte”?
Una auntenticazione a due fattori (o “autenticazione forte”) è un metodo di autenticazione
che si basa sull'utilizzo congiunto di due metodi di autenticazione individuale.
L'autenticazione forte a due fattori si contrappone ad una comune autenticazione basata
sulla sola password. Le tipologie di fattori possono essere: “una cosa che conosci”, per
esempio una password o il PIN; “una cosa che hai”, come un telefono cellulare, una carta
di credito o un oggetto fisico come un token; “una cosa che sei”, come l'impronta digitale, il
timbro vocale, la retina, o altre caratteristiche di riconoscimento attraverso caratteristiche
uniche del corpo umano.

Per migliorare il fattore di autenticazione utenza/password e renderlo meno attaccabile si è
deciso di utilizzare il concetto della One Time Password. Grazie a questo è possibile
appunto generare delle password valide una sola volta e influenzate da diversi fattori,
quali: il tempo corrente, i caratteri del PIN (Personal Identification Number) dell'utente ed il
segreto generato in fase di inizializzazione del token utilizzato per generare la One Time
Password stessa. Per generare la One Time Password utilizzeremo client compatibili con il
protocollo mOTP. Questi client sono installabili sulla stragrande maggioranza di
smartphone e cellulari e scaricabile direttamente da Apple Store (il client è mOTP di
ise-solutions) e Android Market (il client è DroidOTP). I software utilizzati per mettere in
piedi la soluzione di collegamento remoto ad autenticazione forte sono quindi:
VPN ad autenticazione forte con OTP - Rete
•   pfSense come distribuzione di base
   •   Openvpn come concentratore vpn
   •   Freeradius 2 come radius server
   •   client mOTP come generatore One Time Password.

Scheda software
Nome: pfSense 2.0.3
Licenza: BSD
Sito web: https://www.pfsense.com
Tipo: Rete/Firewall/Routing

Una delle caratteristiche principali di pfSense è sicuramente la possibilità di poter essere
arricchito con diversi moduli, che vanno ad espanderne notevolmente le funzionalità.
Openvpn è un modulo precaricato nella distribuzione, mentre Freeradius 2 deve essere
installato successivamente.

pfSense nell'ambiente enterprise
Nulla da inviare ai costosi prodotti commerciali
pfSense, pur essendo un software disponibile gratuitamente, non ha nulla da invidiare ai
prodotti di fascia enterprise. Infatti, grazie a UCARP permette di configurare due firewall su
due macchine identifiche per replicarsi e autosostituirsi nel caso di guasto di una delle due
(il software pfsync si occupa di replicare lo stato del firewall, la tabella delle connessioni e
le regole del firewall permettendo di passare al secondo firewall senza che le connessioni
di rete attive cadano). Inoltre, sfruttando i diversi moduli a disposizione, è possibile
aggiungere diverse funzionalità al nostro firewall, come ad esempio quelle di proxy server
(utilizzando Squidguard) e Intrusion Prevention and Detection System (utilizzando il
celebre software Snort). Infine, se si volesse in ogni caso contare su un supporto
commerciale (oltre a quello già garantito gratuitamente dalla comunità), se ne ha la
possibilità, facendone richiesta nella sezione Support del sito www.pfsense.com
VPN ad autenticazione forte con OTP - Rete
Installiamo i moduli necessari!
Partendo dal presupposto di essere riusciti ad installare pfSense e di avere un sistema
funzionante e configurato, che se utlizzato come default gateway ci permette di uscire in
internet, è possibile iniziare ad installare i moduli che ci servono.

Fig. 1 – La lista dei pacchetti installati in pfSense

Il software è installabile dall'interfaccia grafica di pfSense, raggiungibile attraverso il
browser all'indirizzo scelto in fase di installazione e corrispondente all'interfaccia LAN.
Apriamo dunque il browser e puntiamo all'indirizzo http://pfsense_lan_ip. Per maggiore
sicurezza, è consigliabile attivare il protocollo https per l'accesso all'interfaccia web di
pfSense, in modo tale da non permettere l'invio in rete delle credenziali di autenticazione
in chiaro.
Dal menu System, clicchiamo su Packages. Apparirà il Package Manager, dal quale è
possibile, nella scheda Available Packages, installare i pacchetti freeradius2 e OpenVPN
Client Export utility. Questi pacchetti serviranno nell'ordine per configurare il radius server
e per avere a disposizione una comoda interfaccia dalla quale scaricare i pacchetti di
configurazione, in diversi formati, per i nostri client vpn.
VPN ad autenticazione forte con OTP - Rete
Radius questo sconosciuto!

Fig. 2 – Interfaccia sulla quale sarà in ascolto il radius server

Passiamo ora alla configurazione del radius server. Radius è un protocollo AAA
(authentication, authorization, accounting) utilizzato in applicazioni di accesso alle reti o di
mobilità IP ed è lo standard de-facto per l'autenticazione remota. Dal menu Services
scegliamo FreeRADIUS. Nella scheda Interfaces digitiamo l'indirizzo locale dellla
macchina (127.0.0.1), la porta sulla quale il radius server si metterà in ascolto (1812) e
una breve descrizione. Clicchiamo su Save.

Fig. 3 – Client abilitati all'utilizzo del radius server
VPN ad autenticazione forte con OTP - Rete
Ci spostiamo poi nella scheda NAS / Clients, inseriamo l'indirizzo del client che si
collegherà al radius server (nel nostro caso sarà la macchina pfSense stessa, quindi
127.0.0.1), uno shortname (localhost) ed uno Shared Secret (nella nostra prova
secret123). Il client configurato in questa sezione non è da confondere con i client che
utilizzerano il collegamento vpn. In questo caso infatti stiamo parlando del client che
gestirà l'autenticazione sul radius server. Essendo pfSense sia la macchina che fa da
concentratore vpn sia il radius server, la richiesta di autenticazione avverrà in locale,
motivo per cui si configura l'ip localhost come client. Clicchiamo su Save.

Fig. 4 – Utenti abilitati all'utilizzo del radius server

Ci spostiamo ora nella scheda Users. In Username scriviamo il nome dell'utente che dovrà
utilizzare la vpn (nel nostro esempio giaimom, il mio cognome seguito dall'iniziale del mio
nome), lasciamo vuoto il campo Password, mettiamo il flag su Enable One-Time-Password
for this user, nel campo Init-Secret digitiamo il codice di 16 cifre esadecimali casuali,
successivamente digitaremo il codice generato attraverso l'applicazione mOTP. Nel campo
PIN digitiamo un codice a 4 cifre che comunicheremo all'utente. Se l'utente che utilizzerà
la vpn avrà la necessità di collegarsi anche da zone con un differente fuso orario, dovremo
specificare le ore di differenza nel campo Time Offset. Nel nostro caso lasciamo a 0
questo parametro e salviamo la configurazione.
Dovremo eseguire questa configurazione per ogni utente che avrà la necessità di utilizzare
la vpn.
In questa sezione abbiamo la possibilità di configurare varie opzioni aggiuntive relative ai
nostri utenti, come ad esempio la banda che vogliamo riservare ad ognuno di essi, la
VPN ad autenticazione forte con OTP - Rete
scadenza gli account, l'intervallo minimo di tempo tra un login e l'altro.

Fig. 5 – Attivazione del Mobile One Time Password sul radius server

Ci spostiamo infine nella scheda Settings, nella quale dobbiamo eseguire un'unica
modifica, nella sezione Mobile-One-Time-Password Configuration, dove dobbiamo mettere
il flag su Enable Mobile-One-Time-Password. Anche in questo caso salviamo la
configurazione.
VPN ad autenticazione forte con OTP - Rete
Fig. 6 – Aggiunta del radius server tra i server di autenticazione

La configurazione del radius server è terminata e possiamo dunque aggiungere la nostra
configurazione tra i server disponibili per gestire l'autenticazione. Dalla scheda System
scegliamo User Manager, quindi ci spostiamo nella scheda Servers. Aggiungiamo un
nuovo server di tipo Radius, con IP 127.0.0.1, Shared Secret lo stesso utilizzato
precedentemente nella configurazione del radius server (secret123), come Service offered
scegliamo Auhtentication e come numero di porta la 1812. Facciamo clic su Save.
VPN ad autenticazione forte con OTP - Rete
Autocertifichiamoci!

Fig. 7 – Configurazione della Certification Authority

Passiamo ora alla configurazione della CA (Certification Authority). La Certification
Authority solitamente è un ente terzo attraverso il quale può essere certificata l'identità di
un server. Un esempio comune sono i server che rilasciano applicazioni utilizzando il
protocollo ssl, ad esempio i servizi di home banking. Per garantire che il sito web
contenente l'applicazione di home banking sia effettivamente di proprietà della banca che
ci offre il servizio, la banca stessa provvede ad acquistare un certificato da una
Certification Authority. Quello che faremo sarà creare una Certification Authority interna,
che ci permetta di firmare e revocare di volta in volta i certificati dei nostri utenti. Per fare
ciò, dal menu System clicchiamo su Cert Manager. Dalla scheda CAs aggiungiamo una
nuova CA, scegliamo un nome per la nostra CA (ad esempio “vpn CA”), come Method
selezioniamo Create an internal Certificate Authority, come Key lenght selezioniamo 2048
bits, Lifetime 3650 days, inseriamo i dati della nostra organizzazione (facendo particolare
attenzione al Common Name, che deve identificare la nostra CA, per esempio
“internal-ca”) e clicchiamo su Save.

Fig. 8 – Configurazione del certificato server

Ora che è la Certification Authority è pronta, è arrivato il momento di creare un nuovo
certificato server per la nostra macchina pfSense. Il certficato server permetterà di
certificare ogni pacchetto durante la fase di autenticazione tra client vpn e server.
Dal menu System clicchiamo su Cert Manager, quindi dalla scheda Certificates
aggiungiamo un nuovo certificato. Come Method selezioniamo Create an internal
Certificate Authority, come Key lenght selezioniamo 2048 bits, Lifetime 3650 days,
inseriamo i dati della nostra organizzazione (facendo particolare attenzione al Common
Name, che deve identificare il nostro server, per esempio “vpn-server”) e clicchiamo su
Save.
VPN ad autenticazione forte con OTP - Rete
Ed ora diamoci sotto con OpenVPN!

Fig. 9 – Configurazione IP, porta e protocollo della vpn

Il passo successivo è quello relativo alla configurazione della vpn vera e propria. Dal menu
VPN clicchiamo su OpenVPN, quindi aggiungiamo una vpn, utilizzando i seguenti dati di
configurazione:

General Information
Server Mode: Remote Access (SSL/TLS + User Auth)
Backend for authentication: il radius server configurato in precedenza
Protocol: UDP
Device Mode: tun
Interface: WAN (o comunque quella dove è attestata la nostra banda internet)
Local port: nel nostro caso 1198, ma la porta è comunque personalizzabile
Description: una breve descrizione (ad esempio “vpn cert+motp”)
VPN ad autenticazione forte con OTP - Rete
Fig. 10 – Scelta degli algoritmi di crittografia

Cryptographic Settings
TLS Authentication: flag su Enable authentication of TLS packets
Peer Certificate Authority: la CA creata in precedenza
Server Certificate: il certificato server creato in precedenza
DH Parameters Length: 1024 bits
Encryption algorithm: BF-CBC (128-bit)
Hardware Crypto: No
Certificate Depth: One (Client+Server)
Fig. 11 – Configurazione del tunnel

Tunnel Settings
Tunnel Network: la rete della quale faranno parte i vari client vpn (preferibilimente una rete
non esistente nel resto dell'infrastruttura)
Local Network: la rete locale che dovrà essere raggiunta dai client vpn-server
Concurrent connections: possiamo specificare un numero di connessioni massime
simultanee
Compression: mettiamo il flash su Compress tunnel packets using the LZO algorithm

Fig. 12 – Impostazioni avanzate dei client

Client Settings
Dynamic IP: mettiamo il flag per permettere al client di mantenere attiva la connessione
vpn anche in caso di modifica dell'ip
Address Pool: mettiamo il flag per consentire l'assegnazione di un ip della Tunnel Network
definita poche righe sopra

Eventualmente nella sezione Advanced configuration possiamo configurare delle opzioni
aggiuntive, come ad esempio altre networks che devono essere raggiunte dai client vpn, il
server dns che vogliamo assegnare ai client, il nome del dominio.
Filtriamo!
Configurata la vpn, è arrivato il momento di configurare le opportune regole per filtrare
correttamente i pacchetti. Possiamo inizialmente decidere di far passare tutto il traffico
proveniente dai client vpn, in modo da verificare il buon funzionamento della soluzione, per
poi filtrare in modo più selettivo nel momento in cui conosceremo con esattezza quali
macchine dovranno essere raggiunte. Per il momento quindi, dal menu Firewall
selezioniamo Rules e creiamo, per l'interfaccia OpenVPN, la seguente regola:

Fig. 13 – Regola per il traffico proveniente di client vpn

Dobbiamo inoltre configurare una regola che permetta le connessioni provenienti da
internet e dirette al nostro concentrare vpn. Dal menu Firewall selezioniamo Rules e
creiamo, per l'interfaccia WAN, la seguente regola:

Fig. 14 – Abilitazione al collegamento vpn sull'interfaccia WAN

La regola riporta il protocollo (UDP), l'ip di destinazione e la porta (1198), che devono
essere le stesse selezionate in precedenza durante la configurazione della vpn.
Trasformiamo il nostro smartphone in
un token!
Ora che sul nostro firewall la configurazione è completata, è giunto il momento di installare
l'applicazione mOTP sul dispositivo smartphone che agirà da token per la generazione
della One Time Password. In questo tutorial utilizzeremo il client mOTP installato su un
dispositivo IOS (Iphone), ma l'installazione è del tutto simile anche su dispositivi Android
(utilizzando il client DroidOTP). Una volta installata l'applicazione mOTP (che ricordo è
disponibile gratuitamente su Apple Store) ed avviata, si presenterà così:

Fig. 15 – mOTP – schermata iniziale

Al primo utilizzo è necessario generare la chiave segreta del token, che verrà utilizzata per
far riconoscere il token alla macchina pfSense. Per fare ciò, clicchiamo sulla i in fondo a
destra.

Fig. 16 – mOTP – generazione della chiave segreta

Facciamo quindi clic su Generate Secret. Quello generato è un codice di 16 cifre
esadecimali, che dovremo riportare (l'applicazione mOTP ha anche un comando comando
per inviare il secret via mail) nella scheda Users della configurazione di FreeRADIUS, alla
voce Init-Secret, ricordandoci di salvare la configurazione.

DIDASCALIA: Fig. 17 – Init-Secret nella configurazione FreeRADIUS

mOTP
Lo standard de facto nell'autenticazione mobile
L'utilizzo di password statiche in fase di autenticazione, come viene comunemente fatto,
ha un paio di inconvenienti in tema di sicurezza informatica: le password possono essere
indovinate, dimenticate, rubate, origliate o deliberatamente comunicate ad altre persone.
Un metodo di autenticazione migliore e più sicuro è la cosiddetta autenticazione “a due
fattori” o “autenticazione forte” basato su password monouso. Invece di autenticarsi con
una semplice password, ogni utente ha a disposizione un dispositivo (token) per generare
le password che sono valide solamente una volta. Per generare la One Time Password,
l'utente deve inserire il suo PIN personale nel dispositivo. Cos' l'autenticazione di basa su
due fattori: il dispositivo token e un PIN (“qualcosa che si ha e qualcosa che si sa”).
Questo è ovviamente più sicuro di una semplice password, in quanto un aggressore deve
entrare in possesso sia del PIN che del dispositivo token. Inoltre, origliando una password
che è valida solo una volta, non è di alcuna utilità per l'attaccante. D'altra parte, lo
svantaggio dell'autenticazione forte è che ogni utente deve essere provvisto di un
dispositivo token. Questo può essere molto costoso. Fortunatamente i telefoni cellulari che
sono in grado di eseguire applet Java sono sempre più diffusi. Mobile OTP è una
soluzione gratuita di autenticazione forte per dispositivi mobili con supporto Java. La
soluzione si basa sulla sincronizzazione temporale per generare password monouso.
Mobile OTP si compone di un componente client (un MIDIet J2ME) e un componente
server (uno script di shell UNIX). Il componente server può essere facilmente collegato a
server RADIUS gratuiti per autenticare gli utenti. Lo script di shell funziona senza
necessità di modifiche su qualsiasi BSD-Unix o Linux. Il Java MIDIet dovrebbe essere
compatibile con qualsiasi telefono          cellulare abilitato a Java. Il server di MIDIet, il
server script e vari RASIUS server sono disponibili gratuitamente e sono sottoposti a
licenza GPL.
Mobile OTP è un progetto che è stato introdotto nel 2003. Attualmente ci sono più di 40
implementazioni indipendenti dell'algoritmo Mobile OTP, che lo rendono lo standard de
facto per l'autenticazione forte mobile. Il Java MODIet genera password facendo un hash
con MD5 dei seguenti dati: il tempo corrente di 10 secondi di granularità, il PIN digitato
dall'utente, le 16 cifre esadecimali generate quando il device è stato inizializzato. Quando
viene inserito il PIN e confermato, MIDIet visualizza i primi 6 caratteri dell'hash MD5.
Questa è la One Time Password. La password può essere verificata dal server, in quanto
esso conosce il tempo corrente, l'Init-Secret del token device ed il PIN dell'utente. Per
compensare la possibile differenza di tempo tra token device e server, quest'ultimo
accetterà password con una granularità di 3 minuti nel passato e 3 minuti nel futuro.
Ed ora colleghiamoci
E' arrivato il momento di testare il funzionamento della nostra configurazione! Ci
spostiamo nel menu VPN, alla voce OpenVPN e quindi alla scheda Client Export.

In questa schermata avremo la possibilità di scaricare la configurazione della vpn in vari
formati, sia per pc (Windows, Mac e Linux) che per smartphone (Android e e IOS).
Scarichiamo la versione compatibile con il sistema operativo del nostro dispositivo e
carichiamola attraverso il client vpn che utilizziamo (scaricabile dal sito
https://openvpn.net/index.php/download/community-downloads.html oppure anche in
questo caso direttamente da Apple Store e Android Market). Nel nostro caso scarichiamo
la versione contenente sia i certificati che il file di configurazione. Per farlo, nella colonna
Export, in Standard Configurations, clicchiamo su Archive. In Linux la configurazione va
caricata nella directory /etc/openvpn, mentre in Windows va copiata nella cartella
c:\Programmi\OpenVPN\config\).

Una volta scaricato il client vpn e caricato il file di configurazione, è possibile avviare la
connessione. All'avvio della connessione, verranno richieste le credenziali di accesso
(utenza/password). L'utenza è quella configurata nella scheda Users di FreeRADIUS,
mentre la password va generata utilizzando l'applicazione mOTP caricata in precedenza
sullo smartphone. Per generare la One Time Password, eseguiamo l'applicazione mOTP,
digitiamo il PIN di 4 cifre (lo stesso configurato in FreeRADIUS, nella scheda Users) e
premiamo Generate Password.

DIDASCALIA: Fig. 18 – mOTP – generazione della One Time Password

Digitiamo la One Time Password appena generata nel campo password del nostro client
vpn e confermiamo. Se abbiamo configurato tutto correttamente, la connessione vpn viene
instaurata!
Puoi anche leggere