Ir al contenido principal

¿Cómo evitar los Buffer Overflow?

Primero debemos explicar que es un buffer overflow, pues simple y sencillamente un buffer overflow es cuando un programa excede el uso de cantidad de memoria asignado por el sistema operativo. Lo que causa que se empiece a escribir en el bloque de memoria contiguo. Este tipo de fallos se utiliza por hackers que buscan tener este tipo de oportunidades para romper código, cambiar variables o introducir código y tomar control total de los equipos.

Un buffer overflow se produce en una aplicación informática cuando no cuenta con los controles de seguridad necesarios en su código de programación. Cabe destacar que para poder llevar a cabo un desborde de memoria, se debe contar con conocimientos de programación, como también nociones básicas de arquitectura de Sistemas Operativos.
El principio operativo de un desbordamiento de búfer va de la mano con la arquitectura del procesador en la que se ejecuta una aplicación vulnerable, ya sea de 32 o 64 bits. Los datos ingresados en una aplicación se almacenan en la memoria de acceso aleatorio, en una zona que se conoce como buffer. Un programa con un diseño correcto debería estipular un tamaño máximo para los datos de entrada y garantizar que no superen ese valor.
Las instrucciones y los datos de un programa en ejecución se almacenan temporalmente en forma contigua en la memoria, en una zona llamada pila. Los datos ubicados después del búfer contienen una dirección de retorno (que se denomina puntero de instrucción) que le permite al programa continuar su tiempo de ejecución. Si el tamaño de los datos es mayor que el del búfer, la dirección de retorno se sobrescribe y el programa leerá unadirección de memoria no válida, generando una violación de segmento en la aplicación.

Entonces, ¿cuál es el posible riesgo de seguridad asociado?

Un cibercriminal con sólidos conocimientos técnicos puede asegurarse de que la dirección de memoria sobrescrita corresponda a una real, por ejemplo, una que esté ubicada en el mismo búfer. Como tal, al ingresar las instrucciones en el búfer (el código arbitrario), es fácil para él ejecutar esta instrucción.
Entonces, es posible incluir instrucciones en el búfer que permitan abrir un intérprete de comandos (como una shell), permitiendo que el atacante tome control del sistema. Este código arbitrario que posibilita la ejecución del intérprete de comandos se conoce como código de shell o shellcode.
Como hemos visto con anterioridad, esta vulnerabilidad puede encontrase en muchos sistemas operativos, en otro tipo de aplicaciones de terceros e inclusive en protocolos. Por este motivo, desde el Laboratorio de Investigación de ESET Latinoamérica siempre recomendamos leer cuáles son las fallas que corrigen las actualizaciones de aplicaciones y sistemas operativos; la instalación de actualizaciones corrige este tipo de errores, permitiendo cerrar agujeros que facilitarían una brecha de seguridad.
Una política de actualizaciones, en conjunto con una solución de seguridad, ayudará a prevenir la explotación de estos errores en la programación. Próximamente seguiremos mostrando este tipo de vulnerabilidad pero de forma práctica, mostrando por dentro cómo es su funcionamiento.

Comentarios

Entradas populares de este blog

JavaScript, npm y seguridad

Como habran escuchado en las ultimas semanas hubo un problema de seguridad con npm. Esto debido a que se anuncio que la ultima actualizacion de npm cambia los permisos criticos del sistema de archivos de Linux, lo cual provoca como consecuencia que todo el sistema operativo se pueda romper por completo. Segun las fuentes incluidas al final de este blog, al rededor de 2000 usuarios se vieron afectados por este error de seguridad al actualizar npm, con tansolo 4 horas de su nuevo lanzamiento. Muchos utilizaron la opción de usar "sudo" para instalar esta actualziación, y como todos lo usuarios de LInux sabemos, esta opción "sudo" le permite a la nueva versión tener permisos de administrador en la computadora, cambiando permisos en varios archivos. Ahora uno se preguntaria, porque npm? porque alguien necesitaria actualizar npm? Bueno, para todos aquellos que utilizan JavaScript deben saber sobre node.js, que gracias a este JavaScript se ha unido a varios lenguajes ...

¿Problemas con tus procesadores Intel?

¿Problemas con tus procesadores Intel? Cómo de seguro han escuchado en los ultimos meses se ha dado a conocer un problema bastante grande en el mundo de la computación relacionado con los procesadores de Intel. Esta noticia tomó a muchos por sorpresa, pues el error se concentra en un fall de diseño que le permite a cualquier aplicación entrar al " kernel space ", dando como resultado un agujero de seguridad bastante crítico. Pero para esto explicaremos mas a detalle esta noticia. ¿Qué es un sistema operativo? Un sistema operativo es aquel que actua como intermediario entre el usuario de la computadora y el hardware, buscando optimizar el uso del hardware, diseñado para ser eficiente. Un sistema operativo administra el uso del hardware y coordina su uso a través de las diferentes programas. Supervisa la ejecución de los programas para prevenir errores y administrar las operaciones de control de input/output. ¿Cómo funciona un sistema operativo? En esta imagen po...

Problemas de seguridad con Github

Github ha sido conocida mudialmente como una de las mejores herramientas para los programadores, realmente una herramienta hecha a la medida para poder subir tus trabajos y códigos y llevar un control de versiones increiblemente ordenada. Todos nos hemos sentidos seguros con github, ya que su uso consiste en un control de versiones que guarda cada avance de tu proyecto, y cada vez que hagas un "commit" se guardara tu avance y siempre podras regresar a esa version que "si funcionaba bien".  En lo perosnal soy un fanático de github y de su flexibilidad, ya que puedes ingresar cualquier tipo de lenguaje, además de llevar un control de progreso en gráficas que meustra que tanto has avanzado, además de contar con las herramientas para trabajar con colaboradores y que otros puedan mejorar tu proyecto o simplemente darte algunas sugerencias. Otra cosa que ahce de github una herramienta muy util es que es opensoruce, por lo cual todos pueden ver tu código a menos q...