Upload
vutu
View
213
Download
0
Embed Size (px)
Citation preview
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
1
Lo que pretendemos hacer con esta práctica es reforzar la seguridad de las
contraseñas de los usuario.
Nosotros vamos a trabajar sobre un sistema operativo linux, concretamente la versión
Debian 6.0 Squeeze.
1. Para empezar vamos a hacer es asignar el número de días que deben transcurrir hasta que
el usuario deba cambiar la contraseña obligatoriamente, el número mínimo de días que deben
transcurrir para que el usuario pueda cambiar la contraseña desde la última vez que lo hizo y
asignar también el número mínimo de días de antelación en los que se avisará al usuario de
que debe cambiar la contraseña.
Para poder modificar los parámetros adecuados lo primero que debemos hacer es acceder al
fichero en el que se encuentran, el /etc/login.defs
- nano /etc/login.defs
Los parámetros que vamos a modificar son:
1 - PASS_MAX_DAYS (es donde especificamos el número de días en que el usuario deberá
cambiar la contraseña)
2- PASS_MIN_DAYS (especificamos el número de días en que el usuario puede volver a cambiar
la contraseña desde la última vez que lo hizo)
3- PASS_WARN_AGE (asignamos el número de días con antelación en que se le notificará que
debe cambiar la contraseña)
Y los valores que les vamos a asignar serán 60, 1 y 15 respectivamente.
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
2
2. El siguiente paso que vamos a realizar es especificar que la cuenta se bloquee si un usuario
no cambia su contraseña dos semanas después de haber caducado, puesto que se entendería
que la cuenta no está siendo utilizada y así minimizamos el riesgo de accesos indebidos.
Para poder realizar este paso debemos acceder al fichero /etc/default/useradd y
modificaremos el parámetro INACTIVE, nosotros le asignaremos como valor 14 puesto que
hemos decidido que se bloquee a las 2 semanas.
- nano /etc/default/useradd
3. Si un usuario ha sido desactivado y queremos volver a activarlo debemos eliminar la
expiración y poner una nueva contraseña.
Para activar la cuenta debemos cambiar la fecha de último cambio de clave a una fecha
reciente, idealmente justo para que estén obligados a cambiar la clave en el próximo login. Un
ejemplo:
- chage - d 2012 - 1 -2 1 usuario
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
3
Otra forma sería:
- chage - E -1 usuario
- passwd usuario
Para comprobar el estado del usuario ponemos:
- passwd - S usuario
- chage - l usuario
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
4
4. Ahora controlaremos que el usuario no reutilice las últimas N contraseñas, para ello
llevaremos un control de contraseñas históricas. Además validaremos también la robustez de
las contraseñas. Para poder hacer todo esto debemos instalarel paquete libpam-crackilb:
- aptitude install libpam-crackilb
Y lo actualizaremos:
-update cracklib
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
5
El módulo pam_cracklib está hecho específicamente para esta tarea, se inserta en la fase
passwd de PAM y antes de aceptar una clave nueva le corre una serie de pruebas para
determinar si es suficientemente fuerte
Para poder modificar los parámetros adecuados debemos editar el fichero
/etc/pam.d/common-password y modificar los siguientes parámetros:
- nano /etc/pam.d/common-password
- password required pam_cracklib.so retry=3 minlen=8 difok=1 lcredit=0 ucredit=1
dcredit=1 ocredit=2
- password requisite pam_unix.so use_authtok obscure md5 remember=12
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
6
Lo que hemos hecho es que el usuario tiene que repetir 3 veces la contraseña para realizar el
cambio; ponerle una logitud mínima de 8 caracteres; que al menos 1 carácter debe ser
diferente al password anterior. Según el manual el parámetro "obscure" provoca que se
realicen las siguientes validaciones:
• Palindrome: Verifica que la nueva contraseña no es un palíndromo(es decir, el reverso
de la anterior).
• Case Change Only: Verifica que la nueva contraseña no es la misma que la anterior con
un cambio en los carácteres(p.ej cambiar solo las minúculas por mayúculas y viceversa,
en una contraseña).
• Similar: Verifica que si la nueva contraseña es demasiado parecido a la anterior.
• Simple: Verifica si la contraseña es demasiado simple. Esto se basa en la longitud de la
contraseña y si se utilizan diferentes tipos de caracteres (p.ej: símbolos, caracteres alfa
numérico, etc.)
• Rotated: Verifica si la nueva contraseña es una versión girada de la antigua contraseña
(Por ejemplo, "Clave", "Vecla" o “vacle”)
Por su parte, cracklib realiza estas otras comprobaciones:
• Que los cambios de passwords no se simplemente invertir la palabra o cambiar
mayúsculas por minúsculas.
• Que los cambios de passwords no se simplemente invertir la palabra o cambiar
mayúsculas por minúsculas.
• Comprobaciones contra un diccionario interno, construido a partir de datos que hay en
los ficheros del sistema (update-cracklib).
Finalmente remember=12 hace que el sistema recuerde las últimas 12 contraseñas y no deja
que el usuario las repita. Para que todo funcione vamos a tener que realizar algunas
modificaciones:
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
7
- touch /etc/security/opasswd
- chown root:root /etc/security/opasswd
- chmod 600 /etc/security/opasswd
- ls -l /etc/security/opasswd (para comprobar que las modificaciones se han realizado
correctamente)
Ahora, veremos el estado actual de nuestra máquina. Para ello debemos utilizar el comando:
- chage -l usuario
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
8
5. Una vez que hemos creado un usuario podremos modificar sus opciones. Para hacer la
modificación utilizaremos el comando chage con sus opciones. Un ejemplo:
- chage - M 60 - W 15 - I 14 - m 1 usuario
Con esto, lo que haremos será modificar los parámetros PASS_MAX_DAYS, PASS_MIN_DAYS,
PASS_WARN_AGE que, como hemos dicho anteriormente, se encuentran especificados en el
fichero /etc/login.defs, y el valor del parámetro INACTIVE que está en el fichero
/etc/default/useradd.
6. Lo que haremos ahora será gestionar el acceso de los usuarios. Después de que un usuario
ponga 3 veces mal su contraseña se bloqueará la cuenta para los siguientes 30 segundos,
durante los cuales será denegado su acceso aunque ponga correctamente la clave.
Para realizar este paso utilizaremos pam_tally y editando el fichero /etc/pam.d/common-
auth. Los parámetros que debemos modificar son:
- # 3 auth attempts, after that user will be locked for 30 seconds for each new failed
attempt
- auth required pam_tally.so onerr=succeed deny=3 unlock_time=30 per_user
- auth sufficient pam_unix.so
- auth sufficient pam_opie.so
- auth required pam_deny.so
- # Reset user lock if auth suceeds
- account required pam_tally.so onerr=succeed
El parámetro per_user hará que tally valide si se ha establecido algún valor individual
(diferente de 0) al usuario mediante faillog. Por ejemplo, para limitar el número de reintentos
fallidos y establecer el tiempo de bloqueo para un usuario concreto utilizaremos el comando:
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
9
- faillog ‐‐maximum 5 ‐‐lock‐time 120 ‐u unusuario
Otro ejemplo, para no permitir que un usuario se bloquee aunque sobrepase los valores por
defecto de intentos fallidos de autenticación utilizaremos el comando:
- faillog ‐‐maximum ‐1 ‐u unusuario
Para ver el estado de los usuarios podemos utilizar:
- pam_tally
- pam_tally ‐‐user unsusuario
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
10
- faillog ‐a
- faillog ‐u unusuario
Para desbloquear un usuario:
- pam_tally ‐‐user unusuario ‐‐reset
- faillog ‐u unusuario ‐r
Es importante eliminar todos los parámetros ‘nullok’ o ‘nullok_secure’ del modulo pam_unix.o
dado que permiten passwords en blanco (tanto en commonpassword como en common-auth).
7. En este punto gestionaremos usuarios. Para crear un usuario, asignarle un password y
algunas políticas de seguridad directamente ejecutaremos el siguiente comando:
- useradd -g usuario‐d /home/ana -m -s /bin/bash ana
- passwd ana (X4n4dub3)
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
11
Comprobación de que funciona el usuario:
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
12
Si no se nos ocurren contraseñas podemos establecerlas usando el programa makepasswd.
Para ello lo primero que tenemos que hacer es instalar dicho programa:
- aptitude install makepasswd
Una vez instalado debemos especificar la cantidad de caracteres que queremos que tenga la
contraseña. Para ello utilizaremos en comando char de la siguiente forma:
- makepasswd –chars=8
8. Consejos para evitar que alguien obtenga privilegios root del sistema:
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
13
- No darle la contraseña a personas no autorizadas.
- Desactivar o no usar demasiado el comando “sudo” y de usarlo debe configurarlo
correctamente para que no guarde las contraseñas.
- Desactivar el acceso como root desde kdm/gdm/etc... (por defeco debería estar desactivado,
pero no está de más comprobar).
- Ponerle contraseña al cargador de arranque, ya que en “grub” y “lilo” se puede editar los
parámetros de arranque, y con single o 1 da un shell con los privilegios root.
- Bloquear el acceso a BIOS (poner contraseña al SETUP) y establecer el arranque directo desde
el HD.(Desactivar inicio mediante CD-ROM o dispositivos USB).
Contraseñas del gestor de arranque
A continuación se muestran las razones principales por las cuales proteger el gestor de
arranque GNU/Linux:
• Previene el acceso en modo monousuario — Si un atacante puede arrancar en modo
monousuario, se convierte en el superusuario de forma automática sin que se le
solicite la contraseña de acceso.
• Previene el acceso a la consola de GRUB — Si la máquina utiliza GRUB como el gestor
de arranque, un atacante puede usar la interfaz del editor para cambiar su
configuración o para reunir información usando el comando cat.
• Previene el acceso a sistemas operativos inseguros — Si es un sistema de arranque
dual, un atacante puede seleccionar un sistema operativo en el momento de arranque,
tal como DOS, el cual ignora los controles de acceso y los permisos de archivos.
Protegiendo GRUB con contraseñas
Puede configurar GRUB para solucionar los primeros dos problemas listados en la añadiendo
una directiva de contraseña a su archivo de configuración. Para hacer esto, primero seleccione
una contraseña, luego abra un indicador de comandos del shell, conéctese como root y
escriba:
- /sbin/grub‐md5‐crypt
Cuando se le pida, escriba la contraseña GRUB y presione la tecla ENTER. Esto retornará un
hash MD5 para la contraseña.
Luego, modifique el archivo de configuración GRUB /boot/grub/grub.conf. Abra el archivo y
debajo de la línea timeout en la sección principal del documento, añada la siguiente línea:
- password ‐‐md5 <password‐hash>
Reemplace <password-hash> con el valor retornado por /sbin/grub-md5-crypt.
La próxima vez que el sistema arranque, el menú de GRUB no le permitirá accesar el editor o la
interfaz de comandos sin primero presionar seguido por la contraseña de GRUB.
Lamentablemente, esta solución no previene a un atacante de arrancar en un sistema
operativo inseguro, si se está en un ambiente de arranque dual. Para esto, necesita editar una
parte diferente del archivo /boot/grub/grub.conf.
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
14
Busque la línea title del sistema operativo inseguro y añada una línea que diga lock
directamente debajo de ella.
Para un sistema DOS, la estrofa debería comenzar con algo similar a:
- title DOS
- lock
Aviso:
Debe tener una línea password en la sección principal del archivo /boot/grub/grub.conf para
que esto funcione adecuadamente. De otra forma un atacante podrá acceder a la interfaz del
editor de GRUB y eliminar la línea de bloqueo.
Para crear una contraseña diferente para un kernel o sistema operativo particular, añada una
línea lock a la estrofa, seguido por una línea de contraseña.
Cada estrofa que usted proteja con una contraseña única debería comenzar con líneas
similares a las del ejemplo siguiente:
- title DOS
- lock
- password ‐‐md5 <password‐hash>
Notas:
1- Debido a que los sistemas BIOS varian de acuerdo al fabricante, algunos pueden que no
soporten la protección con contraseñas de ningún tipo, mientras que otras pueden soportar un
tipo pero no el otro.
2- GRUB también acepta contraseñas no encriptadas, pero se recomienda que utilice un hash
md5 para mayor seguridad.
Sobre seguridad en sistemas GNU/Linux. http://foro.jovenclub.cu/showthread.php?tid=6598
3 de 4 05/01/2012 10:19
Fuente:
You are not allowed to view links. Register or Login to view.
Métodos para evitar acceder directamente como root:
1. Deshabilitar el acceso root a través de cualquier dispositivo terminal ver el fichero:
- /etc/securetty
El archivo indica los terminales (ttys, pts, . . . ) en los que se puede conectar como root , si es
un fichero vacío, root no podrá entrar mediante servicios de la red que abran un terminal o
pseudoterminal, para impedir el acceso de root a través de un Display Manager (xdm, gdm,
etc.) o ssh tendremos que añadir la línea siguiente al fichero /etc/pam.d /{xdm,gdm,kdm,ssh}
Práctica 3.2 - Seguridad y Alta Disponibilidad 2012
15
- auth required pam_securetty.so
2. Deshabilitar conexiones root SSH
- /etc/ssh/sshd_config
Modificar el archivo y fijar el parámetro
- PermitRootLogin no
- a
- PermitRootLogin 14