FIXME. Servono più contenuti (specifici per Debian)
4.18.1. Configurare le caratteristiche di rete del kernel
Many features of the kernel can be modified while running by echoing something into the
/proc
file system or by using
sysctl
. By entering
/sbin/sysctl
-A
you can see what you can configure and what the options are, and it can be modified running
/sbin/sysctl -w variable=value
(see
sysctl(8)). Only in rare cases do you need to edit something here, but you can increase security that way as well. For example:
net/ipv4/icmp_echo_ignore_broadcasts = 1
Questo è un emulatore di Windows perché funziona come Windows in broadcast ping, se questa opzione viene impostata ad 1. In pratica, le richieste ICMP_ECHO spedite all'indirizzo in broadcast vengono ignorate. Altrimenti, non succede nulla.
Se volete evitare che il sistema risponda alle richieste echo ICMP, basta attivare questa opzione di configurazione:
net/ipv4/icmp_echo_ignore_all = 1
Per loggare dei pacchetti destinati ad indirizzi inesistenti (errore dovuto ad instradamenti sbagliati) sulla vostra rete, utilizzate:
/proc/sys/net/ipv4/conf/all/log_martians = 1
For more information on what things can be done with
/proc/sys/net/ipv4/*
read
/usr/src/linux/Documentation/filesystems/proc.txt
. All the options are described thoroughly under
/usr/src/linux/Documentation/networking/ip-sysctl.txt
.
4.18.2. Configurare i Syncookies
Questa opzione è un'arma a doppio taglio. Da un lato, protegge il sistema contro il syn packet flooding, dall'altro viola degli standard definiti (le RFC).
net/ipv4/tcp_syncookies = 1
If you want to change this option each time the kernel is working you need to change it in
/etc/network/options
by setting
syncookies=yes
. This will take effect when ever
/etc/init.d/networking
is run (which is typically done at boot time) while the following will have a one-time effect until the reboot:
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
Questa opzione è disponibile solamente se il kernel è stato compilato con l'opzione
CONFIG_SYNCOOKIES
. Tutti i kernel Debian vengono compilati con questa opzione all'interno del kernel, potete verificarlo eseguendo:
$ sysctl -A |grep syncookies
net/ipv4/tcp_syncookies = 1
4.18.3. Rendere sicura la rete al momento del boot
Quando impostate le opzioni del kernel relative al networking, dovete configurarle in maniera tale che siano caricate ogni volta che il sistema viene riavviato. L'esempio seguente abilita molte delle precedenti opzioni che avete visto, insieme ad altre utili opzioni.
There are actually two ways to configure your network at boot time. You can configure /etc/sysctl.conf
(see: sysctl.conf(5)) or introduce a script that is called when the interface is enabled. The first option will be applied to all interfaces, whileas the second option allows you to configure this on a per-interface basis.
Sotto viene mostrato un esempio di configurazione di
/etc/sysctl.conf
che rende sicure alcune opzioni di rete a livello di kernel. Guardate la parte commentata,
/etc/network/options
potrebbe ignorare alcuni valori, se in contrasto con quelli in questo file quando viene eseguito
/etc/init.d/networking
(che viene dopo
procps
nella sequenza di boot).
#
# /etc/sysctl.conf - Configuration file for setting system variables
# See sysctl.conf (5) for information. Also see the files under
# Documentation/sysctl/, Documentation/filesystems/proc.txt, and
# Documentation/networking/ip-sysctl.txt in the kernel sources
# (/usr/src/kernel-$version if you have a kernel-package installed)
# for more information of the values that can be defined here.
#
# Be warned that /etc/init.d/procps is executed to set the following
# variables. However, after that, /etc/init.d/networking sets some
# network options with builtin values. These values may be overridden
# using /etc/network/options.
#
#kernel.domainname = example.com
# Additional settings - adapted from the script contributed
# by Dariusz Puchala (see below)
# Ignore ICMP broadcasts
net/ipv4/icmp_echo_ignore_broadcasts = 1
#
# Ignore bogus ICMP errors
net/ipv4/icmp_ignore_bogus_error_responses = 1
#
# Do not accept ICMP redirects (prevent MITM attacks)
net/ipv4/conf/all/accept_redirects = 0
# _or_
# Accept ICMP redirects only for gateways listed in our default
# gateway list (enabled by default)
# net/ipv4/conf/all/secure_redirects = 1
#
# Do not send ICMP redirects (we are not a router)
net/ipv4/conf/all/send_redirects = 0
#
# Do not forward IP packets (we are not a router)
# Note: Make sure that /etc/network/options has 'ip_forward=no'
net/ipv4/conf/all/forwarding = 0
#
# Enable TCP Syn Cookies
# Note: Make sure that /etc/network/options has 'syncookies=yes'
net/ipv4/tcp_syncookies = 1
#
# Log Martian Packets
net/ipv4/conf/all/log_martians = 1
#
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
# Note: Make sure that /etc/network/options has 'spoofprotect=yes'
net/ipv4/conf/all/rp_filter = 1
#
# Do not accept IP source route packets (we are not a router)
net/ipv4/conf/all/accept_source_route = 0
Per usare lo script dovete prima di tutto crearlo, per esempio, in
/etc/network/interface-secure
(il nome è solo un esempio) e chiamarlo da
/etc/network/interfaces
come mostrato qui:
auto eth0
iface eth0 inet static
address xxx.xxx.xxx.xxx
netmask 255.255.255.xxx
broadcast xxx.xxx.xxx.xxx
gateway xxx.xxx.xxx.xxx
pre-up /etc/network/interface-secure
In questo esempio, prima di abilitare l'interfaccia eth0, lo script verrà chiamato per rendere sicure tutte le interfacce di rete come mostrato sotto.
#!/bin/sh -e
# Script-name: /etc/network/interface-secure
#
# Modifica alcuni comportamenti predefiniti per proteggere il
# sistema da alcuni attacchi spoofing contro il TCP/IP e da altri
# tipi di attacchi rivolti a tutte le interfacce.
#
# Contributed by Dariusz Puchalak.
#
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Broadcast echo protection enabled.
echo 0 > /proc/sys/net/ipv4/conf/all/forwarding
# IP forwarding disabled.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies # TCP syn cookies protection enabled.
echo 1 >/proc/sys/net/ipv4/conf/all/log_martians # Log strange packets.
# (this includes spoofed packets, source routed packets, redirect packets)
# but be careful with this on heavy loaded web servers.
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Bad error message protection enabled.
# IP spoofing protection.
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
# Disable ICMP redirect acceptance.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
# Disable source routed packets.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
exit 0
È opportuno notare che si possono adottare script specifici per ogni interfaccia. Questi script abilitano le opzioni di rete relative alle diverse interfacce (qualora ne fossero presenti più di una). È sufficiente modificare il comando di pre-up come indicato di seguito:
pre-up /etc/network/interface-secure $IFACE
Questo comando lancia lo script che applicherà i cambiamenti solamente all'interfaccia di rete specificata e non a tutte le interfacce eventualmente disponibili. Notate che alcune opzioni di rete possono essere applicate solo globalmente. Di seguito un modello di script:
#!/bin/sh -e
# Script-name: /etc/network/interface-secure
#
# Modifica alcuni comportamenti predefiniti per proteggere il
# sistema da alcuni attacchi spoofing contro il TCP/IP e da altri
# tipi di attacchi rivolti a tutte le interfacce.
#
# Contributed by Dariusz Puchalak.
#
IFACE=$1
if [ -z "$IFACE" ] ; then
echo "$0: Must give an interface name as argument!"
echo "Usage: $0 <interface>"
exit 1
fi
if [ ! -e /proc/sys/net/ipv4/conf/$IFACE/ ]; then
echo "$0: Interface $IFACE does not exit (cannot find /proc/sys/net/ipv4/conf/)"
exit 1
fi
echo 0 > /proc/sys/net/ipv4/conf/$IFACE/forwarding # IP forwarding disabled.
echo 1 >/proc/sys/net/ipv4/conf/$IFACE/log_martians # Log strange packets.
# (questo include spoofed packets, source routed packets, redirect packets)
# ma fate attenzione, può essere pesante per un server web.
# IP spoofing protection.
echo 1 > /proc/sys/net/ipv4/conf/$IFACE/rp_filter
# Disable ICMP redirect acceptance.
echo 0 > /proc/sys/net/ipv4/conf/$IFACE/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/$IFACE/send_redirects
# Disable source routed packets.
echo 0 > /proc/sys/net/ipv4/conf/$IFACE/accept_source_route
exit 0
An alternative solution is to create an init.d
script and have it run on bootup (using update-rc.d
to create the appropriate rc.d
links).
4.18.4. Configurare le caratteristiche di un firewall
Per avere un firewall, sia per proteggere il sistema locale o tutto quello che si trova dietro, dovete compilare nel kernel le funzionalità del firewall. Il kernel standard per Debian 2.2 (Linux 2.2) comprende il packet filter ipchains
come firewall, in Debian 3.0 è presente anche il kernel della serie 2.4 che è invece munito dello stateful packet filter, iptables
(netfilter) come firewall.
In any case, it is pretty easy to use a kernel different from the one provided by Debian. You can find pre-compiled kernels as packages you can easily install in the Debian system. You can also download the kernel sources using the kernel-source-X
and build custom kernel packages using make-kpkg
from the kernel-package package.
4.18.5. Disabilitare la questione weak-end host
Systems with more than one interface on different networks can have services configured so that they will bind only to a given IP address. This usually prevents access to services when requested through any other address. However, this does not mean (although it is a common misconception) that the service is bound to a given
hardware address (interface card).
It seems, however, not to work with services bound to 127.0.0.1, you might need to write the tests using raw sockets.
This is not an ARP issue and it's not an RFC violation (it's called
weak end host in
RFC1122, (in the section 3.3.4.2). Remember, IP addresses have nothing to do with physical interfaces.
Nelle versioni 2.2 del kernel ed anche nelle precedenti è possibile porre rimedio con:
# echo 1 > /proc/sys/net/ipv4/conf/all/hidden
# echo 1 > /proc/sys/net/ipv4/conf/eth0/hidden
# echo 1 > /proc/sys/net/ipv4/conf/eth1/hidden
.....
Nei kernel più recenti si può ottenere lo stesso con:
Regole per iptable.
properly configured routing.
Along this text there will be many occasions in which it is shown how to configure some services (sshd server, apache, printer service...) in order to have them listening on any given address, the reader should take into account that, without the fixes given here, the fix would not prevent accesses from within the same (local) network.
FIXME: i commenti tratti da bugtraq sono metodi specifici per proteggere un data interfaccia in Linux.
FIXME: sottoporre un bug nei confronti di netbase in modo che il risultato della riparazione della tabella di routing sia il comportamento standard per Debian?
4.18.6. Proteggersi dagli attacchi di tipo ARP
Quando non c'è piena fiducia verso le altre postazioni sulla propria LAN (dovrebbe essere sempre così, è l'atteggiamento più sicuro), ci si dovrebbe proteggere dai diversi possibili attacchi di tipo ARP.
As you know the ARP protocol is used to link IP addresses to MAC addresses (see
ftp://ftp.isi.edu/in-notes/rfc826.txt for all the details). Every time you send a packet to an IP address an ARP resolution is done (first by looking into the local ARP cache then if the IP isn't present in the cache by broadcasting an ARP query) to find the target's hardware address. All the ARP attacks aim to fool your box into thinking that box B's IP address is associated to the intruder's box's MAC address; Then every packet that you want to send to the IP associated to box B will be send to the intruder's box...
Quegli attacchi (ARP cache poisonning, ARP spoofing - avvelenamento della cache ARP, falsificazioni ARP) permettono all'attaccante di intercettare il traffico anche su reti commutate, di dirottare facilmente delle connessioni, di disconnettere un host qualunque dalla rete... gli attacchi ARP sono potenti e semplici da implementare, essendovi parecchi strumenti utili allo scopo:
arpspoof
dal pacchetto
dsniff o
http://arpoison.sourceforge.net/.
Tuttavia, una soluzione c'è sempre: