Prevención ante ataques XSS Algunos pequeños consejos para programadores 3º B...
Lo que soyDiplomado en InformáticaAnalista ProgramadorMás 12 años de experienciaColegiado CPITIACiclista aficionado
Mi experiencia AutónomoProgramador web ISP local2000 2001 2002 2003 2004 2005 200...
¿Qué es XSS? Según Wikipedia: Cross-site scripting es un tipo de inseguridad informática o agujero de seguridad típico d...
¿Qué es XSS? Según Wikipedia: Cross-site scripting es un tipo de inseguridad informática o agujero de seguridad típico d...
Posibles puntos de entrada Tablones de anuncios Libros de visitas Foros de discusión Formularios de contacto Búsquedas Par...
¿Cómo pueden ocurrir? Aumento de la interacción con el usuario. No se validan formularios con Javascript. Si se hace puede...
Ejemplos
Tipos No Persistente Persistente (Reflejado) ...
Modalidades Inyección de HTML Inyección de SQL Inclusión remota de ficheros (RFI) Inyección de Código php C...
Inyección de HTML Utiliza Javascript y las propiedades del DOM. Incluye o manipula código HTML dentro de una página web. O...
Inyección de HTMLEjemplo 1
Inyección de HTMLEjemplo 1 Ahí es dónde se muestra el texto indicado en el campo ...
Inyección de HTMLEjemplo 1 Ahí es dónde se muestra el texto indicado en el campo ...
Inyección de HTMLEjemplo 2
Inyección de HTMLEjemplo 3 Se podría considerar este ejemplo como un ataque de Cross Frame Scripting (XFS) aparte de la ...
Inyección de SQL Introduce dentro de una sentencia SQL que espera un valor, otra no esperada. Intenta obtener/manipular...
Inyección de SQLEjemplo de sentencias: SELECT titulo,descripcion FROM libro WHERE codigo=1 OR 1=1; SELECT clave FROM cli...
Inyección de SQLEjemplo de sentencias: SELECT titulo,descripcion FROM libro WHERE codigo=1 OR 1=1; SELECT clave FROM cli...
Inclusión remota de ficheros Conocido normalmente como RFI (Remote File Inclusion) Ejecuta código en el lado del servidor ...
Inclusión remota de ficherosEjemplo:Si tuviéramos algo así en el código: Si se le pasa como parámetro esto: ...
Inyección de código php Inyecta código personalizado en el lado del motor de secuencias de comandos del servidor. Se ap...
Inyección de código phpEjemplo: Si se le pasa como parámetro esto: ...
Cross Frame Scripting (XFS) Afecta a webs que usan marcos (frames) El atacante induce al usuario a navegar a una página we...
Cross Frame Scripting (XFS)Ejemplo
Inyección LDAP Se basa en técnicas similares a la inyección SQL. Atacante puede aprovechar el fallo para poder inyectar có...
Inyección LDAPEjemplo: Filtro normal para verificar un usuario y clave en un servidor LDAP (&(USER=usuario...
Cross Site Tracing (XST) Se aprovecha del método TRACE de HTTP. Puede ser útil para saltarse protección para acceder a ...
Algunos consejos
Errores personalizados No dar pistas sobre el error ocurrido php ASP.NET
Inclusión de ficheros Evitar en la medida de lo posible la inclusión de ficheros pasados como parámetros. Si se tiene que ...
Validaciones en Javascript Barrera inicial Puede que desistan en el caso de no tener conocimientos más amplios • Incon...
Control de entradas (I)Expresiones regulares Se puede controlar los parámetros/campos de forma rápida y sencilla.Ejemplos:...
Control de entradas (I)Expresiones regularesEjemplos utilización: php
Control de entradas (I)Expresiones regularesEjemplos utilización: ASP.NET
Control de entradas (II)Funciones Usar las del lenguaje php ASP.NEThtmlentities...
Control de entradas (II)Funciones Implementar nuestras propias funciones php
Control de entradas (II)Funciones Implementar nuestras propias funciones ASP.NET
FormulariosCaptcha – Inconveniente: mala visibilidadPreguntas aleatorias – Inconveniente: puede que se necesite un núm...
Bases de datos Utilización de procedimientos almacenados con parámetros. Utilizar funciones para controlar las cadenas. Us...
ProcedenciaComprobar de dónde viene el formulario php ASP.NETInconvenientes:Puede que no e...
Otras configuracionesphp.ini register_globals off: desactiva esta directiva ya que permite aceptar parámetros $_GET y $_...
Otras configuraciones.htaccess SetEnv REGISTER_GLOBALS 0 Desactivar TRACE de HTTP RewriteEngine on RewriteCond %...
Otras configuraciones.htaccess SetEnv REGISTER_GLOBALS 0 Desactivar TRACE de HTTP RewriteEngine on Antes de recarg...
¿Preguntas?
¡Muchas Gracias! @jmcanto_km1 www.linkedin.com/in/josemariacantoortiz@ jmcanto@km1desarrollos.com
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
of 52

Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)

Taller "prevención ante ataques XSS" de la mano de José María Canto en BEtabeers Córdoba
Published on: Mar 4, 2016
Published in: Technology      
Source: www.slideshare.net


Transcripts - Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)

  • 1. Prevención ante ataques XSS Algunos pequeños consejos para programadores 3º Betabeers Córdoba 29 de Noviembre de 2012 José María Canto Ortiz
  • 2. Lo que soyDiplomado en InformáticaAnalista ProgramadorMás 12 años de experienciaColegiado CPITIACiclista aficionado
  • 3. Mi experiencia AutónomoProgramador web ISP local2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
  • 4. ¿Qué es XSS? Según Wikipedia: Cross-site scripting es un tipo de inseguridad informática o agujero de seguridad típico de las aplicaciones Web, que permite a una tercera parte inyectar en páginas Web vistas por el usuario código JavaScript o en otro lenguaje script similar, evitando las medidas de control.Se le llamó XSS para no crear confusión con CSS, las hojas de estilo en cascada.No se pretende hacer apología de este tipo de ataques, sino más bien, intentarcombatirlo con las armas que tiene un programador.
  • 5. ¿Qué es XSS? Según Wikipedia: Cross-site scripting es un tipo de inseguridad informática o agujero de seguridad típico de las Un ataque que permite la aplicaciones Web, que permite a una tercera introducción de código de algún parte inyectar en páginas Web vistas por el usuario código JavaScriptweb. otro lenguaje tipo en una página o en script similar, evitando las medidas de control.Se le llamó XSS para no crear confusión con CSS, las hojas de estilo en cascada.No se pretende hacer apología de este tipo de ataques, sino más bien, intentarcombatirlo con las armas que tiene un programador.
  • 6. Posibles puntos de entrada Tablones de anuncios Libros de visitas Foros de discusión Formularios de contacto Búsquedas Parámetros
  • 7. ¿Cómo pueden ocurrir? Aumento de la interacción con el usuario. No se validan formularios con Javascript. Si se hace puede que el atacante tenga Javascript desactivado. En la parte servidor no se comprueban los parámetros. Descuidos a la hora de implementar un formulario. Mal planteamiento de determinadas acciones.
  • 8. Ejemplos
  • 9. Tipos No Persistente Persistente (Reflejado) (Almacenado)Servidor Web Servidor Web enlace XSS respuesta respuesta Usuario Usuario enlace XSS S e XS c e nla Atacante Atacante
  • 10. Modalidades Inyección de HTML Inyección de SQL Inclusión remota de ficheros (RFI) Inyección de Código php Cross Frame Scripting (XFS) Inyección de LDAP XST (Cross Site Tracing)…
  • 11. Inyección de HTML Utiliza Javascript y las propiedades del DOM. Incluye o manipula código HTML dentro de una página web. Obtener información del usuario.
  • 12. Inyección de HTMLEjemplo 1
  • 13. Inyección de HTMLEjemplo 1 Ahí es dónde se muestra el texto indicado en el campo del formulario y que hace que se ejecute.
  • 14. Inyección de HTMLEjemplo 1 Ahí es dónde se muestra el texto indicado en el campo del formulario y que hace que se ejecute. En el caso que se almacenara en una Base de datos (Ej: en un foro), se estaría “mostrando” cada vez que se entrara al mismo.
  • 15. Inyección de HTMLEjemplo 2
  • 16. Inyección de HTMLEjemplo 3 Se podría considerar este ejemplo como un ataque de Cross Frame Scripting (XFS) aparte de la inyección de HTML.
  • 17. Inyección de SQL Introduce dentro de una sentencia SQL que espera un valor, otra no esperada. Intenta obtener/manipular o destruir información del servidor (base de datos). No es exclusivo de un lenguaje de programación, puede ocurrir en todos.Posibles Sentencias de entrada: ; 1 OR 1=1 OR = …
  • 18. Inyección de SQLEjemplo de sentencias: SELECT titulo,descripcion FROM libro WHERE codigo=1 OR 1=1; SELECT clave FROM cliente WHERE usuario=‘mortadelo’; Puede Ir probando usuarios hasta que obtenga uno que no cause un error y sabrá que ese existe para intentar colarse dentro. SELECT titulo,descripcion FROM libro WHERE codigo=1 OR 1=1; UPDATE cliente SET clave=‘ahoraentroyo’ WHERE Cambia la clave al usuario=‘mortadelo’; usuario y ya puede entrar al sistema
  • 19. Inyección de SQLEjemplo de sentencias: SELECT titulo,descripcion FROM libro WHERE codigo=1 OR 1=1; SELECT clave FROM cliente WHERE usuario=‘mortadelo’; Como ocurre: Puede Ir probando usuarios hasta que obtenga uno que no cause un error y sabrá que ese existe para intentar colarse dentro. SELECT titulo,descripcion FROM libro WHERE codigo=1 OR 1=1; UPDATE cliente SET clave=‘ahoraentroyo’ WHERE Cambia la clave al usuario=‘mortadelo’; usuario y ya puede entrar al sistema
  • 20. Inclusión remota de ficheros Conocido normalmente como RFI (Remote File Inclusion) Ejecuta código en el lado del servidor que está incluido en un fichero externo. Sólo ocurre en php. Uso incorrecto de las funciones: require() require_one() include() include_once() system() …
  • 21. Inclusión remota de ficherosEjemplo:Si tuviéramos algo así en el código: Si se le pasa como parámetro esto: ls –l > ./listado.txt Podría generar el fichero indicado conteniendo la estructura de directorios del web.O por ejemplo: Si se le pasa como parámetro algo como esto: http://webdelatacante/scriptdellioLuego veremos que esto ya no suele ser así.
  • 22. Inyección de código php Inyecta código personalizado en el lado del motor de secuencias de comandos del servidor. Se aprovecha de la función eval(). eval() ejecuta el argumento como código.eval($codigo): evalua el código que se le facilita -$codigo- como código php.Precaución: El constructor de lenguaje eval() es muy peligroso porque permite laejecución de código de PHP arbitrario. Su uso está totalmente desaconsejado. Sise ha verificado cuidadosamente que no existe otra opción que usar esteconstructor, se ha de poner especial atención en no pasar ninguna informaciónproporcionada por el usuario a esta función sin haberla validado apropiadamentecon anterioridad.Fuente: Manual php
  • 23. Inyección de código phpEjemplo: Si se le pasa como parámetro esto: 1;phpinfo(); ó phpinfo() Podría mostrar la configuración de php. Y es un indicio para poder realizar cualquier otro intento de ataque, Ahora se le pasa como parámetro bien con system() u otras esto: funciones. system("/bin/echo hola, holita"); Y nos mostrará en pantalla ese texto.
  • 24. Cross Frame Scripting (XFS) Afecta a webs que usan marcos (frames) El atacante induce al usuario a navegar a una página web que el atacante controla; y roba los datos de acceso. Se usa para describir un ataque que hace uso de un frame.
  • 25. Cross Frame Scripting (XFS)Ejemplo
  • 26. Inyección LDAP Se basa en técnicas similares a la inyección SQL. Atacante puede aprovechar el fallo para poder inyectar código y cambiar el resultado que se obtiene con el filtro. No es exclusivo de un lenguaje de programación, puede ocurrir en todos.
  • 27. Inyección LDAPEjemplo: Filtro normal para verificar un usuario y clave en un servidor LDAP (&(USER=usuario)(PASSWORD=clave)) Si el atacante conoce un usuario real (Ej: jmcanto), se podría indicar en el campo usuario: jmcanto)(&)), con lo cual la inyección sería: (&(USER= jmcanto)(&)))(PASSWORD=clave))Solamente se procesa el 1º filtro.La consulta siempre es cierta.Se accede a los recursos y documentos del mencionado usuario.
  • 28. Cross Site Tracing (XST) Se aprovecha del método TRACE de HTTP. Puede ser útil para saltarse protección para acceder a cookies desde el lado del cliente, si el navegador lo permite. Trace permite de una manera fácil, ver lo que el cliente HTTP envía y lo que el servidor recibe. Al probar este código, en cualquier navegador moderno, dará un error (NS_ERROR_ILLEGAL_VALUE en FF). Para probarlo hay que hacerlo en un navegador versión <=IE6. No obstanteSe recomienda su desactivación.
  • 29. Algunos consejos
  • 30. Errores personalizados No dar pistas sobre el error ocurrido php ASP.NET
  • 31. Inclusión de ficheros Evitar en la medida de lo posible la inclusión de ficheros pasados como parámetros. Si se tiene que hacer: Se debe comprobar que exista el fichero. Se podría pasar como parámetro solo el nombre sin extensión.
  • 32. Validaciones en Javascript Barrera inicial Puede que desistan en el caso de no tener conocimientos más amplios • Inconveniente: se puede desactivar fácilmente
  • 33. Control de entradas (I)Expresiones regulares Se puede controlar los parámetros/campos de forma rápida y sencilla.Ejemplos: [ -~]: todos los caracteres Ascii desde el espacio hasta ~ [^0-9]: no sean números [0-9]: números [a-z]: letras en minúscula [A-Z]: caracteres en mayúscula [0-9]{2}/[0-9]{2}/[0-9]{4}: fecha [1-9]{1,3}.[0-9] {1,3}.[0-9] {1,3}.[0-9] {1,3}: Dirección IP …
  • 34. Control de entradas (I)Expresiones regularesEjemplos utilización: php
  • 35. Control de entradas (I)Expresiones regularesEjemplos utilización: ASP.NET
  • 36. Control de entradas (II)Funciones Usar las del lenguaje php ASP.NEThtmlentities IsDate (Visual Basic)htmlspecialcharmysql_real_escape_string(MySQL) IsNumeric (Visual Basic)real_escape_string (mysqli) Regex.IsMatchaddslashesstripslashes Regex.Replacepreg_replace ……
  • 37. Control de entradas (II)Funciones Implementar nuestras propias funciones php
  • 38. Control de entradas (II)Funciones Implementar nuestras propias funciones ASP.NET
  • 39. FormulariosCaptcha – Inconveniente: mala visibilidadPreguntas aleatorias – Inconveniente: puede que se necesite un número grande de preguntas para que no lleguen a repetirse.Aceptación de la política de privacidad o similares
  • 40. Bases de datos Utilización de procedimientos almacenados con parámetros. Utilizar funciones para controlar las cadenas. Usar varios usuarios para acceder a la base de datos. uno para operaciones de escritura otro para operaciones de lectura No crear nunca instrucciones SQL directamente a partir de datos indicados por el usuario.
  • 41. ProcedenciaComprobar de dónde viene el formulario php ASP.NETInconvenientes:Puede que no esté activoSe puede falsificar
  • 42. Otras configuracionesphp.ini register_globals off: desactiva esta directiva ya que permite aceptar parámetros $_GET y $_POST como variables. Ej: $_POST[‘nombre’] -> $nombre allow_furl_open off: al desactivarla no se permite la inclusión de ficheros remotos. safe_mode on: restringe el uso de ejecutables. openbase_dir ruta: limita la ejecución a la ruta indicada. disable_functions <lista_funciones>: no permite la utilización de las funciones indicadas. disable_classes <lista_clases>: no permite el uso de las clases.
  • 43. Otras configuraciones.htaccess SetEnv REGISTER_GLOBALS 0 Desactivar TRACE de HTTP RewriteEngine on RewriteCond %{REQUEST_METHOD} ^TRACE RewriteRule .* – [F] Módulos Apache mod_rewrite: módulo de manipulación de URLs Ej: RewriteCond %{QUERY_STRING} drop.+procedure [NC,OR] … mod_security: módulo de seguridad para Apache Ej: SecFilterSelective ARGS "drop[[:space:]]+procedure"
  • 44. Otras configuraciones.htaccess SetEnv REGISTER_GLOBALS 0 Desactivar TRACE de HTTP RewriteEngine on Antes de recargar%{REQUEST_METHOD}ó^TRACE RewriteCond el fichero .htaccess el httpd.conf con muchas instrucciones de este[F] RewriteRule .* – tipo, habría que evaluar si realmente merece la pena bajar la velocidad de ejecución del web al introducirlas, cuando quizás se pueda realizar todo esto por código Módulos Apache implementando algunas validaciones. mod_rewrite: módulo de manipulación de URLs Ej: RewriteCond %{QUERY_STRING} drop.+procedure [NC,OR] … mod_security: módulo de seguridad para Apache Ej: SecFilterSelective ARGS "drop[[:space:]]+procedure"
  • 45. ¿Preguntas?
  • 46. ¡Muchas Gracias! @jmcanto_km1 www.linkedin.com/in/josemariacantoortiz@ jmcanto@km1desarrollos.com

Related Documents