Páginas

sábado, 1 de mayo de 2010

John the Ripper

John the Ripper es un programa que permite averiguar (comprobar la fortaleza) las contraseñas de los usuarios de diferentes sistemas.

Sin embargo, las últimas versiones de la mayoría de distribuciones GNU-Linux utilizan sha-512 como sistema de encriptación de claves. Cada vez que queremos conocer las contraseñas nos encontramos con el siguiente mensaje de error:

"No password hashes loaded".

Las pruebas están realizadas con Gentoo pero el método para compilar John the Ripper sirve para cualquier otra distribución GNU/Linux.

Descargar el programa y el parche de la página de openwall:

$ wget http://www.openwall.com/john/g/john-1.7.3.4.tar.gz
$ wget http://openwall.info/wiki/_media/john/john-1.7.3.1-generic-crypt-1.diff.gz




Descomprimir:
# tar xvzf john-1.7.3.4.tar.gz

Las rutas en mi caso se entenderán mejor con un ls:
john #
ls -l
total 812
drwx------ 5 root root 4096 sep 20 2009 john-1.7.3.4
-rw-r--r-- 1 root root 816259 sep 20 2009 john-1.7.3.4.tar.gz
drwxr-xr-x 2 root root 4096 sep 1 11:14 parche

Entrar al directorio del programa:
# cd john-1.7.3.4

Aplicar el parche:
# gzip -dc ../parche/john-1.7.3.1-generic-crypt-1.diff.gz | patch -p1
 patching file src/Makefile
 patching file src/crypt_fmt.c
 patching file src/john.c
 Hunk #2 succeeded at 67 (offset 2 lines).

El directorio donde se encuentra el código fuente para es src:



# cd src
# make

Con make obtendrá una lista de los sistemas soportados, luego:
# make linux-x86-64



Si el sistema no esta en la lista:

# make clean generic
 rm -f ../run/unshadow
 ln -s john ../run/unshadow
 rm -f ../run/unafs
 ln -s john ../run/unafs
 rm -f ../run/unique
 ln -s john ../run/unique
 
Pruebas de detección de correcto funcionamiento.
# cd ../run
# ./john --test

Benchmarking: Traditional DES [64/64 BS]... DONE
Many salts:    913784 c/s real, 913784 c/s virtual
Only one salt:    841378 c/s real, 842223 c/s virtual

Benchmarking: BSDI DES (x725) [64/64 BS]... DONE
Many salts:    26526 c/s real, 26553 c/s virtual
Only one salt:    26254 c/s real, 26306 c/s virtual

Benchmarking: FreeBSD MD5 [32/64 X2]... DONE
Raw:    8521 c/s real, 8521 c/s virtual

Benchmarking: OpenBSD Blowfish (x32) [32/64 X2]... DONE
Raw:    516 c/s real, 515 c/s virtual

Benchmarking: Kerberos AFS DES [48/64 4K]... DONE
Short:    284132 c/s real, 284132 c/s virtual
Long:    856828 c/s real, 855954 c/s virtual

Benchmarking: LM DES [64/64 BS]... DONE
Raw:    8264K c/s real, 8274K c/s virtual

Benchmarking: generic crypt(3) [?/64]... DONE
Many salts:    178329 c/s real, 178026 c/s virtual
Only one salt:    175640 c/s real, 175640 c/s virtual



Hay que combinar los arhivos /etc/passwd y /etc/shadow con el comando unshadow (como root):
# ./unshadow /etc/passwd /etc/shadow > /home/gentoo/passwords

John probará la fortaleza de la contraseña del usuario donna:

hypatia run # ./john -i -u=1001 /home/gentoo/passwords
Loaded 1 password hash (generic crypt(3) [?/64])
asdfgh           (donna)
guesses: 1  time: 0:00:00:19  c/s: 169  trying: asdfgh

El fichero john.pot contiene los resultados encontrados por john. El fichero no está vacío y esto significa que john ha encontrado la contraseña. El fichero john.rec contiene el estado actual de la búsqueda por si se produce una interrupción y es utilizado por el programa para reanudar la búsqueda.

En una máquina x86_64 Intel(R) Core(TM)2 Duo CPU T5750 @ 2.00GHz fue crackeada la contraseña de nuestro usuario de prueba, donna, en 0.19 segundos.

hypatia run # cat john.pot
$6$Y/SXCZE5$Syxi6qEVLjUecqF449kNy9PISVodOpi1BEwRwkIFn7WsrXTQML7kWLP37j3aDu5qJGoY4seTc0aegKf5fb/Xl1:asdfgh



# ls -l
total 1556
-rw------- 1 root root 341064 dic 16  2005 all.chr
-rw------- 1 root root 232158 dic 16  2005 alnum.chr
-rw------- 1 root root 131549 dic 16  2005 alpha.chr
-rw------- 1 root root  40391 dic 16  2005 digits.chr
-rwxr-xr-x 1 root root 211568 abr 28 13:40 john
-rw------- 1 root root  19988 sep  9  2009 john.conf
-rw------- 1 root root 324629 abr 30 15:14 john.log
-rw------- 1 root root    104 abr 28 13:56 john.pot
-rw------- 1 root root    156 abr 30 15:14 john.rec
-rw------- 1 root root 215982 dic 16  2005 lanman.chr
-rwx------ 1 root root    785 abr 10  2002 mailer
-rw------- 1 root root  22346 dic 16  2005 password.lst
lrwxrwxrwx 1 root root      4 abr 28 13:40 unafs -> john
lrwxrwxrwx 1 root root      4 abr 28 13:40 unique -> john
lrwxrwxrwx 1 root root      4 abr 28 13:40 unshadow -> john

Los módulos PAM influyen en la política de gestión de las contraseñas, obligando en algunos casos a elegir una más o menos compleja.
Las contraseñas se puden recordar por medios mnemotécnicos (La nemotecnia o mnemotecnia es el procedimiento de asociación de ideas, esquemas, ejercicios sistemáticos, repeticiones, etc. para facilitar el recuerdo de algo.  pwgen es un generador de contraseñas.

$ pwgen
uash6She lohJo7ae Ohphab3i ouRik9ie uM4va3im Neer7Eit eib3Hauy xo9Iuy5p
ahSiW0uf AhG6wail Yai6neeh phae4ioV deeL3aip Uz5ahzaa aiV5phee Aegaiy7x
ioPh1ahn Ong6Baib Eish4rip eik9Gie1 ien3Iepe xohduj7U aiP2keov So5ovaht
Voh9oxoe ahs2Meeg Ooch5xix Phe3yiuz eeCa5ohv aig9Ai3o Go4Ateeh Hee6thei
Rai6Daeh aid8ieNg Thah6ien daphaiG0 Iefai5oh Pheife6i Poora8ah Coh5Aida
ViC7ieth hohG5sei Aa9Jeilu eopoX8Si jooh3Eif dooPhai1 chohqu1G ieNgae3o
wiCeiSi3 aej6Piev eoTha1Fu ieR2yeeb Eireili6 saiGhie2 XohRoo1a cahb2Yah
Guungah0 ube3vo0D oshol3Op Pui6agh5 Ao7baeN1 foTek9Ei aeM3lala Ene2baol
geloV9ai Weeyu2ie Uvae2Vie dei0euL7 Xee9uaza ed8Eeghu eebiu2Ka zey0Liuh
be6Ailoi eiph8Ohb Yahpahr4 aij4dahG oQu2chae Fe5eeg9c Hoosh6oh Iip8eiwe
AuPie0um Ahxai9eo Dae5oquu Ie7Viek8 pa2aew8B fohham7A fah1Oogi ieH9vee8
saeC8sha Aejeey6i Eithoow1 yi9vei0L ohC7eegh IaTh4ohn ti6Fooxe Oiche7oh
Tah9uos7 Paej2Iec chuiD8ei aicoGh5l saiKeiw2 mae9mieY Ais9oanu Mah9xej3
Zi2nacai gaiM4thi sapa1Fah kie8oZo7 Po5uuho8 thae3Aim Ohjahgh9 Weike8ra
Cah4weiZ teoji0Oo vi0hei6O Zieha3ai Keip2bie bahR7bah ahSai0Ei afoh3Thi
eeNieTh8 Zei7eth8 uV5eichi kue1Eedi sueThe0V wohChe2u Ohl1zicu Loo1soo3
yahb9uSi EelieGh1 aeMiThi1 OoFoh8wu Ieyei5ka Roph7ape uem5quuK ahQu7eec
NahSha6A kooMou0y gu1chaiJ hae2ku0Z uC3oeNgo xuSha7qu Iucai0fu uK4icewe
eP7aetig ahYai0ee Eetahfu8 yeep0oPi Veimaij3 Oht0aiPh buTh9oob ood4nieC
sah7Ahj1 koozah0J Vieb9Bit eeP9nee1 ea1SohCe Afei4ohS eikahk0W rachoG4c

Puede pedir que se generen contraseñas totalmente aleatorias con una longitud dada. Por ejemplo 9 carácteres:

hypatia run # pwgen -s -1 9
HK8vef07r

Linux es genial!

lunes, 26 de abril de 2010

Sudo

Otorgar privilegios extendidos
El comando sudo permite asignar el derecho a ejecutar comandos de administrador a uno o varios usuarios y en una o varias máquinas. Para que un usuario pueda ejecutar un comando que sólo puede ejecutar root, se añade un derecho sudo a este usuario para este comando.

El fichero de configuración /etc/sudoers se edita con el comando visudo, además comprueba la sintaxis del fichero antes de guardarlo.

La sintaxis es la siguiente:

user maquina = (cuenta_user_ejecuta_comando) comando

De manera que para
autorizar al usuario gentoo a ejecutar el comando tune2fs y sus parámetros con derechos root sobre cualquier máquina (donde esté presente esta regla):

gentoo ALL = /sbin/tune2fs

 Se pide la contraseña del usuario y prosigue. La lista de los derechos del usuario se obtiene:

gentoo@syslinux:~$ sudo -l
[sudo] password for gentoo:
User gentoo may run the following commands on this host:
    (root) /sbin/tune2fs

Los mensajes de sudo se transmiten a syslog que puede dirigirlos a un fichero, por ejemplo, /var/log/messages. El registro de destino se puede determinar mediante syslog.conf.

Es posible crear:

  • grupos de usuarios
  • grupos de máquinas
  • grupos de comandos
  • obligar o no el uso de password
  • forzar la ejecución de un comando a usuario distinto de root.
El nombre de los grupos es alias

Alias de usuarios:
Usar_Alias    ADMIN = gentoo, slack

Si la totalidad de administradores deben poder usar el comando tune2fs:
ADMIN      ALL = /sbin/tune2fs

Si los administradores pueden ejecutar sólo en determinadas máquinas utilice el alias de máquinas:
Host_Alias SERVLINUX = syslinux, xena

Se convierte en:
ADMIN      SERVERLINUX = /sbin/tune2fs

Existe la posibilidad de agregar varios comandos con o sín parámetros, por ejemplo, si los ADMIN además pueden ejecutar el comando /sbin/fdisk quedaría como sigue:
ADMIN       SERVERLINUX = /sbin/tune2fs, /sbin/fdisk

Se pueden crear alias de comandos de manera que faciliten la utilización:
Cmnd_Alias   CMDADMIN=/sbin/tune2fs, /sbin/fdisk

Siguiendo con nuestro ejemplo, la línea sudo quedaría:
ADMIN      SERVERLINUX=CMDADMIN

Evitar la introducción del password de uno o varios usuario(s) pasa por utilizar NOPASSWD, así los usuarios del alias ADMIN están exonerados de introducir contraseña para utilizar los comandos del alias CMDADMIN:

ADMIN       SERVERLINUX=NOPASSWD:   CMDADMIN

Obligar al uso de una contraseña también es posible con PASSWD:
ADMIN      SERVERLINUX=NOPASSWD:    CMDADMIN,  \ PASSWD:/sbin/fdisk

A los usuarios del grupo ADMIN podrán iniciar un comando con la identidad de otro usuario distinto de root colocando el alias entre paréntesis:
ADMIN      ALL=(sonia)  PASSWD: /sbin/service

Los usuarios del grupo ADMIN podrán ejecutar el comando /sbin/service. Como condición tendrán que introducir la contraseña de sonia:
gentoo@syslinux:~$ sudo -u sonia /sbin/services

Puede precisar varios usuarios o crear alias:
Runas_Alias       USERLIST=gentoo,sonia

Quedaría asi:
ADMIN      ALL=(USERLIST)    PASSWD: /sbin/service

El alias ALL define conjunto de usuarios, máquinas, comandos, dependiendo del lugar donde esté escrito.

A los usuarios del grupo ADMIN les está permitido ejecutar todos los comandos, en todas las máquinas sin introducir contraseña.
:
ADMIN      ALL=NOPASSWD:    ALL

Para excluir determinados usuarios, comandos, máquinas, de un alias o lista se utiliza el signo de exclamación:
ADMIN       SERVERLINUX=NOPASSWD:   ALL,  !/sbin/fdisk,   PASSWD:/sbin/tune2fs

La línea anterior da a los ADMIN todos los derechos sobre todos los programas sin contraseña excepto /sbin/tune2fs que requier contraseña y /sbin/fdisk que está prohibido.


Linux es genial.

miércoles, 21 de abril de 2010

Comando cpio


cpio es el nombre de una utilidad binaria creada inicialmente para el almacenamiento de copias de seguridad en cintas magnéticas de forma contigua. Hace una copia de seguridad sobre la salida standard de los
ficheros cuyos nombres están insertados en la entrada standard, por tanto, es posible utilizar las redirecciones. No comprime los archivos.
  • -o output creación de la copia de seguiridad en salida
  • -L copia los archivos y no los vínculos simbólicos.
  • -v información detallada
  • -c copia atributos de los ficheros en forma ASCII para el intercambio entre varios Sistemas operativos.
Archivar y comprimir el  directorio xtecat:
gentoo ~ $ find xtecat -print | cpio -ocv | gzip > xtecat.cpio.gz
xtecat
xtecat/net-win
xtecat/netcat.txt
xtecat/traceroute
xtecat/192.168.1.1
xtecat/xtecat
xtecat/nudge.txt
xtecat/whois.txt
xtecat/nmap
xtecat/xte

la sintaxis para listar:

cpio -it nombrearchivo

 -i lectura del archivo en entrada
 -t lista el contenido del archivo

gentoo ~ $ cat xtecat.cpio.gz | gzip -cd | cpio -it
xtecat
xtecat/net-win
xtecat/netcat.txt
xtecat/traceroute
xtecat/192.168.1.1
xtecat/xtecat
xtecat/nudge.txt
xtecat/whois.txt
xtecat/nmap
xtecat/xtecports
37 blocks

La sintaxis general para restaurar:

cpio -i[umd]
  • -u restauración incondicional, borra los ficheros existentes. No se restauran los ficheros si los que están presentes en el disco tienen como fecha de última modificación la misma o posterior.
  • -m los ficheros restaurados conservan su última ficha de modificación 
  • -d cpio reconstruye el árbol de directorios y subdirectorios que faltan.
gentoo ~ $ cat xtecat.cpio.gz | gzip -cd | cpio -iuvd
xtecat
xtecat/net-win
xtecat/netcat.txt
xtecat/traceroute
xtecat/192.168.1.1
xtecat/xtecat
xtecat/nudge.txt
xtecat/whois.txt
xtecat/nmap
xtecat/xtecports
37 blocks

Linux es genial.

Comando tar

La utilidad tar para archivar.
Tar crea archivos de los ficheros, incluida su estructura, en cualquier tipo de soporte, incluido en otro fichero con extensión .tar. El archivo así creado puede extenderse a varios volúmenes. Su sintaxis es:
tar cvf archivo.tar fichero(s)

gentoo ~ $ tar cvf xtecat.tar xtecat/
xtecat/
xtecat/net-win
xtecat/netcat.txt
xtecat/traceroute
xtecat/192.168.1.1
xtecat/xtecat
xtecat/nudge.txt
xtecat/whois.txt
xtecat/nmap
xtecat/xtecports
  • -c creacion de archivo
  • -v muestra lo que hace
  • -f el siguiente parámetro es el nombre del archivo
gentoo ~ $ ls -l xtecat.tar
-rw-r--r-- 1 gentoo users 30720 abr 21 10:00 xtecat.tar

Listar el contenido el archivo creado con anterioridad:

gentoo ~ $ tar tvf xtecat.tar
drwxr-xr-x gentoo/users      0 2010-02-09 14:42 xtecat/
-rw-r--r-- gentoo/users    245 2010-02-02 23:01 xtecat/net-win
-rw-r--r-- gentoo/users   1934 2010-02-02 22:38 xtecat/netcat.txt
-rw-r--r-- gentoo/users   2726 2010-02-01 06:04 xtecat/traceroute
-rw-r--r-- gentoo/users    172 2010-02-09 14:42 xtecat/192.168.1.1
-rw-r--r-- gentoo/users   2931 2010-02-01 05:30 xtecat/xtecat
-rw-r--r-- gentoo/users     15 2010-02-02 22:36 xtecat/nudge.txt
-rw-r--r-- gentoo/users   4241 2010-02-09 13:02 xtecat/whois.txt
-rw-r--r-- gentoo/users   5159 2010-02-02 22:48 xtecat/nmap
-rw-r--r-- gentoo/users    481 2010-02-09 14:39 xtecat/xtecports

Restaurar el contenido del archivo anterior:
gentoo ~ $ tar xvf xtecat.tar
xtecat/
xtecat/net-win
xtecat/netcat.txt
xtecat/traceroute
xtecat/192.168.1.1
xtecat/xtecat
xtecat/nudge.txt
xtecat/whois.txt
xtecat/nmap
xtecat/xtecports

Tar permite gestionar los formatos de compresión directamente
  • z - comprime el archivo al formato gzip
  • Z - comprime el archivo al formato compress
  • j - comprime el archivo al formato bzip2
Para el formato de compresión gzip, siguiendo con el ejemplo anterior:
gentoo ~ $ tar cvzf xtecat.tar.gz xtecat/
xtecat/
xtecat/net-win
xtecat/netcat.txt
xtecat/traceroute
xtecat/192.168.1.1
xtecat/xtecat
xtecat/nudge.txt
xtecat/whois.txt
xtecat/nmap
xtecat/xtecports

gentoo ~ $ ls -l xtecat.tar*
-rw-r--r-- 1 gentoo users 30720 abr 21 10:00 xtecat.tar
-rw-r--r-- 1 gentoo users  7008 abr 21 11:19 xtecat.tar.gz

Pueden utilizarse las opciones de compresión con c, t, x. En caso de un soporte que gestiona por sí mismo la compresión es preferible no especificar una opción de compresión.

Si desea guardar compatibilidad con los parámetros por defecto de tar o si comprime su archivo para destinarlo a otros sistemas, puede utilizar:

gentoo ~ $ gzip -cd xtecat.tar.gz | tar xvf -

El - final indica a tar que debe recuperar el flujo por la entrada standar. El parámetro -d le dice a gzip que debe descomprimir el fichero y -c pasa el resultado por la salida standar.

Linux es genial.

jueves, 15 de abril de 2010

Encabezamientos ARP

El parámetro dinámico del núcleo arp_announce permite modificar los encabezamientos ARP en función de la dirección de destino del paquete. Una máquina que disponga de varias tarjetas de red, el valor por defecto no es el más idoneo ya que Linux puede contestar con la dirección de una tarjeta cualquiera. La tarjeta tiene que contestar con una dirección de la misma subred que la de destino.

Parámetros del núcleo que se ven involucrados:

xena@2.6.31-gentoo-r6 # sysctl -a | grep arp_announce

net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.wmaster0.arp_announce = 0
net.ipv4.conf.wlan0.arp_announce = 0

Modificar de manera dinámica para el conjunto de adaptadores el valor arp_announce  a 1 utilizando el parámetro -w:

xena@2.6.31-gentoo-r6 # sysctl -w net.ipv4.conf.all.arp_announce=1

Hacer esta modificación definitiva pasa por modificar el fichero /etc/sysctl.conf y cargarlo de nuevo:

xena@2.6.31-gentoo-r6 # vim /etc/sysctl.config

Añadir:
net.ipv4.conf.all.arp_announce = 1

Guardar y cargar los nuevos valores:

xena@2.6.31-gentoo-r6 # sysctl -p

net.ipv4.conf.default.rp_filter = 1
net.ipv4.ip_forward = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.arp_announce = 1
vm.swappiness = 10

Linux es Genial.