jueves, 29 de diciembre de 2011

Publicaciones multimedia sobre GNU/Linux

  El post que nos ocupa proviene de la idea en CPH de hacer una recopilación sobre distintas publicaciones multimedia, ya sea podcast, canciones, entrevistas, documentales y un largo etc sobre GNU/Linux.
  Se agradecen cualquier colaboración para ampliar la lista y esta se irá actualizando conforme encuentre nueva información ;).


PODCASTS

Pánico en el núcleo  -> Pánico en el Núcleo es un programa en audio, de radio o como quieras llamarle, que trata sobre Linux y Software Libre. Intentamos tratar temas que nos resultan interesantes de forma rigurosa, pero sin olvidar el sentido del humor, ya que hacemos esto por amor al arte.

DaboBlog PodCast -> De un modo distendido y (procuramos que así sea) ameno, vamos repasando temas del mundo GNU/Linux (sección Kernel Panic) y de Apple (sección Manzanas Traigo) cada 15 días.

El podcast de Linux Hispano -> El podcast de Linux Hispano es un podcast audiovisual sobre Linux y Software Libre.

Droidcast -> Podcast sobre Android.

Puroandroid -> Podcast sobre Android.



DOCUMENTALES / ENTREVISTAS


REVOLUTION OS -> Parte 1 / Parte 2 / Parte 3 / Parte 4 / Parte 5 / Parte 6 /  Parte 7 / Parte 8 / Parte 9 / Parte 10  --> Muestra la historia de como un grupo de Hackers se reveló contra el modelo de software privativo y Microsoft creando el sistema operativo libre GNU/Linux y el movimiento Open Source o Código Abierto.


Canciones

Villancico Linuxero -> Villancico del podcast de Pánico en el núcleo. 




 Si queréis ver el post original de CPH -> 


Aetsu

sábado, 24 de diciembre de 2011

Conociendo fdisk

  En esta entrada voy a presentar una introducción al programa fdisk que nos permite particionar (mediante la terminal) nuestros sistemas de almacenamiento. Este post no pretende destripar todas las posibilidades del software, sino conocer su utilidad básica para, por ejemplo, poder particionar nuestro HD para instalar una distribución GNU/Linux.

  Empezamos, y lo hacemos viendo las particiones de nuestro disco duro, para ello utilizaremos fdisk con el parámetro -l:
 fdisk -l <disco>
  como ejemplo (en este caso el HD está vacío):
fdisk -l /dev/sda

  Visto ya el estado de nuestro HD, vamos a particionarlo, para ello llamamos al programa fdisk sin parámetros:
 fdisk <disco>
 ejemplo:
fdisk /dev/sda

  Con esto ya estaremos dentro de la herramienta y tendremos múltiples posibilidades (con m mostramos la ayuda):
 
    [+]  p -> mostramos las particiones existentes en el disco.


  [+] n -> para crear nuevas particiones, tanto primarias como extendidas.
              Para el ejemplo crearemos una partición primaria para /boot, por tanto su tamaño serán 128 MB.
       [1]  Al pulsar n nos preguntara si queremos crear una partición primaria (p) o extendida (e),  nosotros escogemos primaria (p).
       [2]  Lo siguiente sera escoger el número de la partición, escogemos la opción por defecto (1).
       [3]  A continuación en aparecer será la posibilidad de escoger el inicio de la partición, dejamos la opción por defecto.
       [4]  Por último el final de la partición o tamaño de esta, nosotros escribiremos +128M.
       
    [+] a -> marcamos la partición como de arranque (para el /boot):
               Para nuestro ejemplo marcaremos como partición de arranque la que acabamos de crear, la primera.
        [1] Escribiremos a y nos dirá que partición queremos marcar como de arranque, escogemos la primera.
        [2] Cuando nos vuelva a pedir que escojamos el comando, pondremos p para ver las particiones y veremos que la partición 1 tiene un asterisco en la columna Boot.


    [+] n -> Esta vez crearemos una partición extendida para el directorio /.
             
Para el ejemplo crearemos una partición extendida para /, por tanto tendrá 7000 MB de tamaño.
       [1]  Al pulsar n nos preguntara si queremos crear una partición primaria (p) o extendida (e), nosotros escogemos extendida (e).
       [2]  Lo siguiente sera escoger el número de la partición, escogemos la opción por defecto (2).
       [3]  A continuación en aparecer será la posibilidad de escoger el inicio de la partición, dejamos la opción por defecto.
       [4]  Por último el final de la partición o tamaño de esta, nosotros escribiremos +7000M.


    [+] n -> Esta vez crearemos una partición primaria para la partición de intercambio swap.
             
Para el ejemplo crearemos una partición primaria para swap, por tanto tendrá el tamaño restante del HD que será alrededor de 800MB.
       [1]  Al pulsar n nos preguntara si queremos crear una partición primaria (p) o extendida (e), nosotros escogemos primaria (p).
       [2]  Lo siguiente sera escoger el número de la partición, escogemos la opción por defecto (3).
       [3]  A continuación en aparecer será la posibilidad de escoger el inicio de la partición, dejamos la opción por defecto.
       [4]  Por último el final de la partición o tamaño de esta, dejaremos la opción por defecto.
       [5]  Como es la partición de intercambio (swap) tenemos que cambiar su tipo, para esto cuando estemos en el promt de Command, escribiremos t.
       [6]  Al preguntarnos sobre a que partición queremos modificar, nosotros escogemos la 3 (la swap).
       [7]  Nos pide que escribamos un código hexadecimal, el referente a swap es 82 (el de las particiones ext es 83 que es la opción por defecto).


-------> Un listado de todos los tipos de partición disponible <-------



    [+] w -> Esta opción escribe las particiones en el disco.


    [+] d -> Ya para finalizar, si quisiéramos eliminar alguna partición con d y seleccionando dicha partición la eliminaríamos.  
    [+] q ->  Nos permite salir sin guardar los cambios.



Con esto concluyo el post, espero que os sea útil y nos leemos en breve.

Aetsu

martes, 20 de diciembre de 2011

#tuxherramienta Nslookup


Antes de comentar esta herramienta debemos saber que son los servidores DNS:
 - El DNS (Domain Name System) es el encargado de transformar los nombres de cualquier ordenador en su dirección IP y viceversa.

  Por ejemplo, cuando ponemos en el navegador www.google.es el DNS es el encargado de convertir esa dirección a su dirección IP 74.125.39.106.



  Para interactuar con el servidor DNS tenemos Nslookup, una herramienta que realiza consultas a estos.

[+] Su sintaxis es simple:
   nslookup <nombre del host>

  Por ejemplo:
$ nslookup www.google.com
Server:         192.168.0.1
Address:        192.168.0.1#53


Non-authoritative answer:
www.google.com  canonical name = www.l.google.com.
Name:   www.l.google.com
Address: 74.125.39.104
Name:   www.l.google.com
Address: 74.125.39.103
Name:   www.l.google.com
Address: 74.125.39.99
Name:   www.l.google.com
Address: 74.125.39.147
Name:   www.l.google.com
Address: 74.125.39.106
Name:   www.l.google.com
Address: 74.125.39.105

    Donde:
      [-] Server es nuestro servidor DNS (en mi caso el router).
      [-] Address es su dirección, acompañada del puerto, 53 en este caso que es el por defecto para un
          servidor DNS.
      [-] A continuación encontraremos su dirección canónica y sus alias.


[+] Un parámetro interesante que podemos pasarle a nslookup es -query seguido de una de las siguientes opciones:
    [-] mx -> nos muestra información relacionada con los servidores de correo del dominio
        especificado.

    [-] cnma -> nos muestra información relacionada con los alias.
    [-] hinfo -> para obtener información relacionado con el sistema operativo del host (si está
        disponible).
    [-] a -> es la opción por defecto y nos permite enumerar  nombres canónicos y alias de un host.
    [-] soa -> nos muestra información del campo SOA (inicio de autoridad).

  Ejemplo:
      $ nslookup -query=mx correu.uv.es
      Server:         192.168.0.1
      Address:        192.168.0.1#53


      Non-authoritative answer:
correu.uv.es    mail exchanger = 20 postin.uv.es.


[+] Existe otro método para utilizar nslookup, y es de forma interactiva.
    Para ello escribiremos en la terminal nslookup y nos aparecerá un ">" que nos permitirá hacer consultas mediante "set q=" utilizando los parámetros antes comentados.

    Ejemplo:
$ nslookup
> set q=a
> www.google.es
 Server:         192.168.0.1
 Address:        192.168.0.1#53

 Non-authoritative answer:
 www.google.es   canonical name = www.google.com.
 www.google.com  canonical name = www.l.google.com.
 Name:   www.l.google.com
 Address: 74.125.39.99
 Name:   www.l.google.com
 Address: 74.125.39.103
 Name:   www.l.google.com
 Address: 74.125.39.104
 Name:   www.l.google.com
 Address: 74.125.39.105
 Name:   www.l.google.com
 Address: 74.125.39.106
 Name:   www.l.google.com
 Address: 74.125.39.147
 >

    Para salir de este modo basta con escribir "exit".


[+] Como observación comentar que también existe una versión web que nos permite realizar las mismas consultas que la versiones locales, la podemos encontrar en:


#Nota: en GNU/Linux la dirección del servidor DNS usado se encuentra en /etc/resolv.conf.


  Este post sobre la herramienta nslookup lo podéis encontrar también en DragonJar en un curso de EH impartido por Leo Banchiero (si alguien quiere apuntarse, bienvenido será).



 Un saludo y nos leemos en breve ;)


Aetsu

miércoles, 14 de diciembre de 2011

Hydra y los dispositivos iOS

  El otro día encontré en exploit-db un paper en castellano sobre "hacking dispositivos iOs" (escrito por  Japson)  mediante un acceso  por SSH. Leyendo el tutorial llegaba a un punto en que comentaba sobre la viabilidad de un ataque por fuerza bruta o ataque de diccionario puesto que la seguridad del servidor SSH del dispositivo era precaria. Debido a este punto me decidí a escribir este post para probar un ataque por diccionario al servidor SSH de un dispositivo iOS (en mi caso un ipod Touch 4) con Hydra.
  Tened en cuenta que este ataque puede ser útil para un servidor de un iOS o de un sistema GNU/Linux por poner un ejemplo, aunque estos estarán mucho mejor protegidos.



[+] Antes de empezar suponemos que la ip del ipod es 192.168.0.14.


[+] Lanzando el ataque con Hydra:
    [-] La sintaxis de hydra para lanzar un ataque por diccionario al servidor SSH es la siguiente:

hydra -l <usuario> -P <diccionario> -f  -v <ip> ssh -s <puerto>

   [-] Donde: 
          [--] -l especifica el usuario con el que se realizará el login, si quisiéramos pasar una lista de usuarios utilizaríamos el parámetro -L seguido del nombre del fichero.
          [--] -P especifica una lista de posibles contraseñas (un diccionario), para solo probar un solo password utilizaríamos -p.
          [--] -f implica que el programa finalizará después de encontrar el primer par de usuario/password válido.
          [--] -v (verbose) que vaya mostrando información durante el proceso.
          [--] <ip> es la ip del dispositivo.
          [--] ssh implica el protocolo sobre el que se realizará el ataque.
          [--] -s el puerto del servicio a atacar, en nuestro caso utilizaremos el 22 y como es el puerto por defecto del servidor SSH no es necesario ponerlo.

   [-] Veamos un ejemplo del ataque anterior:

[alpha@alpha-pc ipod]$ hydra -l root -P dic -f -v 192.168.0.14 ssh



[+] Pausa y continuación de un ataque con Hydra:
  En el caso del ejemplo anterior el ataque ha sido breve, pero es muy probable que se de el caso de que nuestro ataque requiera horas o días para que surta efecto, todo depende del diccionario utilizado, entonces    Hydra nos permite pausar el ataque para continuarlo en otra ocasión.
    [-] Para interrumpir la ejecución de Hydra:
pulsamos ctrl+c
    [-] Para restaurar el proceso:
hydra -R





  Con esto solo nos queda tener suerte en nuestro ataque, y si queréis proteger vuestro servidor tocad un poco la configuración de el fichero /etc/ssh/ssh_config y seguid los consejos de este articulo en Seguridad Apple:   http://www.seguridadapple.com/2010/08/configuracion-openssh-en-dispositivos_31.html

  Como curiosidad y puesto que no es fácil obtener una contraseña por fuerza bruta, con Hydra tambien podemos dejar sin recursos el dispositivo iOS y volverlo prácticamente "inutilizable". Para ello basta con especificar aumentar el numero de intentos de conexión simultáneos que realizará la herramienta (por defecto son 16) a 256 que es el máximo, con lo que agotaremos la memoria del iAparato.
  En este caso el comando sería de la siguiente forma:
[alpha@alpha-pc ipod]$ hydra -l root -P dic -f -v -t 256 192.168.0.14 ssh


 Ya para finalizar este post, voy a escribir sobre un usuario que se encuentra en los dispositivos iOS (por lo menos en mi iPod) , del que yo desconocía su existencia y por tanto no había cambiado su contraseña, con lo que podría haber sido víctima de un ataque. Dicho usuario llamado "mobile" tiene la contraseña por defecto "alpine" y aunque no tiene los mismos privilegios que el usuario root puede acceder a bastante información sensible del dispositivo objetivo.

  Ahora me despido y nos leemos en la próxima entrada,

Aetsu


lunes, 12 de diciembre de 2011

John The Ripper y GNU/Linux

  En las dos entradas anteriores he escrito sobre los ficheros que gestionan a los usuarios y sus respectivas contraseñas en GNU/Linux, estos son /etc/passwd y /etc/shadow.

  Lo que viene a continuación es como unir esos dos ficheros y descifrar las contraseñas de los usuarios del sistema. Para crackear los password que contienen utilizaremos la archiconocida herramienta John The Ripper.

  Primero asumimos que contenemos en el mismo directorio una copia de los ficheros /etc/passwd  y /etc/shadow de la máquina objetivo. Para mezclar su información utilizaremos unshadow con la siguiente sintaxis:

   unshadow <fichero passwd> <fichero shadow>


  el problema de utilizar el comando de esta forma es que nos mostrará por pantalla el resultado, por lo que es preferible redirigirlo a un fichero, con lo que el comando quedaría:

  unshadow <fichero passwd> <fichero shadow> > <fichero salida>


veamos un ejemplo:


[alpha@alpha-pc ejemplo]$ unshadow passwd shadow > datos

  

 
Con esto ya tendremos el fichero datos con toda la información necesaria solo nos queda utilizar a John.

  Basándonos en este ejemplo veremos algunos de los usos comunes de esta potente herramienta:

[+] Podemos utilizar esta herramienta sin parámetros, con lo que John utilizará su propio diccionario, la sintaxis sería:

     john <fichero salida unshadow>

     siguiendo con el ejemplo:

[alpha@alpha-pc ejemplo]$ john datos



[+] En el caso de que la contraseña fuera compleja de descifrar podemos interrumpir el proceso para restaurarlo en un futuro:
    [-] Para interrumpirlo:
pulsamos ctrl+c
    [-] Para restaurarlo:
john -restore



[+] Por último, si quisieramos utilizar nuestro propio diccionario bastaría pasarselo como parámetro:

 john --wordlist:<diccionario> <fichero salida unshadow>

    con el ejemplo quedaría:
[alpha@alpha-pc ejemplo]$ john --wordlist:diccionario datos



  Con esto concluyo la entrada sobre John The Ripper, no sin invitaros a que busqueis mas información sobre él, ya que yo solo he expuesto algunos usos básicos, pero tiene muchísimas más posibilidades.

  Nos leemos,

Aetsu

El fichero /etc/shadow

  Si en la entrada anterior comentaba sobre el formato del fichero /etc/passwd, en esta escribiré sobre /etc/shadow.

  Dicho fichero almacena la contraseña cifrada de cada usuario y se complementa con el archivo /etc/passwd.

  Cada línea del fichero tiene la siguiente forma:
     usuario:password:último:pueda:vida:aviso:caduca:duración:reserv

  Donde:
    [-] usuario es el nombre del usuario.
    [-] password es la contraseña cifrada correspondiente al usuario.
    [-] último  son los días transcurridos desde la última vez que se cambió la
          clave, cuenta desde el día 1/1/1970.
    [-] pueda son los días que deben pasar antes de que la clave pueda ser
          cambiada.
    [-] vida es el tiempo de vida de la clave antes de que tenga que ser
          cambiada.
    [-] aviso es el número de días de aviso al usuario antes que expire la clave.
    [-] caduca son los días en que la clave quedara deshabilitada tras caducar.
    [-] duración son los días de duración de la cuenta desde 1/1/1970.
    [-] reserv pertenece a un campo reservado.

  Con está entrada ya he comentado como funcionan los ficheros que gestionan los usuarios y sus claves, en el siguiente veremos como podemos descifrar las claves con John the Ripper.

Un saludo,
Aetsu

domingo, 11 de diciembre de 2011

El fichero /etc/passwd

  En esta ocasión voy a comentar el formato del fichero /etc/passwd de GNU/Linux donde se almacena información de los usuarios del sistema, aunque no las contraseñas como podría sugerir el nombre del fichero, ya que estas se encuentran en el fichero /etc/shadow.

  Cada línea del fichero tiene la siguiente forma:
     usuario:password:UID:GID:descripción:home:shell

  Como por ejemplo el usuario root:
     root:x:0:0:root:/root:/bin/bash

  Donde (los campos están separados por dos puntos):
    [-] usuario es el nombre del usuario.
    [-] password es la contraseña, pero por motivos de seguridad no se aloja
        en este fichero, sino que se encuentra en /etc/shadow, esto explica
        porque este passwd tiene una máscara mucho mas "pública" que shadow.
    [-] UDI es el identificador numérico del usuario, en el caso del root (como
        en el ejemplo) es 0.
    [-] GID es el identificador numérico del grupo, en el caso del root es 0.
    [-] descripción es la descripción de la cuenta.
    [-] home es el directorio de la carpeta local del usuario.
    [-] shell es el intérprete de órdenes por defecto del usuario.


Con esto concluyó esta entrada, nos vemos en breve.

Aetsu

martes, 6 de diciembre de 2011

Entorno de 32 bits en sistemas de 64 bits

  Este post no hace referencia a ninguna novedad ni ningún descubrimiento digno de alarde, sino que es una posibilidad que estaba ahí, que no conocía y que me pareció interesante compartir.

  El otro día peleándome con la instalación de gentoo para un netbook me surgió la necesidad de compilar aplicaciones (entre ellas el kernel) de 32 bits sobre un sistema de 64 bits (i686 sobre amd64) obteniendo errores que me impedían proseguir con mi inmersión gentooniana. Como de costumbre la solución para ello la encontré en la siempre genial wiki de archlinux.

 
  La salida a mi problema se encontraba en la sección Arch64 y proponía la creación de un entorno de 32 bits mediante linux32, realizando una tarea muy similar a un chroot (man chroot para mas información ;) ), pero en este caso se nos encerrará en una jaula de 32 bits.

   Para preparar el entorno tenemos que tener habilitada la librería multilib en el fichero /etc/pacman.conf.

      [multilib]
      Include = /etc/pacman.d/mirrorlist


y actualizamos los repositorios con:

pacman -Sy

  Lo siguiente será instalar el gcc contenido en multilib:

pacman -S gcc-multilib gcc-libs-multilib binutils-multilib libtool-multilib lib32-glibc

  Además también requerimos linux32 para cerrar la jaula, con lo que lo instalaremos:

pacman -S util-linux

   el siguiente paso será realizar preparar la jaula:
    
     mount --bind /dev /<directorio>/dev 
     mount --bind /dev/pts /<directorio>/dev/pts
     mount --bind /dev/shm /<directorio>/dev/shm
     mount -t proc none /<directorio>/proc 
     mount -t sysfs none /<directorio>/sys

  donde directorio es la ruta donde queremos crear nuestro entorno de 32 bits.
 
  Para final solo queda entrar en dicha jaula: 

      linux32

  Para realizar las comprobaciones y saber si lo hemos hecho correctamente tenemos el comando uname:
uname -m

   En el caso de haberlo introducido correctamente nos debe mostrar i686 como salida.


   -> Como siempre para más y mejor información  mirad la entrada de la wiki de Arch:
  https://wiki.archlinux.org/index.php/Arch64_FAQ#Can_I_run_32-bit_apps_inside_Arch64.3F


  Antes de finalizar decir que aunque estas instrucciones son para Archlinux, no debería ser excesivamente difícil usarlo en otras distribuciones.

  Un saludo.

Aetsu