Un aspetto fondamentale delle reti è la loro sicurezza. Una rete è considerata sicura quando garantisce il controllo degli accessi e assicura la tracciabilità delle operazioni effettuate. Fa parte delle politiche di sicurezza la messa in produzione di un sistema di controllo che tenga traccia di chi ha effettuato l’accesso, del momento in cui è avvenuto l’accesso e cosa è stato fatto nel periodo di connessione. La tracciabilità deve riguardare tanto gli amministratori di rete, quanto gli utenti aziendali e quelli remoti.
Sui router Cisco, la configurazione degli accessi utilizzando solo la password per la modalità utente (user exec) o quella per la privilege mode è un metodo limitato, non scalabile e poco sicuro. E’ preferibile utilizzare una modalità basata su database che crei singoli account utente, ognuno con una specifica password. La sicurezza aumenta sia perché viene tracciato il log-in degli utenti, sia perché un eventuale attaccante dovrebbe conoscere, oltre alla password, anche il nome utente.
L’autenticazione basata su database locale si configura con i comandi seguenti:
Router(config)#username nome_utente password password
Router(config)#username nome_utente secret password
Bisogna poi indicare al router di effettuare la verifica delle credenziali sul database locale, credenziali necessarie per gli accessi aux, console, tty e vty:
Router(config-line)#login local
Con la combinazione username password, la password viene visualizzata in chiaro nel file di configurazione (se il comando service password-encryption non è configurato). Con la combinazione username secret, la password viene cifrata con l’algoritmo MD5. Pertanto, è consigliabile utilizzare solo la combinazione username secret e dimenticare l’altra.
Ricordiamo che il comando login senza la parola chiave "local" configura le linee di accesso (aux, console, tty e vty) per un’autenticazione basata sulla sola password, ossia quella impostata per ogni linea di accesso con il comando “password mia_password”.
L’infrastruttura AAA
L’uso del database locale indicato nelle righe precedenti rappresenta solo una premessa al sistema di autenticazione creato e consigliato da Cisco: l’infrastruttura AAA, acronimo di Authentication, Authorization and Accounting. Si tratta di una modalità di accesso più sicura e scalabile, con le seguenti caratteristiche:
- Authentication (autenticazione) - Gli utenti e gli amministratori devono dimostrare che sono chi dicono di essere. L'autenticazione può essere stabilita tramite combinazioni di username e password, domande di challenge (sfida), token cards, e altri metodi.
- Authorization (autorizzazione) - Dopo che l'utente è stato autenticato, i servizi di autorizzazione individuano le risorse a cui l'utente può accedere e quali operazioni l'utente è autorizzato a svolgere.
- Accounting and auditing (tracciabilità) – Vengono registrate le azioni eseguite dagli utenti: a quali risorse si è potuto accedere, la quantità di tempo trascorsa su queste risorse, e le eventuali modifiche apportate.
Il concetto del protocollo AAA è simile all'uso di una carta di credito: la carta di credito identifica chi può usarla, quanto l'utente può spendere, e per cosa sono stati spesi i soldi.
Per gli accessi, AAA prevede l’uso contemporaneo di username e password memorizzate su un database, che può risiedere sul router stesso o in rete su un Access Control Server (ACS). Quest’ultima soluzione permette di gestire gli accessi ed il controllo centralizzato per tutti i router presenti in rete, sfruttando i protocolli RADIUS o TACACS+. Con il metodo del database locale, l'account utente deve essere configurato localmente su ogni dispositivo e, in ambienti con più router e switch da gestire, implementare e modificare database locali su ogni dispositivo potrebbe rappresentare una grave perdita di tempo. Inoltre, la configurazione del database locale non fornisce alcun metodo di autenticazione alternativo, utile se ad esempio l'amministratore dimentica il nome utente e/o la password.
Le richieste di accesso tramite AAA possono essere effettuate in due modi differenti:
- Character-mode - Un utente invia una richiesta per instaurare un processo di modalità EXEC con il router per scopi amministrativi. Gli accessi che generano questo tipo di traffico sono quelli sulle linee Aux, Console, tty e vty.
- Packet-mode - Un utente remoto invia una richiesta per connettersi, attraverso il router, ad un dispositivo di rete. Gli accessi che generano questo tipo di traffico sono quelli tramite DialUp o VPN, sulle linee PPP, ARAP (AppleTalk Remote Access Protocol), NASI (NetWare Access Server Interface).
In questo documento ci concentreremo sulla modalità di accesso a caratteri (character-mode).
Autenticazione AAA locale
La modalità di accesso basata su database locale, vista all’inizio di questo documento, prevede l’uso del comando login local sulle linee di accesso aux, console, tty e vty. Questo meccanismo può essere reso più sicuro con l’integrazione nel framework AAA, garantendo inoltre meccanismi di autenticazione alternativi, nel caso in cui il metodo iniziale dovesse avere esito negativo.
Per attivare AAA, utilizzare il comando di configurazione globale aaa new model:
Router(config)#aaa new model
Per fare in modo che l’autenticazione basata su database locale sia integrata nel framework AAA, bisogna prima definire una lista di metodi di autenticazione, poi applicare tale elenco alle varie linee vty, linee asincrone (tty), porta ausiliaria o porta console.
Router(config)#aaa authentication login nome-lista enable|group|local
Router(config-line)#login authentication nome-lista
Il primo comando richiede un nome di lista e dei metodi di autenticazione, ossia un elenco sequenziale che descriva i metodi di autenticazione utilizzati per autenticare un utente. In questo modo si possono definire uno o più protocolli di sicurezza per l'autenticazione. Nel caso in cui il metodo iniziale dovesse avere esito negativo, verrebbe utilizzato in sequenza il metodo successivo.
Il secondo comando applica l'elenco dei metodi di autenticazione alle interfacce o linee specifiche.
Nell’esempio che segue, viene creato un elenco di autenticazione AAA chiamato ACCESSO_TELNET che richiede agli utenti di autenticarsi prima sul database locale del router e, se questo tentativo fallisce (ad esempio perché il database locale non è stato configurato), di autenticarsi con la password di enable. L’elenco viene quindi applicato sulle linee vty. In ogni caso, se un metodo di autenticazione nega l'accesso, il processo di autenticazione si ferma e non vengono presi in considerazione altri metodi di autenticazione.
Router(config)#aaa authentication login ACCESSO_TELNET local enable
Router(config)#line vty 0 4
Router(config-line)#login authentication ACCESSO_TELNET
Se si desidera che l'autenticazione locale sia di tipo case-sensitive, si deve utilizzare la parola chiave local-case al posto della semplice local.
Quando viene attivato il protocollo AAA, viene applicata automaticamente su tutte le interfacce e le linee una lista predefinita, chiamata default. Per assegnare più metodi di autenticazione alla default-list, utilizzare il comando aaa authentication login default metodo1 metodo2 ... Esempio:
Router(config)#aaa authentication login default local enable
I metodi di autenticazione definiti nella lista di default vengono utilizzati in maniera predefinita su tutte le linee, a meno che su queste non venga creata e applicata una lista personalizzata: in tal caso la lista personalizzata prevale sulla lista di default. Se quest'ultima non viene impostata e non ci sono altre liste applicate su un’interfaccia, viene controllato solo il database locale, come se venisse applicato il comando aaa authentication login default local.
Si può avere ulteriore sicurezza implementando un blocco degli utenti a seguito di un determinato numero di accessi falliti. IMPORTANTE: Questo comando blocca solo gli utenti NON amministratori:
Router(config)#aaa local authentication attempts max-fail numero_massimo_di_tentativi
Per visualizzare l’elenco degli utenti bloccati, utilizzare il comando:
Router#show aaa local user lockout
Per lo sblocco degli utenti, si possono usare due comandi distinti: uno è specifico per utente, l’altro serve a sbloccare tutti gli utenti:
Router#clear aaa local user lockout username nome_account
Router#clear aaa local user lockout username all
Quando un utente accede in un router Cisco con AAA abilitato, viene assegnato alla sua sessione un ID univoco. Per tutta la durata della sessione, vengono raccolti vari attributi relativi alla sessione stessa. Questi attributi possono includere l'indirizzo IP con cui si presenta l'utente, il protocollo che viene utilizzato per accedere al router, come PPP o SLIP (Serial Line Internet Protocol), la velocità della connessione e il numero di pacchetti o byte che vengono trasmessi o ricevuti.
Per visualizzare gli attributi raccolti per una sessione di AAA, usare il comando show aaa user all|id_univoco in modalità privileged EXEC.
Router#show aaa user all
Per la risoluzione dei problemi di autenticazione, esiste il comando debug aaa con diverse parole chiave. La sintassi più utilizzata a questo scopo è:
Router#debug AAA authentication
Autenticazione AAA basata su server
L’implementazione di AAA basata su database locali non è certamente una soluzione valida e scalabile se applicata in aziende con più router, con diversi amministratori di rete e centinaia o migliaia di utenti. Il mantenimento di database locali per ogni router non sarebbe sostenibile. Per risolvere questo limite, si può utilizzare un server AAA, come ad esempio Cisco Secure ACS (Access Control Server), dove creare un database centrale a cui tutti i dispositivi della rete faranno riferimento. L’ACS può inoltre far riferimento a database esterni, quali Active Directory e LDAP (Lightweight Directory Access Protocol). Cisco Secure ACS, sviluppato per girare su Windows Server o fornito come appliance proprietaria su rack di una unità, è una soluzione altamente scalabile che supporta una vasta gamma di connessioni di accesso, comprese le LAN cablate e wireless, dial-up, banda larga, accessi allo storage, VoIP, firewall e reti private virtuali (VPN). E’ basato su un’interfaccia web (vedi immagine sottostante), con la home page divisa in frame. I pulsanti sulla barra di navigazione a sinistra rappresentano particolari aree o funzioni che possono essere configurate.
Come protocolli di autenticazione sono supportati sia TACACS+ (Access Terminal Control Access Control Server) che RADIUS (Remote Dial-in User Services). Sebbene entrambi i protocolli possano essere utilizzati per la comunicazione tra client e server AAA, TACACS + è considerato più sicuro di Radius. TACACS+ cifra tutte le informazioni scambiate tra client e server, Radius cifra solo la password utente. Le grandi aziende, come gli ISP, potrebbero comunque preferire RADIUS perché supporta funzionalità di accounting dettagliate, necessarie per la fatturazione del traffico e dei servizi.
I concetti chiave di TACACS+ sono i seguenti:
- È un miglioramento Cisco al protocollo TACACS originale
- È incompatibile con TACACS e XTACACS
- Separa il processo di autenticazione da quello di autorizzazione
- Fornisce un supporto multiprotocollo (ad esempio suporta AppleTalk)
- Cifra tutte le comunicazioni: viene cifrato l'intero corpo del pacchetto, lasciando inalterato l'header dei pacchetti scambiati
- Utilizza la porta TCP 49
- Consente di controllare quali comandi possono essere eseguiti dagli utenti su un router.
I concetti chiave di RADIUS:
- Utilizza server proxy per la scalabilità
- Combina i meccanismi di autenticazione e autorizzazione in un unico processo.
- Cifra solo la password e non tutti pacchetti scambiati, diversamente da TACACS+.
- Utilizza le porte UDP 1645 e 1812 per l'autenticazione, le porte UDP 1646 e 1813 per l’accounting
- Supporta le tecnologie di accesso remoto, 802.1X, e SIP
- Non consente di controllare quali comandi possono essere eseguiti su un router.
Configurazione del router per l’autenticazione basata su server
L'autenticazione basata su server prevede prima di tutto l'impostazione sul router dei parametri relativi al server TACACS+ e/o RADIUS. Gli step da seguire sono i seguenti:
- Abilitare AAA.
- Specificare i parametri del server Cisco Secure ACS che fornirà i servizi di tipo AAA per il router. Può essere un server TACACS+ o un server RADIUS.
- Configurare la chiave di crittografia necessarie per cifrare i dati scambiati tra i client e il server ACS.
- Configurare un elenco di metodi di autenticazione AAA che faranno riferimento al server ACS.
Per impostare i parametri del server TACACS+ e la chiave di crittografia, si utilizzano i comandi:
Router(config)#tacacs-server host ip-address single-connection
Router(config)#tacacs-server key chiave
La parola chiave single-connection migliora le performance TCP, mantenendo una singola connessione TCP per tutta la durata della sessione. Infatti, di default, verrebbe aperta e chiusa una connessione TCP per ogni sessione.
Se il server utilizza il protocollo RADIUS, i comandi diventano i seguenti:
Router(config)#radius-server host ip-address
Router(config)#radius-server key chiave
Una volta che i parametri del server ACS sono stati configurati, il server deve essere incluso nell'elenco dei metodi di autenticazione, con il comando aaa authentication login e le parole chiave group tacacs+ o group radius. Ad esempio, per configurare un elenco di metodi per la default-list, specificando l'uso di un server con supporto RADIUS e TACACS+ per l'autenticazione, utilizzare il comando seguente:
Router(config)#aaa authentication login default group radius group tacacs+ local
Con questo comando viene creato un elenco di default che impone agli utenti di autenticarsi sul server ACS tramite RADIUS o TACACS+; se questo tentativo fallisce, ad esempio perché il server non è raggiungibile, ci si autentica sul database locale.
Per la risoluzione dei problemi di autenticazione, si utilizzano i comandi debug aaa authentication, debug tacacs, debug radius
Router#debug AAA authentication
Configurazione dell'Authorization e dell'Accounting
Mentre l'autenticazione si occupa di garantire che il dispositivo o gli utenti sono chi dicono di essere, l'autorizzazione si occupa di consentire o meno agli utenti l'accesso a determinate aree della rete, o l'accesso a determinati comandi di configurazione.
Per esempio, ad utente può essere concesso l'uso del comando show version ma non del comando configure terminal. Per mettere in atto questo processo, il router interroga l'ACS per verificare se l'utente ha il permesso di eseguire il comando. Se l'utente digita il comando show version, l'ACS inoltra al router un messaggio ACCEPT; se l'utente digita il comando configure terminal, l'ACS invierà un messaggio di tipo REJECT. Solo tramite TACACS+ è possibile controllare quali comandi possono essere eseguiti dagli utenti. Per impostare quali comandi saranno consentiti, selezionare gli stessi dal menu User Group/Shell Command Authorization Set del server ACS.
Per la configurazione del processo di autorizzazione, si utilizza il comando
Router(config)#aaa authorization [network|exec|commands level] [default|nome_lista] metodo1 metodo2...
Come si può osservare dalla sintassi, il tipo di servizio specificato può essere uno fra i seguenti 3:
- commands level, per i comandi della shell
- exec, per l'avvio di una shell (character mode)
- network, per i servizi di rete come PPP, SLIP, ARAP (packet mode)
Esempio:
Router(config)#aaa authorization exec default group tacacs+
Il processo di accounting AAA prevede la possibilità di monitorare gli accessi in rete e registrare i dati in un database, per poi produrre report sui dati raccolti. L'accounting è un processo strettamente correlato alla sicurezza, poiché contribuisce ad aumentare quest'ultima: ad esempio, se l'amministratore scopre che un lavoratore accede alla rete nel mezzo della notte, queste informazioni possono essere utilizzate per esaminare in modo dettagliato le finalità del login. Un altro motivo può essere quello di voler creare una lista dei cambiamenti che si verificano sulla rete, di chi ha eseguito le modifiche e l'esatta natura delle modifiche. Se le modifiche causano risultati imprevisti, conoscere queste informazioni è di fondamentale importanza per la risoluzione dei problemi.
Per configurare una lista di accounting, utilizzare il comando:
Router(config)#aaa accounting [network|exec|connection] [default|nome-lista] [start-stop|stop-only|none] [broadcast] metodo1...
Il tipo di informazione registrata viene specificato con i triggers none, start-stop, stop-only. Ad esempio, i LOG delle sessioni EXEC e delle connessioni via rete si abilita con i comandi seguenti:
Router(config)#aaa accounting exec default start-stop group tacacs+
Router(config)#aaa accounting network default start-stop group tacacs+
Esempio pratico
Router>en
Router#conf t
Router(config)#username test_user secret tesT_pa$$w0rd
Router(config)#username test_admin secret tesT_pa$$w0rd2
Router(config)#aaa new-model
Router(config)#tacacs-server host 10.2.20.3 single-connection
Router(config)#tacacs-server key $dgv345gh7B_T
Router(config)#aaa authentication login default group tacacs+
Router(config)#aaa authorization exec default group tacacs+
Router(config)#aaa authorization network default group tacacs+
Router(config)#aaa accounting exec default start-stop group tacacs+
Router(config)#aaa accounting network default start-stop group tacacs+