Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + Tecnología especializada
DXST - SAST - IAST - SCA - DevSecOps
Caja blanca - Caja gris - Caja negra
Atacando Aplicaciones Web, APIs, Apps Móviles,
Cliente Servidor, Servidores, Redes, Dispositivos IoT
IoT SCI: Sistemas de Control Industrial

Cifrar Código Fuente

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en COBOL al cifrar el código fuente de la aplicación. El código fuente contiene información del funcionamiento de la aplicación y le permite a los atacantes identificar vulnerabilidades.

Necesidad

Cifrar código fuente para depurar programas en COBOL y RPG.

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 o RPG.

  2. La aplicación requiere depurarse en entornos de producción sin exponer el código fuente.

  3. El código fuente no debe ser accesible en ambientes de producción (ej: compilación, ofuscación)[1].

Solución

Para el ejemplo se usará un programa sencillo hecho en COBOL:

  1. Se define la primer división IDENTIFICATION DIVISION de todo programa en COBOL:

    coboldebug.cbl
    1
    2
    3
    4
    5
           IDENTIFICATION DIVISION.
          ******************
          * Identification *
          ******************
           PROGRAM-ID. COBOLDEBUG.
    

    En este caso mediante la instrucción PROGRAM-ID, se denomina al programa bajo el nombre de COBOLDEBUG.

  2. La siguiente división a definir es la de DATA DIVISION. En esta división se declaran nombres de campos, registros, variables, etc. Es decir, se especifica cada tipo de dato utilizado por el programa[2].

    1
    2
    3
    4
    5
    6
          ********
          * Data *
          ********
           DATA DIVISION.
           WORKING-STORAGE SECTION.
           01 W01-COUNT PIC 9(02).
    

    Como se observa en el código anterior, la sección WORKING-STORAGE de DATA DIVISION contiene la variable W01-COUNT, cuya utilidad en este caso es almacenar el valor de la línea que se imprimirá en pantalla:

  3. En la división PROCEDURE DIVISION, se definen todos los procesos necesarios para que el programa funcione. Es decir, se especifia el algoritmo del programa[3]. Para este caso, recorremos de uno en uno la variable W01-COUNT empezando en 1 y terminando en 9:

    1
    2
    3
    4
    5
    6
    7
    8
    9
          ********
          * Main *
          ********
           PROCEDURE DIVISION.
           MAIN.
           PERFORM VARYING W01-COUNT FROM 1 BY 1 UNTIL W01-COUNT > 9
           DISPLAY "Linea " W01-COUNT
           END-PERFORM.
           STOP RUN.
    
  4. La salida del anterior programa es similar a la siguiente:

    1
    2
    3
    4
    5
    Linea 01
    Linea 02
    ...
    Linea 08
    Linea 09
    
  5. Ahora se requiere depurar el programa en entornos de producción, si se compila normalmente con la opción DBGVIEW(*LIST), una copia del código fuente es adjuntada con el programa, lo que le permitiría a un atacante obtener el código fuente original de las aplicaciones compiladas. Para evitar que la copia exacta del código se adjunte con el programa, se debe usar la opción DBGENCKEY[4], la cual permite que se adjunte una copia del código fuente cifrada con una clave proporcionada por el usuario. En el momento de depuración, dicha clave es requerida para descifrar el código fuente, si la clave no coincide no es posible recuperar dicho código.

  6. A través del comando CRTBNDCBL se compila y se crea el programa COBOL (CRTBNDRPG para programas en RPG), el argumento para DBGVIEW debe ser *LIST y para DBGENCKEY es la contraseña (De máximo 16 caracteres) con la cual el código fuente será cifrado:

    1
    2
    3
    4
    5
    6
    CRTBNDCBL
    PGM(Fluid-Attacks/COBOLDEBUG)
    SRCFILE(Fluid-Attacks/QRPGSRC)
    SRCMBR(COBOLDEBUG)
    DBGVIEW(*LIST)
    DBGENCKEY('$ecr3t-K3y')
    
  7. Para depurar el programa se ejecuta el siguiente comando:

    1
    STRDBG COBOLDEBUG
    
  8. En este momento la aplicación solicita la clave para descifrar el código fuente:

    clave
  9. Si la clave es correcta podremos ver el código fuente y depurar normalmente el programa:

    depuracion

Descargas

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

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




Haz un comentario

Estado de los servicios - Términos de Uso