SET 39 Call For Papers

¿Eres un hacker? Si deseas pasar a formar parte de la historia del hacking hispano, colabora con la próxima edición de SET 39 enviándonos un artículo. No esperes más, esta es tu oportunidad de demostrar lo que sabes. Ayúdanos a construir una revista de hackers para hackers. SET Staff

SET 15

69205 visitas

Tabla de tiempos del John the Ripper 1.4

      4707

Autor: +NetBul
-[ 0x07 ]--------------------------------------------------------------------
-[ TABLA DE TIEMPOS DEL JOHN THE RIPPER 1.4 ]--------------------------------
-[ by +NetBul ]-------------------------------------------------------SET-15-

                   ---------------------------------------
                   JOHN THE RIPPER v1.4 - TABLA DE TIEMPOS
                   ---------------------------------------
                                @98 by +NetBuL
                   ---------------------------------------



 Aprovechando el concurso de password cracking en SET 14 habia escrito esta
 tabla de tiempos, y aunque no pude acabarla a tiempo :-( espero que os siga 
 siendo util. Es una tabla *orientativa* del tiempo que necesita el John The
 Ripper para crackear en modo incremental (calcula todas las combinaciones
 posibles). Y digo orientativa porque solo es eso ... aunque aquellos que
 tengan un P166MMX y usen el John v1.4 para crackear un passwd con 1 cuenta 
 (o con 2134 cuentas) pueden tomar los tiempos como 'muy probables'  ;-D
 
 Los tiempos son 'el peor tiempo posible', es decir 'el peor caso' que se
 da cuando no se encuentra ninguna contrase€a.

 
     
   /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\    /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
   |           1 cuenta           |    |   2134 cuentas (128 dif. salts)  |
   |       (media 13000 c/s)      |    |        (media 227000 c/s)        |
   |==============================|    |==================================|
   |                              |    |                                  |
   |                              \    /                                  |
   |                        john -i:all passwd                            |
   |                              /    \                                  |
   |  --------------------------  |    |  ------------------------------  |
   |   Combinac. |    Tiempo      |    |  Combinaciones |    Tiempo       |
   |  -----------|--------------  |    |  ------------------------------  |
   |     95^8    | 16182,2 a€os   |    |   95^8 x 2134  | 1977656,1 a€os  |
   |     95^7    |   170,3 a€os   |    |   95^7 x 2134  |   20817,4 a€os  |
   |     95^6    |     1,7 a€os   |    |   95^6 x 2134  |     219,1 a€os  |
   |     95^5    |     6,8 dias   |    |   95^5 x 2134  |       2,3 a€os  |
   |     95^4    |     1,7 horas  |    |   95^4 x 2134  |       8,8 dias  |
   |     95^3    |     1   min    |    |   95^3 x 2134  |       2,2 horas |
   |     95^2    |     1   seg    |    |   95^2 x 2134  |       1,4 min   |
   |     95^1    |     1   seg    |    |   95^1 x 2134  |       1   seg   |
   |                              |    |                                  |
   |                              |    |                                  |
   |                              \    /                                  |
   |                       john -i:alpha passwd    (-i:capital)           |
   |                              /    \                                  |   
   |  --------------------------  |    |  ------------------------------  |
   |   Combinac. |    Tiempo      |    |  Combinaciones |    Tiempo       |
   |  -----------|--------------  |    |  ------------------------------  |
   |     26^8    |   185,9 dias   |    |   26^8 x 2134  |    62,2 a€os    |
   |     26^7    |     7,1 dias   |    |   26^7 x 2134  |     2,3 a€os    |
   |     26^6    |     6,6 horas  |    |   26^6 x 2134  |    33,6 dias    |
   |     26^5    |    15,2 min    |    |   26^5 x 2134  |     1,2 dias    |
   |     26^4    |    35   seg    |    |   26^4 x 2134  |     1,1 horas   |
   |     26^3    |     1   seg    |    |   26^3 x 2134  |     2,7 min     |
   |     26^2    |     1   seg    |    |   26^2 x 2134  |     6   seg     |
   |     26^1    |     1   seg    |    |   26^1 x 2134  |     1   seg     |
   |                              |    |                                  |
   |                              |    |                                  |
   |                              \    /                                  |
   |                       john -i:digits passwd                          |
   |                              /    \                                  |   
   |  --------------------------  |    |  ------------------------------  |
   |   Combinac. |    Tiempo      |    |  Combinaciones |    Tiempo       |
   |  -----------|--------------  |    |  ------------------------------  |
   |     10^8    |     2,1 horas  |    |   10^8 x 2134  |    10,8 dias    |
   |     10^7    |    12,8 min    |    |   10^7 x 2134  |     1   dia     |
   |     10^6    |     1,2 min    |    |   10^6 x 2134  |     2,6 horas   |
   |     10^5    |     7   seg    |    |   10^5 x 2134  |    15,6 min     |
   |     10^4    |     1   seg    |    |   10^4 x 2134  |     1,5 min     |
   |     10^3    |     1   seg    |    |   10^3 x 2134  |     9   seg     |
   |     10^2    |     1   seg    |    |   10^2 x 2134  |     1   seg     |
   |     10^1    |     1   seg    |    |   10^1 x 2134  |     1   seg     |
   |                              |    |                                  |
   |                              |    |                                  |
   \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/    \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/


   NOTAS:
  --------

  - 95^8 es el numero de combinaciones posibles con 95 caracteres diferentes
    y un tama€o (minimo y maximo) de 8 caracteres :
    
     [john.ini]    ...
                   [Incremental:All]
                   CharCount = 95
                   MinLen = 8
                   MaxLen = 8
                   ...
    
    
       Por tanto el tiempo para un MinLen = 1 y MaxLen = 8 sera la suma de 
       los tiempos correspondientes :
  
        (MinLen=1;MaxLen=8) == (MinLen=MaxLen=1) + (MinLen=MaxLen=2) +
                               (MinLen=MaxLen=3) + ... + (MinLen=MaxLen=8)

  - El numero de combinaciones/segundo (c/s) que he usado en la tabla es una 
    media aproximada despues de 'correr' el John durante unas horas 
    (generalmente el num de c/s se estabiliza a partir de los 15 minutos).
  
  - El numero de c/s que calcula el John (y por tanto el tiempo que tardara) 
    depende de varios factores, entre ellos :
        
       + la maquina que se use [yo he usado un Pentium 166MMX, TX, 16Mb EDO]
                                              
       + la version del John [en este caso la v1.4 para MSDOS]
           --> la version 1.5 ya esta disponible en : 
                        
                        http://www.false.com/security/john/

       + logicamente el numero de cuentas que contiene el passwd y ...
       
       + ... el numero de 'salts' diferentes, ej:

            john -i:all (MinLen=MaxLen=3)    |     c/s     | Tiempo total
            ---------------------------------|-------------|-------------
            95^3 x 5 cuentas (5 dif. salts)  |  13700 c/s  | 5:12 minutos
            95^3 x 5 cuentas (4 dif. salts)  |  17100 c/s  | 4:10 minutos
            95^3 x 5 cuentas (NO dif. salts) |  65900 c/s  | 1:05 minutos
  
       
   CONSEJOS:
  -----------

  - Para empezar a crackear un fichero passwd *siempre* es mejor empezar
    con una buena lista de palabras (wordlist) ya que es infinitamente
    mas rapido y proporcionalmente las posibilidades de exito son mucho 
    mayores. Tambien es interesante usar la opcion -rules junto con la 
    wordlist (aunque tarda aprox. 45 veces mas). Algunos ejemplos:

      + Con la lista que viene con el John (password.lst  <-- 2030 palabras)
        y con el passwd de 2134 cuentas, en solo 19 segundos saca 36 cuentas.

      + Lo mismo de antes pero con la opcion -rules, en 14 minutos 21 seg.
        crackea 53 cuentas.
    
      + Con una wordlist de 250.000 palabras y con el passwd de 2134 cuentas 
        del ejemplo ... tarda 36:18 minutos y crackea 64 cuentas. (sin -rules)
        (una kk de lista, no?  X-D)
    
  - Antes de usar el modo incremental es tb. conveniente usar la opcion 
    -single , es bastante rapido.

  - Si finalmente os meteis a fondo con el modo incremental conviene poner
    siempre MinLen = 1 en el john.ini, que mas da tardar 3 a€os que 3 a€os
    y 40 minutos ...  ;-D

  - En caso de liaros con algo que vaya a durar dias la opcion -restore
    permite seguir con la sesion por donde se quedo. El fichero donde se 
    guarda esta informacion se llama tb restore. 
      
      --> En mi caso tengo una linea al final del autoexec.bat :
                  john -restore:restore
          asi que antes de salir de casa por las ma€anas enciendo el
          PC y lo dejo 'sudando' hasta la hora de comer ...  :-)

  - Si a alguien se le pasa por la cabeza liarse con algo tipo 95^8 x 2000
    cuentas (+ o -  2 millones de a€os) le recomiendo que se tome una
    aspirina, dos cubatas o 3 Viagras y se tumbe un rato a la bartola a
    pensar si realmente valen la pena esas malditas password .... eso si, 
    mucho cuidado con una sobredosis de Viagra que igual te quedas empalmao 
    toda tu vida ....  X-DDDDDD  

  - Por si alguien aun no lo sabe, el John The Ripper es 'descaradamente'
    el password cracker mas rapido de todos los que hay. En la pagina de
    Mentes Inquietas podeis encontrar (cuando lo vuelvan a poner) una 
    comparativa de crackeadores (@ by Zebal) que seguro que os saca de 
    dudas. [thx GuyBrush  ;-D]
  
  - Por ultimo conviene que no hagais caso de todo el rollo cutre este y 
    que os leais la ayuda del John The Ripper  ... feliz crackeo ..  X-DD


 
 [[.....]]

 Esto en principio acababa aqui pero como he tenido un poco mas de tiempo he 
 hecho un "programilla pocacosa" que seguro que os sera mas util que la tabla 
 de arriba (y ademas rellena mi articulo que falta le hacia al pobre ;-D).

 El tema es tan facil como lanzar el John The Ripper con el fichero passwd 
 de turno (con -i:all por ej.) durante unos 15 minutos (o al menos hasta que 
 se estabiliza el numero de c/s), apuntar el numero de c/s y el numero de 
 cuentas (passwords) a crackear y por ultimo ejecutar el programa pasandole 
 estos 2 datos. Para imprimir los resultados hay que redirigir la salida a
 un fichero.
 Despues que cada uno decida lo que mas le conviene, no ?  :->

 Como antes he dicho los tiempos son maximos y aproximados, aunque da una
 buena idea de lo que tardara.

 La tabla del ejemplo anterior (2134 cuentas (128 dif. salts) , 227000 c/s)
 quedaria asi:



        JOHNTIME - Tabla de Tiempos - John The Ripper (incremental mode)
        @98 by +NetBuL para SET #15 (http://www.ThePentagon.com/paseante)


 ---------- TIEMPO MAXIMO -----------|--- C/S = 227000 ---- 2134 cuentas ---

 ---- Anyos : dias:hors:mins:segs ---|--- Combinac. --> [ -i:ALL ]
    1977656 : 104 :  8 : 52 : 36     |   95^8 x 2134    [ MinLen=MaxLen= 8 ]
      20817 : 158 :  8 : 32 : 28     |   95^7 x 2134    [ MinLen=MaxLen= 7 ]
        219 :  47 : 18 : 32 : 36     |   95^6 x 2134    [ MinLen=MaxLen= 6 ]
          2 : 111 : 22 : 10 : 24     |   95^5 x 2134    [ MinLen=MaxLen= 5 ]
          0 :   8 : 20 : 41 : 47     |   95^4 x 2134    [ MinLen=MaxLen= 4 ]
          0 :   0 :  2 : 14 : 20     |   95^3 x 2134    [ MinLen=MaxLen= 3 ]
          0 :   0 :  0 :  1 : 24     |   95^2 x 2134    [ MinLen=MaxLen= 2 ]
          0 :   0 :  0 :  0 :  0     |   95^1 x 2134    [ MinLen=MaxLen= 1 ]

 ---- Anyos : dias:hors:mins:segs ---|--- Combinac. --> [ -i:ALPHA & CAPITAL ]
         62 :  91 : 17 : 46 : 40     |   26^8 x 2134    [ MinLen=MaxLen= 8 ]
          2 : 143 : 21 : 54 : 56     |   26^7 x 2134    [ MinLen=MaxLen= 7 ]
          0 :  33 : 14 : 41 : 20     |   26^6 x 2134    [ MinLen=MaxLen= 6 ]
          0 :   1 :  7 :  1 : 35     |   26^5 x 2134    [ MinLen=MaxLen= 5 ]
          0 :   0 :  1 : 11 : 35     |   26^4 x 2134    [ MinLen=MaxLen= 4 ]
          0 :   0 :  0 :  2 : 45     |   26^3 x 2134    [ MinLen=MaxLen= 3 ]
          0 :   0 :  0 :  0 :  6     |   26^2 x 2134    [ MinLen=MaxLen= 2 ]
          0 :   0 :  0 :  0 :  0     |   26^1 x 2134    [ MinLen=MaxLen= 1 ]

 ---- Anyos : dias:hors:mins:segs ---|--- Combinac. --> [ -i:DIGITS ]
          0 :  10 : 21 :  8 :  8     |   10^8 x 2134    [ MinLen=MaxLen= 8 ]
          0 :   1 :  2 :  6 : 48     |   10^7 x 2134    [ MinLen=MaxLen= 7 ]
          0 :   0 :  2 : 36 : 40     |   10^6 x 2134    [ MinLen=MaxLen= 6 ]
          0 :   0 :  0 : 15 : 40     |   10^5 x 2134    [ MinLen=MaxLen= 5 ]
          0 :   0 :  0 :  1 : 34     |   10^4 x 2134    [ MinLen=MaxLen= 4 ]
          0 :   0 :  0 :  0 :  9     |   10^3 x 2134    [ MinLen=MaxLen= 3 ]
          0 :   0 :  0 :  0 :  0     |   10^2 x 2134    [ MinLen=MaxLen= 2 ]
          0 :   0 :  0 :  0 :  0     |   10^1 x 2134    [ MinLen=MaxLen= 1 ]


Y por ultimo el prog.:

<++> set_015/netbul/johntime.c
/************************************************************/
/* JOHNTIME.C                       @98 by +NetBuL para SET */
/*  - Tabla de Tiempos - John The Ripper (modo incremental) */
/* Mas info en SET 15 (http://www.ThePentagon.com/paseante) */

#include <stdio.h>
#include <math.h>

void tiempo(int basef,int expf,int cuentasf,long int csf)
{
 float total;
 long int anys;
 int dias, hors, mins, segs;

 total=(pow(basef,expf)*cuentasf) / csf;  /* t. total en segundos */
 segs = fmod(total,60);
 total = total/60;
 mins = fmod(total,60);
 total = total/60;
 hors = fmod(total,24);
 total = total/24;
 dias = fmod(total,365);
 total = total/365;
 anys= total;

 printf(" %10ld : %3d : %2d : %2d : %2d",anys,dias,hors,mins,segs);
}

void main()
{
 int exp;
 long int cs = 0;
 int cuentas = 1;

 printf("\n\n\tJOHNTIME - Tabla de Tiempos - ");
 printf("John The Ripper (incremental mode)");
 printf("\n\t@98 by +NetBuL para SET #15 (http://www.ThePentagon.com/paseante)");
 printf("\n\n\tMedia de c/s (+o- estable): ");
 scanf("%ld",&cs);
 printf("\tNumero de cuentas en PASSWD: ");
 scanf("%d",&cuentas);

 printf("\n\n\n ---------- TIEMPO MAXIMO -----------|");
 printf("--- C/S = %ld ---- %d cuentas ---\n",cs,cuentas);

 /* 95 caracteres == ALL */
 printf("\n ---- Anyos : dias:hors:mins:segs ---|--- Combinac. --> ");
 printf("[ -i:ALL ]\n");
 for (exp=8; exp>0; exp--) {
    tiempo(95,exp,cuentas,cs);
    printf("     |   %d^%d x %d\t[ MinLen=MaxLen= %d ]\n",95,exp,cuentas,exp);
 }

 /* 26 caracteres == ALPHA & CAPITAL */
 printf("\n ---- Anyos : dias:hors:mins:segs ---|--- Combinac. --> ");
 printf("[ -i:ALPHA & CAPITAL ]\n");
 for (exp=8; exp>0; exp--) {
    tiempo(26,exp,cuentas,cs);
    printf("     |   %d^%d x %d\t[ MinLen=MaxLen= %d ]\n",26,exp,cuentas,exp);
 }

 getchar();
 getchar();

 /* 10 caracteres == DIGITS */
 printf("\n ---- Anyos : dias:hors:mins:segs ---|--- Combinac. --> ");
 printf("[ -i:DIGITS ]\n");
 for (exp=8; exp>0; exp--) {
    tiempo(10,exp,cuentas,cs);
    printf("     |   %d^%d x %d\t[ MinLen=MaxLen= %d ]\n",10,exp,cuentas,exp);
 }

}  /* s'acabo */
<-->


Un saludo
+NetBuL <netbul@altern.org>

        [ NOTA DEL EDITOR: Joers, siempre se nos adelantan. Resulta que
          durante la preparacion del articulo salio a la luz publica la
          version 1.5 de nuestro querido johnnie, y por lo que hemos
          podido comprobar, se gana bastante en velocidad. No es por hacer
          publicidad, no nos pagan ni nada de eso, pero hay mas informacion
          sobre los tiempos del John The Ripper en el numero de Junio de
          PC Actual. ]