Vulnerabilidades del Software. Félix Mera García 39455427-P [email_address] SSI Curso 08-09, ESEI (UVigo)
Contenidos <ul><li>Introducción. </li></ul><ul><li>Cross Site Scripting (XSS): </li></ul><ul><ul><li>XSS indirecto </li></...
Introducción <ul><li>Una vulnerabilidad del software es cualquier defecto en el mismo que permita explotarlo con el fin de...
Cross Site Scripting (XSS) <ul><li>XSS es una vulnerabilidad del software que permite ejecutar código de  scripting  en un...
XSS en forma Directa <ul><li>XSS se presenta en forma directa (llamada también persistente), cuando el atacante embebe cód...
XSS en forma Indirecta <ul><li>El XSS se presenta en forma indirecta cuando el código maligno se inyecta a través de formu...
Desbordamiento de Buffer  (Buffer Overflow) <ul><li>Tipo de vulnerabilidad del software que tiene lugar cuando por error (...
Buffer Overflow : Ejemplo de vulnerabilidad /* Ejemplo de desbordamiento de buffer en C */ #include <stdio.h> #include <st...
Buffer Overflow : Ejemplo de programación segura /* Evitar desbordamiento de buffer en C. Ejemplo de programación segura *...
Pisado de Pila  (Stack Smashing) <ul><li>Tipo de desbordamiento de  buffer  aprovechado por virus y  malware  para tomar c...
Stack Smashing : Ejemplo de vulnerabilidad /* Ejemplo de programa de Pisado de Pila que utiliza la vulnerabilidad BO*/ #in...
Inyección SQL  (SQL Injection) <ul><li>SQL Injection  es una vulnerabilidad de programación que le brinda a un usuario de ...
Inyección SQL: Cómo evitarla <ul><li>Asignación de mínimos privilegios:  La cuenta que se determina para conectarse en una...
Otras vulnerabilidades <ul><li>Cross Site Request Forgery  (XSRF) o falsificación de sitios cruzados:  tipo de  exploit  m...
Conclusiones <ul><li>En el proceso de diseño, desarrollo y actualización de una aplicación es dónde aparecen las vulnerabi...
<ul><li>Fuentes que consulté para la elaboración del trabajo: </li></ul><ul><li>http://www.monografias.com/ </li></ul><ul>...
Próxima SlideShare
Cargando en…5
×

Vulnerabilidades del Software

6.408 visualizaciones

Publicado el

Trabajo teórico de Vulnerabilidades del Software para la asignatura SSI de UVigo. Autor: Félix Mera García.

Publicado en: Tecnología
0 comentarios
2 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
6.408
En SlideShare
0
De insertados
0
Número de insertados
29
Acciones
Compartido
0
Descargas
184
Comentarios
0
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

Vulnerabilidades del Software

  1. 1. Vulnerabilidades del Software. Félix Mera García 39455427-P [email_address] SSI Curso 08-09, ESEI (UVigo)
  2. 2. Contenidos <ul><li>Introducción. </li></ul><ul><li>Cross Site Scripting (XSS): </li></ul><ul><ul><li>XSS indirecto </li></ul></ul><ul><ul><li>XSS directo </li></ul></ul><ul><li>Desbordamiento de buffer: </li></ul><ul><ul><li>Pisado de pila </li></ul></ul><ul><li>Inyección SQL </li></ul><ul><li>Programación segura para </li></ul><ul><ul><li>XSS </li></ul></ul><ul><ul><li>Desbordamiento de buffer </li></ul></ul><ul><ul><li>Inyección SQL </li></ul></ul><ul><li>Conclusiones </li></ul><ul><li>Fuentes (bibliografía) </li></ul>Vulnerabilidades del Software -
  3. 3. Introducción <ul><li>Una 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. </li></ul><ul><li>Las vulnerabilidades pueden deberse a: </li></ul><ul><ul><li>Una mala configuración del software por parte del administrador/usuario. </li></ul></ul><ul><ul><li>Una incorrecta programación durante el proceso de desarrollo o actualización del software . </li></ul></ul><ul><li>La mayoría de vulnerabilidades hoy en día se deben al segundo caso ya que: </li></ul><ul><ul><li>Existe bastante documentación de usuario para configurar el sofware . </li></ul></ul><ul><ul><li>Desconocimiento de seguridad informática en la mayoría de programadores. </li></ul></ul><ul><ul><li>Empresarios que fuerzan los ciclos de desarrollo del software para terminar antes los productos. </li></ul></ul><ul><ul><li>Las auditorías de seguridad de código fuente apenas se practican. </li></ul></ul>Vulnerabilidades del Software -
  4. 4. Cross Site Scripting (XSS) <ul><li>XSS es una vulnerabilidad del software que permite ejecutar código de scripting en una aplicación debido a una incorrecta validación de los datos de entrada de la misma. </li></ul><ul><li>Generalmente las aplicaciones vulnerables a XSS son aquellas que utilizan HTML : Páginas web, phising, exploits de navegadores... </li></ul><ul><li>Sus siglas son XSS en vez de CSS para no confundirlo con las hojas de estilo en cascada ( Cascading Style Sheets) . </li></ul><ul><li>Los objetivos de los atacantes que utilizan esta vulnerabilidad suelen ser: </li></ul><ul><ul><li>Conseguir acceso no autorizado </li></ul></ul><ul><ul><li>Robo de información </li></ul></ul><ul><ul><li>Causar daños económicos </li></ul></ul><ul><ul><li>Conseguir un mejor Phising (Pasar desapercibido ante la víctima). </li></ul></ul><ul><li>El XSS es una vulnerabilidad que puede estar presente de dos formas: Directa e Indirecta . </li></ul>Vulnerabilidades del Software -
  5. 5. XSS en forma Directa <ul><li>XSS se presenta en forma directa (llamada también persistente), cuando el atacante embebe código HTML malicioso en sitios que así lo permiten porque carecen de filtrado. </li></ul><ul><li>El código del atacante incluye etiquetas o tags del tipo <frame> o <script> entre las cuales escribe código malicioso, por ejemplo hacer spam no permitido en foros. </li></ul><ul><li>Es una de las vulnerabilidades más comunes y también de las más utilizada sen la actualidad. </li></ul><ul><li>Ejemplo de existencia de vulnerabilidad XSS en forma directa: </li></ul><ul><ul><li>EjemploXSS1 </li></ul></ul><ul><li>Ejemplo de programación segura en XSS: </li></ul><ul><ul><li>EjemploXSS2 </li></ul></ul>Vulnerabilidades del Software -
  6. 6. XSS en forma Indirecta <ul><li>El XSS se presenta en forma indirecta cuando el código maligno se inyecta a través de formularios, de la URL, programas en FLASH e incluso vídeos y se busca que sea la víctima quien entre en el enlace malicioso. </li></ul><ul><li>Vulnerabilidad muy común pero en general, muy poco explotada. </li></ul><ul><li>Muy utilizada para robo de sesiones y phising. </li></ul><ul><li>Para saber si nuestra página web es vulnerable a este tipo de ataques existen escáneres de vulnerabilidades como el de http://www.acunetix.com/ , que aunque es de pago tiene un versión gratuita de prueba ( freeware ) que permite escanear ataques XSS presentes en ambas formas. </li></ul>Vulnerabilidades del Software -
  7. 7. Desbordamiento de Buffer (Buffer Overflow) <ul><li>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. </li></ul><ul><li>El desbordamiento de buffer se debe a fallos de programación y en un principio, el comportamiento del sistema cuando se sobrescribe una parte de la memoria es impredecible. </li></ul><ul><li>Los BO sirven para introducir código máquina en el espacio reservado para las variables locales y después modificar la dirección de retorno para que apunte a la posición de memoria donde han introducido nuevo código. Este código generalmente es un shell code. </li></ul><ul><li>Se usa la función strcpy para sobrescribir posiciones de memoria. El string origen de la función strcpy contiene código máquina del atacante al principio y después la nueva dirección de retorno repetida tantas veces como sea necesaria para llegar a sobrescribir la antigua. Cuando la función llegue a su fin y llame a la instrucción return (que recupera la dirección de retorno de la pila) la ejecución del programa continuará en la posición de memoria que el atacante haya indicado y en la que tenemos nuestro código. </li></ul>Vulnerabilidades del Software -
  8. 8. Buffer Overflow : Ejemplo de vulnerabilidad /* Ejemplo de desbordamiento de buffer en C */ #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char buffer1[5]=&quot;AAAA&quot;; char buffer2[5]; if (argc < 2) { fprintf(stderr, &quot; SINTAXIS CORRECTA: %s <string> &quot;, argv[0]); return 1; } strcpy(buffer2, argv[1]); printf(&quot; BUFFER 1: &quot;); puts(buffer1); printf(&quot; BUFFER 2: &quot;); puts(buffer2); return 0; } Vulnerabilidades del Software -
  9. 9. Buffer Overflow : Ejemplo de programación segura /* Evitar desbordamiento de buffer en C. Ejemplo de programación segura */ #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char buffer1[5]=&quot;AAAA&quot;; char buffer2[5]; if (argc < 2) { fprintf(stderr, &quot; SINTAXIS CORRECTA: %s <string> &quot;, argv[0]); return 1; } strncpy(buffer2, argv[1], sizeof(buffer2)); buffer2[sizeof(buffer2) - 1] = ''; printf(&quot; BUFFER 1: &quot;); puts(buffer1); printf(&quot; BUFFER 2: &quot;); puts(buffer2); return 0; } Vulnerabilidades del Software -
  10. 10. Pisado de Pila (Stack Smashing) <ul><li>Tipo de desbordamiento de buffer aprovechado por virus y malware para tomar control sobre una aplicación, o provocar que la misma termine. </li></ul><ul><li>El Stack Smashing sucede cuando se ingresa en la pila de la aplicación más datos que los que ésta puede contener (hasta que desborde) y así se sobrescriban datos. </li></ul><ul><li>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 estás perdido. </li></ul><ul><li>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 ejecución de código máquina en la pila de las funciones, impidiendo así la ejecución de Shell Codes . </li></ul>Vulnerabilidades del Software -
  11. 11. Stack Smashing : Ejemplo de vulnerabilidad /* Ejemplo de programa de Pisado de Pila que utiliza la vulnerabilidad BO*/ #include <stdio.h> #include <stdlib.h> int main( int argc, char *argv[] ) { char buffer[1024]; // Buffer estático en la pila. if ( argc != 2 ) { printf(&quot;Uso: %s argumento &quot;, argv[0] ); return( -1 ); } // Copiado de cadenas sin control. strcpy( buffer, argv[1]); printf( &quot;Argumento copiado &quot; ); return(0); } Vulnerabilidades del Software -
  12. 12. Inyección SQL (SQL Injection) <ul><li>SQL Injection es una vulnerabilidad de programación que le brinda a un usuario de una aplicación la posibilidad de inyectar sentencias SQL en la BD que la aplicación emplea como soporte de datos. </li></ul><ul><li>Para que un ataque por inyección SQL sea posible es necesario que el atacante arme sentencias SQL concatenadas con datos que a la aplicación le llegan del usuario. </li></ul><ul><li>La única forma de prevenirlo es labor del programador, diseñando una correcta aplicación. </li></ul><ul><li>Ejemplo típico de Inyección SQL para loguearse con cuenta ajena a través de un formulario que solicita correo y contraseña (suponer que el atacante conoce el correo de Pepito): </li></ul><ul><li>SELECT * FROM tusuarios WHERE correo=‘pepito@correo.com’ AND password=‘01234’ </li></ul><ul><li>SELECT * FROM tusuarios WHERE correo=‘pepito@correo.com’ AND password=‘ ’OR 1=1 </li></ul><ul><li>Se denomina Blind SQL Injection al proceso del atacante de explorar los enlaces de la aplicación y las tablas y atributos de la BD que previamente no le son conocidos. Gracias a sus conocimientos y experiencia terminará por intuír qué instrucciones SQL se utilizan y como explotarlas en su benficio. </li></ul>Vulnerabilidades del Software -
  13. 13. Inyección SQL: Cómo evitarla <ul><li>Asignación de mínimos privilegios: La cuenta que se determina para conectarse en una aplicación web, debe tener sólo privilegios que ésta necesita, ni más ni menos. </li></ul><ul><li>Validar todas las entradas: Si en un campo de texto sólo 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 asegurémonos de que la aplicación busca caracteres como comas, puntos y comas, signo igual, paréntesis y palabras claves SQL para filtrarlo. De gran utilidad son las RegEx. </li></ul><ul><li>Empleo de procedimientos almacenados: Utilizar procedimientos almacenados y aceptar los datos del usuario como parámetros en lugar de cómo instrucciones SQL. </li></ul><ul><li>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. </li></ul><ul><li>Como las comillas simples finalizan las expresiones SQL y posibilitan la entrada de expresiones peligrosas, la simple sustitución de la comilla simple hará que al atacante en su inicio por inyectar SQL lo lleve al fracaso. </li></ul>Vulnerabilidades del Software -
  14. 14. Otras vulnerabilidades <ul><li>Cross Site Request Forgery (XSRF) o falsificación de sitios cruzados: tipo de exploit malicioso de una página web en la que comandos no autorizados son transmitidos por un usuario en el cual el sitio web confía. Esta vulnerabilidad es conocida también por otros nombres como enlace hostil, ataque de un click , cabalgamiento de sesión, y ataque automático. </li></ul><ul><li>ForceFul Browsing (FFB): Consiste en una intrusión de un sistema (generalmente web) accediendo directamente a subdirectorios protegidos supuestamente por la aplicación. </li></ul>Vulnerabilidades del Software -
  15. 15. Conclusiones <ul><li>En el proceso de diseño, desarrollo y actualización de una aplicación es dónde aparecen las vulnerabilidades del software . </li></ul><ul><li>La mayoría de vulnerabilidades pueden evitarse en su mayor parte validando correctamente los datos que el usuario introduce. Se recomienda el uso de RegEx. </li></ul><ul><li>Utilizar memoria dinámica y validar el tamaño de entrada de los vectores para evitar desbordamientos, sobre todo si codificamos en un lenguaje que no utiliza comprobación de límites de arrays en tiempo de ejecución: Lenguajes como C. </li></ul><ul><li>La aplicación de auditorías de seguridad de código fuente es obligada. En caso de que sea inviable que otros programadores revisen tu código fuente reportará fallos seguramente. </li></ul><ul><li>Cuánto mejor sepas explotar las vulnerabilidades, mejor sabrás evitarlas. </li></ul><ul><li>Si administras cualquier tipo de sistema, mantén las aplicaciones de éste actualizadas: cualquier vulnerabilidad descubierta será publicada en internet (incluso proliferarán los exploits específicos para la misma) y el número de posibles atacantes crece exponencialmente. </li></ul><ul><li>Aún tomando todas estas medidas anteriores, alguien puede descubrir una nueva vulnerabilidad: No existe el software absolutamente seguro. </li></ul>Vulnerabilidades del Software -
  16. 16. <ul><li>Fuentes que consulté para la elaboración del trabajo: </li></ul><ul><li>http://www.monografias.com/ </li></ul><ul><li>http://bulma.net/ </li></ul><ul><li>http://www.ignside.net/ </li></ul><ul><li>http://es.wikipedia.org/ </li></ul><ul><li>http://www.webtaller.com/ </li></ul><ul><li>http://www.programandoamedianoche.com/ </li></ul><ul><li>http://yopensource.com/ </li></ul><ul><li>http://www.elhacker.net/ </li></ul><ul><li>http://www.virtualforge.de/ </li></ul><ul><li>Enlaces recomendados para quien quiera profundizar en el tema: </li></ul><ul><li>http://unixwiz.net/techtips/sql-injection.html </li></ul><ul><li>http://www.simbiontes.com/archives/codeblog/prueba-de-concepto-de-inyeccion-sql.php </li></ul><ul><li>http://www.programandoamedianoche.com/2008/07/sql-injection-100-real/ </li></ul><ul><li>http://informatica-practica.net/solocodigo/index.php/2007/09/05/inyeccion-sql-en-aplicaciones-web-i/ </li></ul><ul><li>http://www.virtualforge.de/vmovie.php </li></ul><ul><li>http://www.try2hack.nl/ </li></ul><ul><li>Mi dirección de correo electrónico para dudas, opiniones y demás: [email_address] </li></ul>Bibliografía

×