hardening di un router basato su Cisco IOS

ciscoQuesto 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