Diversos parámetros de seguridad de las máquinas que ejecuten
Linux
pueden ser controlados a través del sistema de archivos virtual
/proc.
/proc es un pseudo-sistema de archivos, ya que en realidad ni él
ni
ninguno de los archivos y directorios contenidos en su interior existen
realmente. /proc nos facilita una interfaz para acceder y, en algunos
casos, modificar, algunas estructuras de datos del núcleo del
sistema
operativo.
/proc está disponible en el sistema operativo Linux cuando el
núcleo se
ha compilado con la opción CONFIG_PROC_FS=Y. También deberemos
seleccionar la opción CONFIG_SYSCTL=Y para poder modificar el
valor de
determinados parámetros, como veremos más adelante. La
mayoría de
distribuciones incluyen núcleos compilados con esta opción
y, como regla
general, es aconsejable seleccionarla en el momento de recompilar el
núcleo.
El sistema de archivos /proc puede montarse automáticamente
en el
momento de iniciar el sistema (si así se indica en el archivo
/etc/fstab). En el caso de que sea necesario montarlo manualmente, debe
utilizarse la siguiente orden:
mount -t proc proc /proc
Es aconsejable que /proc sea montado automáticamente al sistema
y que el
núcleo siempre se compile para dar soporte a este pseudo- sistema
de
archivos. En caso de no disponer del soporte, muchos programas de
utilidad no funcionarán y no podremos modificar en tiempo de
ejecución
algunos parámetros del núcleo del sistema operativo. Muchos
de estos
parámetros que nos pueden interesar modificar son muy importantes
desde
el punto de vista de seguridad.
Contenido de /proc
Dentro del directorio /proc encontramos dos tipos básicos de
información. En primer lugar, para cada proceso activo existe
un
directorio. Dentro del directorio de cada proceso hay diversos archivos
así como un subdirectorio con información específica
del proceso
(parámetros pasado en la línea de órdenes, enlace
al directorio actual
del proceso, las variables de entorno dentro del contexto del proceso,
los descriptores de los archivos abiertos en el proceso, mapa e
información acerca de la utilización de la memoria...).
Adicionalmente, existen una serie de directorios con información
acerca
de los diferentes módulos del sistema operativo. En el archivo
proc.txt
(disponible en el directorio Documentation/filesystems del código
fuente
del núcleo de Linux) hay información detallada de todo
lo que podemos
encontrar dentro de /proc. Otro documento de interés es ip-sysctl.txt,
disponible en el directorio Documentation/networking del código
fuente
del núcleo de Linux.
No todos los parámetros existentes en /proc son modificables
directamente por el usuario. De hecho, la mayoría son valores
de sólo
lectura y otros son mucho mejor controlados por el núcleo o mediante
la
utilización de los diversos mandatos y herramientas existentes
en el
sistema.
/proc/sys/net/ipv4
Dentro de este directorio disponemos de una serie de archivos con los
valores y parámetros para el protocolo IPv4. Se trata de los
valores
directamente utilizados por el núcleo del sistema operativo en
las
comunicaciones TCP/IP basadas en el protocolo IPv4.
Para determinar el valor de uno de estos parámetros lo único
que tenemos
que hacer es mirar su contenido. Por ejemplo:
$cat /proc/sys/net/ipv4/icmp_echo_ignore_all
0
nos muestra que actualmente el sistema operativo tiene asignado el
valor
0 (desactivado) al parámetro ICMP_ECHO_IGNORE_ALL.
El usuario root del sistema tiene el privilegio de modificar el valor
de
estas variables:
# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
1
Otra forma de configurar los valores es utilizando la utilidad sysctl.
Utilizando el ejemplo anterior, para determinar el valor debemos
utilizar:
$ sysctl net.ipv4.icmp_echo_ignore_all
net.ipv4.icmp_echo_ignore_all = 0
y para establecer el valor:
# sysctl -w net.ipv4.icmp_echo_ignore_all=1
net.ipv4.icmp_echo_ignore_all = 0
Ambas formas son equivalentes y podemos utilizar aquella con la que
nos
encontremos más cómodos.
Una última forma de modificar los valores de los parámetros,
de forma
que estos se mantengan incluso después de reiniciar el sistema
es a
través del archivo /etc/sysctl.conf. Podemos obtener más
detalles del
formato de este archivo ejecutando
man systcl.conf
Si se modifica el archivo /etc/sysctl.conf, los parámetros sólo
se
activarán la próxima vez que se reinicie la máquina
o bien después de
reiniciar el soporte de red, ejectuando
/etc/rc.d/init.d/network restart
Continuamos con la descripción de los parámetros de seguridad
de las
máquinas que ejecutan Linux con el sistema de archivos virtual
/proc.
Los parámetros que vamos a ver a continuación muestran
como podemos
controlar la forma en que un sistema actúa en determinadas
circunstancias. Estos parámetros nos van a ayudar a fortalecer
la
seguridad del sistema operativo. Estos parámetros son un complemento
a
las medidas de protección perimétricas, como pueden ser
los cortafuegos.
Mediante /proc no sólo podemos cambiar estos parámetros.
Hay otras
muchas cosas interesantes que podemos hacer, como por ejemplo mejorar
el
rendimiento del sistema de archivos, modificar la forma en que el
sistema gestiona la memoria virtual, incrementar el número máximo
de
archivos abiertos de forma simultánea y otros cambios. Los lectores
interesados pueden encontrar información al respecto en la documentación
que acompaña al código fuente del núcleo de Linux.
Todos los mandatos que indicamos a continuación deben ser ejecutados
por
el usuario root.
Control del protocolo ICMP
-Ignorar las peticiones de repuesta a ping
Dependiendo de la configuración de la red, puede ser interesante
configurar el sistema para que éste no responda cuando recibe
un ping
(mensaje ECHO del protocolo ICMP). De esta forma, puede ser un poco
más
difícil que un atacante descubra si el sistema está conectado
a la red.
Para desactivar las respuesta de forma temporal:
# sysctl -w net.ipv4.icmp_echo_ignore_all=1
y para desactivarla de forma permanente, editar el archivo
/etc/sysctl.conf y añadir las líneas
net.ipv4.icmp_echo_ignore_all = 1
(Nota= En los siguientes parámetros, si se desea realizar el
cambio de
forma permanente deberá modificarse igualmente el archivo
/etc/sysctl.conf, tal como hemos hecho para este parámetro).
-No atender a las peticiones enviadas mediante broadcast
Cuando una máquina envía un paquete a la dirección
de broadcast (por
ejemplo, 192.168.1.255), éste es entregado a todas las máquinas
existentes en la red local. A continuación, todas las máquinas
deben
enviar un mensaje ECHO del protocolo ICMP. Esto puede provocar una
congestión de la red, a la vez que permite determinar que sistemas
están
activos en la red.
Para desactivar la recepción de paquetes enviados a la dirección
de
broadcast:
# sysctl -w net.ipv4.icmp_echo_ignore_broadcasts = 1
-Protección ante mensajes de error mal formateados
Es posible que una red se transmitan mensajes de error mal formateados.
Para evitar que éstos sean procesados por el sistema:
# sysctl -w net.ipv4.icmp_ignore_bogus_error_responses = 1
-Deshabilitar la aceptación de redirecciones
Cuando el ordenador utiliza una ruta extinta o no-óptima para
enviar un
paquete a un destino particular, los routers por donde circula el
paquete envían al origen un mensaje de redirección del
protocolo ICMP
para informar de la ruta correcta a utilizar en el futuro.
Si un atacante tiene la capacidad de enviar mensajes de redirección
puede modificar las tablas de direccionamiento del ordenador, haciendo
por ejemplo que todo el tráfico fluya a través de una
vía concreta.
Para evitar el proceso de estos mensajes en el sistema:
# sysctl -w net.ipv4.conf.all.accept_redirects = 0
# sysctl -w net.ipv4.conf.default.accept_redirects = 0
Protección contra ataques DoS de inundación SYN
El ataque de denegación de servicio (DoS) por inundación
SYN ("SYN
Flood") consigue consumir todos los recursos de la máquina,
haciendo que
sea necesario reiniciarla para volver a funcionar con normalidad.
Cada vez que se realiza una conexión TCP/IP existe una negociación
de
tres pasos:
1. El cliente envía un paquete (paquete 1) al servidor con el
bit SYN
activado y permanece a la escucha.
2. El servidor responde al cliente con un paquete de confirmación
(paquete 2) y permanece a la escucha.
3. El cliente envía un tercer paquete (paquete 3) que consolida
la
conexión.
La información recibida en el paquete 1 se conserva dentro de
una cola
para que pueda ser comparada con los datos recibidos en el paquete 3
y
dar por establecida la conexión. Esta cola es de un tamaño
limitado y
tiene un tiempo de latencia muy elevado.
El ataque de inundación SYN consiste en llenar esa cola, mediante
el
envío de un gran número de paquetes 1 y nunca respondiendo
con un
paquete 3. En el momento en que se llena la cola, el sistema es incapaz
de atender cualquier otra petición de conexión que reciba.
La protección contra este ataque consiste en añadir información
en el
paquete 2, de forma que no sea necesaria conservar en el servidor ningún
dato sobre el cliente.
Para activar esta protección:
# sysctl -w net.ipv4.tcp_syncookies = 1
Con este valor, el sistema utilizará el método de incluir
la información
en el paquete 2 siempre que la cola de paquetes por procesar esté
saturada.
Protección contra direcciones IP no válidas
Esta protección permite que la máquina no pueda utilizarse
para el envío
de paquetes con direcciones IP no válidas. Este tipo de paquetes
son
habitualmente enviados cuando la máquina está intentando
realizar una
acción potencialmente ilegítima, como puede ser la suplantación
de una
conexión o el envío de paquetes en un ataque de denegación
de servicio.
Para activar esta protección:
# sysctl -w net.ipv4.conf.all.rp_filter = 2
# sysctl -w net.ipv4.conf.default.rp_filter = 2
El valor de los parámetros puede ser 0 (valor por omisión,
no realizar
ninguna comprobación), 1 (rechazar únicamente las suplantaciones
evidentes) y 2 (realizar una comprobación exhaustiva). Aconsejamos
seleccionar la opción de comprobación exhaustiva.
Esta opción no debe utilizarse en aquellos sistemas que actúen
como
cortafuegos o routers.
Redireccionamiento IP
El redireccionamiento IP es que en un sistema con diversos interfaces
activos, se acepten paquetes en un interfaz con destino al otro. Si
la
opción de rediccionamiento está activa, la máquina
podrá actuar como un
router para el tráfico entre las redes existentes en cada uno
de los
interfaces.
Únicamente aquellos sistemas que actúan como cortafuegos
o routers o
bien en circunstancias muy especiales deberían tener esta opción
activa.
Para verificar que se encuentra desactivada:
# sysctl -w net.ipv4.ip_forward = 0
Tal como hemos indicado anteriormente, en caso de activar con el valor
1
esta opción, también deberemos modificar el valor de
net.ip4.conf.all.rp_filter y net.ipv4.conf.default.rp_filter.
Control de rutas
Habitualmente un sistema no tiene ningún control sobre la ruta
utilizada
por los paquetes en su camino hacia su destino. El protocolo TCP/IP
permite establecer la ruta exacta a seguir. Excepto en circunstancias
muy especiales, este soporte deberá ser desactivado para evitar
que un
atacante pueda utilizar un sistema concreto como paso para saltarse
las
protecciones establecidas en el tráfico.
Para desactivar esta opción:
# sysctl -w net.ipv4.conf.all.accept_source_route = 0
# sysctl -w net.ipv4.conf.default.accept_source_route = 0
Registro de actividades sospechosas
Un último valor de interés nos permite registrar en los
archivos de
actividad del sistema aquellas situaciones potencialmente sospechosas:
intento de envío de paquetes con dirección no válida,
paquetes con
cambio de rutas y otras situaciones similares.
Se trata de una serie de situaciones que en un funcionamiento normal
de
la red no pueden producirse en ninguna circunstancia. Un ejemplo puede
ser la recepción de un paquete a través de un interfaz
Ethernet con
dirección origen igual a 127.0.0.1
Para activar el registro de esta actividad:
# sysctl -w net.ipv4.conf.all.log_martians = 1
# sysctl -w net.ipv4.conf.default.log_martians = 1
Más información
The /proc filesystem
Archivo incluido en el directorio Documentation/filesystems del
código fuente del núcleo de Linux
http://test.bb-zone.com/Talks/Proc-Talk/
Versión parcialmente traducida en
http://ulises.adi.uam.es/LuCAS/NuLies/web/2.2/Documentation/proc.txt
Network Security with /proc/sys/net/ipv4
http://www.linuxsecurity.com/articles/network_security_article-4528.html
Exploring the /proc/net Directory
http://linux.oreillynet.com/pub/a/linux/2000/11/16/LinuxAdmin.html
Exploring the Linux /proc filesystem
http://www.freeos.com/articles/2879/
The Official Red Hat Linux Security Guide
http://www.redhat.com/docs/manuals/linux/RHL-8.0-Manual/pdf/rhl-sg-en-80.pdf
Xavier Caballé
Más:
Syctl.conf Hardening
--> http://www.eth0.us/sysctl
Hardening the TCP/IP stack to SYN attacks --> http://www.securityfocus.com/infocus/1729
|