Joven hacker sonriendo

Evitar Emitir Mensajes de Errores en Autenticación

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en COBOL al evitar emitir mensajes de error en autenticación. Los mensajes de error pueden contener información que puede ser aprovechada por un atacante para vulnerar la aplicación.

Necesidad

No emitir mensajes de error identificables en la autenticación en COBOL.

Contexto

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

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

  2. La aplicación maneja autenticación de usuarios.

  3. El proceso de autenticación no debe emitir mensajes de error que permitan distinguir si es un error de usuario o de contraseña[1].

Solución

  1. Se da inicio a la aplicación de ejemplo declarando la división IDENTIFICATION DIVISION[2]:

    cobolauth.cbl
    1
    2
    3
    4
    5
          ******************
          * Identification *
          ******************
           IDENTIFICATION DIVISION.
           PROGRAM-ID. COBOLAUTH.
    

    En el anterior bloque de código, se establece el nombre del programa a COBOLAUTH mediante la sentencia PROGRAM-ID. Cabe resaltar que el uso de IDENTIFICATION DIVISION no se limita a establecer el nombre de un programa en COBOL. Al final del presente escrito[2],[3] puede encontrar mayor información sobre otros usos dados a dicha división.

  2. Se declaran los datos a usar en la división DATA DIVISION[4]:

    1
    2
    3
    4
          ********
          * Data *
          ********
           DATA DIVISION.
    
  3. En esta ocasión, se declaran las variables W01-USERNAME y W02-PASSWORD, las cuales serán ingresadas por el usuario:

    1
    2
    3
           WORKING-STORAGE SECTION.
           01 W01-USERNAME PIC X(16) VALUE "".
           01 W02-PASSWORD PIC X(16) VALUE "".
    
  4. Se establece como prueba los datos de autenticación. Hay que recordar que estos datos deben ir centralizados en una base de datos, y la contraseña resumida con una función hash:

    1
    2
           01 W03-USERAPP  PIC X(16) VALUE "administrator".
           01 W04-PASSAPP  PIC X(16) VALUE "Admin_123456!".
    
  5. Se declara la división PROCEDURE DIVISION y dentro de ella mediante la sentencia ACCEPT, se captura el usuario y contraseña ingresados desde la entrada estándar:

    1
    2
    3
    4
    5
    6
    7
    8
    9
          ********
          * Main *
          ********
           PROCEDURE DIVISION.
               DISPLAY "Username: ".
               ACCEPT W01-USERNAME.
    
               DISPLAY "Password: ".
               ACCEPT W02-PASSWORD.
    

    Como se mencionó anteriormente, luego de que se ejecuta el anterior bloque de código, las variables W01-USERNAME y W02-PASSWORD contendrán los valores ingresados por el usuario.

  6. Comparamos los datos ingresados con los establecidos en las variables W03-USERAPP y W04-PASSAPP, declaradas (e inicializadas) dentro de la división DATA DIVISION:

    1
    2
           IF W01-USERNAME = W03-USERAPP THEN
               IF W02-PASSWORD = W04-PASSAPP THEN
    
  7. Si la combinación es válida, se despliega en pantalla un mensaje de notificación de ingreso válido y se procede a realizar las acciones para el usuario autenticado:

    1
           DISPLAY "Combinacion valida"
    
  8. Si el usuario o contraseña no corresponden con los establecidos, se despliega en pantalla un mensaje genérico para ambos (Combinación no válida). Esto evita que un atacante infiera datos sobre los usuarios en la base de datos, además de posibles ataques de fuerza bruta:

    1
    2
    3
    4
    5
    6
    7
    8
               ELSE
                   DISPLAY "Combinacion no valida"
               END-IF
           ELSE
               DISPLAY "Combinacion no valida"
           END-IF.
    
           STOP RUN.
    

Descargas

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

  1. cobolauth.cbl contiene todas las instrucciones COBOL del programa explicado anteriormente.




Haz un comentario

Estado de los servicios - Términos de Uso