VPN ad autenticazione forte con OTP - Rete
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
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:
• 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
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.
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
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
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.
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.
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.
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”)
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