ataque overflow
TRANSCRIPT
-
7/24/2019 Ataque Overflow
1/6
BUFFER OVERFLOW ATTACKERICK PREZ ARGUELLOFERNANDO CAMPAA ROJAS
I TERMINO 2015LENGUAJES DE PROGRAMACIN
ESPOL
-
7/24/2019 Ataque Overflow
2/6
1
Ya estn por cumplirse 30 aos del primer ataque registrado y es an un
tema de problemtica actual, pero, A qu nos referimos con esto? Sino, a la
conocida sobrecarga de espacio asignado de memoria o en trminos un poco
ms simple al desbordamiento de buffer (Buffer Overflow), en un ejemplo,
almacenamos diez cosas en un espacio que solo da para seis de ellas, ms el
restante va y ocupa otros cuatro espacios extras junto al que tenemos; son
muchos los lenguajes de programacin que presentan esta problemtica, as
tenemos a C y C++ como los ms conocidos en no realizar alguna
comprobacin para evitarlo.
Durante todo este tiempo ya numerosos investigadores han buscado frenar
estos tipos de ataques y es as como ya se tiene sistemas operativos ms
seguros, y de avanzados y ms robustos lenguajes de programacin, no
obstante, esta vulnerabilidad sigue persistiendo. El alcanzar la prevencin o
proteccin de estos sigue siendo un desafo para la seguridad informtica
pero es as como ya se tiene algunas soluciones buscamos examinar yconocer en detalle lo que nos brinda.
Pero antes de entrar en el enfoque principal hay que hablar un poco de
historia, como se dijo antes, poco ms para cumplirse 30 aos era 1988
cuando Robert T. Morris desarroll en 1988 el primer gusano que se
autopropag por Internet utilizando un fallo de Buffer Overflow en los UNIX
de esa pocas, llegando a ser miles los ordenadores que fueron infectados.
Luego, en el 2001, el gusano Code Red se aprovech de un Buffer Overflow
en el servidor web IIs de Microsoft que permita obtener un acceso como
administrador del sistema. Y entre otros ataques tambin se conoce que en2003 apareci SQLSlammer que permita la ejecucin de cdigo arbitrario en
servidores SQL Server 200 (Coutinho, 2012).
Y as es como existieron an ms casos que se aprovecharon de este
desbordamiento, pero como entender bien sobre esta problemtica y ms
aun de sus soluciones sin primero entrar en detalle un poco ms tcnico y es
as como primero definimos al nombrado Buffer Overflow como una
vulnerabilidad que ocurre cuando se copia una cantidad de datos sobre un
rea que no es lo suficientemente grande logrando as que se sobrescriba
otras zonas de memoria. Estos fallos, productos de una aplicacin que nocuenta con los controles de seguridad en su cdigo, son utilizados para lograr
ejecutar cdigo arbitrario en un equipo, de manera que en muchos casos
logran tomar control del equipo vctima o ejecutar un ataque de Denegacin
de Servicios (DoS) (Prez, 2014).
Debido a la naturaleza de la memoria es como entonces podemos distinguir
dos tipos primarios de Buffer Overflow siendo el primero el ocurrido en tiempo
de compilacin o tambin conocido como desbordamiento de Stack (Stack
Overflow) y el segundo que ocurre durante el tiempo de ejecucin o
desbordamiento de Heap (Heap Overflow) siendo el primero el de mayorocurrencia (Flores, 2012). Diferenciando definimos entonces que: Heap
-
7/24/2019 Ataque Overflow
3/6
2
overflow, como su nombre indica es el desbordamiento producido en un rea
de memoria conocida como Heap que es reservada nicamente de manera
dinmicamente y que puede ser sobrescrita, en situaciones en la que no se
verifica el tamao de los datos que se copian a ella (Lerch, 2007), aunque
tienden a ser ms difciles de realizar puede ser peligroso debido a que
pueden modificar estructuras de datos internas. Mientras que un Stack
Overflow, es el desbordamiento ms comn debido a la estructura LIFO (Last
In First Out) en que se presenta la memoria, y es aqu donde se encuentra
almacenado las direcciones de retornos de las funciones, las variables locales
y los parmetros de funciones (Gervacio & De Len, 2015) lo cual es
aprovechado para producirse el ataque.
Pero entonces, Cmo se da el ataque? Lo que se busca a travs de
operaciones que manipulan memoria desbordar un buffer con el claro
objetivo de corromper la memoria adyacente, la pila del sistema, en donde
por su forma estructural sabemos que se encuentra en primer lugar lasdirecciones de retorno (tambin denominados puntero de instruccin) que le
permite al programa continuar su tiempo de ejecucin. Entonces lo que hace
el pirata informtica es que al momento de sobrescribir este segmento de
memoria modifica la direccin de memoria para apuntar a un cdigo
malicioso o inesperado. Por lo tanto, es posible incluir instrucciones en el
bfer que permitan abrir un intrprete de comandos (shell) permitiendo que
el pirata tome control del sistema. Este cdigo arbitrario que posibilita la
ejecucin de comandos se conoce como cdigo de shell o shellcode (CCM
Benchmark Group, 2015).
Explicado todo esto podemos definir a un ataque de Buffer Overflow como el
desbordamiento de un bfer con datos de otro dominio que propician un
comportamiento malicioso o inesperado en un programa.
Ahora que sabemos todo esto, Cmo nos protegemos de este tipo de
ataques? Bsicamente todo yace en que una direccin debe ser modifica para
poder entrar al sistema, caso contrario el ataque simplemente no es posible,
por lo que hoy en da se busca la deteccin de la modificacin de dicha
direccin y es as como se tiene presentan cuatro enfoques que buscan la
proteger de este tipo de ataque: Primero, tener cdigo que no sea fcilmentevulnerable, Segundo, llamado Anlisis Esttico que busca ver que tan
propenso se es a ataques que ya se conocen, Tercero, conocido como
Solucione Dinmica que busca la proteccin de datos propenso a ser blanco
de ataque y el Cuarto, identificado como Aislamiento que busca limitar el
dao ms a preverlo. Pero mejor generalicemos un poco de que se trata estas
soluciones planteadas.
El primer enfoque es sencillo de entender, un cdigo que no de facilidad al
fracaso que est libre de vulnerabilidades que ya se conocen o que eviten en
todo lo posible convertirse en un fracaso.
-
7/24/2019 Ataque Overflow
4/6
3
El segundo enfoque, como se mencion dado el conjunto de vulnerabilidades
conocidas, podemos evitar los desbordamientos de bfer mediante la
sustitucin de las funciones vulnerables. Este enfoque que se maneja sobre
el cdigo fuente, es conocido como el Anlisis Esttico.
Este se aplica antes de la implementacin un programa, con el objetivo deencontrar y resolver los problemas potenciales. Para ello, simplemente
usamos conocimiento predefinido para analizar el cdigo fuente. Por ejemplo,
sabiendo de que la funcin strcpy en el lenguaje C, copia cadenas sin
comprobar los limites, por lo que es sospechosa de permitir un
desbordamiento de bfer, podemos crear una funcin de bsqueda que
identifique cualquier uso de la funcin y advierta al programado de esta
potencial amenaza.
Un algoritmo genrico para este tipo de anlisis esttico podra ser:
1.
Abrir el archivo de funciones sospechosas
2. Hacer una bsqueda dentro del cdigo fuente por cada funcin
sospechosa.
3. Si se encuentra una de estas funciones, remplazamos por un cdigo
menos vulnerable.
El tercer enfoque se encuentra dirigido a los objetivos del atacante, los datos
de control, la validacin de la integridad de estos datos nos permiten detectar
los ataques de desbordamiento de bfer. Por lo que nos referimos a esta clase
de esquema de proteccin como solucin dinmica, debido a que los sistemas
de gestin y verificacin de datos son en forma dinmica y se da durante laejecucin. Entonces a manera de algoritmo para este enfoque tenemos:
1. Etiquetamos los datos de control.
2. Si se acede al dato y la etiqueta es verificada, entonces, continua sin
problema, caso contrario, se lanza una excepcin.
Tenemos entonces que para verificar la integridad de los datos, es necesario
etiquetarlos, y luego simplemente validamos las mismas.
Por ejemplo: Identificamos una direccin que no puede ser modificada luego
de su creacin le colocamos una palabra (canario) adyacente a ella y elmomento en que vayamos a usar esta direccin verificamos primero esta
palabra asignada.
El cuarto enfoque, plantea un esquema de aislamiento que limitan daos de
los ataques en vez de la prevencin de los mismos. Como resultado, su
proteccin no se limitan solo a ataque del tipo buffer overflow. Al crearse una
cortina electrnica, los sistemas de aislamiento pueden prevenir un ataque o
limitar el dao que causa. Por ejemplo, es posible evitar que una cierta parte
de memoria (pila) sea utilizada como almacenamiento de cdigo ejecutable.
Alternativamente, tambin podemos encarcelar procesos para evitar accesos
-
7/24/2019 Ataque Overflow
5/6
4
a otras partes de memoria y con eso logramos contener el dao (Piromsopa
& Enbody, 2011).
En comparacin cada tcnica no elimina del todo la vulnerabilidad al ataque
y es fcil suponer que hay muchos ms enfoques para el problema por lo que
puede generarse otro tipo de soluciones, claro est todo sea por brindarcdigos con altos niveles de seguridad y que brinden ms dificultad a la
aparicin de este u otros ataques. Pero si analizamos los tres ltimos enfoque,
despus de todo ya que la primera medida es ms que obligatoria, y
contraponemos uno contra otra la comprobacin dinmica en tiempo de
ejecucin puede ser la mejor opcin para dar seguridad en un sistema, claro
est hoy en da los atacantes ya se adecuan a estas tcnicas, pero ya se
dificulta bastante el acceso no obstante, el usar un sistema de aislamiento
brinda ms confianza tambin implica que no haiga un funcionamiento
correcto del mismo, pero como ya se dijo antes, no son las nicas tcnicas
existen pero son buenas opciones para solucin del problema.
Para finalizar, sabemos que un ataque de desbordamiento de bfer es
producto de la manipulacin de cdigo vulnerable que permite aperturas de
puertas para manejo del sistemas o en otras palabras, que se produzcan
eventos inesperados, todo esto debido a que se llena la memoria buffer y se
da paso a la sobrescritura de zonas de memoria adyacentes a esta, que por
debido a la arquitectura es la zona en la que encontramos almacenadas las
direcciones de retornos, las cual pueden ser cambiados para dar pasos a
agentes externos. Hoy en da sigue siendo una problemtica que no se ha
podido eliminar pero que ya se presentan sistemas mucho ms robustos quedificultan este tipo de ataques no obstante hay distintas opciones para brindar
seguridad a los sistemas. En resumen la mejor opcin de seguridad cuando
se cree un sistema es el uso de cdigo correcto que no permita ningn tipo
de vulnerabilidad. Aunque no es una tcnica ampliamente utilizada es la
mejor opcin que se puede tener para eliminar estos tipos de ataques.
-
7/24/2019 Ataque Overflow
6/6
5
Referencias
CCM Benchmark Group. (Agosto de 2015). CCM - Comunidad informtica.
Obtenido de: http://es.ccm.net/contents/19-ataques-por-desbordamiento-de-bufer
Coutinho, B. (2 de Septiembre de 2012). Slideshare.Obtenido de:
http://es.slideshare.net/bernardocou/buffer-overflow-y-exploits
Flores, D. (2012). El Futuro de los Ataques por Desbordamiento de Pila. El
futuro de los Ataques por los Desbordamientos de Pila. Quito,
Ecuador.
Gervacio, J., & De Len, E. (2015). Uno de los clsicos: Buffer Overflow.
Seguridad, Cultura de prevencin par TI, 21 - 24.
Lerch, D. (17 de Junio de 2007). El blog de Daniel Lerch. Obtenido de:
http://dlerch.blogspot.com/2007/06/heap-overflow.html
Prez, I. (5 de Noviembre de 2014). Welive Security. Obtenido de:
http://www.welivesecurity.com/la-es/2014/11/05/como-funcionan-
buffer-overflow/
Piromsopa, K., & Enbody, R. (2011). Survey of Protections from Buffer-
Overflow Attacks. Engineering Journal, 31 - 52.