Seguridad en la administración de la red en GNU/Linux

Administración de Seguridad
Información sobre la plantilla
Segred.jpg
Sistemas Operativos compatiblesGNU/Linux


La seguridaden la administración de la red en GNU/Linux son los mecanismos de prevención, detección y recuperación de nuestro sistema ante los posibles ataques. Es un proceso continuo, que requiere prever todo lo previsible.


Se debe garantizar que los recursos que ofrecemos tengan los parámetros de confidencialidad necesarios y que los servicios no pueden ser usados por terceros no deseados. En el caso de servicios de los que nosotros somos clientes, también habrá que asegurar los mecanismos de autentificación, en el sentido de que accedemos a los servidores correctos y no existen casos de suplantación de servicios o servidores.

Responder las siguientes preguntas permite evaluar la eficiencia de la seguridad de nuestro sistema.

  • ¿Qué queremos proteger?
  • ¿Qué valor tiene lo que queremos proteger?
  • ¿Qué coste tiene la seguridad?
  • ¿De quién nos queremos proteger?
  • ¿Cuáles son los puntos débiles de nuestro sistema?


Introducción a la seguridad

El salto tecnológico de los sistemas de escritorio aislados, hasta los sistemas actuales integrados en redes locales e Internet, ha traído una nueva dificultad a las tareas habituales del administrador: el control de la seguridad de los sistemas. La seguridad es un campo complejo, en el cual se mezclan tanto técnicas deanálisis, con otras de detección o de prevención de los posibles ataques, como el análisis de factores “psicológicos”, como el comportamiento de los usuarios del sistema o las posibles intenciones de los atacantes. Los ataques pueden provenir de muchas fuentes y afectar desde a una aplicación o servicio, hasta a algún usuario, o a todos, o al sistema informático entero.

Los posibles ataques pueden cambiar el comportamiento de los sistemas, incluso hacerlos caer (inutilizarlos), o dar una falsa impresión de seguridad, que puede ser difícilmente detectable. Podemos encontrarnos con ataques de autentificación (obtener acceso por parte de programas o usuarios no habilitados previamente), escuchas (pinchar los canales de comunicación y redirigir los datos que circulan), o sustitución (sustituir programas, máquinas o usuarios por otros, sin que se noten los cambios).

¿Por qué se necesita seguridad?

La seguridad es ahora un requisito básico en las comunicaciones, principalmente en las globales. Cuando la información va desde un punto A a otro punto B en Internet, está atravesando multitud de otros sistemas donde otros usuarios pueden interceptarla y también alterarla. De hecho, en su propio sistema, un usuario malicioso puede transformar sus datos en algo diferente. El acceso no autorizado a su sistema puede ser perpetrado por intrusos, también conocidos como crackers, quienes utilizan sus conocimientos avanzados para suplantarle, robarle información, e incluso impedirle el acceso a sus propios recursos.

¿Qué tan seguro es seguro?

En primer lugar, tenga siempre en mente que ningún sistema informático puede ser completamente seguro. Todo lo que se puede hacer es ir incrementando la dificultad con la que un intruso puede comprometer su sistema. Tampoco todos los usuarios tienen las mismas necesidades de seguridad en sus entornos.

Los crackers se enfocan principalmente en usuarios muy especializados de Linux, como por ejemplo servidores de Internet, bancos, compañías de telecomunicaciones, etc., que es donde mayor daño pueden hacer (si sus motivaciones son políticas, de competencia empresarial, personales, u otras) o de donde mayores dividendos pueden obtener a través del robo de grandes volúmenes de datos para vender, alteración de cuentas bancarias, etc. No obstante, existen usuarios domésticos de Linux, que por la importancia de la información que generan, pueden convertirse en blancos apetecibles por los crackers, como es el caso de los científicos que están desarrollando importantes investigaciones, por sólo poner un ejemplo. El resto de los usuarios domésticos no necesitan demasiado trabajo para mantener alejados a los crackers ocasionales.

El administrador debe equilibrar para cada usuario de su red, las restricciones de seguridad respecto a la facilidad de uso del sistema, para no limitar innecesariamente los servicios del sistema. La seguridad es un problema amplio, complejo y dinámico, por lo que el administrador debe mantener actualizados sus conocimientos sobre el tema y no confiarse en que la seguridad está garantizada.

¿Qué es lo que se intenta proteger?

Para proteger su sistema debe determinar:

  • Nivel de las amenazas contra las que debe protegerse.
  • Vulnerabilidad actual de su sistema ante dichas amenazas atendiendo a las siguientes interrogantes:
¿Puede un intruso leer, escribir o borrar archivos?
¿Puede un intruso ejecutar programas susceptibles de causar daños?
  • Qué va a proteger, qué importancia tiene lo que va a proteger, quien es el responsable de los datos y otros valores.

Si la cuenta de un usuario con altos privilegios en la red, es insegura, puede hacer que toda la red se vea comprometida. Si este usuario por ejemplo, hace uso remoto de su cuenta usando un archivo .rhosts, o utiliza un servicio inseguro, como tftp, corre el riesgo de que un intruso “ponga el pie en la rendija de la puerta”. Una vez que el intruso tiene una cuenta de usuario en su sistema puede usarla para obtener acceso a otros sistemas o a otras cuentas.

Debe establecer una correcta estructura de privilegios para evitar accesos no autorizados a su red u ordenador.

Existen distintos tipos de intrusos, y conviene que tenga en mente sus diferentes características a la hora de proteger sus sistemas:

El Curioso: Este tipo de intruso está interesado básicamente en averiguar el tipo de sistema y la información que usted posee.

El Malvado: Este tipo de intruso persigue echar abajo sus sistemas, o deformar su página web, o de cualquier otro modo forzarle a gastar tiempo y dinero recuperándose del daño que ha causado.

El Intruso de Alto Nivel: Este tipo de intruso intenta usar su sistema para ganar fama dentro de la comunidad „cracker‟. Si su sistema tiene una gran reputación, intentará introducirse en él para dar a conocer sus grandes “habilidades”.

La Competencia: Estos están interesados en los datos que tiene en su sistema. Puede tratarse de alguien que piensa que usted tiene algo que podría beneficiarle, económicamente o de cualquier otro modo.

Los Parásitos: Estos están interesados en utilizar los recursos de su máquina en su propio beneficio. Normalmente ejecutaran servidores de chat, servidores de archivos porno, o incluso servidores DNS.

La Rana Saltarina: Este intruso esta interesado únicamente en usar su sistema para acceder a otros sistemas. Si su sistema esta bien conectado o es una “pasarela” a otras máquinas en una red interna, puede encontrarse fácilmente con uno de estos intrusos intentando comprometer su sistema.

La vulnerabilidad determina cuan bien protegido esta su sistema, y las posibilidades de que alguien consiga acceso no autorizado.

¿Qué es lo que se vería en peligro si alguien se introdujese en su sistema? Por supuesto, no es lo mismo un sistema doméstico conectado esporádicamente a Internet vía PPP que un sistema o red local de una empresa. ¿Cuánto tiempo costaría recuperar los datos perdidos?

Una inversión inicial de tiempo puede ahorrarle diez veces el tiempo invertido si tiene que recuperar datos perdidos.

Tipos y métodos de los ataques

Tipos de ataques habituales:

  • Autentificación: El atacante obtiene acceso a programas o servicios tras robar la identidad de un usuario (nombre de usuario, contraseña y en algunos casos información detallada sobre tarjetas de crédito u otra información bancaria).
  • Intercepción (o escucha): mecanismo por el cual se interceptan datos, por parte de terceros, cuando éstos no estaban dirigidos a ellos.
  • Falsificación (o reemplazo): sustitución de algunos de los participantes ya sea máquinas,software o datos por otros falsos.
  • Robo de recursos: uso de nuestros recursos sin autorización.
  • O, simplemente, vandalismo: después de todo, suele ser bastante común la existencia de mecanismos que permiten interferir con el funcionamiento adecuado del sistema o servicios y causar molestias parciales, o el paro o cancelación de recursos.

Para cada uno de los tipos de ataques mencionados, se pueden utilizar varios métodos de ataque, que a su vez pueden provocar también varios de los tipos de ataques. Los ataques pueden tener finalidades destructivas, inhabilitadoras o de espionaje, de nuestros componentes, ya sea hardware, software o sistemas de comunicación. Respecto a dónde se produzca el ataque, hemos de tener claro qué puede hacerse o cual será el objetivo de los métodos:

  • Hardware: a este respecto, la amenaza está directamente sobre a accesibilidad, ¿qué podrá hacer alguien que tenga acceso al hardware? En este caso normalmente necesitaremos medidas “físicas”, como controles de seguridad para acceder a los locales donde estén las máquinas para evitar problemas de robo o rotura del equipo con el fin de eliminar su servicio. También puede comprometerse la confidencialidad y la integridad si el acceso físico a las máquinas permite utilizar algunos de sus dispositivos como las disqueteras, o el arranque de las máquinas, o el acceso a cuentas de usuario que podrían estar abiertas.
  • Software: si la accesibilidad se ve comprometida en un ataque, puede haber borrado o inutilización de programas, denegando el acceso. En caso de confidencialidad, puede provocar copias no autorizadas de software. En integridad podría alterarse el funcionamiento por defecto del programa, para que éste fallase en algunas situaciones o bien para que realice tareas que puedan ser interesantes de cara al atacante, o simplemente comprometer la integridad de los datos de los programas: hacerlos públicos, alterarlos, o simplemente robarlos.
  • Datos: ya sean estructurados, como en los servicios de base de datos, o gestión de versiones (como cvs ), o simples archivos. Mediante ataques que amenacen la accesibilidad, pueden ser destruidos o eliminados, denegando así el acceso a los mismos. En el caso de la confidencialidad, estaríamos permitiendo lecturas no autorizadas y la integridad se vería afectada cuando se produzcan modificaciones o creación de nuevos datos.
  • Canal de comunicación (en la red, por ejemplo): para los métodos que afecten a la accesibilidad, nos puede provocar destrucción o eliminación de mensajes, e impedir el acceso a la red. En confidencialidad, lectura y observación del tráfico de mensajes, desde o hacia la máquina. Y respecto a la integridad, cualquier modificación, retardo, reordenación, duplicación o falsificación de los mensajes entrantes y/o salientes.

Seguridad del sistema

Ante los posibles ataques, tenemos que disponer de mecanismos de prevención, detección y recuperación de nuestros sistemas. Para la prevención local, hay que examinar los diferentes mecanismos de autentificación y permisos de accesos a los recursos para definirlos correctamente y poder garantizar la confidencialidad y la integridad de nuestra información. En este caso, nos estaremos protegiendo de atacantes quehayan obtenido acceso a nuestro sistema, o bien de usuarios hostil es que quieran saltarse las restricciones impuestas en el sistema. Respecto a la seguridad en red, tenemos que garantizar que los recursos que ofrecemos (si proporcionamos unos determinados servicios) tienen los parámetros de confidencialidad necesarios y que los servicios no pueden ser usados por terceros no deseados, de modo que, un primer paso será controlar que los servicios ofrecidos sean los que realmente queremos, y que no estamos ofreciendo además otros servicios queno tenemos controlados. En el caso de servicios de los que nosotros somos clientes, también habrá que asegurar los mecanismos de autentificación, en el sentido de que accedemos a los servidores correctos y no existen casos de suplantación de servicios o servidores (normalmente bastante difíciles de detectar).

Respecto a las aplicaciones y a los mismos servicios, además de garantizar la correcta configuración de niveles de acceso mediante permisos y deautentificación de los usuarios permitidos, tendremos quevigilar la posible explotación de bugs en el software. Cualquier aplicación, por muy bien diseñada e implementada que esté, puede tener un número más o menos alto de errores que pueden ser aprovechados para, con ciertas técnicas, saltarse las restricciones impuestas. En este caso, practicamos una política de prevención que pasa por mantener el sistema actualizado en la medida de lo posible, de manera que, o bien actualizamos ante cualquier nueva corrección, o bien somos conservadores y mantenemos aquellas versiones que sean más estables en cuestión de seguridad. Normalmente, esto significa verificar periódicamente unos cuantos sitios de seguridad para conocer los últimos fallos detectados en el software y las vulnerabilidades que se derivan de éstos, y que podrían exponer nuestros sistemas a fallos de seguridad, ya sea local o por red.

Seguridad local

Linux es un sistema operativo multiusuario real: puede haber varios usuarios trabajando simultáneamente con él, cada uno en su terminal. Esto obliga a tener en cuenta medidas de seguridad adicionales. Además, según hablan las estadísticas, el mayor porcentaje de violaciones de un sistema son realizadas por usuarios locales. Pero no sólo hay que protegerse de las violaciones intencionadas, sino que el sistema debe protegernos de operaciones accidentales debidas a descuidos o ignorancia de los usuarios.

En este aspecto de la seguridad, Linux dispone de todas las características de los sistemas Unix: un control de acceso a los usuarios verificando una pareja de usuario y clave; cada fichero y directorio tienen sus propietarios y permisos. Por otro lado, la meta de la mayoría de los ataques es conseguir acceso como root, lo que garantiza un control total sobre el sistema. Primero se intentará conseguir acceso como usuario "normal" para posteriormente ir incrementando sus niveles de privilegio utilizando las posibles debilidades del sistema: programas con errores, configuraciones deficientes de los servicios o el descifrado de claves cifradas. Incluso se utilizan técnicas denominadas "ingeniería social", consistentes en convencer a ciertos usuarios para que suministren una información que debiera ser mantenida en secreto, como sus nombres de usuarios y contraseñas.

La seguridad local es básica para la protección del sistema, ya que normalmente, tras un primer intento de acceso desde la red, es la segunda barrera de protección antes de que un ataque se haga con parte del control de la máquina. Además, la mayoría de los ataques acaban haciendo uso de recursos internos del sistema. Diversos ataques, aunque vengan del exterior, tienen como finalidad conseguir el acceso local.

Bootloaders

Respecto a la seguridad local, ya en arranque se nos pueden presentar problemas debido al acceso físico que un intruso pudiera tener a la máquina. Uno de los problemas ya está en el arranque del sistema. Si el sistema puede arrancarse de disco o CD, un atacante podría acceder a los datos de una partición Linux (o también Windows) tan sólo con montar el sistema de ficheros y podría colocarse como usuario root sin necesidad deconocer ninguna contraseña. En este caso, se necesita proteger el arranque del sistema desde la BIOS, por ejemplo, protegiendo el acceso porcontraseña, de manera que no se permita el arranque desde CD o disquete. También es razonable actualizar la BIOS, ya que también puede tener fallos de seguridad. Además, hay que tener cuidado, porque muchos de los fabricantes de BIOS ofrecen contraseñas extras conocidas (una especie de backdoor), con lo cual no podemos depender de estas medidas en exclusiva. El siguiente paso es proteger el bootloader, ya sea lilo o grub, para que el atacante no pueda modificar las opciones de arranque del kernel o modificar directamente el arranque(caso de grub). Cualquiera de los dos puede protegerse también por contraseñas. En grub, el fichero /sbin/grub-md5-crypt pide la contraseña y genera una suma md5 asociada. Después, el valor obtenido se introduce en /boot/grub/grub.conf. Bajo la línea timeout, se introduce:

password --md5 suma-md5-calculada

Para lilo se coloca, o bien una contraseña global con:

password = contraseña

o bien uno en la partición que queramos:

image = /boot/vmlinuz-version password = contraseña
restricted

En este caso restricted indica además que no se podrán cambiar los parámetros pasados al kernel desde línea de comandos. Hay que tener cuidado de poner el fichero /etc/lilo.conf protegido a sólo lectura/escritura desde el root (chmod 600). Otro tema relacionado con el arranque es la posibilidad de que alguien que tenga acceso al teclado reinicie el sistema, debido a que si se pulsa CTRL+ALT+DEL, se provoca una operación de shutdown en la máquina. Este comportamiento viene definido en /etc/inittab, con una línea como:

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

Passwords y shadows

Las contraseñas típicas de los sistema UNIX iniciales (y de primeras versiones GNU/Linux), estaban encriptadas mediante unos algoritmos DES (pero conclaves pequeñas,  y  una  llamada  de  sistema  se  encargaba  de  encriptar  y  desencriptar,  en concreto crypt (ver man).

Normalmente, se encontraban en el fichero /etc/passwd, en el segundo campo, por ejemplo:

user:sndb565sadsd:...

Pero el problema está en que este fichero es legible por cualquier usuario, con lo que un atacante podía obtener el fichero y utilizar un ataque de fuerza bruta, hasta que desencriptase passwords contenidos en el fichero, o bien mediante ataques de fuerza bruta por medio de diccionarios.

El primer paso es utilizar los nuevos ficheros /etc/shadow, donde se guarda ahora la contraseña. Este fichero es sólo legible por el root, y por nadie más. En este caso, en /etc/passwd aparece un asterisco (*) donde antes estaba la contraseña encriptada. Por defecto, las distribuciones de GNU/Linux actuales usan contraseñas de tipo shadow a no ser que se les diga que no las usen.

Un segundo paso es cambiar el sistema de encriptación de las contraseñas por uno más complejo y difícil de romper. Ahora, tanto Red Hat como Debian ofrecen contraseñas por md5; normalmente nos dejan escoger el sistema en tiempo de instalación. Hay quetener cuidado con las contraseñas md5, ya que si usamos NIS, podríamos tener algún problema; si no, todos los clientes y servidores usarán md5 para sus contraseñas. Las contraseñas se pueden reconocer en /etc/shadow porque vienen con un prefijo “$1$”. Otras posibles actuaciones consisten en obligar a los usuarios a cambiar la contraseña con frecuencia (el comando change puede ser útil), imponer restricciones en el tamaño y elcontenido de las contraseñas, y validarlas contra diccionarios de términos comunes. Respecto a las herramientas, es interesante disponer de un cracker de contraseñas (o sea, un programa para obtener contraseñas), para comprobar la situación real de seguridad de las cuentas de nuestros usuarios, y forzar así el cambio en las que detectemos inseguras. Dos de las más utilizadas poradministradores sonJohn the Ripper y “crack”. Pueden funcionar también por diccionario, con lo cual, será interesante disponer de algún diccionario ASCII de español (pueden encontrarse algunos por la red). Otra herramienta es “Slurpie”; en este caso se trata de una herramienta que puede probar varias máquinas a la vez.

Una cuestión que debe tenerse en cuenta es que siempre hagamos estas pruebas sobre nuestros sistemas. No hay que olvidar que los administradores de otros sistemas (o el proveedor de acceso o ISP) tendrán sistemas de detección de intrusos habilitados y podemos ser objeto de denuncia por intentos de intrusión, ya sea ante las autoridades competentes (unidades de delitos informáticos) o en nuestro ISP para que se nos cierre el acceso. Hay que tener mucho cuidado con el uso de herramientas de seguridad, que tienen siempre el doble filo de la navaja, por si son de seguridad o de intrusión.

Suid y sticky bits

Otro problema importante son algunos permisos especiales que son utilizados sobre ficheros o script. El bit sticky se utiliza sobre todo en directorios temporales en que queremos que en algunos grupos (a veces no relacionados), cualquier usuario pueda escribir, pero sólo pueda borrar bien el propietario del directorio, o bien el propietario del fichero que esté en el directorio. Un ejemplo clásico de este bit, es el directorio temporal /tmp. Hay que vigilar que no haya directorios de este tipo, ya que pueden permitir que cualquiera escriba en ellos, por lo que habrá que comprobar que no haya más que los puramente necesarios como temporales. El bit se coloca mediante (chmod +t dir), y puede quitarse con -t. En un ls aparecerá como un directorio con permisos drwxrwxrwt (fijaos enla última t).

El bit setuid permite a un usuario ejecutar (ya sea un ejecutable o un shell script) con los permisos de otro usuario. Esto en algún caso puede ser de utilidad, pero es potencialmente peligroso. Es el caso, por ejemplo, de programas con setuid de root: un usuario, aunque no tiene permisos de root, puede ejecutar un programa con setuid que puede disponer de permisos internos de usuario root. Esto es muy peligroso en caso de scripts, ya que podrían editarse y modificarse para hacer cualquier cosa. Por lo tanto, hay que tener controlados estos programas, y en caso de que no se necesite el setuid, eliminarlo. El bit se coloca mediante chmod +s, ya sea aplicándolo al propietario (se llama entonces suid) o al grupo (se llama bit sgid); puede quitarse con -s. En el caso de visualizar con ls, el fichero aparecerá con –rwSrw-rw (fijaos en la S), si es sólo suid, en sgid la S aparecería tras la segunda w.

En caso de utilizar chmod con notación octal, se usan cuatro cifras, donde las tres últimas sonlos permisos clásicos rwxrwxrwx (recordad que hay que sumar en la cifra 4 para r, 2 w, y 1 para x), y la primera tiene un valor para cada permiso especial que se quiera (que se suman): 4 (para suid), 2 (sgid), y 1 (para sticky).

Habilitación de hosts

En el sistema hay unos cuantos ficheros de configuración especiales que permiten habilitar el acceso a una serie de hosts a algunos servicios de red, pero cuyos errores pueden permitir atacar después la seguridad local. Nos podemos encontrar con:

  • .rhosts de usuario: permite que un usuario pueda especificar una serie de máquinas (y usuarios) que pueden usar su cuenta mediante comandos “r” (rsh, rcp,...) sin necesidad de introducir la contraseña de la cuenta. Esto es potencialmente peligroso, ya que una mala configuración del usuario podría permitir entrar a usuarios no deseados, o que un atacante (con acceso a la cuenta del usuario) cambiase las direcciones en .rhosts para poder entrar cómodamente sin ningún control. Normalmente, no se tendría que permitir crear estos archivos, e incluso habría que borrarlos completamente y deshabilitar los comandos “r”.
  • /etc/hosts.equiv: es exactamente lo mismo que los ficheros .rhosts pero a nivel de máquina, especificando qué servicios, qué usuarios y qué grupos pueden acceder sin control de contraseña a los servicios “r”. Además, un error como poner en una línea de ese fichero un “+”, permite el acceso a “cualquier” máquina. Normalmente, hoy en día tampoco suele existir este fichero, y siempre existe la alternativa del servicio ssh a los “r”.
  • /etc/hosts.lpd: en el sistema de impresión LPD se utilizaba para poner las máquinas que podían acceder al sistema de impresión.

Hay que tener mucho cuidado, si no estamos sirviendo, de deshabilitar completamente el acceso al sistema, y en caso de que sí lo estemos, restringir al máximo las máquinas que realmente hacen uso del mismo. O intentar cambiar a un sistema CUPS o LPRng, que tienen mucho más control sobre los servicios. El sistema LPD es un blanco habitual de ataques de tipo gusano o buffer overflows, y están documentados varios bugs importantes. Hay que estar atentos si utilizamos estesistema y el fichero hosts.lpd.

Módulos PAM

Los módulos PAM son un método que permite al administrador controlar cómo se realiza elproceso de autentificación de los usuarios para determinadas aplicaciones. Las aplicaciones tienen que haber sido creadas y enlazadas a las bibliotecas PAM. Básicamente, los módulos PAM son un conjunto de bibliotecas compartidas quepueden incorporarse a las aplicaciones como método para controlar la autentificación de sus usuarios. Es más, puede cambiarse el método de autentificación (mediante la configuración de los módulos PAM), sin que sea necesario cambiar la aplicación.

Los módulos PAM (las bibliotecas) suelen estar en el directorio /lib/security. Y la configuración de PAM está presente enel directorio /etc/pam.d, donde aparece un fichero deconfiguración de PAM por cada aplicación que está usando módulos PAM. Nos encontramos con la configuración de autentificación de aplicaciones y servicios como ssh, de login gráfico de X Window System, como xdm, gdm, kdm, xscreensaver, ... o, por ejemplo, del login del sistema (la entrada por identificador de usuario y contraseña).

La línea típica de estos ficheros tendría este formato: module-type control-flag module-path arguments donde se específica:

a) tipo de módulo: si es un módulo que requiere que el usuario se autentifique (auth), o de acceso restringido (account); cosas que hay que hacer cuando el usuario entra o sale(session); o bien hay que actualizar la contraseña (password).

b) flags de control: especifican si es necesario (required), si es un requisito previo (requisite), si es suficiente (sufficient) o si es opcional (optional). Ésta es una sintaxis. Hay otra más actual que trabaja en parejas valor y acción.

c) la ruta (path) del módulo.

d) argumentos que se pasan al módulo (dependen de cada módulo).

Un pequeño ejemplo del uso de módulos PAM (en una distribución Debian), puede ser su uso en el proceso de login:

auth requisite pam_securetty.so 
authrequisite pam_nologin.so 
auth required pam_env.so
auth required pam_unix.so nullok 
account required pam_unix.so 
session required pam_unix.so 
session optional pam_lastlog.so 
session optional pam_motd.so
session optional pam_mail.so standard noenv
password required pam_unix.so nullok obscure min = 4 max = 8 md5

Esto especifica los módulos PAM necesarios para controlar la autentificación de usuarios enel login (entrada al sistema). Uno de los módulos pam_unix.so es el que realmente hace la verificación de la contraseña del usuario (viendo ficheros passwd, shadow, ...). Otros controlan su sesión para ver cuándo ha entrado por última vez, o guardan cuándo entra y sale (para el comando lastlog), también hay un módulo que se encarga de verificar si el usuario tiene correo por leer (también hay que autentificarse), y otro que controla que cambie la contraseña (si está obligado a hacerlo en el primer login que haga) y que tenga de 4 a 8 letras, y puede utilizarse md5 para la encriptación.

En este ejemplo podríamos mejorar la seguridad de los usuarios: el auth y el password permiten contraseñas de longitud nula: es el argumento nullok del módulo. Esto permitiría tener usuarios con contraseñas vacías (fuente de posibles ataques). Si qui tamos este argumento, ya no permitimos contraseñas vacías en el proceso de login. Lo mismo puede hacerse en el fichero de configuración de passwd (en este caso, el comando de cambio delpassword), que también presenta el nullok. Otra posible acción es incrementar en ambos ficheros el tamaño máximo de las contraseñas, por ejemplo, con max = 16.

Alteraciones del sistema

Otro problema puede ser la alteración de comandos o configuraciones básicas del sistema, mediante la introducción de troyanos o backdoors en el sistema, por la simple introducción de software que sustituya o modifique ligeramente el comportamiento del software de sistema.

Un caso típico es la posibilidad de forzar el root para que ejecute comandos falsos de sistema; por ejemplo, si el root incluyese el “.” en su variable de PATH, esto permitiría la ejecución de comandos desde su directorio actual, lo que habilitaría para colocar archivos quesustituyesen comandos del sistema y que serían ejecutados en primer término antes quelos de sistema. El mismo proceso puede hacerse con un usuario, aunque por ser más limitados sus permisos, puede no afectar tanto al sistema, cuanto más a la propia seguridad del usuario. Otro caso típico es el de las pantallas de login falsas, pudiéndose sustituir el típico proceso de login, passwd, por un programa falso que almacene las contraseñas introducidas.

En caso de estas alteraciones, será imprescindible usar políticas de auditoría de los cambios, ya sea por medio de cálculo de firmas o sumas (gpg o md5), o bien mediante algún software de control como Tripwire o AIDE. Para los troyanos podemos hacer diferentes tipos dedetecciones, o bien utilizar herramientas como chkrootkit, si éstos viniesen de la instalación de algún rootkit conocido.

Fuentes

  • Implementación de Servidores con GNU/Linux. Joel Barrios Dueñas
  • Administración avanzada de GNU/Linux. Josep Jorba Esteve y Remo Suppi Boldrito