¿Es seguro incluir direcciones de memoria en la salida de un programa?

2

Estoy escribiendo un programa. La entrada es una estructura de datos compleja en la memoria. La salida es un informe HTML que contiene: (1) una representación de la estructura; (2) anotaciones textuales que se refieren a objetos en la estructura.

Para vincular las anotaciones con partes de la estructura, utilizo las direcciones de memoria de los objetos como anclajes. Por lo tanto, las direcciones de memoria terminan directamente en el código HTML generado.

¿Podría ser peligroso de alguna manera?

Los informes son principalmente para uso personal, pero a veces se pueden compartir.

El programa se puede usar como una biblioteca, dentro del espacio de memoria de otro proceso. Sin embargo, los objetos de entrada se construyen especialmente para este propósito, y normalmente se recolectarán como basura una vez que el informe esté terminado.

Estaba pensando en ofuscar las direcciones con MD5. ¿Sería algo mejor?

    
pregunta Vasiliy Faronov 22.04.2016 - 17:40
fuente

3 respuestas

2

Simplemente desde un punto de vista de programación, en lugar de usar una dirección de memoria de objetos para vincular estos dos datos, realmente debería generar un número de índice y usarlo para referirse entre la estructura y su anotación.

No veo ninguna razón por la cual sería peligroso incluir las direcciones en el informe, ya que tan pronto como su programa termina, el sistema operativo libera el espacio de direcciones. Si bien es posible que no esté en cero (los datos pueden permanecer en la memoria hasta que se sobrescriban), es probable que no corra el riesgo de explotación.

    
respondido por el Daisetsu 23.04.2016 - 09:00
fuente
1

Puede ser peligroso. Si su programa manipula datos confidenciales que no terminan en el informe, entonces las direcciones de memoria pueden revelar información sobre los datos confidenciales. Es probable que la explotación de estos datos sea difícil; el atacante tendría que tener un buen conocimiento práctico de lo que hace el programa y solo obtendría información parcial, principalmente sobre el tamaño y la cantidad de algunos elementos de datos.

Por ejemplo, indique este pseudocódigo que analiza el registro de un paciente para determinar si es apto para el trabajo:

struct patient_record_entry entries* = malloc(entry_count * sizeof(struct patient_record_entry));
char *employer_name = malloc(employer_name_length);
// read patient data from file
// analyze patient record to determine fitness for work
bool is_patient_fit = …;
printf("<patient><name>%s</name><employer>%s</employer><fit>%d</fit></patient>\n",
       patient.name, employer_name, is_patient_fit);

Revelar las direcciones de employer_name y entries revela el número de entradas en el registro del paciente ( employer_name - entries menos una constante relacionada con la gestión de la memoria) en el caso no tan improbable donde los dos bloques de memoria son consecutivos. Esto filtra más información sobre el paciente de lo que se supone que está en la salida.

    
respondido por el Gilles 25.04.2016 - 02:08
fuente
0

En primer lugar, ¿qué perderías al calcular estos valores? Sospecho que el código no es particularmente crítico para el rendimiento y el impacto de la velocidad sería relativamente menor. Si no hay un gran inconveniente, probablemente valga la pena hacerlo.

En cuanto al impacto en la seguridad, muchos sistemas operativos utilizan la asignación al azar del espacio de direcciones (ASLR) para ayudar a mitigar ciertos tipos de ataques. En el caso de que su programa produzca esta salida y salga, probablemente no sea un gran problema ya que las direcciones filtradas son para un proceso ahora muerto, pero al mencionar una biblioteca que podría filtrar direcciones para un proceso que continúa ejecutándose, puede haber un problema allí. . La filtración de la información no crea directamente una vulnerabilidad, pero puede hacer que sea más fácil explotar una que existe.

    
respondido por el Robert Kerr 23.04.2016 - 12:55
fuente

Lea otras preguntas en las etiquetas