La protección contra Desbordamientos de Buffer en Windows Vista (II de IV)

¿Como podemos proteger Windows Vista contra los desbordamiento de buffers? Esto es algo que se lleva estudiando largo tiempo, por ello existen diferentes aproximaciones. La primera de ellas es una respuesta bastante sencilla. Utilizar técnicas de prevención.


 


Primera protección: Prevención


——————————————————————————————-


Herramientas de Análisis Estático de Código. FxCod


——————————————————————————————-


 


El objetivo es que si todos los parámetros están bien controlados y no se pasan a la pila de memoria sin haber comprobado correctamente su longitud no tendríamos desbordamientos de buffer, luego intentemos que no salga ningún programa sin haber sido correctamente evaluado. Para ello se utilizan desde hace tiempo las herramientas de Análisis Estático de Código realizan un chequeo del código del programa mientras este no se está ejecutando, buscando patrones de fallos de seguridad (incluidos los desbordamientos de buffer) en códigos en ensamblador, código fuente o código manejado.  FxCod es una herramienta de análisis de estático de código manejado que se puede utilizar en todos los desarrollos que se realizan con Visual Studio 2005. Es una herramienta que permite detectar, no solo desbordamientos de buffer, si no un amplio abanico de fallos de seguridad en las aplicaciones. Todo programa debe estar comprobado para evitar desbordamiento de buffers. Una de las características importantes es que estas herramientas se pueden usar para validar la fiabilidad y seguridad de un software. Microsoft, para las versiones de Windows Vista de 64 bits ya para Longhorn obliga a que los drivers que se instalen en el sistema operativo vayan firmados por Microsoft o una compañía autorizada. Para conseguir la firma del driver es necesario pasar unos test de seguridad que evalúan con herramientas de análisis estático el código del driver.


 



Imagen: Opciones de Análisis de Código en Visual Studio.


 


Segunda Protección: Detección


 ——————————————————————————————-


Los Canarios y la opción /GS


——————————————————————————————- 


Una de las ideas, propuesta por uno de los grandes expertos de la seguridad, Crispin Cowan, fue utilizar lo que el denomina canarios. Los canarios son utilizados en las minas y en las cocinas de gas, para detectar gases nocivos, si el canario muere, algo malo sucede. En el caso de los desbordamientos de Buffer esta es una idea similar. Consiste en apilar unos determinados valores en la pila de llamada al procedimiento justo después de apilar la dirección de retorno. Cuando se va a pasar el control a esa dirección de retorno, se comprueba previamente si los valores en los canarios son los correctos. Si no lo son, hemos de asumir que se ha producido una violación de la zona de memoria. Se llama Stack-Smashing Protecction. El uso de estas tecnologías no garantiza que los parámetros no sufran de desbordamiento de buffer, pues se pueden sobrescribir, no la dirección de retorno, pero sí, el resto de estructuras y, si el atacante puede descubrir el valor de la dirección de memoria o del canario, puede intentar simular un canario correcto. Para ello, se usan canarios no predecibles.


 


En Visual Studio la opción del compilador de comprobación de seguridad del búfer de Visual C++ se llama /GS. El funcionamiento de la opción /GS consiste en establecer un valor cifrado (a veces denominado «chivato») al final de un búfer. Este valor se comprueba durante la ejecución del código y si ha cambiado, se detiene la ejecución del programa y se genera una excepción de seguridad. La opción /GS no evita la saturación del búfer, pero protege contra el posible secuestro del código al detener la ejecución del programa.


 


Bueno, continuaremos la semana que viene, con DEP.


 


Referencias


——————————————————————————————-


 


La protección contra Desbordamientos de Buffer en Windows Vista (I de IV)


La protección contra Desbordamientos de Buffer en Windows Vista (III de IV)


Stack-Smashing Protection


Herramientas de Análisis de Código Estático


Mejoras de Seguridad en Visual Studio 2005


 


 


 


 

4 comentarios sobre “La protección contra Desbordamientos de Buffer en Windows Vista (II de IV)”

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *