viernes, 19 de junio de 2009

Securización de un sistema Ubuntu (GNU/Linux) Parte I

Securización del sistema base

Kernel: parámetros de seguridad

El kernel de Linux dispone de diversos parámetros que nos permiten configurar su actuación frente al tráfico de red. Al iniciar el sistema se establecen los valores de los parámetros indicados en ‘/etc/sysctl.conf’. No obstante, también es posible modificarlos mediante el comando ’sysctl’.

Los parámetros más importantes a tener en cuenta son:

- Activar la protección contra IP spoofing:

sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.conf.all.rp_filter=1

- Activar TCP SYN Cookie Protection para minimizar la posibilidad de ataques de denegación de servicio por ataques de paquetes SYN. No obstante, actualmente ya no se recomienda esta opción dado que las capacidades de los sistemas han aumentado considerablemente y activarlo nos hace perder otras características de TCP.

sysctl -w net.ipv4.tcp_syncookies=1

- Desactivar el reenvío de paquetes IP (solo es necesario cuando queremos que la máquina actue como una pasarela mediante NAT):

sysctl -w net.ipv4.ip_forward=0
sysctl -w net.ipv6.ip_forward=0

- Ignorar Broadcasts Request:

sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

- Activar la protección contra mensajes de error mal construidos:

sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1

- Desactivar ICMP Redirect Acceptance, mediante los cuales un atacante podría indicar al sistema una ruta mejor para llegar a otras redes (habitualmente utilizado por routers). Únicamente los permitiremos si proceden de nuestro gateway:

sysctl -w net/ipv4/conf/all/accept_redirects=0
sysctl -w net/ipv4/conf/all/send_redirects=0
sysctl -w net/ipv4/conf/all/secure_redirects=1

- Desactivar IP Sourcing routing mediante el cual un atacante podría especificar la ruta a seguir para ir desde una IP origen a una destino:

sysctl -w net.ipv4.conf.all.accept_source_route=0

- Logear paquetes: Spoofed Packets, Source Routed Packets, Redirect Packets

sysctl -w net.ipv4.conf.all.log_martians=1

- Ignorar ICMP Requests PINGs, personalmente prefiero dejarlo a 0 y controlar desde donde y hacia donde permito los pings mediante iptables (firewall). En cualquier caso, si queremos desactivar completamente que el sistema responda a pings:

sysctl -w net.ipv4.icmp_echo_ignore_all=1

Para consultar los valores actuales:

sysctl net.ipv4.conf.default.rp_filter
sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.tcp_syncookies
sysctl net.ipv4.ip_forward
sysctl net.ipv6.ip_forward
sysctl net.ipv4.icmp_echo_ignore_broadcasts
sysctl net.ipv4.icmp_ignore_bogus_error_responses
sysctl net.ipv4.conf.all.accept_redirects
sysctl net.ipv4.conf.all.send_redirects
sysctl net.ipv4.conf.all.accept_source_route
sysctl net.ipv4.conf.all.log_martians

Para establecer los nuevos valores de forma permanente para sucesivos reinicios es necesario modificar /etc/sysctl.conf.

Limitando los recursos del sistema

Se considera una buena práctica limitar los recursos del sistema utilizados por los usuarios, de forma que minimicemos las probabilidades de que se efectúen ataques de denegación de servicio contra todo el sistema.

Memoria, número de procesos y sesiones concurrentes

Para limitar la memoria, el número de procesos y las sesiones concurrentes que puede tener cada usuario debemos editar ‘/etc/security/limits.conf’. A modo de ejemplo:

# Prevents anyone from dumping core files.
* hard core 0

# This will prevent anyone (except root) from having more than 150 processes, and a warning will be given at 100 processes.
* soft nproc 100
* hard nproc 150

# This will prevent anyone in the 'users' group from having more than 150 processes, and a warning will be given at 100 processes.
@users soft nproc 100
@users hard nproc 150
@users - maxlogins 4

# Address space limit: 2GB
* hard as 2097152
# Maximum data size: 128MB
* hard data 131072
# Maximum locked-in-memory address space: 128MB
* hard memlock 131072
# Maximum resident set size: 1GB
* hard rss 1013352

1 comentario:

de dijo...

Muy buena entrada. Para cuando la siguiente?