Qualunque amministratore di sistema sa bene che 2 regole di firewalling in croce ed una password sufficientemente complessa non sono in grado di garantire un livello di sicurezza accettabile. Occorre, infatti, avere ben presente quali sono i pericoli a cui si dovrà far fronte mettendo un dato sistema in produzione, rischi che possono essere mitigati (a volte anche molto efficacemente) utilizzando qualche applicativo creato ad hoc (come, ad esempio, SELinux) e monitorando il sistema 24/7, sia a livello di risorse che a livello di operazioni sospette su determinati file o directory (in quest’ultimo caso parliamo di auditing).
Detto ciò, è altrettanto importante sapere che il kernel linux prevede alcuni meccanismi in grado di aumentare notevolmente la sicurezza del sistema operativo stesso, mettendolo al riparo da attacchi di tipo overflow, ip spoofing, ecc.
Tali meccanismi possono essere abilitati in modo permanente editando file /etc/sysctl.conf (in tal caso per rendere i settaggi operativi sarà necessario utilizzare il comando sysctl -p oppure effettuare un reboot), o, in alternativa, operando mediante /proc (rendendo subito effettive le modifiche ma non permanenti).
Per quanto mi riguarda, di solito opero in questo modo:
1) modifico i parametri di interesse mediante /proc (uno per uno, in modo da essere sicuro che , dopo ogni step, il sistema continua a funzionare come dovrebbe);
2) modifico il file sysctl.conf popolandolo con le direttive necessarie.
Ecco le modifiche da apportare al kernel on-the-fly:
#Misure anti overflow echo 1 > /proc/sys/kernel/exec-shield echo 2 > /proc/sys/kernel/randomize_va_space #Misure anti ip spoofing e source route echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter echo 1 > /proc/sys/net/ipv4/conf/all/log_martians echo 1 > /proc/sys/net/ipv4/conf/default/log_martians echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route echo 0 > /proc/sys/net/ipv4/conf/default/accept_source_route #Misure anti ICMP redirect echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects echo 0 > /proc/sys/net/ipv4/conf/all/secure_redirects echo 0 > /proc/sys/net/ipv4/conf/default/secure_redirects #Misure anti DOS/DDOS basati su TCP (SYN FLOOD) echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 2 > /proc/sys/net/ipv4/tcp_synack_retries #Misure anti smurf echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
Nella fattispecie, le misure anti overlflow hanno come obiettivo quello di impedire l’esecuzuone di shellcode su aree di memoria marcate come “non eseguibili” (exec-shield), facendo anche in modo che tutti i riferimenti a particolari funzioni presenti in memoria non siano accessibili facilmente da un utente malevolo, randomizzandone gli indirizzi di memoria (randomize_va_space)
Tra le misure anti ip spoofing e source route sono elencati 12 parametri, ovvero:
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
che abilitano il return path filter, ovvero se l’IP sorgente di un dato pacchetto ricevuto su una specifica interfaccia non è raggiungibile mediante quest’ultima, il suddetto pacchetto verrà scartato;
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians echo 1 > /proc/sys/net/ipv4/conf/default/log_martians
che abilitano il logging dei pacchetti spoofati;
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route echo 0 > /proc/sys/net/ipv4/conf/default/accept_source_route
il cui compito è quello di disabilitare il cosiddetto source route (ovvero “instradare” il pacchetto appena ricevuto lungo il “cammino” di rete ben preciso – comprensivo di hop – specificato al suo interno);
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
che disabilitano l’invio dei pacchetti ICMP redirect;
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
che disabilitano la ricezione degli ICMP redirect;
echo 0 > /proc/sys/net/ipv4/conf/all/secure_redirects echo 0 > /proc/sys/net/ipv4/conf/default/secure_redirects
affinchè anche gli ICMP redirect provenienti dal default gateway (e quindi teoricamente “sicuri”) vengano scartati.
Per quanto riguarda, invece, le misure anti attacchi DOS/DDOS basati sul procotollo TCP, ho abilitato i cosiddetti syncookies e limitato l’invio dei SYN/ACK a 2 soli tentativi (in modo da mitigare i SYN FLOOD):
echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 2 > /proc/sys/net/ipv4/tcp_synack_retries
Infine, nelle misure anti smurf ho semplicemente disabilitato la ricezione dei broadcast ICMP:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
Per quanto riguarda, invece, il file /etc/sysctl.conf, le direttive da inserire sono le seguenti:
#Enable Exec-Shield kernel.exec-shield = 1 # Enable ASLR kernel.randomize_va_space = 1 # Controls source route verification net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # Controls the use of TCP syncookies net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_synack_retries = 2 # Do not accept source routing net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # Do not accept or send ICMP redirects net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 # Log spoofed packets net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 #Ignore ICMP broadcasts net.ipv4.icmp_echo_ignore_broadcasts = 1
Fine del kernel tuning. Alla prossima.