www.codigolibre.org
Academia Código Libre
GNU/Instructor Ing. Jose Paredes
www.acl.edu.do
www.codigolibre.org
Academia Código Libre
www.acl.edu.do
Aprendiendo Practicando GNU/Seguridad En esta práctica usted aprenderá: Elementos de Seguridad y sus Principios, Conocer los Servicios Abiertos, Concepto de Encriptacion y sus Procesos, Lista de Shells, Autentificacion, Restrincciones, El uso de su, sudo y los permisos SUID, GUID y el Sticky bit, Permisos con Chattr, Llaves PGP y GPG , Asegurar el Grub, Selinux . Si completas el 100% de estos ejercicios podremos garantizar su aprendizaje.
Archivos relacionados con seguridad en GNU/Linux. 1. Forma correcta de cambiar root. [root@JP ~]# su -
2. Para conocer los servicios abiertos. [root@JP ~]# nmap localhost
3. Para conocer los servicios que se están ejecutando. [root@JP ~]# ls /etc/rc2.d/
4. El archivo de contraseñas es sin discusión el fichero más crítico en Linux . [root@JP ~]# cat /etc/passwd
5. El archivo de shadow alberga pares de nombres de usuarios y contraseñas, así como información contable, como la fecha de expiración, y otros campos especiales . [root@JP ~]# cat /etc/shadow
6. El archivo de grupos contiene toda la información de pertenencia a grupos . [root@JP ~]# cat /etc/group
7. Similar al fichero shadow de contraseñas, este fichero contiene los grupos, contraseñas y miembros . [root@JP ~]# cat /etc/gshadow
8. Este fichero te permite definir algunos valores por defecto para GNU/Instructor Ing. Jose Paredes
www.codigolibre.org
Academia Código Libre
www.acl.edu.do
diferentes programas como useradd y expiración de contraseñas. [root@JP ~]# cat /etc/login.defs
9. El fichero de shells contiene una lista de shells válidos, si el shell por omisión de un usuario no aparece listado aquí, no podrá hacer login interactivamente. [root@JP ~]# cat /etc/shells
10. Este fichero contiene una lista de tty’s desde los que el root puede hacer un login. [root@JP ~]# cat /etc/securetty
11. para ver la información de envejecimiento de la cuenta. [root@JP ~]# chage
-l estudiantes
12. Modificamos para que la contraseña caduque el 01/11/2013. [root@JP ~]# chage
-E 15/04/2013 estudiantes
13. Ahora vamos a cambiar los días de aviso antes de que expire la contraseña. [root@JP ~]# chage -W 10 estudiantes
14. Modificar el fichero securetty para impedir el acceso de root a los ttys. Probarlo intentando entrar en consola como root. Modificamos el fichero /etc/securetty comentamos la línea de tty1 por ejemplo, ahora guardamos. [root@JP ~]# vim /etc/securetty GNUNota:Tratar de hacer Login como Root en la tty comentada.
15. Para bloquear un usuario. [root@JP ~]# passwd -l estudiantes
16. Para desbloquear un usuario. [root@JP ~]# passwd -u estudiantes
17. Cambiar la contraseña de un usuario. [root@JP ~]# passwd estudiantes
GNU/Instructor Ing. Jose Paredes
www.codigolibre.org
Academia Código Libre
www.acl.edu.do
18. Vamos hacer que solo el usuario estudiantes pueda cambiar al administrador “ROOT” Agregamos el usuario estudiantes al grupo WHEEL [root@JP ~]# gpasswd -a estudiantes wheel
Solo permiten el acceso root a los miembros del grupo wheel, ahora estudiante: [root@JP ~]# vim /etc/pam.d/su
En la linea 6 descomentamos: auth required
pam_wheel.so use_uid
GNUNotas:Tratar de hacer Login como Root.
19. hacer que la cuenta de un usuario expire en 30 días desde hoy. [root@JP ~]# usermod -e 30 estudiantes
20. Para comprobar el estado del usuario . [root@JP ~]# passwd -S estudiantes [root@JP ~]# chage -l estudiantes
21. Para confirmar que SELinux está activado . [root@JP ~]# sestatus
22. El archivo /etc/selinux/config es el archivo de configuración principal de SELinux [root@JP ~]# cat /etc/selinux/config
23. Ver el estatus del servicio iptables. [root@JP ~]# service iptables status
24. Para encontrar todos los programas setuid . [root@JP ~]# find / --perm +4000
25. Para encontrar todos los programas setgid . [root@JP ~]# find / --perm +2000
GNU/Instructor Ing. Jose Paredes
www.codigolibre.org
Academia Código Libre
www.acl.edu.do
26. Cómo se ven los servicios activos. [root@JP ~]# netstat -atu | grep '*:*' | less
27. Para ver qué servicios RPC ofrece actualmente tu máquina ejecuta el siguiente comando. [root@JP ~]# rpcinfo -p
28. Explique a especial.
su
GNU/Instructor
porque
/tmp
tiene
un
permiso
[root@JP ~]# stat /tmp
29. Identifique su máscara de usuario que establece los permisos por defecto. [root@JP ~]# umask
30. Archivo que contiene los parámetros del kernel. [root@JP ~]# cat /etc/sysctl.conf
Chattr 31. Para estos ejercicios usted deberá crear un directorio y copiar el archivo passwd. [jp@oraserv5 ~]$ mkdir chattr [jp@oraserv5 ~]$ cd chattr/ [jp@oraserv5 chattr]$ cp /etc/passwd .
32. El siguiente mandato agrega el atributo inmutable al archivo passwd. [jp@oraserv5 chattr$ chattr +i passwd GNUNota: Trate de borrar el archivo.
33. Con la opción +i, aplicamos la inmutabilidad, la opción -V es para ver lo que hace justamente. [jp@oraserv5 chattr]$ chattr -V +i passwd
34. ver el listado de archivos y los atributos [jp@oraserv5 chattr]$ lsattr
GNU/Instructor Ing. Jose Paredes
www.codigolibre.org
Academia Código Libre
www.acl.edu.do
GNUPG. 35. Lista claves públicas [jp@oraserv5 clase]$ gpg --list-key
36. Crea una llave pública y privada. [jp@oraserv5 clase]$ gpg --gen-key
37. Lista llaves privadas. [jp@oraserv5 clase]$ gpg -K
38. Exporta clave y con "-o" crea un archivo donde se guardara "archivo_clave" [jp@oraserv5 clase]$ gpg --export -o acl_clave
39. Hace la misma función anterior pero con "-a" exporta el archivo en formato ascii para que sea más ordenado. [jp@oraserv5 clase]$ gpg --export -o acl_clave2 -a GNUNota: Realice un cat al archivo acl_clave2.
40. Importa llaves. [jp@oraserv5 clase]$
gpg --import “Ruta donde este la llave”
41. Para firmar un archivo creado por nosotros (archivo) y lo firma archivo.asc [jp@oraserv5 clase]$ gpg -s -a passwd
42. Desencripta (-d) el archivo creado (-o=archivo de salida, desencript.asc) y después el archivo a desencriptar (cript). Algo muy importante es recordar que con la frase que encriptamos es con la misma que desencriptamos desencriptamoso sino sacara error (descifrado fallido: clave incorrecta) [jp@oraserv5 clase]$ gpg -d -o cript
passwd.asc
GNUNota: Haga cat al archivo cript, y explique al GNU/Instructor su resultado.
43. Para firmar con la llave publica de otra persona. [jp@oraserv5 clase]$
gpg -R [ID] -e [archivo]
GNU/Instructor Ing. Jose Paredes
www.codigolibre.org
Academia Código Libre
www.acl.edu.do
44. Listar las claves privadas. [jp@oraserv5 clase]$ gpg –list-secret-keys
45. Exportar una clave pública a un archivo. [jp@oraserv5 clase]$ gpg --export -a "jose paredes" > publica.key GNUNota:El nombre de usuario es el parámetro uid que obtenemos al listar las claves publicas con la opción –list-public-keys.
46. Exportar una clave privada a un archivo. [jp@oraserv5 clase]$ gpg --export-secret-key -a "jose paredes" > privada.key
47. Importar una clave pública. [jp@oraserv5 clase]$ gpg --import publica.key GNUNota:Cambiando el nombre de publica.key por el de la clave que quieren importar
48. Importar una clave privada. [jp@oraserv5 clase]$ gpg --allow-secret-key-import --import privada.key GNUNota:Cambiando el nombre de privada.key por el de la clave que quieren importar.
49. Borrar una clave pública. [jp@oraserv5 clase]$ sudo gpg --delete-key "jose paredes" GNUNota:CUIDADO!!! con esta una vez borrada no se puede recuperar más nunca.
50. Listar las Huellas de las claves. [jp@oraserv5 clase]$ gpg –fingerprint GNUNota:Hace lo mismo que –list-keys pero muestra la información de la huella de las claves.
51. Ahora vamos a codificar un archivo. [jp@oraserv5 clase]$ gpg -e group
52. Codificarlos con la clave de otro usuario o otra clave pública [jp@oraserv5 clase]$ gpg -er "jose paredes" group
Nota: Haga ls para ver el archivo generado.
GNU/Instructor Ing. Jose Paredes
www.codigolibre.org
Academia Código Libre
www.acl.edu.do
53. Codificarlos con el criptograma tipo 7-bit ASCII [jp@oraserv5 clase]$ gpg -a -er "jose paredes" group
54. Descodificar. [jp@oraserv5 clase]$ gpg -d group.gpg
Sudo 55. Vamos a ver el archivo de configuración de sudo. [root@JP ~]# cat /etc/sudoers
56. Esto permite a los usuarios comprobar por si mismos si están o no autorizados a utilizar sudo. [root@JP ~]# sudo -v
57. Con esta opción se nos presenta una lista de opciones de Configuración (Defaults), de /etc/sudoers), con una corta descripción de cada una de ellas. [root@JP ~]# sudo -L
58. Nos muestra las opciones con las que fue compilado sudo, así como las direcciones , en la red local, de las distintas máquinas. [root@JP ~]# sudo -V
59. Nos muestra una relación de los comandos que el usuario puede ejecutar en el presente host. [root@JP ~]# sudo -l
60. 6-Vamos configurar el SUDO para el usuarios estudiantes: El archivo de configuración se encuentra en /etc llamado sudoers. [root@nixon ~]# visudo
o [root@nixon ~]# vi /etc/sudoers
Como usted desee:) GNU/Instructor Ing. Jose Paredes
www.codigolibre.org
Academia Código Libre
www.acl.edu.do
61. En la linea 95 donde dice : ## Allow root to run any commands anywhere root
ALL=(ALL)
ALL
Grabamos y salimos y ya tenemos el usuario estudiantes con todos los privilegios del root utilizando su propia clave. 62. Ahora vamos probar la validez de la misma [estudiantes@nixon ~]$ shutdown -r now
63. Y ahora con sudo: [estudiantes@nixon ~]$ sudo shutdown -r now GNUNota: Explique al GNU/Instructor la opción NOPASSWD.
64. En la linea 50 agregue estos: Cmnd_Alias SHUTDOWN = /sbin/halt, /sbin/shutdown, \ /sbin/poweroff, /sbin/reboot, /sbin/init
65. Luego vuelva a la linea donde agrego el usuario y agregue: estudiantes
ALL=(ALL)
ALL,!SHUTDOWN
66. Ahora probemos otra vez el shutdown con el sudo loguiado con el usuario estudiantes: [estudiantes@nixon ~]$ sudo shutdown -r now
Sorry, user estudiantes is not allowed to execute '/sbin/shutdown -r now' as root on nixon.acl. 67. Por ejemplo, suponga que usted desea verificar si el archivo nombrado ha sido modificado. Este archivo es el ejecutable que inicia el servicio DNS en su sistema. Por que el nombrado es un archivo binario, usted desea asegurar que nadie ha alterado o reemplazado con un Troyano. En este ejemplo, suponga que usted esta trabajando con el directorio /home/mojo/. Usted puede ejecutar el siguiente comando: [estudiantes@oraserv5 ~]$ md5sum /usr/sbin/chat GNUNota: La cadena de texto inmediatamente debajo del comando mdsum es hash de 128 bits del archivo /usr/sbin/chat.
68. Dónde se encuentran los password encriptado de los usuario. GNU/Instructor Ing. Jose Paredes
www.codigolibre.org
Academia Código Libre
www.acl.edu.do
[root@JP ~]# cat /etc/shadow
Ponerle password Grub. 69. Antes de empezar hacer respaldo del grub. [root@JP ~]#
cp /boot/grub/menu.lst /boot/grub/menu.lst.backup
70. Entramos al shell del Grub. [root@JP ~]# grub
71. Escribimos md5crypt. Grub>
md5crypt
GNUNota:Digite su clave y luego copie la salida: Encrypted: $1$3/ZE51$eNoCLTXlTTi4NXtRMqvUF/
72. Salga del Grub. Grub> quit
73. Abrimos el archivo menu.lst y agregamos esta linea.. [root@JP ~]# vim /boot/grub/menu.lst default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Scientific Linux (2.6.32-220.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=8bc3f624-0921-491b-867221e3d71fef5c rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rhgb crashkernel=auto quiet rd_NO_LVM rd_NO_DM password --md5 $1$3/ZE51$eNoCLTXlTTi4NXtRMqvUF/ initrd /initramfs-2.6.32-220.el6.x86_64.img GNUNota: cambios.
Salimos
guardando
los
cambios
y
reiniciamos
para
ver
efectuados
los
Otra forma es en texto plano, no es recomendada. 74. Abrimos el archivo menu.lst y agregamos esta linea passwd y al lado la clave que pondremos al grub. [root@JP ~]# vim /boot/grub/menu.lst password kikla GNUNota: Salimos guardando los cambios y reiniciamos para ver efectuado los cambios.
GNU/Instructor Ing. Jose Paredes
www.codigolibre.org
Academia Código Libre
www.acl.edu.do
SeLinux: 75. Verifiquemos en qué estado está nuestro SElinux. root@lilo-mcruz:~# getenforce
76. Pongamos nuestro SElinux en modo permisivo. root@lilo-mcruz:~# setenforce 1 Permissive
77. Verifiquemos que está denegando SElinux. root@lilo-mcruz:~# getsebool
78. Permitamos una aplicación con SElinux. root@lilo-mcruz:~# setsebool mail_read_content on
79. Verifiquemos que otras aplicaciones están siendo denegadas por SElinux. root@lilo-mcruz:~# sealert -a /var/log/audit/audit.log
80. Crearemos una regla para permitirlas todas. root@lilo-mcruz:~# audit2allow -M reglas -l -i /var/log/audit/audit.log
81. Ahora instalaremos el módulo ya creado. root@lilo-mcruz:~# semodule -i reglas.pp
82. Existen muchas opciones provistas por el kernel para proveernos de seguridad. Muchas de estas son manejadas directamente desde el pseudo sistema de archivos /proc/sys. Para habilitar se coloca simplemente un 1 y por lo contrario un 0. Las relacionadas con redes se encuentran en el directorio /proc/sys/net/ipv4, algunos ejemplos: • icmp_echo_ignore_all: No responder a pings • icmp_echo_ignore_BROADCAST: No responder a peticiones de broadcast o difusión • ip_forward: Controlar el reenvío de paquetes • rp-filter: Determina si dirección fuente es verificable. Protege contra ataques de IP Spoofing. El archivo de configuración para establecer los valores deseados a GNU/Instructor Ing. Jose Paredes
www.codigolibre.org
Academia Código Libre
www.acl.edu.do
los parámetros del kernel es /etc/sysctl.conf y el programa para controlar en tiempo real estos parámetros es /sbin/sysctl. Un ejemplo para puntualizar es: root@lilo-mcruz:~#
echo “0” > /proc/sys/net/ipv4/ip_forward
root@lilo-mcruz:~#
sysctl
-w kernel.domainame=”codigolibre.org”
Glosario de Seguridad: • Desbordamiento de buffer es un error de software, se produce cuando se copia una cantidad de datos en área no lo suficientemente grande, sobrescribiendo de esta manera otras zonas de memoria. Esto se debe en general a un fallo de programación. • Criptografía: Enmascarar texto de forma discreta para que no pueda ser interpretado solo por quienes tienen la llave. • Denegación de Servicio: Ataque que consume mucho recurso para así no poder atender los verdaderos usuarios. • IP Spoofing: Ataque que confunde su PC en crear que el atacante es alguien conocido. • Escaneado de Puertos: acción de analizar por medio de un programa el estado de los puertos de una máquina conectada a una red de comunicaciones. Detecta si un puerto está abierto, cerrado, o protegido por un cortafuego. • Filtrado de Paquetes: La acción de seleccionar paquetes por tipo y así poder aceptar, denegar o desviar. • Pasarelas: Servidor por donde toda comunicación desde y hacia Internet es llevada a cabo. • Set User-ID/Set Group-ID: Bits de permisos especializados para permitir que un usuario o grupo pueda ejecutar una aplicación como otro. • Troyano: Programa que se presenta legítimo cuando en realidad al ejecutarlo lo que hace es causar daños. • Vulnerabilidad: Son agujeros de seguridad que si no son atendidos pueden ser vulnerados por intrusos. • Corta Fuego - Firewall: Equipo con programas dedicados para restringir el acceso entre una red protegida e Internet. • chroot: El cambio del directorio raíz por otro directorio, sin afectar los procesos anteriores solo los hijos. • Exploit: Código que aprovecha un error del sistema.
GNU/Instructor Ing. Jose Paredes
www.codigolibre.org
Academia Código Libre
Para
cualquier sugerencia
[email protected]
GNU/Instructor Ing. Jose Paredes
www.acl.edu.do