Qué es?
Un desbordamiento del buffer es una situación en la que un programa en ejecución intenta escribir datos fuera del buffer de memoria que no está destinado a almacenar estos datos. Cuando esto sucede, estamos hablando de un desbordamiento del buffer. Un buffer de memoria es un área en la memoria de la computadora destinada a almacenar datos temporalmente. Cuando la cantidad de datos escritos en el buffer excede la cantidad esperada de datos, el buffer de memoria se desborda.
Esto sucede, por ejemplo, cuando se espera un nombre de usuario con un máximo de 8 bytes y se da un nombre de usuario de 10 bytes y se escribe en el buffer. En este caso, el buffer se supera en 2 bytes y se producirá un desbordamiento cuando no se evite que ocurra.
Mientras que los códigos ASCII solo cubren caracteres de idiomas occidentales, Unicode puede crear caracteres para casi todos los idiomas escritos en la tierra debido a que hay muchos más caracteres disponibles, muchos caracteres Unicode son más grandes que el carácter ASCII más grande.
Esto sucede, por ejemplo, cuando se espera un nombre de usuario con un máximo de 8 bytes y se da un nombre de usuario de 10 bytes y se escribe en el buffer. En este caso, el buffer se supera en 2 bytes y se producirá un desbordamiento cuando no se evite que ocurra.
Tipos
Hay varios ataques de desbordamiento de buffer diferentes que emplean diferentes estrategias y apuntan a diferentes piezas de código. Esto puede provocar un desbordamiento del buffer. ASCII y Unicode son estándares de codificación que permiten que las computadoras representen texto. Por ejemplo, la letra ‘a’ está representada por el número 97 en ASCII.Mientras que los códigos ASCII solo cubren caracteres de idiomas occidentales, Unicode puede crear caracteres para casi todos los idiomas escritos en la tierra debido a que hay muchos más caracteres disponibles, muchos caracteres Unicode son más grandes que el carácter ASCII más grande.
Lenguajes de programación más vulnerables
Ciertos lenguajes de codificación son más susceptibles al desbordamiento del buffer que otros. Los lenguajes más modernos como Java, PERL y C # tienen características integradas que ayudan a reducir las posibilidades de desbordamiento del buffer, pero no pueden evitarlo por completo.
Ejecución de código arbitrario y escalada de privilegios
Cuando se utiliza una vulnerabilidad de desbordamiento de buffer para escribir datos maliciosos en la memoria y el atacante puede tomar el control del flujo de ejecución de un programa, estamos lidiando con una grave vulnerabilidad de seguridad. Los desbordamientos del buffer pueden convertirse en serios problemas de seguridad. La ejecución de código arbitrario es el proceso de inyectar código en el buffer y hacer que se ejecute. La escalada de privilegios se realiza mediante la explotación de una vulnerabilidad de desbordamiento de buffer para ejecutar código arbitrario en un programa que se ejecuta con privilegios del sistema.
También con desbordamientos de buffer, el código ejecutado ocurre en el contexto de la aplicación en ejecución.
Denegación de servicio
No todas las vulnerabilidades de desbordamiento del buffer se pueden explotar para obtener la ejecución de código arbitrario. Como los desbordamientos del buffer pueden ocurrir vulnerabilidades en cualquier software, los ataques DoS no se limitan solo a los servicios y las computadoras. Un ejemplo de esta situación es el reciente Cisco ASA IKEv1 e IKEv2 Buffer Overflow exploits.
Exploremos 2 protecciones comunes que ayudan a mitigar el riesgo de explotación
Los ataques de desbordamiento de buffer generalmente dependen de conocer la ubicación exacta del código ejecutable importante, la aleatorización de los espacios de direcciones lo hace casi imposible. Los desarrolladores de software también pueden tomar precauciones contra las vulnerabilidades de desbordamiento del buffer escribiendo en idiomas que tengan protecciones incorporadas o utilizando procedimientos especiales de seguridad en su código. A pesar de las precauciones, los desarrolladores continúan descubriendo nuevas vulnerabilidades de desbordamiento del buffer, a veces a raíz de una explotación exitosa.
Conclusión
Es importante concienciar a los ingenieros de los requerimientos no funcionales y las buenas prácticas de programación que ayudan a disminuir el riesgo de experimentar vulnerabilidades en los sistemas. Aunque este sistema de protección tendría que ser suficiente para evitar los ataques, es preferible realizar un enfoque de protección en distintas capas. Para ayudar a mitigar los riesgos, los sistemas operativos han incluido diferentes mecanismos de protección. Sin embargo, estos mecanismos no evitan que la vulnerabilidad exista.
Pero sí consiguen que sea más difícil el proceso de un atacante para aprovechar una vulnerabilidad. Debemos saber que estos sistemas de protección no son perfectos y que los atacantes han creado técnicas para eludir su funcionamiento.
Ciertos lenguajes de codificación son más susceptibles al desbordamiento del buffer que otros. Los lenguajes más modernos como Java, PERL y C # tienen características integradas que ayudan a reducir las posibilidades de desbordamiento del buffer, pero no pueden evitarlo por completo.
Ejecución de código arbitrario y escalada de privilegios
Cuando se utiliza una vulnerabilidad de desbordamiento de buffer para escribir datos maliciosos en la memoria y el atacante puede tomar el control del flujo de ejecución de un programa, estamos lidiando con una grave vulnerabilidad de seguridad. Los desbordamientos del buffer pueden convertirse en serios problemas de seguridad. La ejecución de código arbitrario es el proceso de inyectar código en el buffer y hacer que se ejecute. La escalada de privilegios se realiza mediante la explotación de una vulnerabilidad de desbordamiento de buffer para ejecutar código arbitrario en un programa que se ejecuta con privilegios del sistema.
También con desbordamientos de buffer, el código ejecutado ocurre en el contexto de la aplicación en ejecución.
Denegación de servicio
No todas las vulnerabilidades de desbordamiento del buffer se pueden explotar para obtener la ejecución de código arbitrario. Como los desbordamientos del buffer pueden ocurrir vulnerabilidades en cualquier software, los ataques DoS no se limitan solo a los servicios y las computadoras. Un ejemplo de esta situación es el reciente Cisco ASA IKEv1 e IKEv2 Buffer Overflow exploits.
Exploremos 2 protecciones comunes que ayudan a mitigar el riesgo de explotación
Los ataques de desbordamiento de buffer generalmente dependen de conocer la ubicación exacta del código ejecutable importante, la aleatorización de los espacios de direcciones lo hace casi imposible. Los desarrolladores de software también pueden tomar precauciones contra las vulnerabilidades de desbordamiento del buffer escribiendo en idiomas que tengan protecciones incorporadas o utilizando procedimientos especiales de seguridad en su código. A pesar de las precauciones, los desarrolladores continúan descubriendo nuevas vulnerabilidades de desbordamiento del buffer, a veces a raíz de una explotación exitosa.
Conclusión
Es importante concienciar a los ingenieros de los requerimientos no funcionales y las buenas prácticas de programación que ayudan a disminuir el riesgo de experimentar vulnerabilidades en los sistemas. Aunque este sistema de protección tendría que ser suficiente para evitar los ataques, es preferible realizar un enfoque de protección en distintas capas. Para ayudar a mitigar los riesgos, los sistemas operativos han incluido diferentes mecanismos de protección. Sin embargo, estos mecanismos no evitan que la vulnerabilidad exista.
Pero sí consiguen que sea más difícil el proceso de un atacante para aprovechar una vulnerabilidad. Debemos saber que estos sistemas de protección no son perfectos y que los atacantes han creado técnicas para eludir su funcionamiento.
No hay comentarios:
Publicar un comentario