Fortaleciendo nuestras contraseñas

Si una de las promesas que tiene para este cierre de año es fortalecer las contraseñas en sus equipos personales, cambiarlas mensualmente y no repetir la misma contraseña en al menos doce cambios. En este artículo se le explicará como hacerlo sin tener que invertir una uva en ello, todo esto gracias al paquete libpam-cracklib en Debian, el procedimiento mostrado debe aplicarse a otras distribuciones derivadas de Debian.

Pareciese lógico que algunas de las mejores prácticas para el fortalecimiento de las contraseñas son las siguientes:

  • Cambiar las contraseñas periódicamente.
  • Establecer una longitud mínima en las contraseñas.
  • Establecer buenas reglas para las nuevas contraseñas, es decir, mezcla entre letras mayúsculas, minúsculas, dígitos y caracteres alfanuméricos.
  • Mantener un histórico de las contraseñas usadas previamente, de ese modo, alentamos a los usuarios establecer nuevas contraseñas.
  • Indicarle a los usuarios que es inaudito que se anoten las contraseñas en un post-it y se dejen pegadas en los monitores o incluso en las gavetas de sus archivadores.

El primer paso es instalar el paquete libpam-cracklib

# apt-get install libpam-cracklib

A partir de la versión 1.0.1-6 de PAM se recomienda manejar la configuración vía pam-auth-update. Por lo tanto, por favor tome un momento y lea la sección 8 del manual del comando pam-auth-update para aclarar su uso y ventajas.

$ man 8 pam-auth-update

Ahora establezca una configuración similar a la siguiente, vamos primero con la exigencia en la fortaleza de las contraseñas, para ello edite o cree el fichero /usr/share/pam-configs/cracklib.


Name: Cracklib password strength checking
Default: yes
Priority: 1024
Conflicts: unix-zany
Password-Type: Primary
Password:
	requisite			pam_cracklib.so retry=3 minlen=8 difok=3
Password-Initial:
	requisite			pam_cracklib.so retry=3 minlen=8 difok=3

NOTA: Le recomiendo leer la sección 8 del manual de pam_cracklib para encontrar un mayor numero de opciones de configuración. Esto es solo un ejemplo.

En versiones previas el modulo pam_cracklib hacia uso del fichero /etc/security/opasswd para conocer si la propuesta de cambio de contraseña no había sido utilizada previamente. Dicha funcionalidad ahora corresponde al nuevo modulo pam_pwhistory

Definamos el funcionamiento de pam_pwhistory a través del fichero /usr/share/pam-configs/history.


Name: PAM module to remember last passwords
Default: yes
Priority: 1023
Password-Type: Primary
Password:
	requisite			pam_pwhistory.so use_authtok enforce_for_root remember=12 retry=3
Password-Initial:
	requisite			pam_pwhistory.so use_authtok enforce_for_root remember=12 retry=3

NOTA: Para mayor detalle de las opciones puede revisar la sección 8 del manual de pam_pwhistory

Seguidamente proceda a actualizar la configuración de PAM vía pam-auth-update.

Una vez cubierta la fortaleza de las contraseñas nuevas y de evitar la reutilización de las ultimas 12, de acuerdo al ejemplo mostrado, resta cubrir la definición de los periodos de cambio de las contraseñas.

Para futuros usuarios debemos ajustar ciertos valores en el fichero /etc/login.defs


#
# Password aging controls:
#
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   30
PASS_MIN_DAYS   0
PASS_WARN_AGE   5

Las reglas previas no aplicaran para los usuarios existentes, pero para este tipo de usuarios podremos hacer uso del comando chage de la siguiente manera:

# chage -m 0 -M 30 -W 5 ${user}

Donde el valor de ${user} debe ser reemplazo por el username.

GRUB: Mejorando nuestro gestor de arranque

Anteriormente había comentado en la primera entrega del artículo Debian: Bienvenido al Sistema Operativo Universal que por medidas de seguridad establezco las opciones de montaje ro, nodev, nosuid, noexec en la partición /boot, donde se encuentran los ficheros estáticos del gestor de arranque.

El gestor de arranque que manejo es GRUB. Por lo tanto, el motivo de este artículo es explicar como suelo personalizarlo, tanto para dotarle de seguridad como mejorar su presentación.

Seguridad

Lo primero que hago es verificar el dueño y los permisos que posee el fichero /boot/grub/menu.lst, en mi opinión la permisología más abierta y peligrosa sería 644, pero normalmente la establezco en 600, evitando de ese modo que todos los usuarios (excepto el dueño del fichero, que en este caso será root) puedan leer y escribir en dicho fichero. Para lograr esto recurrimos al comando chmod.

# chmod 600 /boot/grub/menu.lst

Si usted al igual que yo mantiene a /boot como una partición de solo lectura, deberá montar de nuevo la partición /boot estableciendo la opción de escritura, para lo cual hacemos:

# mount -o remount,rw /boot

Después de ello si podrá cambiar la permisología del fichero /boot/grub/menu.lst de ser necesario.

El segundo paso es evitar que se modifique de manera interactiva las opciones de inicio del kernel desde el gestor de arranque, para ello estableceremos una contraseña para poder editar dichas opciones, pero primero nos aseguraremos de cifrar esa contraseña con el algoritmo MD5. Por lo tanto, haremos uso de grub-md5-crypt

# grub-md5-crypt
Password:
Retype password:
$1$56z5r1$yMeSchRfnxdS3QDzLpovV1

La última línea es el resultado de aplicarle el algoritmo MD5 a nuestra contraseña, la copiaremos e inmediatamente procedemos a modificar de nuevo el fichero /boot/grub/menu.lst, el cual debería quedar más o menos como se muestra a continuación.

password --md5 $1$56z5r1$yMeSchRfnxdS3QDzLpovV1

title           Debian GNU/Linux, kernel 2.6.18-3-686
root            (hd0,1)
kernel          /vmlinuz-2.6.18-3-686 root=/dev/sda1 ro
initrd          /initrd.img-2.6.18-3-686
savedefault

title           Debian GNU/Linux, kernel 2.6.18-3-686 (single-user mode)
root            (hd0,1)
kernel          /vmlinuz-2.6.18-3-686 root=/dev/sda1 ro single
initrd          /initrd.img-2.6.18-3-686
savedefault

La instrucción password --md5 aplica a nivel global, así que cada vez que desee editar las opciones de inicio del kernel, tendrá que introducir la clave (deberá presionar la tecla p para que la clave le sea solicitada) que le permitirá editar dichas opciones.

Presentación del gestor de arranque

A muchos quizá no les agrade el aspecto inicial que posee el GRUB, una manera de personalizar la presentación de nuestro gestor de arranque puede ser la descrita en la segunda entrega de la entrada Debian: Bienvenido al Sistema Operativo Universal en donde instalaba el paquete grub-splashimages y posteriormente establecía un enlace simbólico, el problema de esto es que estamos limitados a las imágenes que trae solo ese paquete.

A menos que a usted le guste diseñar sus propios fondos, puede usar los siguientes recursos:

Después de escoger la imagen que servirá de fondo para el gestor de arranque, la descargamos y la colocamos dentro del directorio /boot/grub/, una vez allí procedemos a modificar el fichero /boot/grub/menu.lst y colocaremos lo siguiente:

splashimage=(hd0,1)/grub/debian.xpm.gz

En la línea anterior he asumido lo siguiente:

  • La imagen que he colocado dentro del directorio /boot/grub/ lleva por nombre debian.xpm.gz

  • He ajustado la ubicación de mi partición /boot, es probable que en su caso sea diferente, para obtener dicha información puede hacerlo al leer la tabla de particiones con fdisk -l o haciendo uso del comando mount.

    $ mount | grep /boot
    /dev/sda2 on /boot type ext2 (rw,noexec,nosuid,nodev)
    # fdisk -l | grep ^/dev/sda2
    /dev/sda2            1217        1226       80325   83  Linux

    Por lo tanto, la ubicación de la partición /boot es en el primer disco duro, en la segunda partición, recordando que la notación en el grub comienza a partir de cero y no a partir de uno, tenemos como resultado hd0,1.

También puede darse el caso que ninguno de los fondos para el gestor de arranque mostrados en los recursos señalados previamente sean de su agrado. En ese caso, puede que le sirva el siguiente video demostrativo sobre como convertir un fondo de escritorio en un Grub Splash Image (2 MB) haciendo uso de The Gimp, espero le sea útil.

Después de personalizar el fichero /boot/grub/menu.lst recuerde ejecutar el comando update-grub como superusuario para actualizar las opciones.

Generando contraseñas aleatorias con Perl

El día de hoy se manifestó la necesidad de generar una serie de claves aleatorias para un proyecto en el que me he involucrado recientemente, la idea es que la entrada que tenemos corresponde más o menos al siguiente formato:

username_1
username_2
...
username_n

La salida que se desea obtener debe cumplir con el siguiente formato:

username_1 pass_1
username_2 pass_2
username_3 pass_3
...
username_n pass_n

En este caso debía cumplir un requisito fundamental, las contraseñas deben ser suficientemente seguras.

No pensaba en otra cosa que usar el lenguaje de programación Perl para realizar esta tarea, así fue, hice uso del poderío que brinda Perl+CPAN y en menos de 5 minutos ya tenía la solución al problema planteado, el tiempo restante me sirvió para comerme un pedazo de torta que me dió mi hermana, quien estuvo de cumpleaños el día de ayer.

En primer lugar, debemos instalar el módulo String::MkPasswd, el cual nos permitirá generar contraseñas de manera aleatoria. Si usted disfruta de una distribución decente como Debian1 la instalación del módulo es realmente trivial.

# aptitude install libstring-mkpasswd-perl

Además, si usted se detiene unos segundos y lee la documentación del módulo String::MkPasswd2, se dará cuenta que la función mkpasswd() toma un hash de argumentos opcionales. Si no le pasa ningún argumento a esta función estará generando constraseñas aleatorias con las siguientes características:

  • La longitud de la contraseña será de 9.
  • El número mínimo de dígitos será de 2.
  • El número mínimo de caracteres en minúsculas será de 2.
  • El número mínimo de caracteres en mayúsculas será de 2.
  • El número mínimo de caracteres no alfanuméricos será de 1.
  • Los caracteres no serán distribuidos entre los lados izquierdo y derecho del teclado.

Ahora bien, asumiendo que el fichero de entrada es users.data, la tarea con Perl es resumida en una línea de la siguiente manera.

perl -MString::MkPasswd=mkpasswd -nli -e 'print $_, " ", mkpasswd()' users.data

La línea anterior hace uso de la función mkpasswd del módulo String::MkPasswd para generar las contraseñas aleatorias para cada uno de los usuarios que se encuentran en el fichero de entrada users.data, además, la opción -i3 permite editar el fichero de entrada in situ, ahora bien, quizá para algunos paranoicos (me incluyo) no sea suficiente todo esto, así que vamos a generar contraseñas aleatorias aún más complicadas.


#!/usr/bin/perl -li

use strict;
use warnings;
use String::MkPasswd qw(mkpasswd);

while(<>){
        chomp;
        print $_, " ", mkpasswd(
                -length => 16,
                -minnum => 5,
                -minlower => 5,
                -minupper => 3,
                -minspecial => 3,
                -distribute => 1
        );
}

En esta ocasión el la función mkpasswd() generará claves aún más complejas, dichas claves cumplirán con las siguientes condiciones.

-length

La longitud total de la contraseña, 16 en este caso.
-minnum
El número mínimo de digitos. 5 en este caso.
-minlower
El número mínimo de caracteres en minúsculas, en este caso 5.
-minupper
El número mínimo de caracterés en mayúsculas, en este caso 3.
-minspecial
El número mínimo de caracteres no alfanuméricos, en este caso será de 3.
-distribute

Los caracteres de la contraseña serán distribuidos entre el lado izquierdo y derecho del teclado, esto hace más díficil que un fisgón vea la contraseña que uno está escribiendo. El valor predeterminado es falso, en este caso el valor es verdadero.

El script mostrado anteriormente lo podemos reducir a una línea, aunque preferí guardarlo en un fichero al que denomine genpasswd.pl por cuestiones de legibilidad.

  1. Recuerde, Debian es inexorable[regresar]
  2. Este modulo en particular no solo se encuentra perfectamente integrado con nuestra distribución favorita, sino que además sus dependencias están resueltas. Esto es una simple muestra del poderío que ofrece una distribución como Debian.[regresar]
  3. Para mayor información acerca de las distintas opciones usadas se le sugiere referirse a man perlrun[regresar]

Vulnerabilidad grave corregida en ubuntu

La vulnerabilidad en ubuntu donde cualquiera con acceso al shell podía ver la contraseña del instalador del sistema ha sido reparada.

Los paquetes afectados son base-config y passwd en Ubuntu 5.10 (Breezy Badger), el problema puede ser corregido al actualizar los paquetes afectados a las versiones 2.67ubuntu20 (base-config) y 1:4.0.3-37ubuntu8 (passwd). En general, una actualización del sistema es suficiente para que los cambios surtan efecto.

La vulnerabilidad en donde era posible ver la constraseña del instalador de ubuntu y así tener acceso a privilegios de superusuario (por supuesto, si la contraseña no había sido cambiada desde la instalación) fue descubierta por Karl Øie, el instalador de Ubuntu 5.10 falla en la limpieza de contraseñas en los ficheros de registros de instalación. Dichos ficheros pueden ser leidos por cualquiera, de este modo cualquier usuario local pudiese ver las contraseñas del primer usuario, el cual tiene privilegios por completo en una instalación por defecto.

El paquete actualizado eliminará las contraseñas almacenadas en texto plano en los ficheros de registro de instalación y adicionalmente hará que los registros sean leídos únicamente por el superusuario.

Esta vulnerabilidad no afecta a los instaladores de las versiones 4.10, 5.04, o la que está por llegar, 6.04. Sin embargo, considere necesario aplicar el parche si usted ha actualizado su sistema desde Ubuntu 5.10 a la actual versión en desarrollo 6.04 (Dapper Drake), en este caso verifique que ha actualizado el paquete passwd a la versión 1:4.0.13-7ubuntu2.

Vulnerabilidad en el kernel Linux de ubuntu

Este problema de seguridad únicamente afecta a la distribución Ubuntu 5.10, Breezy Badger.

Los paquetes afectados son los siguientes:

  • linux-image-2.6.12-10-386
  • linux-image-2.6.12-10-686
  • linux-image-2.6.12-10-686-smp
  • linux-image-2.6.12-10-amd64-generic
  • linux-image-2.6.12-10-amd64-k8
  • linux-image-2.6.12-10-amd64-k8-smp
  • linux-image-2.6.12-10-amd64-xeon
  • linux-image-2.6.12-10-iseries-smp
  • linux-image-2.6.12-10-itanium
  • linux-image-2.6.12-10-itanium-smp
  • linux-image-2.6.12-10-k7
  • linux-image-2.6.12-10-k7-smp
  • linux-image-2.6.12-10-mckinley
  • linux-image-2.6.12-10-mckinley-smp
  • linux-image-2.6.12-10-powerpc
  • linux-image-2.6.12-10-powerpc-smp
  • linux-image-2.6.12-10-powerpc64-smp
  • linux-patch-ubuntu-2.6.12

El problema puede ser solucionado al actualizar los paquetes afectados a la versión 2.6.12-10.28. Posterior al proceso de actualización debe reiniciar el sistema para que los cambios logren surtir efecto.

Puede encontrar mayor detalle acerca de esta información en el anuncio Linux kernel vulnerability hecho por Martin Pitt a la lista de correos de avisos de seguridad en Ubuntu.

Vulnerabilidad en Apache

Según un anuncio hecho el día de hoy por Adam Conrad a la lista de seguridad de ubuntu existe una vulnerabilidad que podría permitirle a una página web maligna (o un correo electrónico maligno en HTML) utilizar técnicas de Cross Site Scripting en Apache. Esta vulnerabilidad afecta a las versiones: Ubuntu 4.10 (Warty Warthog), Ubuntu 5.04 (Hoary Hedgehog) y Ubuntu 5.10 (Breezy Badger).

De manera adicional, Hartmut Keil descubre una vulnerabilidad en el módulo SSL (mod_ssl), que permitiría realizar una denegación de servicio (DoS), lo cual pone en riesgo la integridad del servidor. Esta última vulnerabilidad solo afecta a apache2, siempre y cuando esté usando la implementación “worker” (apache2-mpm-worker).

Los paquetes afectados son los siguientes:

  • apache-common
  • apache2-common
  • apache2-mpm-worker

Los problemas mencionados previamente pueden ser corregidos al actualizar los paquetes mencionados.

Vulnerabilidad en Perl

Las siguientes versiones se encuentran afectadas ante este fallo de seguridad:

  • Ubuntu 4.10 (Warty Warthog)
  • Ubuntu 5.04 (Hoary Hedgehog)
  • Ubuntu 5.10 (Breezy Badger)

En particular, los siguientes paquetes se encuentran afectados:

  • libperl5.8
  • perl-base

El problema puede ser corregido actualizando los paquetes a sus últimas versiones en las respectivas versiones de Ubuntu. En general, el modo estándar de actualizar la distribución será mas que suficiente.

$ sudo aptitude dist-upgrade

La actualización pretende solucionar una vulnerabilidad del interprete Perl, el cual no era capaz de manejar todos los posibles casos de una entrada malformada que podría permitir la ejecución de código arbitrario, así que es recomendable actualizar su sistema de inmediato.

Sin embargo, es importante hacer notar que esta vulnerabilidad puede ser aprovechada en aquellos programas inseguros escritos en Perl que utilizan variables con valores definidos por el usuario en cadenas de caracteres y en donde no se realiza una verificación de dichos valores.

Si desea mayor detalle, le recomiendo leer el anuncio hecho por Martin Pitt en [USN-222-1] Perl vulnerability.

Maestro, es Windows XP un virus?

Ps:
Háblame, estoy atento a tus palabras, mi Maestro.
M:
Los virus se reproducen rápidamente por todo el planeta.
Ps:
Bueno, windows XP hace eso.
M:
Los virus consumen varios recursos del sistema, ralentizándolo.
PS:
Bueno, windows XP también hace eso.
M:
Los virus de vez en cuando arruinan tu disco duro.
Ps:
Oopss!! pues windows XP también lo hace!
M:
Normalmente los virus se trasmiten, de forma que el usuario no lo sepa, junto con valiosos programas y sistemas.
PS:
Por los dioses del cielo!!…Windows XP hace eso también!!!
M:
Ocasionalmente los virus harán creer al usuario que su sistema es demasiado lento y el infeliz comprará hardware nuevo.
PS:
Cielos, maestro!!! eso también va con windows XP.
M:
Mira pequeño saltamontes, hasta ahora parece que windows XP es un virus, pero hay diferencias fundamentales: Los virus están bien soportados por sus autores, funcionan en la mayoría de los sistemas, su código es rápido, compacto y eficiente, y tienden a sofisticarse más y más a medida que maduran.
Ps:
Ahhhhh, entonces windows XP no es un virus.
M:
No pequeño saltamontes, no es un virus. Es un bug!.

Vía: Seguridad0.info