¿Qué vulnerabilidades son posibles en lenguajes como C / C ++ que no sean errores de desbordamiento? [cerrado]

0

Sé que los programas C / C ++ son altamente susceptibles a los errores de desbordamiento que llevan al compromiso del programa. Pero me preguntaba, ¿existen otras vulnerabilidades que puedan existir además de los errores de desbordamiento? Soy consciente de las referencias de punteros colgantes, apagado por uno y errores enteros, pero ¿hay alguna otra forma que no sea aprovechar los errores de desbordamiento para explotar programas? Si es así, por favor sugiera algunas lecturas y referencias. Gracias

    
pregunta user148898 18.07.2017 - 13:41
fuente

1 respuesta

1

Dado que C (y C ++, que técnicamente se pueden considerar una adición a C) está cerca del ensamblaje, muchos de los detalles del procesador deben modelarse y controlarse desde sus construcciones. El ejemplo más sencillo que muestra esto es el error de desbordamiento del índice de matriz.  Este error conlleva el uso incorrecto de un índice de matriz de tal manera que recupere una parte de la memoria que no fue asignada a dicha matriz.

int[2] arrayX;
printf(arrayX[3]);

Un compilador adecuado se quejará en el bloque de código anterior sobre el índice fuera de alcance, ya que un análisis estático del código ya lo muestra. También puede utilizar matrices creadas dinámicamente que son desconocidas, ya que en el momento de la compilación, no se dará ninguna advertencia.

Ahora, cuando ingresa una función, efectivamente asigna una dirección de retorno de código a la pila. así como las ubicaciones para el "objeto" de retorno en la misma pila mencionada. Esta pila se llama call stack y no debe ser manipulada por el programa en operaciones normales.

Con estos dos mecanismos podemos "engañar" a un programa para que ejecute nuestro propio código. Lo hacemos agregando instrucciones del procesador en una ubicación de memoria conocida y manipulando la pila de llamadas para cambiar el puntero de retorno a mi bloque de código inyectado. (Esto se llama inyección de código).

Este comportamiento se puede desencadenar por un error de desbordamiento o algún otro mecánico para ajustar la pila de llamadas, esto depende del sistema operativo en funcionamiento y del hardware en uso, y es la principal forma en que funcionan los ataques.

Sin embargo, existen vulnerabilidades que explotan llamadas de nivel inferior a las que ofrece C (básicamente, inyectando código de máquina / ensamblaje en el código del programa).

En C ++ hay métodos adicionales para agregar código a una aplicación, mediante la utilización (o abuso) de los mecanismos de carga de la Clase.

Si desea aprender sobre estos conceptos, sugeriría aprender sobre metasploit. Leyendo en detalle cómo funciona C (la Biblia es un buen comienzo) e intenta leer los documentos del compilador GCC.

    
respondido por el LvB 18.07.2017 - 14:30
fuente

Lea otras preguntas en las etiquetas