hardening di un router basato su Cisco IOS
Questo articolo vuole presentare al lettore le informazioni, procedure e spunti di riflessione per effettuare un hardening di un router basato su Cisco IOS. Con il termine hardening si intende la procedura utilizzata per rendere il sistema il più resistente possibile ai vari tentativi di attacco. La procedura di per se è abbastanza semplice, e si focalizza su tre scopi ben precisi:
- Controllare gli accessi
- Eliminare il traffico indesiderato
- Minimizzare la possibilità di attacco
Vediamo quindi quali sono i passi per effettuare un hardening di base.
Boot
La prima cosa da proteggere è proprio il boot del router. Di default il router esegue boot flash e boot rom. E’ necessario definire quale immagine di software va caricata all’avvio, esempio:
boot system flash c3550-i5q3l2-mz.121-20.EA1a.bin boot system rom
Password di enable e di console
Il secondo passo e’ quello di stabilire le password di enable e di console. E’ meglio usare il nuovo comando enable secret che il vecchio enable password. Il comando enable secret usa un hash MD5 per conservare le password, mentre con il vecchio sistema la password era facilmente ricavabile. Cisco comunque raccomanda di usare AAA per l’autenticazione sulla console.
no enable password enable secret PasswordSuperSegreta service password-encryption line console 0 password PasswordConsole transport output none line aux no exec transport input none
Autenticazione tramite RADIUS (AAA)
Cisco consiglia di appoggiarsi all’AAA (Authentication, Authorization and Accounting) per l’autenticazione degli utenti all’accesso interattivo ad un router Cisco. I comandi che seguono sono un esempio di autenticazione verso RADIUS.
aaa new-model aaa authentication login RemoteAuth radius enable radius-server host 172.16.1.12 radius-server key MiaChiave line vty 0 4 login authentication RemoteAuth
Banner
Inserire un banner per rendere evidente che si tratta di un’area ristretta. Per esempio:
banner motd ^C --------------------------------------------------------------- This system is for the use of authorized users only. Individuals using this computer system without authority, or in excess of their authority, are subject to having all of their activities on this system monitored and recorded by system personnel. In the course of monitoring individuals improperly using this system, or in the course of system maintenance, the activities of authorized users may also be monitored. Anyone using this system expressly consents to such monitoring and is advised that if such monitoring reveals possible evidence of criminal activity, system personnel may provide the evidence of such monitoring to law enforcement officials. --------------------------------------------------------------- ^C
Sincronizzazione del tempo
E’ bene usare il protocollo NTP per sincronizzare i router con un NTP Server stratum 1 o stratum 2 (vedi http://www.ntp.org per informazioni)., avendo cura di autenticare –quando possibile- il protocollo NTP. Si consiglia di usare la timezone UTC qualora si gestiscano più router distribuiti su più fasce orarie: questo accorgimento facilita la lettura nel caso fosse necessario correlare i log. Esempio:
clock timezone UTC 0 no clock summer-time ntp update-calendar ntp authenticate ntp authentication-key 10 md5 ntpkey ntp trusted-key 10 ntp server 172.16.3.2 key 10 interface Serial 0/0 ntp disable interface Ethernet 0/0 ntp broadcast
Collezione dei log
Innanzi tutto bisogna configurare il buffer della history. Si tratta di un buffer circolare, dove i log più vecchi vengono sovrascritti. Si faccia attenzione alla grandezza del buffer, in quanto occupa RAM, che potrebbe essere preziosa per altri processi. Ad esempio:
logging buffered 8192 debugging
Il passo successivo e’ di abilitare il timestamp sui log attraverso i seguenti comandi:
service timestamps debug datetime service timestamps log datetime
Con il comando successivo, si disabilitano la traduzione dei nomi DNS nei log:
no ip domain lookup
E’ poi consigliabile mandare i log verso un syslog server centralizzato attraverso i seguenti comandi:
logging 172.16.1.2 logging trap notification
Il livello syslog utilizzato dal router Cisco è il local7, che deve essere configurato sul log server.
Tuning dello stack IP
I comandi successivi servono ad effettuare un miglioramento dello stack IP del routerl. Il primo abilita l’algoritmo di Nangle per la gestione del controllo della congestione (RFC 896). Il secondo limita il tempo di timeout dei pacchetti Syn, il default è di 30 secondi. Il terzo e il quarto nel rispetto degli RFC 1323 e RFC2018.
service nagle ip tcp synwait-time 10 ip tcp window-size 2144 ip tcp selective-ack Tuning della CPU
Attraverso il seguente comando si garantisce il tempo minimo della CPU per i processi vitali (500 millisecondi)
scheduler-interval 500
Sui Cisco 7200 e 7500 si può anche inserire il seguente comando, che abilita 500 microsecondi per ciclo di clock sul fast-packet switching e 100 microsecondi per cliclo di clock per process-switching:
scheduler allocate 500 100
Abilitazione dei servizi necessari
Si consiglia di abilitare i servizi di password encryption e di tcp keepalive come segue:
service password-encryption service tcp-keepalives-in service tcp-keepalives-out
Disabilitazione dei servizi non necessari
Si consiglia di disabilitare i seguenti servizi, non necessari al corretto funzionamento dell’apparato. Si consiglia particolare attenzione al CDP e all’SNMP che potrebbero essere utilizzati in azienda. Più avanti nell’articolo viene descritto come mettere in sicurezza il protocollo SNMP.
no cdp run no boot network no service config no ip source-route no service finger no ip finger no ip identd no service pad no service tcp-small-servers no service udp-small-servers no ip bootp server no snmp-server no tftp-server no ip http-server
Disabilitazione degli UDP broadcast
Alcuni broadcast effettuati in UDP vengono ruotati di default. E’ necessario capire se qualcuno di questi sia realmente utilizzato, ad esempio per il DHCP, ed abilitare solo quello corrispondente. Per disabilitare tutti i broadcast UDP:
no ip forward-protocol port 69 no ip forward-protocol port 53 no ip forward-protocol port 37 no ip forward-protocol port 137 no ip forward-protocol port 138 no ip forward-protocol port 67 no ip forward-protocol port 68 no ip forward-protocol port 49 no ip forward-protocol port 42 no ip helper-address
Hardening delle interfaccie
Sono parametri consigliabili da applicare alle singole interfaccie: bisogna capire se qualcuno di questi parametri è effetivamente utilizzato. Non utilizzare shutdown in quelle interfaccie già in uso, mentre mettere sempre in shutdown le porte non in uso. Si consiglia fortemente per quelle interfaccie direttamente collegate ad Internet.
no cdp enable ip accounting access-violation no ip directed-broadcast no ip redirects no ip unreachables no ip mask-reply no ip proxy-arp no mop enabled shutdown
Abilitazione del server SSH
Nelle nuove versioni del Cisco IOS sui router recenti e’ possibile usare SSH come metodo di collegamento alternativo al telnet ed al tftp. Per abilitarlo, eseguire:
hostname miorouter ip domain-name azienda.it crypto key generate rsa ip ssh time-out 60 ip ssh authentication-retries 3 ip scp server enable
Restrizione dell’accesso via rete
E’ bene restringere a determinati IP l’accesso via rete all’apparato attraverso le ACL, sia che si decida di usare SSH (attraverso transport input ssh) oppure telnet. Nel prossimo articolo verranno descritte cosa sono le ACL e come usarle in maniera più dettagliata.
access-list 80 permit 172.16.0.0 0.0.255.255 log access-list 80 deny any log line vty 0 4 login password MiaPassword transport input ssh transport output none exec timeout 5 0 access-class 80 in
Configurazione dell’SNMP
Si rende necessario l’uso del Simple Network Management Protocol (SNMP) nei grandi ambienti, dove è necessario il monitoring della rete. Sebbene non sia un protocollo sicuro, viene però considerato come un “male necessario”, in quanto è difficile gestire un numero elevato di apparati di rete senza di esso. Quello che si può fare è impostare l’SNMP in modo tale da limitare gli attacchi, ad esempio restringendo tramite ACL le macchine abilitate alla gestione e scegliendo communities non facilmente intuibili. Per esempio:
access-list 80 permit 172.16.0.0 0.0.255.255 access-list 90 permit 172.16.1.2 snmp-server communityReadStringviewViewNameRO 80 snmp-server communityWriteStringRW 90 snmp-server viewViewName1.3.6.2.4 excluded snmp-server enable traps snmp-server host 172.16.1.2 version 2c TrapString
Step finale dell’hardening di base
Come ultimo passo e’ necessario copiare la configurazione in flash, effettuare una copia di backup e riavviare il router per vedere che effettivamente la configurazione rimanga inalterata.
copy running-config startup-config copy running-config scp://user@host reload