Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + tecnología especializada

Comprobar Fortaleza de Contraseña Tipo Frase

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en COBOL al comprobar la fortaleza de las contraseñas tipo frase. Los atacantes pueden obtener una contraseña por fuerza bruta por lo cual es importante contar con una contraseña segura.

Necesidad

Comprobar fortaleza de contraseñas tipo frase en COBOL.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se está desarrollando una aplicación en COBOL.

  2. La aplicación administra contraseñas de tipo frase.

  3. Las contraseñas (tipo frase preferido) deben tener al menos 3 palabras de longitud[1].

Solución

  1. Declaramos la división IDENTIFICATION DIVISION[2]:

    cobolpass2.cbl
    1
    2
    3
    4
    5
           IDENTIFICATION DIVISION.
          ******************
          * Identification *
          ******************
           PROGRAM-ID. COBOLPASS2.
    

    Es la primera de las cuatro divisiones que conforman a un programa desarrollado en COBOL. Mediante la sentencia PROGRAM-ID se establece el nombre del programa a COBOLPASS2.

  2. En la división DATA DIVISION[3] se declara las variables necesarias para la solución. Estas son: contraseña ingresada por el usuario, contador de caracteres, longitud de la contraseña, variable que contendrá un solo caracter, el número de palabras en la contraseña y un indicador o bandera que nos ayudará a contar el número de palabras:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
          ********
          * Data *
          ********
           DATA DIVISION.
    
           WORKING-STORAGE SECTION.
           01 W01-PASSWORD PIC X(64) VALUE "".
           01 W02-COUNT    PIC 9(02) VALUE 1.
           01 W03-LENGTH   PIC 9(02) VALUE 0.
           01 W04-CHAR     PIC X     VALUE "".
           01 W05-PNUMBER  PIC 9(02) VALUE 0.
           01 W06-FLAG     PIC 9     VALUE 0.
               88 W06-FLAG-FALSE VALUE 0.
               88 W06-FLAG-TRUE  VALUE 1.
    
  3. Declaramos la división PROCEDURE DIVISION[4]:

    1
    2
    3
    4
    5
    6
          ********
          * Main *
          ********
           PROCEDURE DIVISION.
           MAIN.
               ACCEPT W01-PASSWORD.
    

    En esta división se definen todos los procesos necesarios para que el programa funcione. Dicho de otra manera, consta de todo el algoritmo del programa. Para este caso, obtenemos la contraseña proveniente del usuario mediante la sentencia ACCEPT y almacenamos el valor en la variable W01-PASSWORD.

  4. Calculamos la longitud de la contraseña almacenada dentro de la variable W01-PASSWORD:

    1
           COMPUTE W03-LENGTH = FUNCTION LENGTH(W01-PASSWORD).
    
  5. Recorremos la contraseña letra por letra:

    1
    2
           PERFORM UNTIL W02-COUNT > W03-LENGTH
               MOVE W01-PASSWORD(W02-COUNT:1) TO W04-CHAR
    
  6. Si el carácter es espacio y el carácter inmediatamente anterior es una letra diferente a espacio, entonces indicamos a través de la bandera que ahora se encontrarán más espacios:

    1
    2
    3
    4
           IF W04-CHAR = SPACE
               IF W06-FLAG-TRUE
                   MOVE 0 TO W06-FLAG
               END-IF
    
  7. Si el carácter es diferente a espacio y el carácter inmediatamente anterior es un espacio entonces hemos encontrado una palabra, aumentamos el valor de la variable PNUMBER. A través de la bandera le indicamos al algoritmo que ahora está leyendo una palabra, esto evitará que sigamos acumulando el valor para PNUMBER:

    1
    2
    3
    4
    5
    6
           ELSE
               IF W06-FLAG-FALSE
                   COMPUTE W05-PNUMBER = W05-PNUMBER + 1
                   MOVE 1 TO W06-FLAG
               END-IF
           END-IF
    
  8. Realizamos el mismo análisis para el resto de caracteres en la entrada del usuario:

    1
    2
               COMPUTE W02-COUNT = W02-COUNT + 1
           END-PERFORM.
    
  9. Si el número de palabras es menor a tres entonces se ha incumplido el requisito. Sin embargo, se debe tener en cuenta que una palabra en estos casos puede tener una longitud de un carácter, por lo que la contraseña "a a a" podría ser válida:

    1
    2
           IF W05-PNUMBER < 3
               DISPLAY "Requisito incumplido"
    
  10. En caso contrario, la entrada contiene tres o más palabras, por lo que el requisito de seguridad se ha cumplido:

    1
    2
    3
    4
    5
           ELSE
               DISPLAY "Requisito cumplido"
           END-IF.
    
           STOP RUN.
    

Descargas

Puedes descargar el código fuente pulsando en el siguiente enlace:

  1. cobolpass2.cbl contiene todas las instrucciones COBOL del programa.




Haz un comentario

Estado de los servicios - Términos de Uso