Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Generar Llaves

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en COBOL al generar llaves criptográficas. Las llaves criptográficas son muy utilizadas para incrementar la seguridad de la información crítica como credenciales de acceso y autenticación.

Necesidad

Usar la función criptográfica más segura del lenguaje para la generación de llaves aleatorias 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. Debe usarse el mecanismo criptográfico más seguro ofrecido por la plataforma de desarrollo para la generación de números aleatorios, de los cuales se deriven riesgos de seguridad en caso de predecirse el número (ej: Generación de ID, mapeo de códigos, llaves), evaluando previamente un posible impacto en la disponibilidad[1].

Solución

  1. La generación de números pseudoaleatorios es realizada aplicando los conceptos del apéndice 3 de FIPS 186-1. El servidor automáticamente genera la semilla usando datos recolectados de la información del sistema o usando un coprocesador criptográfico como el 4764 si está disponible.

  2. El procedimiento Qc3GenPRNs tiene como propósito la generación de números pseudoaleatorios criptográficamente seguros.

  3. Comenzamos la solución definiendo la división IDENTIFICATION DIVISION[2]:

    cobolrnds.cbl
    1
    2
    3
    4
    5
    6
           PROCESS NOMONOPRC.
           IDENTIFICATION DIVISION.
          ******************
          * Identification *
          ******************
           PROGRAM-ID. COBOLRNDS.
    

    En esta división mediante la sentencia PROGRAM-ID, se denomina al programa como COBOLRNDS.

  4. En la división ENVIRONMENT DIVISION[3] y dentro de la sección CONFIGURATION SECTION, enlazamos el procedimiento externo Qc3GenPRNs:

    1
    2
    3
    4
    5
    6
    7
    8
    9
          ***************
          * Environment *
          ***************
           ENVIRONMENT DIVISION.
           CONFIGURATION SECTION.
             SOURCE-COMPUTER. IBM-ISERIES.
             OBJECT-COMPUTER. IBM-ISERIES.
             SPECIAL-NAMES.
             LINKAGE TYPE PROCEDURE FOR "Qc3GenPRNs".
    
  5. En la división DATA DIVISION[4] se copia las estructuras contenidas en QC3CCI (Manejo criptográfico) y QUSEC (Manejo de errores):

    1
    2
    3
    4
    5
    6
    7
    8
          ********
          * Data *
          ********
           DATA DIVISION.
    
           WORKING-STORAGE SECTION.
           COPY QC3CCI OF QSYSINC-QCBLLESRC.
           COPY QUSEC OF QSYSINC-QCBLLESRC.
    
  6. Se declara la variable WS-RAND-BYTES, la cual va a almacenar la llave generada aleatoriamente:

    1
           01 WS-RAND-BYTES PIC X(32).
    
  7. En la división PROCEDURE DIVISION se encuentra la lógica de negocio:

    1
    2
    3
    4
    5
          ********
          * Main *
          ********
           PROCEDURE DIVISION.
           MAIN.
    
  8. Se hace un llamado al procedimiento Qc3GenPRNs. Los argumentos que espera el procedimiento[5] son:

    • Data: La variable donde se va a almacenar el flujo de datos aleatorios.

    • Longitud de datos: La longitud de la variable portadora.

    • Tipo: Indica el tipo de flujo. 0 para la generación de números pseudoaleatorios reales, 1 para la generación de números pseudoaleatorios de prueba.

    • Paridad: Indica la paridad en cada byte del flujo. 0 para no establecer paridad, 1 para establecer paridad par y 2 para establecer paridad impar.

    • Error: Estructura donde se almacena el error en caso de excepción.

    1
    2
    3
    4
    5
    6
           CALL "Qc3GenPRNs" USING
               BY REFERENCE WS-RAND-BYTES,
               BY CONTENT   LENGTH OF WS-RAND-BYTES,
               BY CONTENT   "0",
               BY CONTENT   "0",
               BY REFERENCE QUS-EC.
    
  9. Se despliega en pantalla el flujo aleatorio y se detiene la ejecución del programa:

    1
    2
    3
           DISPLAY "Random: " WS-RAND-BYTES.
    
           STOP RUN.
    
  10. Algunas de las llaves generadas al ejecutar el programa pueden ser observadas a continuación:

    1
    2
    3
    4
    5
    6
    Random:  iÂQW½ &l  º|äF Êú§± zº PïõM#OÝÖ
    Random: Üæ@  & ϬÓ÷2]#` ä« ñÒ´    =5fr4ÿ
    Random: üQ;ý Øi âÒãyè*  ñ ß:¿¯S}  e9$óóâ
    Random: %xërW 8W!îæ @ëÆ?Æ 5(    é"  íõ ä
    Random: Á  ÅûÀ·d,é P~J¾}Ãðø£  ® >  zY"6÷
    Random: F`IG9q£þ#    £ #¯¥6 VæU V¼½m8 OÙ
    

Descargas

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

  1. cobolrnds.cbl contiene todas las instrucciones COBOL que generan las llaves como se explicó anteriormente.




Haz un comentario

Estado de los servicios - Términos de Uso