SlideShare une entreprise Scribd logo
1  sur  52
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
Lo que soy
Diplomado en Informática
Analista Programador
Más 12 años de experiencia
Colegiado CPITIA
Ciclista aficionado
Mi experiencia

                                          Autónomo

Programador web ISP local




2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
¿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, intentar
combatirlo con las armas que tiene un programador.
¿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,de código de algún
      introducción que permite a una tercera
   parte inyectar en páginas Web vistas por el
      tipo código JavaScriptweb. otro lenguaje
   usuario
            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, intentar
combatirlo con las armas que tiene un programador.
Posibles puntos de entrada
 Tablones de anuncios
 Libros de visitas
 Foros de discusión
 Formularios de contacto
 Búsquedas
 Parámetros
¿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.
Ejemplos
Tipos
     No Persistente                                      Persistente
         (Reflejado)                                     (Almacenado)

Servidor Web                              Servidor Web
            enlace XSS

            respuesta
                                                            respuesta

                                Usuario                                 Usuario




                                            enlace XSS
                        S   S
                 c   eX
            en la




 Atacante                                  Atacante
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)
…
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.
Inyección de HTML
Ejemplo 1
Inyección de HTML
Ejemplo 1


                    Ahí es dónde se muestra el
                    texto indicado en el campo
                    del formulario y que hace
                    que se ejecute.
Inyección de HTML
Ejemplo 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.
Inyección de HTML
Ejemplo 2
Inyección de HTML
Ejemplo 3




  Se podría considerar este ejemplo como un ataque de Cross Frame
  Scripting (XFS) aparte de la inyección de HTML.
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 ''= '
   …
Inyección de SQL
Ejemplo 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
                                              Cambia la clave al
 clave=‘ahoraentroyo’ WHERE
                                              usuario y ya puede
 usuario=‘mortadelo’;
                                              entrar al sistema
Inyección de SQL
Ejemplo 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
                                              Cambia la clave al
 clave=‘ahoraentroyo’ WHERE
                                              usuario y ya puede
 usuario=‘mortadelo’;
                                              entrar al sistema
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()
  …
Inclusión remota de ficheros
Ejemplo:
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/scriptdellio


Luego veremos que esto ya no suele ser así.
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 la
ejecución de código de PHP arbitrario. Su uso está totalmente desaconsejado. Si
se ha verificado cuidadosamente que no existe otra opción que usar este
constructor, se ha de poner especial atención en no pasar ninguna información
proporcionada por el usuario a esta función sin haberla validado apropiadamente
con anterioridad.
Fuente: Manual php
Inyección de código php
Ejemplo:

                                     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.
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.
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ódigo y cambiar el resultado que se obtiene con el
 filtro.
 No es exclusivo de un lenguaje de programación, puede
 ocurrir en todos.
Inyección LDAP
Ejemplo:
  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.
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 obstante
Se recomienda su desactivación.
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 hacer:
     Se debe comprobar que exista el fichero.
     Se podría pasar como parámetro solo el nombre sin
     extensión.
Validaciones en Javascript
 Barrera inicial
 Puede que desistan en el caso de no tener
 conocimientos más amplios
     • Inconveniente: se puede desactivar fácilmente
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
  …
Control de entradas (I)
Expresiones regulares
Ejemplos utilización:

                        php
Control de entradas (I)
Expresiones regulares
Ejemplos utilización:

                        ASP.NET
Control de entradas (II)
Funciones
   Usar las del lenguaje
             php                              ASP.NET
htmlentities
                                  IsDate (Visual Basic)
htmlspecialchar
mysql_real_escape_string(MySQL)   IsNumeric (Visual Basic)
real_escape_string (mysqli)
                                  Regex.IsMatch
addslashes
stripslashes                      Regex.Replace
preg_replace
                                  …
…
Control de entradas (II)
Funciones
  Implementar nuestras propias funciones
                     php
Control de entradas (II)
Funciones
  Implementar nuestras propias funciones
                   ASP.NET
Formularios
Captcha
   – Inconveniente: mala visibilidad



Preguntas 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
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.
Procedencia
Comprobar de dónde viene el formulario

                           php       ASP.NET




Inconvenientes:
Puede que no esté activo
Se puede falsificar
Otras configuraciones
php.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.
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"
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 implementando
    Módulos Apache
  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"
¿Preguntas?
¡Muchas Gracias!
    @jmcanto_km1
    www.linkedin.com/in/josemariacantoortiz
@   jmcanto@km1desarrollos.com

Contenu connexe

Tendances

Java script
Java script Java script
Java script Pidusa
 
Tutorial basico de vbscript by novlucker parte5
Tutorial basico de vbscript by novlucker parte5Tutorial basico de vbscript by novlucker parte5
Tutorial basico de vbscript by novlucker parte5Leo Alvavel
 
Portafolio parcial 2
Portafolio parcial 2Portafolio parcial 2
Portafolio parcial 2EmmanuelAv
 
Visual basic
Visual basicVisual basic
Visual basicmellcv
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosDoris Aguagallo
 
P2 actividades 2 y 3 infografía palabras reservadas
P2 actividades 2 y 3 infografía  palabras reservadasP2 actividades 2 y 3 infografía  palabras reservadas
P2 actividades 2 y 3 infografía palabras reservadasErick Ramirez
 
Hackin9 - Ataques de tipo HTML injection
Hackin9 - Ataques de tipo HTML injectionHackin9 - Ataques de tipo HTML injection
Hackin9 - Ataques de tipo HTML injectiondegarden
 

Tendances (15)

Best Practices
Best PracticesBest Practices
Best Practices
 
Portafolio
PortafolioPortafolio
Portafolio
 
Ensayo php
Ensayo phpEnsayo php
Ensayo php
 
Clase 10 expresiones regulares
Clase 10 expresiones regularesClase 10 expresiones regulares
Clase 10 expresiones regulares
 
Java script
Java script Java script
Java script
 
Tutorial basico de vbscript by novlucker parte5
Tutorial basico de vbscript by novlucker parte5Tutorial basico de vbscript by novlucker parte5
Tutorial basico de vbscript by novlucker parte5
 
Portafolio parcial 2
Portafolio parcial 2Portafolio parcial 2
Portafolio parcial 2
 
Xss con javascript
Xss con javascriptXss con javascript
Xss con javascript
 
Php!
Php!Php!
Php!
 
Visual basic
Visual basicVisual basic
Visual basic
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetos
 
Guia JavaScript INCES Militar - Kurt Gude
Guia JavaScript INCES Militar - Kurt GudeGuia JavaScript INCES Militar - Kurt Gude
Guia JavaScript INCES Militar - Kurt Gude
 
Tarea 3
Tarea 3Tarea 3
Tarea 3
 
P2 actividades 2 y 3 infografía palabras reservadas
P2 actividades 2 y 3 infografía  palabras reservadasP2 actividades 2 y 3 infografía  palabras reservadas
P2 actividades 2 y 3 infografía palabras reservadas
 
Hackin9 - Ataques de tipo HTML injection
Hackin9 - Ataques de tipo HTML injectionHackin9 - Ataques de tipo HTML injection
Hackin9 - Ataques de tipo HTML injection
 

Similaire à Prevención XSS

Inyección_sql
Inyección_sqlInyección_sql
Inyección_sqljhom123
 
Art hack web-v1-4
Art hack web-v1-4Art hack web-v1-4
Art hack web-v1-4esmartcrimt
 
Seguridad en servidores WEB. Modulo mod_security
Seguridad en servidores WEB. Modulo mod_securitySeguridad en servidores WEB. Modulo mod_security
Seguridad en servidores WEB. Modulo mod_securityseguridadelinux
 
Vulnerabilidades del Software
Vulnerabilidades del SoftwareVulnerabilidades del Software
Vulnerabilidades del Softwarelechosopowers
 
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)kernelinux
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Racciatti Html Scripting Attacks
Racciatti Html Scripting AttacksRacciatti Html Scripting Attacks
Racciatti Html Scripting AttacksCristian Borghello
 
Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0José Moreno
 
Inyeccionessqlparaaprendices complemento clase 1
Inyeccionessqlparaaprendices complemento clase 1Inyeccionessqlparaaprendices complemento clase 1
Inyeccionessqlparaaprendices complemento clase 1Tensor
 
Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...
Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...
Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...Jesús Daniel Mayo
 

Similaire à Prevención XSS (20)

Inyección_sql
Inyección_sqlInyección_sql
Inyección_sql
 
Art hack web-v1-4
Art hack web-v1-4Art hack web-v1-4
Art hack web-v1-4
 
WebAttack - Presentación
WebAttack - PresentaciónWebAttack - Presentación
WebAttack - Presentación
 
Inyecciones SQL
Inyecciones SQLInyecciones SQL
Inyecciones SQL
 
Connection
ConnectionConnection
Connection
 
Manual Basico de jQuery
Manual Basico de jQueryManual Basico de jQuery
Manual Basico de jQuery
 
Seguridad en servidores WEB. Modulo mod_security
Seguridad en servidores WEB. Modulo mod_securitySeguridad en servidores WEB. Modulo mod_security
Seguridad en servidores WEB. Modulo mod_security
 
Vulnerabilidades del Software
Vulnerabilidades del SoftwareVulnerabilidades del Software
Vulnerabilidades del Software
 
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)
XSS to the MAX - Juan Manuel Garcia (OWASP LATAM TOUR 2016)
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Racciatti Html Scripting Attacks
Racciatti Html Scripting AttacksRacciatti Html Scripting Attacks
Racciatti Html Scripting Attacks
 
Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0
 
Web app attacks
Web app attacksWeb app attacks
Web app attacks
 
Inyeccionessqlparaaprendices complemento clase 1
Inyeccionessqlparaaprendices complemento clase 1Inyeccionessqlparaaprendices complemento clase 1
Inyeccionessqlparaaprendices complemento clase 1
 
Guia herramientas de bd
Guia herramientas de bdGuia herramientas de bd
Guia herramientas de bd
 
Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...
Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...
Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...
 
Unidad5actividdad1
Unidad5actividdad1Unidad5actividdad1
Unidad5actividdad1
 

Dernier

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 

Dernier (10)

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 

Prevención XSS

  • 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 soy Diplomado en Informática Analista Programador Más 12 años de experiencia Colegiado CPITIA Ciclista aficionado
  • 3. Mi experiencia Autónomo Programador web ISP local 2000 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, intentar combatirlo 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,de código de algún introducción que permite a una tercera parte inyectar en páginas Web vistas por el tipo código JavaScriptweb. otro lenguaje usuario 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, intentar combatirlo 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.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15. Tipos No Persistente Persistente (Reflejado) (Almacenado) Servidor Web Servidor Web enlace XSS respuesta respuesta Usuario Usuario enlace XSS S S c eX en la Atacante Atacante
  • 16. 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) …
  • 17. 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.
  • 19. Inyección de HTML Ejemplo 1 Ahí es dónde se muestra el texto indicado en el campo del formulario y que hace que se ejecute.
  • 20. Inyección de HTML Ejemplo 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.
  • 22. Inyección de HTML Ejemplo 3 Se podría considerar este ejemplo como un ataque de Cross Frame Scripting (XFS) aparte de la inyección de HTML.
  • 23. 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 ''= ' …
  • 24. Inyección de SQL Ejemplo 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 Cambia la clave al clave=‘ahoraentroyo’ WHERE usuario y ya puede usuario=‘mortadelo’; entrar al sistema
  • 25. Inyección de SQL Ejemplo 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 Cambia la clave al clave=‘ahoraentroyo’ WHERE usuario y ya puede usuario=‘mortadelo’; entrar al sistema
  • 26. 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() …
  • 27. Inclusión remota de ficheros Ejemplo: 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/scriptdellio Luego veremos que esto ya no suele ser así.
  • 28. 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 la ejecución de código de PHP arbitrario. Su uso está totalmente desaconsejado. Si se ha verificado cuidadosamente que no existe otra opción que usar este constructor, se ha de poner especial atención en no pasar ninguna información proporcionada por el usuario a esta función sin haberla validado apropiadamente con anterioridad. Fuente: Manual php
  • 29. Inyección de código php Ejemplo: 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.
  • 30. 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.
  • 31. Cross Frame Scripting (XFS) Ejemplo
  • 32. 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.
  • 33. Inyección LDAP Ejemplo: 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.
  • 34. 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 obstante Se recomienda su desactivación.
  • 36. Errores personalizados No dar pistas sobre el error ocurrido php ASP.NET
  • 37. 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.
  • 38. Validaciones en Javascript Barrera inicial Puede que desistan en el caso de no tener conocimientos más amplios • Inconveniente: se puede desactivar fácilmente
  • 39. 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 …
  • 40. Control de entradas (I) Expresiones regulares Ejemplos utilización: php
  • 41. Control de entradas (I) Expresiones regulares Ejemplos utilización: ASP.NET
  • 42. Control de entradas (II) Funciones Usar las del lenguaje php ASP.NET htmlentities IsDate (Visual Basic) htmlspecialchar mysql_real_escape_string(MySQL) IsNumeric (Visual Basic) real_escape_string (mysqli) Regex.IsMatch addslashes stripslashes Regex.Replace preg_replace … …
  • 43. Control de entradas (II) Funciones Implementar nuestras propias funciones php
  • 44. Control de entradas (II) Funciones Implementar nuestras propias funciones ASP.NET
  • 45. Formularios Captcha – Inconveniente: mala visibilidad Preguntas 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
  • 46. 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.
  • 47. Procedencia Comprobar de dónde viene el formulario php ASP.NET Inconvenientes: Puede que no esté activo Se puede falsificar
  • 48. Otras configuraciones php.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.
  • 49. 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"
  • 50. 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 implementando Módulos Apache 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"
  • 52. ¡Muchas Gracias! @jmcanto_km1 www.linkedin.com/in/josemariacantoortiz @ jmcanto@km1desarrollos.com