Vulnerabilidades del Software

download Vulnerabilidades del Software

If you can't read please download the document

Transcript of Vulnerabilidades del Software

PowerPoint Template

Vulnerabilidades del Software.Flix Mera Garca [email protected] Curso 08-09, ESEI (UVigo)

ContenidosIntroduccin.

Cross Site Scripting (XSS):

XSS indirecto

XSS directo

Desbordamiento de buffer:

Pisado de pila

Inyeccin SQL

Programacin segura para

XSS

Desbordamiento de buffer

Inyeccin SQL

Conclusiones

Fuentes (bibliografa)

Vulnerabilidades del Software -

IntroduccinUna vulnerabilidad del software es cualquier defecto en el mismo que permita explotarlo con el fin de que un atacante pueda hacerse con el control del sistema.

Las vulnerabilidades pueden deberse a:

Una mala configuracin del software por parte del administrador/usuario.

Una incorrecta programacin durante el proceso de desarrollo o actualizacin del software.

La mayora de vulnerabilidades hoy en da se deben al segundo caso ya que:

Existe bastante documentacin de usuario para configurar el sofware.

Desconocimiento de seguridad informtica en la mayora de programadores.

Empresarios que fuerzan los ciclos de desarrollo del software para terminar antes los productos.

Las auditoras de seguridad de cdigo fuente apenas se practican.

Vulnerabilidades del Software -

Cross Site Scripting (XSS)XSS es una vulnerabilidad del software que permite ejecutar cdigo de scripting en una aplicacin debido a una incorrecta validacin de los datos de entrada de la misma.

Generalmente las aplicaciones vulnerables a XSS son aquellas que utilizan HTML : Pginas web, phising, exploits de navegadores...

Sus siglas son XSS en vez de CSS para no confundirlo con las hojas de estilo en cascada (Cascading Style Sheets).

Los objetivos de los atacantes que utilizan esta vulnerabilidad suelen ser:

Conseguir acceso no autorizado

Robo de informacin

Causar daos econmicos

Conseguir un mejor Phising (Pasar desapercibido ante la vctima).

El XSS es una vulnerabilidad que puede estar presente de dos formas: Directa e Indirecta.

Vulnerabilidades del Software -

XSS en forma DirectaXSS se presenta en forma directa (llamada tambin persistente), cuando el atacante embebe cdigo HTML malicioso en sitios que as lo permiten porque carecen de filtrado.

El cdigo del atacante incluye etiquetas o tags del tipo o entre las cuales escribe cdigo malicioso, por ejemplo hacer spam no permitido en foros.

Es una de las vulnerabilidades ms comunes y tambin de las ms utilizada sen la actualidad.

Ejemplo de existencia de vulnerabilidad XSS en forma directa:

EjemploXSS1

Ejemplo de programacin segura en XSS:

EjemploXSS2

Vulnerabilidades del Software -

XSS en forma IndirectaEl XSS se presenta en forma indirecta cuando el cdigo maligno se inyecta a travs de formularios, de la URL, programas en FLASH e incluso vdeos y se busca que sea la vctima quien entre en el enlace malicioso.

Vulnerabilidad muy comn pero en general, muy poco explotada.

Muy utilizada para robo de sesiones y phising.

Para saber si nuestra pgina web es vulnerable a este tipo de ataques existen escneres de vulnerabilidades como el de http://www.acunetix.com/, que aunque es de pago tiene un versin gratuita de prueba (freeware) que permite escanear ataques XSS presentes en ambas formas.

Vulnerabilidades del Software -

Desbordamiento de Buffer (Buffer Overflow)Tipo de vulnerabilidad del software que tiene lugar cuando por error (o intencionadamente) se copia una cantidad de datos sobre un rea de memoria que no es lo suficientemente grande para contenerlos, sobrescribiendo de esta manera otras posiciones de memoria.

El desbordamiento de buffer se debe a fallos de programacin y en un principio, el comportamiento del sistema cuando se sobrescribe una parte de la memoria es impredecible.

Los BO sirven para introducir cdigo mquina en el espacio reservado para las variables locales y despus modificar la direccin de retorno para que apunte a la posicin de memoria donde han introducido nuevo cdigo. Este cdigo generalmente es un shell code.

Se usa la funcin strcpy para sobrescribir posiciones de memoria. El string origen de la funcin strcpy contiene cdigo mquina del atacante al principio y despus la nueva direccin de retorno repetida tantas veces como sea necesaria para llegar a sobrescribir la antigua. Cuando la funcin llegue a su fin y llame a la instruccin return (que recupera la direccin de retorno de la pila) la ejecucin del programa continuar en la posicin de memoria que el atacante haya indicado y en la que tenemos nuestro cdigo.

Vulnerabilidades del Software -

Buffer Overflow: Ejemplo de vulnerabilidad/* Ejemplo de desbordamiento de buffer en C */#include #include int main(int argc, char *argv[]) { char buffer1[5]="AAAA\0"; char buffer2[5]; if (argc < 2) { fprintf(stderr, "\nSINTAXIS CORRECTA: %s \n", argv[0]); return 1; } strcpy(buffer2, argv[1]); printf("\n BUFFER 1: "); puts(buffer1); printf("\n BUFFER 2: "); puts(buffer2); return 0;}Vulnerabilidades del Software -

Buffer Overflow: Ejemplo de programacin segura/* Evitar desbordamiento de buffer en C. Ejemplo de programacin segura */#include #include int main(int argc, char *argv[]) { char buffer1[5]="AAAA\0"; char buffer2[5]; if (argc < 2) { fprintf(stderr, "\nSINTAXIS CORRECTA: %s \n", argv[0]); return 1; } strncpy(buffer2, argv[1], sizeof(buffer2)); buffer2[sizeof(buffer2) - 1] = '\0'; printf("\n BUFFER 1: "); puts(buffer1); printf("\n BUFFER 2: "); puts(buffer2); return 0;}Vulnerabilidades del Software -

Pisado de Pila (Stack Smashing)Tipo de desbordamiento de buffer aprovechado por virus y malware para tomar control sobre una aplicacin, o provocar que la misma termine.

El Stack Smashing sucede cuando se ingresa en la pila de la aplicacin ms datos que los que sta puede contener (hasta que desborde) y as se sobrescriban datos.

Los atacantes hacen uso de esta vulnerabilidad para sobrescribir zonas de memoria que contribuyan a hacerles con el control del sistema ganando permisos. Si ejecutas el programa infectado con privilegios de administrador/root ests perdido.

Tanto el Desbordamiento de Buffer como el Pisado de Pila en sistemas GNU/Linux pueden evitarse instalando parches en el kernel que no permiten la ejecucin de cdigo mquina en la pila de las funciones, impidiendo as la ejecucin de Shell Codes.

Vulnerabilidades del Software -

Stack Smashing: Ejemplo de vulnerabilidad/* Ejemplo de programa de Pisado de Pila que utiliza la vulnerabilidad BO*/#include #include int main( int argc, char *argv[] ) { char buffer[1024]; // Buffer esttico en la pila. if ( argc != 2 ) { printf("Uso: %s argumento\n", argv[0] ); return( -1 ); } // Copiado de cadenas sin control. strcpy( buffer, argv[1]); printf( "Argumento copiado\n" ); return(0);}Vulnerabilidades del Software -

Inyeccin SQL (SQL Injection)SQL Injection es una vulnerabilidad de programacin que le brinda a un usuario de una aplicacin la posibilidad de inyectar sentencias SQL en la BD que la aplicacin emplea como soporte de datos.

Para que un ataque por inyeccin SQL sea posible es necesario que el atacante arme sentencias SQL concatenadas con datos que a la aplicacin le llegan del usuario.

La nica forma de prevenirlo es labor del programador, diseando una correcta aplicacin.

Ejemplo tpico de Inyeccin SQL para loguearse con cuenta ajena a travs de un formulario que solicita correo y contrasea (suponer que el atacante conoce el correo de Pepito):

SELECT * FROM tusuarios WHERE [email protected] AND password=01234

SELECT * FROM tusuarios WHERE [email protected] AND password= OR 1=1

Se denomina Blind SQL Injection al proceso del atacante de explorar los enlaces de la aplicacin y las tablas y atributos de la BD que previamente no le son conocidos. Gracias a sus conocimientos y experiencia terminar por intur qu instrucciones SQL se utilizan y como explotarlas en su benficio.

Vulnerabilidades del Software -

Inyeccin SQL: Cmo evitarlaAsignacin de mnimos privilegios: La cuenta que se determina para conectarse en una aplicacin web, debe tener slo privilegios que sta necesita, ni ms ni menos.

Validar todas las entradas: Si en un campo de texto slo se puede ingresar un tipo de dato, pues valide la entrada para tal efecto y especifique la longitud de caracteres a ingresar. Si permitimos introducir texto asegurmonos de que la aplicacin busca caracteres como comas, puntos y comas, signo igual, parntesis y palabras claves SQL para filtrarlo. De gran utilidad son las RegEx.

Empleo de procedimientos almacenados: Utilizar procedimientos almacenados y aceptar los datos del usuario como parmetros en lugar de cmo instrucciones SQL.

Utilizar comillas dobles en vez de las simples: En el archivo que procesa los datos de entrada del usuario remplazamos las comillas simples por comillas dobles, posibilitando el truncamiento de las inyecciones SQL.

Como las comillas simples finalizan las expresiones SQL y posibilitan la entrada de expresiones peligrosas, la simple sustitucin de la comilla simple har que al atacante en su inicio por inyectar SQL lo lleve al fracaso.

Vulnerabilidades del Software -

Otras vulnerabilidadesCross Site Request Forgery (XSRF) o falsificacin de sitios cruzados: tipo de exploit malicioso de una pgina web en la que comandos no autorizados son transmitidos por un usuario en el cual el sitio web confa. Esta vulnerabilidad es conocida tambin por otros nombres como enlace hostil, ataque de un click, cabalgamiento de sesin, y ataque automtico.

ForceFul Browsing (FFB): Consiste en una intrusin de un sistema (generalmente web) accediendo directamente a subdirectorios protegidos supuestamente por la aplicacin.

Vulnerabilidades del Software -

ConclusionesEn el proceso de diseo, desarrollo y actualizacin de una aplicacin es dnde aparecen las vulnerabilidades del software.

La mayora de vulnerabilidades pueden evitarse en su mayor parte validando correctamente los datos que el usuario introduce. Se recomienda el uso de RegEx.

Utilizar memoria dinmica y validar el tamao de entrada de los vectores para evitar desbordamientos, sobre todo si codificamos en un lenguaje que no utiliza comprobacin de lmites de arrays en tiempo de ejecucin: Lenguajes como C.

La aplicacin de auditoras de seguridad de cdigo fuente es obligada. En caso de que sea inviable que otros programadores revisen tu cdigo fuente reportar fallos seguramente.

Cunto mejor sepas explotar las vulnerabilidades, mejor sabrs evitarlas.

Si administras cualquier tipo de sistema, mantn las aplicaciones de ste actualizadas: cualquier vulnerabilidad descubierta ser publicada en internet (incluso proliferarn los exploits especficos para la misma) y el nmero de posibles atacantes crece exponencialmente.

An tomando todas estas medidas anteriores, alguien puede descubrir una nueva vulnerabilidad: No existe el software absolutamente seguro.

Vulnerabilidades del Software -

Fuentes que consult para la elaboracin del trabajo:

http://www.monografias.com/

http://bulma.net/

http://www.ignside.net/

http://es.wikipedia.org/

http://www.webtaller.com/

http://www.programandoamedianoche.com/

http://yopensource.com/

http://www.elhacker.net/

http://www.virtualforge.de/

Enlaces recomendados para quien quiera profundizar en el tema:

http://unixwiz.net/techtips/sql-injection.html

http://www.simbiontes.com/archives/codeblog/prueba-de-concepto-de-inyeccion-sql.php

http://www.programandoamedianoche.com/2008/07/sql-injection-100-real/

http://informatica-practica.net/solocodigo/index.php/2007/09/05/inyeccion-sql-en-aplicaciones-web-i/

http://www.virtualforge.de/vmovie.php

http://www.try2hack.nl/

Mi direccin de correo electrnico para dudas, opiniones y dems: [email protected]

Bibliografa

Page