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

Liberar Recursos

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la liberación correcta de recursos dentro de un programa desarrollado en RPG, evitando así que información disponible en memoria pueda ser capturada por usuarios no autorizados.

Necesidad

Liberar recursos en 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 RPG.

  2. El código fuente debe estar implementado de tal forma que cierre cualquier recurso que se encuentre abierto y no esté siendo utilizado.[1]

Solución

Durante la ejecución de un programa suelen asignarse diferentes tipos de recursos. Es importante que estos recursos sean liberados en el momento en que no se requieran, ya que el no hacerlo puede generar problemas de disponibilidad. Si bien es cierto que el sistema operativo se encarga de liberar los recursos que estaban asignados a un programa que ha fallado o finalizado, algunos programas tienen una vida de duración muy superior a la vida de uso de los recursos asignados, por lo que es fundamental tener una administración adecuada de los mismos que evite cuellos de botella en las demás aplicaciones del sistema.

  1. A continuación se presentan algunos comandos que son importante considerar, y que deben tener un tratamiento de asignación/liberación controlado:

    • El comando ALCOBJ[2] establece cerrojos sobre archivos en estructuras distribuidas, los cuales son compartidos en lectura. Además, es importante evitar inanición en otros procesos que requieran los archivos en DDM. Para liberar los cerrojos, se usa el comando DLCOBJ.

    • Con OPEN[3] se establece una conexión lógica entre el servidor fuente y los datos en el objetivo. El comando CLOSE finaliza la conexión.

    • Con la llamada %Alloc(num)[4] se puede asignar memoria para el posterior almacenamiento de datos:

      test.v
      1
      2
      3
      /FREE
           pointer = %ALLOC(200);
      /END-FREE
      
  2. La llamada a DEALLOC[5] permite liberar dicho espacio:

    1
    2
    3
    /FREE
         dealloc pointer;
    /END-FREE
    
  3. Note que en este caso, pointer se convierte en un apuntador perdido, ya que hace referencia a un lugar de memoria que fue liberado.

  4. La lista anterior no es exhaustiva, pero sirve para mostrar el ejemplo de archivos, objetos distribuidos y memoria. También es importante considerar las conexiones a bases de datos y sockets, los semáforos, etc.




Haz un comentario

Estado de los servicios - Términos de Uso