¿Existe un riesgo de seguridad al usar punteros en lugar de las instancias de estructura?

2

Recientemente, durante una revisión de código, un desarrollador senior me pidió que reemplazara un puntero con una instancia de estructura en un método de utilidad. Me pidió que lo hiciera por razones de seguridad. Una de las razones por las que podía pensar era que las instancias de la estructura se limpiarían gracias a la pila de instrucciones, pero el valor del puntero no. ¿Hay alguna otra razon? ¿No podría un atacante acceder a mi memoria en cualquiera de los dos casos?

EDITAR: Agregando el fragmento de código:

static void make_digest( const EVP_MD *md, char *header, char *message,unsigned char *digest)
{
   EVP_MD_CTX *mdctx;
   unsigned int digest_len = 0;

   EVP_MD_CTX_init(mdctx);
   EVP_DigestInit_ex(mdctx, md, NULL);
   EVP_DigestUpdate(mdctx, header, strlen( header ));
   EVP_DigestUpdate(mdctx, message, 32);
   EVP_DigestFinal_ex(mdctx, digest, &digest_len);
   EVP_MD_CTX_cleanup(mdctx);
   return;
}
    
pregunta Limit 02.05.2016 - 03:39
fuente

1 respuesta

5

No conozco los detalles de la rutina que se te pidió que modificaras, pero puedo decirte lo siguiente.

Cuando asigna memoria en el montón, incluso si la desasigna correctamente, no hay garantía de que el contenido de esa memoria se borre después de que haya terminado con ella.

En la pila es lo mismo, sin embargo, debido a la forma en que funciona la pila, es más probable que la memoria se sobrescriba en el orden corto (diablos, la siguiente función podría sobrescribirla). Con la memoria asignada en el montón, el tiempo para sobrescribirla es indeterminable desde su perspectiva como programador.

Entonces, para responder a su pregunta, es posible que un atacante pueda leer la memoria en ambos casos, pero durante el curso de la ejecución de su programa, la pila potencialmente se sobrescribirá de inmediato, mientras que los datos en su asignación de pila serían mucho más fácil de encontrar mucho tiempo después de que su programa lo desasignara.

    
respondido por el Moo-Juice 02.05.2016 - 12:25
fuente

Lea otras preguntas en las etiquetas