Vulnerabilidades del Software. Félix Mera García 39455427-P [email_address] SSI Curso 08-09, ESEI (UVigo)
Contenidos Introducción. Cross Site Scripting (XSS): XSS indirecto XSS directo Desbordamiento de buffer: Pisado de pila Inyección SQL Programación segura para XSS Desbordamiento de  buffer Inyección SQL Conclusiones Fuentes (bibliografía) Vulnerabilidades del Software -
Introducción 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. Las vulnerabilidades pueden deberse a: Una mala configuración del  software  por parte del administrador/usuario. Una incorrecta programación durante el proceso de desarrollo o actualización del  software . La mayoría de vulnerabilidades hoy en día se deben al segundo caso ya que: Existe bastante documentación de usuario para configurar el  sofware . Desconocimiento de seguridad informática en la mayoría de programadores. Empresarios que fuerzan los ciclos de desarrollo del software para terminar antes los productos. Las auditorías de seguridad de código fuente apenas se practican. Vulnerabilidades del Software -
Cross Site Scripting (XSS) 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. Generalmente las aplicaciones vulnerables a XSS son aquellas que utilizan HTML :   Páginas 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 información Causar daños económicos Conseguir un mejor  Phising  (Pasar desapercibido ante la víctima). El XSS es una vulnerabilidad que puede estar presente de dos formas:  Directa  e  Indirecta . Vulnerabilidades del Software -
XSS en forma Directa 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. 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. Es una de las vulnerabilidades más comunes y también de las más utilizada sen la actualidad. Ejemplo de existencia de vulnerabilidad XSS en forma directa: EjemploXSS1 Ejemplo de programación segura en XSS: EjemploXSS2 Vulnerabilidades del Software -
XSS en forma Indirecta 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. Vulnerabilidad muy común pero en general, muy poco explotada. Muy utilizada para robo de sesiones y  phising. 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. 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 programación y en un principio, el comportamiento del sistema cuando se sobrescribe una parte de la memoria es impredecible. 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. 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. Vulnerabilidades del Software -
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\0&quot;; char buffer2[5]; if (argc < 2)  { fprintf(stderr, &quot;\nSINTAXIS CORRECTA: %s <string>\n&quot;, argv[0]); return 1; } strcpy(buffer2, argv[1]); printf(&quot;\n BUFFER 1: &quot;); puts(buffer1); printf(&quot;\n BUFFER 2: &quot;); puts(buffer2); return 0; } Vulnerabilidades del Software -
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\0&quot;; char buffer2[5]; if (argc < 2) { fprintf(stderr, &quot;\nSINTAXIS CORRECTA: %s <string>\n&quot;, argv[0]); return 1; } strncpy(buffer2, argv[1], sizeof(buffer2)); buffer2[sizeof(buffer2) - 1] = '\0'; printf(&quot;\n BUFFER 1: &quot;); puts(buffer1); printf(&quot;\n BUFFER 2: &quot;); 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 aplicación, o provocar que la misma termine. 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. 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. 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 . Vulnerabilidades del Software -
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\n&quot;, argv[0] ); return( -1 ); } // Copiado de cadenas sin control. strcpy( buffer, argv[1]); printf( &quot;Argumento copiado\n&quot; ); return(0); } Vulnerabilidades del Software -
Inyección SQL  (SQL Injection) 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. 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. La única forma de prevenirlo es labor del programador, diseñando una correcta aplicación. 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): SELECT * FROM tusuarios WHERE correo=‘pepito@correo.com’ AND password=‘01234’ SELECT * FROM tusuarios WHERE correo=‘pepito@correo.com’ AND password=‘  ’OR 1=1 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. Vulnerabilidades del Software -
Inyección SQL: Cómo evitarla 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. 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. Empleo de procedimientos almacenados:  Utilizar procedimientos almacenados y aceptar los datos del usuario como parámetros en lugar de cómo 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 sustitución de la comilla simple hará que al atacante en su inicio por inyectar SQL lo lleve al fracaso. Vulnerabilidades del Software -
Otras vulnerabilidades 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. ForceFul Browsing  (FFB):  Consiste en una intrusión de un sistema (generalmente web) accediendo directamente a subdirectorios protegidos supuestamente por la aplicación. Vulnerabilidades del Software -
Conclusiones En el proceso de diseño, desarrollo y actualización de una aplicación es dónde aparecen las vulnerabilidades del  software . 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. 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. 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. Cuánto mejor sepas explotar las vulnerabilidades, mejor sabrás evitarlas. 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. Aún 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 elaboración 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 dirección de correo electrónico para dudas, opiniones y demás:  [email_address] Bibliografía

Más contenido relacionado

PPTX
Procesos en windows
PPTX
Caracteristicas de un vtp
PPTX
Expo 4 s.o. dispositivos y manejadores de dispositivos
DOCX
Traductor y su estructura
PPTX
Registros de control y estados de la CPU
PPTX
Organización y estructura interna del cpu
PPTX
Metodologías de desarrollo de software
PPTX
Procesos Interrupciones y Nucleo
Procesos en windows
Caracteristicas de un vtp
Expo 4 s.o. dispositivos y manejadores de dispositivos
Traductor y su estructura
Registros de control y estados de la CPU
Organización y estructura interna del cpu
Metodologías de desarrollo de software
Procesos Interrupciones y Nucleo

La actualidad más candente (20)

DOCX
Algoritmos de busqueda - hash truncamiento
PPTX
Vistas en bases de datos
PDF
Agentes inteligentes
PPT
Bases de datos orientadas a objetos
PPTX
Caracteristicas Microsoft SQL Server
PPT
1.4 ensambladores y compiladores
PPTX
Transformar modelo entidad relacion a modelo logico
PPTX
Algoritmo de planificación srt
PDF
Base de datos con Netbeans
PDF
Protocolos de enrutamiento por vector distancia
PPTX
Tecnicas de Administracion de Memoria
PPTX
Cifrado por Sustitución y por Transposición
PPTX
Entidad, Llave primaria, llave foranea
PPTX
Sistemas Distribuidos basados en la Web
DOCX
Unidad 6 Protección y seguridad.
PDF
Unidad 2 diseño orientado a objetos
PPTX
Seguridad en los Sistemas Distribuidos
PPTX
Estrategias de procesamiento de consultas distribuidas
DOCX
Nucleo del sistema operativo
Algoritmos de busqueda - hash truncamiento
Vistas en bases de datos
Agentes inteligentes
Bases de datos orientadas a objetos
Caracteristicas Microsoft SQL Server
1.4 ensambladores y compiladores
Transformar modelo entidad relacion a modelo logico
Algoritmo de planificación srt
Base de datos con Netbeans
Protocolos de enrutamiento por vector distancia
Tecnicas de Administracion de Memoria
Cifrado por Sustitución y por Transposición
Entidad, Llave primaria, llave foranea
Sistemas Distribuidos basados en la Web
Unidad 6 Protección y seguridad.
Unidad 2 diseño orientado a objetos
Seguridad en los Sistemas Distribuidos
Estrategias de procesamiento de consultas distribuidas
Nucleo del sistema operativo
Publicidad

Destacado (19)

PPTX
Prevención de Malware Investigación Documental
PPTX
Amenazas y vulnerabilidades en la informática
PDF
Historia del malware
PPTX
Gestión del riesgo de software
PPTX
Clase riesgos-amenazas-vulnerabilidades
DOCX
12 amenazas a la seguridad de la información
PPSX
Tipos de ataques y vulnerabilidades en una red
PDF
Malware: Historia y Clasificación
DOCX
Seguridad informática software (Informacion sobre posibles fallas)
PPTX
Procesos técnicos en la fabricación de un hardware
DOCX
Historia de malware
PPTX
Sistemas, redes y riesgos en los computadores
PDF
PDF
Procesos tecnicos que se realizan en la creacion de un hardware
PPTX
Protocolos de seguridad informática
PPTX
Riesgos Laborales SMR Informática
PDF
Tipos de amenazas en Seguridad Informática
PPS
Factores Humanos-Presentación (3 de 4)
PPT
GESTION DEL RIESGO
Prevención de Malware Investigación Documental
Amenazas y vulnerabilidades en la informática
Historia del malware
Gestión del riesgo de software
Clase riesgos-amenazas-vulnerabilidades
12 amenazas a la seguridad de la información
Tipos de ataques y vulnerabilidades en una red
Malware: Historia y Clasificación
Seguridad informática software (Informacion sobre posibles fallas)
Procesos técnicos en la fabricación de un hardware
Historia de malware
Sistemas, redes y riesgos en los computadores
Procesos tecnicos que se realizan en la creacion de un hardware
Protocolos de seguridad informática
Riesgos Laborales SMR Informática
Tipos de amenazas en Seguridad Informática
Factores Humanos-Presentación (3 de 4)
GESTION DEL RIESGO
Publicidad

Similar a Vulnerabilidades del Software (20)

PPT
Seguridad En Programación
PDF
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
ODP
Seguridad en aplicaciones web
PDF
Pentest - El Arte de la Guerra
PPT
Presentacionbetabeers prevencion ante_ ataques_xss
PDF
Presentación Workshop php Barcelona Seguridad
PDF
Seguridad WEB - Principios básicos.
PDF
Principales vulnerabilidades en Aplicaciones Web - Rediris 2008
ODP
Curso basicoseguridadweb slideshare3
PPTX
Clase 6 Practica.pptx
PDF
Vulnerabilidades en aplicaciones web
PDF
Completo conferencia seguridad_web_software_libre_2015
PPTX
Integración de Mecanismos de Seguridad en la arquitectura de Aplicaciones Sof...
PPT
Web app attacks
PPT
WebAttack - Presentación
PDF
Seguridad
PDF
Seguridad en el desarrollo de aplicaciones web
PPTX
Seguridad en bases de datos
PDF
Seguridad en servidores WEB. Modulo mod_security
PPTX
Security focus
Seguridad En Programación
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Seguridad en aplicaciones web
Pentest - El Arte de la Guerra
Presentacionbetabeers prevencion ante_ ataques_xss
Presentación Workshop php Barcelona Seguridad
Seguridad WEB - Principios básicos.
Principales vulnerabilidades en Aplicaciones Web - Rediris 2008
Curso basicoseguridadweb slideshare3
Clase 6 Practica.pptx
Vulnerabilidades en aplicaciones web
Completo conferencia seguridad_web_software_libre_2015
Integración de Mecanismos de Seguridad en la arquitectura de Aplicaciones Sof...
Web app attacks
WebAttack - Presentación
Seguridad
Seguridad en el desarrollo de aplicaciones web
Seguridad en bases de datos
Seguridad en servidores WEB. Modulo mod_security
Security focus

Último (20)

DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PPTX
Control de calidad en productos de frutas
PPTX
Uso responsable de la tecnología - EEST N°1
PDF
NREN - red nacional de investigacion y educacion en LATAM y Europa: Caracteri...
PDF
Final Tecno .pdfjdhdjsjdhsjshshhshshshhshhhhhhh
PPTX
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
PPTX
El uso de las TIC en la vida cotidiana..
PPTX
Curso de generación de energía mediante sistemas solares
PDF
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
PDF
Taller tecnológico Michelle lobo Velasquez
PDF
Distribucion de frecuencia exel (1).pdf
PPTX
ccna: redes de nat ipv4 stharlling cande
PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
PPTX
Presentación final ingenieria de metodos
PDF
capacitación de aire acondicionado Bgh r 410
PDF
Teoría de estadística descriptiva y aplicaciones .pdf
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
Historia Inteligencia Artificial Ana Romero.pptx
Control de calidad en productos de frutas
Uso responsable de la tecnología - EEST N°1
NREN - red nacional de investigacion y educacion en LATAM y Europa: Caracteri...
Final Tecno .pdfjdhdjsjdhsjshshhshshshhshhhhhhh
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
El uso de las TIC en la vida cotidiana..
Curso de generación de energía mediante sistemas solares
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
Estrategia de Apoyo de Daylin Castaño (5).pdf
Taller tecnológico Michelle lobo Velasquez
Distribucion de frecuencia exel (1).pdf
ccna: redes de nat ipv4 stharlling cande
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
Mecanismos-de-Propagacion de ondas electromagneticas
Presentación final ingenieria de metodos
capacitación de aire acondicionado Bgh r 410
Teoría de estadística descriptiva y aplicaciones .pdf
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf

Vulnerabilidades del Software

  • 1. Vulnerabilidades del Software. Félix Mera García 39455427-P [email_address] SSI Curso 08-09, ESEI (UVigo)
  • 2. Contenidos Introducción. Cross Site Scripting (XSS): XSS indirecto XSS directo Desbordamiento de buffer: Pisado de pila Inyección SQL Programación segura para XSS Desbordamiento de buffer Inyección SQL Conclusiones Fuentes (bibliografía) Vulnerabilidades del Software -
  • 3. Introducción 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. Las vulnerabilidades pueden deberse a: Una mala configuración del software por parte del administrador/usuario. Una incorrecta programación durante el proceso de desarrollo o actualización del software . La mayoría de vulnerabilidades hoy en día se deben al segundo caso ya que: Existe bastante documentación de usuario para configurar el sofware . Desconocimiento de seguridad informática en la mayoría de programadores. Empresarios que fuerzan los ciclos de desarrollo del software para terminar antes los productos. Las auditorías de seguridad de código fuente apenas se practican. Vulnerabilidades del Software -
  • 4. Cross Site Scripting (XSS) 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. Generalmente las aplicaciones vulnerables a XSS son aquellas que utilizan HTML : Páginas 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 información Causar daños económicos Conseguir un mejor Phising (Pasar desapercibido ante la víctima). El XSS es una vulnerabilidad que puede estar presente de dos formas: Directa e Indirecta . Vulnerabilidades del Software -
  • 5. XSS en forma Directa 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. 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. Es una de las vulnerabilidades más comunes y también de las más utilizada sen la actualidad. Ejemplo de existencia de vulnerabilidad XSS en forma directa: EjemploXSS1 Ejemplo de programación segura en XSS: EjemploXSS2 Vulnerabilidades del Software -
  • 6. XSS en forma Indirecta 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. Vulnerabilidad muy común pero en general, muy poco explotada. Muy utilizada para robo de sesiones y phising. 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. Vulnerabilidades del Software -
  • 7. 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 programación y en un principio, el comportamiento del sistema cuando se sobrescribe una parte de la memoria es impredecible. 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. 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. Vulnerabilidades del Software -
  • 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\0&quot;; char buffer2[5]; if (argc < 2) { fprintf(stderr, &quot;\nSINTAXIS CORRECTA: %s <string>\n&quot;, argv[0]); return 1; } strcpy(buffer2, argv[1]); printf(&quot;\n BUFFER 1: &quot;); puts(buffer1); printf(&quot;\n BUFFER 2: &quot;); puts(buffer2); return 0; } Vulnerabilidades del Software -
  • 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\0&quot;; char buffer2[5]; if (argc < 2) { fprintf(stderr, &quot;\nSINTAXIS CORRECTA: %s <string>\n&quot;, argv[0]); return 1; } strncpy(buffer2, argv[1], sizeof(buffer2)); buffer2[sizeof(buffer2) - 1] = '\0'; printf(&quot;\n BUFFER 1: &quot;); puts(buffer1); printf(&quot;\n BUFFER 2: &quot;); puts(buffer2); return 0; } Vulnerabilidades del Software -
  • 10. Pisado de Pila (Stack Smashing) Tipo de desbordamiento de buffer aprovechado por virus y malware para tomar control sobre una aplicación, o provocar que la misma termine. 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. 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. 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 . Vulnerabilidades del Software -
  • 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\n&quot;, argv[0] ); return( -1 ); } // Copiado de cadenas sin control. strcpy( buffer, argv[1]); printf( &quot;Argumento copiado\n&quot; ); return(0); } Vulnerabilidades del Software -
  • 12. Inyección SQL (SQL Injection) 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. 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. La única forma de prevenirlo es labor del programador, diseñando una correcta aplicación. 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): SELECT * FROM tusuarios WHERE correo=‘pepito@correo.com’ AND password=‘01234’ SELECT * FROM tusuarios WHERE correo=‘pepito@correo.com’ AND password=‘ ’OR 1=1 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. Vulnerabilidades del Software -
  • 13. Inyección SQL: Cómo evitarla 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. 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. Empleo de procedimientos almacenados: Utilizar procedimientos almacenados y aceptar los datos del usuario como parámetros en lugar de cómo 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 sustitución de la comilla simple hará que al atacante en su inicio por inyectar SQL lo lleve al fracaso. Vulnerabilidades del Software -
  • 14. Otras vulnerabilidades 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. ForceFul Browsing (FFB): Consiste en una intrusión de un sistema (generalmente web) accediendo directamente a subdirectorios protegidos supuestamente por la aplicación. Vulnerabilidades del Software -
  • 15. Conclusiones En el proceso de diseño, desarrollo y actualización de una aplicación es dónde aparecen las vulnerabilidades del software . 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. 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. 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. Cuánto mejor sepas explotar las vulnerabilidades, mejor sabrás evitarlas. 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. Aún tomando todas estas medidas anteriores, alguien puede descubrir una nueva vulnerabilidad: No existe el software absolutamente seguro. Vulnerabilidades del Software -
  • 16. Fuentes que consulté para la elaboración 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 dirección de correo electrónico para dudas, opiniones y demás: [email_address] Bibliografía