ıllı Internet y Tecnologías de la Información (2018)

internet, Hosting, dominios, seo, antivirus, banco de imágenes, páginas web, tiendas online

[Enciclopedia Online Gratuita] Diccionario de Internet y Tecnologías de la Información y la Comunicación (TIC):

ıllı Desbordamiento de búfer wiki: info, historia y vídeos

videos internet

salud  Desbordamiento de búfer 


En seguridad informática y programación, un desbordamiento de búfer (del inglésbuffer overflow o bien buffer overrun) es un fallo de software que se genera en el momento en que un programa no controla apropiadamente la cantidad de datos que se copian sobre un área de memoria reservada a dicho efecto (buffer): Si dicha cantidad es superior a la capacidad preasignada, los bytes excedentes se guardan en zonas de memoria lindantes, sobrescribiendo su contenido original, que seguramente pertenecían a datos o bien código guardados en memoria. Esto forma un fallo de programación.


En las arquitecturas comunes de computadoras no existe separación entre las zonas de memoria dedicadas a datos y las dedicadas a programa, con lo que los bytes que desbordan el buffer podrían grabarse donde ya antes había instrucciones, lo que implicaría la posibilidad de trastocar el flujo del programa, llevándole a efectuar operaciones imprevisibles por el programador original. Esto es lo que es conocido como una vulnerabilidad.


Una vulnerabilidad puede ser aprovechada por un usuario avieso para influir en el funcionamiento del sistema. En ciertos casos el resultado es la capacidad de lograr cierto nivel de control saltándose las restricciones de seguridad frecuentes. Si el programa con el fallo en cuestión tiene privilegios singulares forma en un fallo grave de seguridad.


Se llama shellcode al código ejecutable singularmente preparado que se copia al host objeto del ataque para conseguir los privilegios del programa frágil.


La capacidad de los procesadores modernos para marcar zonas de memoria como protegidas puede emplearse para disminuir el inconveniente. De producirse un intento de escritura en una zona de memoria protegida se produce una salvedad del sistema de acceso a memoria (segfault), seguido de la terminación del programa. Desgraciadamente a fin de que esta técnica sea eficaz los programadores tienen que apuntar al sistema operativo las zonas que se precisa resguardar, programa a programa y rutina a rutina, lo que supone un inconveniente para todo el código heredado.


Un desbordamiento de búfer ocurre cuando los datos que se escriben en un búfer corrompen aquellos datos en direcciones de memoria lindantes a los destinados para el búfer, debido a una falta de validación de los datos de entrada. Esto se da generalmente al copiar cadenas de caracteres de un búfer a otro.


Ejemplo básico


En este caso de ejemplo, un programa tiene definidos 2 elementos de datos continuos en memoria: un buffer de ocho bytes tipo string, A, y otro de 2 bytes tipo entero, B. Al principio, A contiene bytes nulos y B contiene el número tres (cada carácter se representa a través de un byte).

0000000003Buffer ABuffer B

A continuación, el programa procura guardar la cadena de caracteres "demasiado" en el buffer A, seguido de bytes nulos para marcar el fin de string. Al no validarse la longitud de la cadena, se sobrescribe el valor de B:

'd''e''m''a''s''i''a''d''o'0Buffer ABuffer B

A pesar de que el programador no deseaba mudar el contenido del búfer B, el valor de este ha sido sustituido por un número equivalente a una parte de la cadena de caracteres. Para este caso de ejemplo, en un sistema big-endian que use ASCII, el carácter 'o' seguido del byte nulo equivale al número veintiocho mil cuatrocientos dieciseis.


Si B fuera la única variable además de A definida en el programa, la escritura de datos que excedan los límites de B producirían un fallo como segmentation fault, concluyendo de esta manera el programa.


Código fuente de ejemplo


En el próximo ejemplo se presenta un código fuente en C con un fallo de programación. Una vez compilado, el programa producirá un desbordamiento de buffer si se lo invoca desde la línea de comandos con un razonamiento suficientemente grande, puesto que este razonamiento se utiliza para ocupar un buffer, sin validar anteriormente su longitud.

/* overflow.c - prueba un desbordamiento de buffer */#include<stdio.h>#include<string.h>intmain(intargc,char*argv

Strings de nueve caracteres o bien menos no provocarán desbordamiento de buffer. Por contra, strings de diez caracteres o bien más, sí: Esto siempre y en todo momento es incorrecto, si bien no siempre y en todo momento resultará en un fallo del programa o bien segmentation fault.


Este programa puede reescribirse en forma más segura utilizando la función strncpy de la próxima manera:

/* mejor.c - prueba un procedimiento de solucionar el inconveniente */#include<stdio.h>#include<string.h>intmain(intargc,char*argv

Uno de los primeros aprovechamientos de los que hay registro de desbordamiento de búferes fue en mil novecientos ochenta y ocho. Fue uno de los múltiples que utilizó el gusanoMorris para extenderse en Internet. El programa abusado fue un servicio de Unix llamado fingerd.


Más tarde, en mil novecientos noventa y cinco, Thomas Lopatic redescubrió en forma independiente el desbordamiento de búfer y publicó sus descubrimientos en la lista de correo sobre seguridad Bugtraq. Un año después, en mil novecientos noventa y seis, Elias Levy (conocido asimismo como Aleph One) publicó en la gaceta Phrack su artículo "Smashing the Stack for Fun and Profit", una introducción punto por punto para aprovecharse de vulnerabilidades de desbordamientos de búfer basados en la pila.


Desde entonces, al menos 2 de los vermes más esenciales de Internet se han aprovechado de los desbordamientos de búfer para comprometer un elevado número de sistemas. En dos mil uno, el verme Code Red se aprovechó de un desbordamiento de búfer en el Internet Information Services (IIS) cinco.0 de Microsoft y en dos mil tres el verme SQL Slammer comprometió máquinas corriendo Microsoft SQL Server dos mil.


El pisado de pila o bien stack smashing es un género de desbordamiento de buffer que es aprovechado por ciertos virus y otros programas maliciosos para tomar control sobre una aplicación, o bien provocar su terminación.Esto sucede cuando, por algún fallo imprevisible, se ingresa a la pila de la aplicación más datos que los que esta puede contener, lo que hace que esta se "desborde" y ciertos datos se sobreescriban. Para eludir que suceda esto, los compiladores se mejoran día a día dejándole tiempo al programador para meditar en lo que verdaderamente importa.


La siguiente sería una explicación de qué es, de qué forma se hace y de qué forma se previene el desbordamiento de pila, con el valor agregado de permitir una nueva herramienta que va a ayudar a explicar fallos comunes de programación. El próximo ejemplo está inspirado en la funcionalidad incluida en el nuevo compilador por defecto de la distribución Debian (en su versión inestable):


Este es un caso común de un programa C vulnerable:

#include<stdio.h>#include<string.h>intmain(intargc,char*argv

Este programa simple admite un razonamiento y lo copia a un buffer estático. Este es un fallo de programación tradicional, si este programa fuera compilado a un ejecutable setuid/setgid (ejecutable por cualquiera tal y como si fuera el dueño) dejaría a un atacante ganar permisos sencillamente.


Como se marchan a probar las nuevas funciones del nuevo compilador, hay que asegurarse de recopilar el ejemplo precedente con gcc-treinta y tres de la próxima forma:

user@pc:/tmp dólares americanos  gcc-treinta y tres -o bien buggy buggy.c

Antes de determinar si se puede romper, se deben ejecutar dos pruebas:

user@pc:/tmp dólares americanos  /tmp/buggyUso: /tmp/buggy argumentouser@pc:/tmp dólares americanos  /tmp/buggy testArgumento copiado

Ambas marchan como se espera. Ahora, se ejecuta la prueba pasando un razonamiento más largo para determinar si se desborda el buffer estático:

user@pc:/tmp dólares americanos  ./buggy 'perl -y también 'print "X"x2048''Argumento copiadoViolación de segmento

Como se observa, la prueba fue exitosa: el buffer se desbordó con un razonamiento de más de dos.000 caracteres, resultando en una violación de segmento. Ahora, un fichero de núcleo puede permitir depurarlo para identificar las direcciones de memoria usadas por el proceso:

user@pc:/tmp dólares americanos  ulimit -c 09999999user@pc:/tmp dólares americanos  ./buggy 'perl -y también 'print "X"x3333''Argumento copiadoViolación de segmento (con fichero de núcleo)

Al correr el depurador gdb se puede ver el programa:

user@pc:/tmp dólares americanos  gdb ./buggy coreGNU gdb sesenta y cuatro-debian...El programa concluyó con señal once, Violación de segmento#0 0x58585858 in ?? ()(gdb) info registers eipeip 0x58585858 0x58585858

Se puede observar que EIP muestra la dirección de memoria de la próxima instrucción que va a ser ejecutada (0×58585858). Esto quiere decir que ciertamente se tomó el control del ejecutable con el script malicioso.


El explotar el ejecutable para correr una línea de comandos habiendo hecho esto es trivial y, generalmente, puede ser automatizado:

user@pc:~/cmd-overflow dólares americanos  makegcc-treinta y tres -o bien cmd-overflow -Wall -ggdb cmd-overflow.cgcc-treinta y tres -o bien cmd-vuln -Wall -ggdb cmd-vuln.cuser@pc:~/cmd-overflow dólares americanos  ./cmd-overflow --target=/tmp/buggy --args=' por ciento ' --size=2048Argumento copiadoshell-treinta y uno dólares americanos  iduid=1000(usuario) gid=1000(usuario) groups=29(audio), 44(vídeo), 46(plugdev), 100(usuarios), 1000(usuario)shell-treinta y uno dólares americanos  exitexit

Se usa acá un programa simple para crear un razonamiento de dos mil cuarenta y ocho bytes de longitud que contiene el código requerido para correr una línea de comandos, y después se ejecuta el programa imperfecto con este razonamiento construido a la medida.


Se generó el desbordamiento del buffer al correr este código, lo que resultó en la ejecución de una línea de comandos. Si el programa se hubiera sido ejecutado en Linux con el flag setuid por un super-usuario se hubiesen ganado los privilegios del super-usuario.


  ELIGE TU TEMA DE INTERÉS: 


autoayuda.es   Internet y Tecnologias 

Está aquí: Inicio > [ INTERNET ] > ıllı Desbordamiento de búfer wiki: info, historia y vídeos

Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies. Ver políticas