seguridad en el desarrollo de aplicaciones web

81
Seguridad en el desarrollo de aplicaciones web Juan Eladio Sánchez Rosas Mozilla Perú

Upload: juan-eladio-sanchez-rosas

Post on 06-Dec-2014

6.613 views

Category:

Technology


1 download

DESCRIPTION

Como desarrolladores web, una de las principales preocupaciones es cuán vulnerables son nuestros sitios o aplicaciones web. Esta charla explica algunos riesgos de seguridad y, más importante, cómo evitarlos. Basado en los riesgos de seguridad más críticos en el desarrollo web según OWASP Top Ten 2010, y con algunos ejemplos en PHP (aunque es fácilmente aplicable en otros entornos).

TRANSCRIPT

Page 1: Seguridad en el desarrollo de aplicaciones web

Seguridad en el desarrollo de aplicaciones web

Juan Eladio Sánchez RosasMozilla Perú

Page 2: Seguridad en el desarrollo de aplicaciones web
Page 3: Seguridad en el desarrollo de aplicaciones web

¿Seguridad en el desarrollo de aplicaciones web?

Page 4: Seguridad en el desarrollo de aplicaciones web

Defensa en profundidad

Menos privilegios

Lo menos complicado

1

2

3

Tres principios, tres

Page 5: Seguridad en el desarrollo de aplicaciones web

Filtrar entradas

Escapar salidas

Asegurarse que los datos de entrada son válidos

Asegurar que los datos salientes no se malinterpreten

Dos prácticas generales

Page 6: Seguridad en el desarrollo de aplicaciones web

¿Por dónde empezar?

https://secure.flickr.com/photos/cdharrison/359763327/

Page 7: Seguridad en el desarrollo de aplicaciones web
Page 8: Seguridad en el desarrollo de aplicaciones web

OWASP

● Proyecto Abierto de Seguridad en Aplicaciones Web

● Comunidad abierta dedicada a habilitar a las organizaciones para desarrollar, comprar y mantener aplicaciones confiables.

Page 9: Seguridad en el desarrollo de aplicaciones web

OWASP Top 10 2010

● Diez Riesgos Más Críticos sobre Seguridad en Aplicaciones

Page 10: Seguridad en el desarrollo de aplicaciones web

Inyección

1

Page 11: Seguridad en el desarrollo de aplicaciones web

Inyección - Ejemplo

● Efectuar una consulta a partir de un dato enviado como parámetro● http://caralibro.com/usuario.php?id=8262 ● $sql = 'SELECT * FROM USERS where id = '.

$_GET['id'];

● ¿Qué pasa si ingreso sentencias SQL?

1

Page 12: Seguridad en el desarrollo de aplicaciones web

Inyección - Riesgos1

ExplotaciónFÁCIL

PrevalenciaCOMÚN

DetecciónMEDIA

ImpactoSEVERO

Page 13: Seguridad en el desarrollo de aplicaciones web

Inyección - Nota

● Inyección no es sólo SQL● LDAP● Envío de e-mail● Comandos de SO● ...

1

Page 14: Seguridad en el desarrollo de aplicaciones web

Inyección - Defensa

● Usar una API segura que evite el uso del intérprete o provea una interface parametrizada● $stmt = $dbh->prepare("SELECT * FROM

USERS where id = ?");● if ($stmt->execute(array($_GET['id']))) {

1

Page 15: Seguridad en el desarrollo de aplicaciones web

Inyección - Defensa

● Si no hay una API segura validar entradas● if (is_int($_GET['id'])) {● if

(filter_var($_GET['id'],FILTER_VALIDATE_INT))

1

Page 16: Seguridad en el desarrollo de aplicaciones web

Secuencia de Comandos en Sitios Cruzados (XSS)

2

Page 17: Seguridad en el desarrollo de aplicaciones web

Secuencia de Comandos en Sitios Cruzados (XSS) - Ejemplo

● El contenido de una página se carga imprimiendo un dato ingresado previamente● http://caralibro.com/buscar.php?

cadena=Equipos ● echo $cadena;

● ¿Qué pasa si ingreso etiquetas HTML en la variable cadena?

2

Page 18: Seguridad en el desarrollo de aplicaciones web

Secuencia de Comandos en Sitios Cruzados (XSS) - Ejemplo

● ¿Y si comparto el enlace modificado?● ¿Y si vuelvo persistente el dato en la base

de datos?

2

Page 19: Seguridad en el desarrollo de aplicaciones web

Secuencia de Comandos en Sitios Cruzados (XSS) - Ejemplo

2

Page 20: Seguridad en el desarrollo de aplicaciones web

Secuencia de Comandos en Sitios Cruzados (XSS) - Riesgos

2

ExplotaciónMEDIA

DetecciónFÁCIL

ImpactoMODERADO

PrevalenciaMUY DIFUNDIDA

Page 21: Seguridad en el desarrollo de aplicaciones web

Secuencia de Comandos en Sitios Cruzados (XSS) - Defensa

● Escapar todos los datos no confiables● htmlentities($_GET['cadena']);● filter_var($_GET['cadena'],

FILTER_SANITIZE_FULL_SPECIAL_CHARS);

2

Page 22: Seguridad en el desarrollo de aplicaciones web

Secuencia de Comandos en Sitios Cruzados (XSS) - Defensa

● Validación de entradas positivas (permitir ciertas etiquetas)● Funciones más complicadas

2

Page 23: Seguridad en el desarrollo de aplicaciones web

Pérdida de Autenticación y Gestión de Sesiones

3

Page 24: Seguridad en el desarrollo de aplicaciones web

Pérdida de Autenticación y Gestión de Sesiones - Ejemplo

● Un usuario mantiene su sesión activa siguiendo enlaces que incluyen su identificador de sesión● http://caralibro.com/preferencias.php?

sessionid=52e83279678a

● ¿Si copio el enlace en otra PC, ingreso a la misma página?

3

Page 25: Seguridad en el desarrollo de aplicaciones web

Pérdida de Autenticación y Gestión de Sesiones - Ejemplo

● Un usuario inicia sesión desde una cabina de Internet y luego cierra el navegador sin cerrar sesión

● ¿Qué sucede si luego otro usuario entra a la misma web?

3

Page 26: Seguridad en el desarrollo de aplicaciones web

Pérdida de Autenticación y Gestión de Sesiones - Ejemplo

● Un atacante accede a la base de datos de contraseñas SIN CIFRAR

3

Page 27: Seguridad en el desarrollo de aplicaciones web

Pérdida de Autenticación y Gestión de Sesiones - Riesgos

3

ExplotaciónMEDIA

PrevalenciaCOMÚN

DetecciónMEDIA

ImpactoSEVERO

Page 28: Seguridad en el desarrollo de aplicaciones web

Pérdida de Autenticación y Gestión de Sesiones - Defensa

● Un fuerte control de gestión de sesiones● Tiempos límites de vigencia● ¡¡¡Cifrar las claves de tus usuarios!!!● session_regenerate_id(TRUE)

3

Page 29: Seguridad en el desarrollo de aplicaciones web

Referencia Directa Insegura a Objetos

4

Page 30: Seguridad en el desarrollo de aplicaciones web

Referencia Directa Insegura a Objetos - Ejemplo

● El usuario accede a información personal con una dirección que incluye su identificador● http://caralibro.com/cuenta.php?id=87392

● ¿Qué pasa si cambio el valor de id?

4

Page 31: Seguridad en el desarrollo de aplicaciones web

Referencia Directa Insegura a Objetos - Riesgo

4

ExplotaciónFÁCIL

PrevalenciaCOMÚN

DetecciónFÁCIL

ImpactoMODERADO

Page 32: Seguridad en el desarrollo de aplicaciones web

Referencia Directa Insegura a Objetos - Defensa

● Comprobar que el usuario tiene los privilegios para acceder al recurso● if ($_GET['id']==$_SESSION['id'])

4

Page 33: Seguridad en el desarrollo de aplicaciones web

Falsificación de Peticiones en Sitios Cruzados (CSRF)

5

Page 34: Seguridad en el desarrollo de aplicaciones web

Falsificación de Peticiones en Sitios Cruzados (CSRF) - Ejemplo

● Una aplicación de correo electrónico permite configurar una cuenta adicional para reenviar los mensajes● http://caralibro.com/reenviar.php?

[email protected]

● Qué pasa si creo una página con una etiqueta HTML que hace una llamada a la URL con otra dirección e-mail

5

Page 35: Seguridad en el desarrollo de aplicaciones web

Falsificación de Peticiones en Sitios Cruzados (CSRF) - Riesgos

5

ExplotaciónMEDIA

DetecciónFÁCIL

ImpactoMODERADO

PrevalenciaMUY COMÚN

Page 36: Seguridad en el desarrollo de aplicaciones web

Falsificación de Peticiones en Sitios Cruzados (CSRF) - Defensa

● Incluir token (testigo) en la petición, de preferencia de manera oculta:● <input type="hidden" name="token"

value="856c2f50ddc49fd710f14a406ec1fef652d3c9f">

5

Page 37: Seguridad en el desarrollo de aplicaciones web

Defectuosa Configuración de Seguridad (NUEVO)

6

Page 38: Seguridad en el desarrollo de aplicaciones web

Defectuosa Configuración de Seguridad (NUEVO) - Ejemplo

● Se descubre una vulnerabilidad importante en el framework empleado en la aplicación● Una actualización corrige el problema

● ¿Qué pasa si nadie actualiza la versión en la aplicación?

6

Page 39: Seguridad en el desarrollo de aplicaciones web

Defectuosa Configuración de Seguridad (NUEVO) - Ejemplo

6

Page 40: Seguridad en el desarrollo de aplicaciones web

Defectuosa Configuración de Seguridad (NUEVO) - Ejemplo

● Una herramienta administrativa es instalada en el servidor web y se deja accesible sin clave● http://caralibro.com/phpmyadmin

● ¿Qué sucede si comienzan a adivinar URLs?

6

Page 41: Seguridad en el desarrollo de aplicaciones web

Defectuosa Configuración de Seguridad (NUEVO) - Ejemplo

● Se suben por error carpetas .SVN en el servidor de producción

● ¿Qué sucede si la configuración del servidor web permite ver archivos ocultos?

6

Page 42: Seguridad en el desarrollo de aplicaciones web

Defectuosa Configuración de Seguridad (NUEVO) - Ejemplo

● La aplicación muestra el detalle completo de los errores

● ¿Y si el detalle completo muestra información relevante del funcionamiento de la aplicación?

ERROR [credit-card-db] (MySqlSystem.java:1331) - Invalid column namejava.sql.SQLException: Invalid column name ‘social_security_numbre’: select username, password, ssn from users where id = ? sun.jdbc.rowset.CachedRowSet.getColIdxByName(CachedRowSet.java:1383)\ at com.mysql.Driver.MySQLDriver.a(MySQLDriver.java:2531) at sun.jdbc.rowset.CachedRowSet.getString(CachedRowSet.java:2167) at com.ppe.db.MySqlSystem.getReciPaying(MySqlSystem.java:1318) at control.action.FindUserAction.perform(FindKeyUserAction.java:81) at org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1586) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:492) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)

6

Page 43: Seguridad en el desarrollo de aplicaciones web

Defectuosa Configuración de Seguridad (NUEVO) - Ejemplo

6

Page 44: Seguridad en el desarrollo de aplicaciones web

Defectuosa Configuración de Seguridad (NUEVO) - Riesgos

6

ExplotaciónFÁCIL

PrevalenciaCOMÚN

DetecciónFÁCIL

ImpactoMODERADO

Page 45: Seguridad en el desarrollo de aplicaciones web

Defectuosa Configuración de Seguridad (NUEVO) - Defensa

● Definir procesos para actualizar versiones de herramientas empleadas

● Verificar que herramientas administrativas no se encuentren accesibles

● Proteger la configuración de los componentes que usa la aplicación

● Deshabilitar mensajes de errores, advertencias o información

6

Page 46: Seguridad en el desarrollo de aplicaciones web

Almacenamiento Criptográfico Inseguro

7

Page 47: Seguridad en el desarrollo de aplicaciones web

Almacenamiento Criptográfico Inseguro - Ejemplo

● Una aplicación almacena archivos cifrados pero la clave de cifrado es accesible.

7

Page 48: Seguridad en el desarrollo de aplicaciones web

Almacenamiento Criptográfico Inseguro - Ejemplo

● La base de datos de claves usa algún algoritmo hash pero sin “sal” (un dato adicional que se suma al valor original)● md5($_POST['clave']);

● Un ataque de fuerza bruta demora menos en encontrar la clave si ésta no está sumada a una “sal”

7

Page 49: Seguridad en el desarrollo de aplicaciones web

Almacenamiento Criptográfico Inseguro - Riesgos

7

ExplotaciónDIFÍCIL

DetecciónDIFÍCIL

ImpactoSEVERO

PrevalenciaPOCO COMÚN

Page 50: Seguridad en el desarrollo de aplicaciones web

Almacenamiento Criptográfico Inseguro - Defensa

● Asegúrese de que los datos cifrados y la clave que los descrifra se encuentran en lugares distintos

7

Page 51: Seguridad en el desarrollo de aplicaciones web

Almacenamiento Criptográfico Inseguro - Defensa

● Utilice una “sal” al usar un algoritmo hash● md5($sal.$_POST['clave']);

7

Page 52: Seguridad en el desarrollo de aplicaciones web

Almacenamiento Criptográfico Inseguro - Defensa

● Dejar de usar algoritmos MD5, SHA1, DES.

7

Page 53: Seguridad en el desarrollo de aplicaciones web

Almacenamiento Criptográfico Inseguro - Nota

● Usa SHA-256, AES, RSA.● hash('sha256',$sal.$_POST['clave']);

7

Page 54: Seguridad en el desarrollo de aplicaciones web

Falla de Restricción de Acceso a URL

8

Page 55: Seguridad en el desarrollo de aplicaciones web

Falla de Restricción de Acceso a URL - Ejemplo

● Generalmente una aplicación web tiene una sección administrativa● http://caralibro.com/admin

● ¿La sección administrativa requiere clave?

8

Page 56: Seguridad en el desarrollo de aplicaciones web

Falla de Restricción de Acceso a URL - Riesgos

8

ExplotaciónFÁCIL

DetecciónMEDIA

ImpactoMODERADO

PrevalenciaPOCO COMÚN

Page 57: Seguridad en el desarrollo de aplicaciones web

Falla de Restricción de Acceso a URL - Defensa

● Verificar por cada página que se requiera que el usuario tenga los privilegios suficientes para acceder a ella.● if (is_capable($_SESSION['userid'],$page))

8

Page 58: Seguridad en el desarrollo de aplicaciones web

Protección Insuficiente en la Capa de Transporte

9

Page 59: Seguridad en el desarrollo de aplicaciones web

Protección Insuficiente en la Capa de Transporte - Ejemplo

● Una aplicación no utiliza certificados de seguridad en la transmisión de datos sensibles

● ¿Qué sucede si un atacante lee las transmisiones del usuario?

9

Page 60: Seguridad en el desarrollo de aplicaciones web

Protección Insuficiente en la Capa de Transporte - Ejemplo

● Una aplicación utiliza certificados de seguridad pero han sido mal configurados y muestran errores frecuentemente a los usuarios

● ¿Qué sucede si un atacante crea una página falsa y que muestra errores similares?

9

Page 61: Seguridad en el desarrollo de aplicaciones web

Protección Insuficiente en la Capa de Transporte - Riesgos

9

ExplotaciónDIFÍCIL

PrevalenciaCOMÚN

DetecciónFÁCIL

ImpactoMODERADO

Page 62: Seguridad en el desarrollo de aplicaciones web

Protección Insuficiente en la Capa de Transporte - Defensa

● Usar SSL para todas las páginas que utilizan datos sensibles

9

Page 63: Seguridad en el desarrollo de aplicaciones web

Protección Insuficiente en la Capa de Transporte - Defensa

● Verificar que el certificado sea válido, no se haya vencido y esté configurado para todos los dominios usados por la aplicación.

9

Page 64: Seguridad en el desarrollo de aplicaciones web

Redirecciones y reenvíos no validados (NUEVO)

10

Page 65: Seguridad en el desarrollo de aplicaciones web

Redirecciones y reenvíos no validados (NUEVO) - Ejemplo

● Una aplicación tiene páginas del tipo redirect, con un parámetro URL● http://caralibro.com/ir.php?url=curso.php

● ¿Qué sucede si coloco una dirección externa en url?

10

Page 66: Seguridad en el desarrollo de aplicaciones web

Redirecciones y reenvíos no validados (NUEVO) - Ejemplo

● Una petición envía, además de los datos normales, la url que mostrará al confirmarse la transacción● http://caralibro.com/transaccion.php?

dato1=cualquiera&exito=inicio.php

● ¿Qué sucede si cambio el valor de exito?

10

Page 67: Seguridad en el desarrollo de aplicaciones web

Redirecciones y reenvíos no validados (NUEVO) - Riesgos

10

ExplotaciónMEDIA

DetecciónFÁCIL

ImpactoMODERADO

PrevalenciaPOCO COMÚN

Page 68: Seguridad en el desarrollo de aplicaciones web

Redirecciones y reenvíos no validados (NUEVO) - Defensa

● Evitar usar redirecciones.● Si se utiliza, evitar que el usuario pueda

manipular el destino.● También se debe asegurar que el destino

será válido y autorizado.

10

Page 69: Seguridad en el desarrollo de aplicaciones web

Y esto es sólo el comienzo(para ustedes :D)

https://secure.flickr.com/photos/anonymous9000/3644243073/

● Clickjacking● Plugins (Flash,

Acrobat, Java)● XSS con CSS● JSON con datos

sensibles● Remote Code

Injection● XSS + Ajax + CSRF

Page 70: Seguridad en el desarrollo de aplicaciones web

Referencias bibliográficas● OWASP Top Ten Project [Spanish Translation]

https://www.owasp.org/index.php/Top_10

● 2010: A Web Hacking Odyssey - Top Ten Hacks of the Year http://www.slideshare.net/jeremiahgrossman/2010-a-web-hacking-odyssey-top-ten-hacks-of-the-year

● RIA And AJAX Security Workshop, Part 1 http://www.slideshare.net/astamos/ria-and-ajax-security-workshop-part-1-presentation

● Evolution Of Web Security http://www.slideshare.net/shiflett/evolution-of-web-security

● Rails Security Best Practices http://www.slideshare.net/ihower/rails-security-3299368

● Web Application Security Tutorial http://www.slideshare.net/xplodersuv/EducauseAnnualWebAppSecTutorialV3

● Web Security Horror Stories http://www.slideshare.net/simon/web-security-horror-stories-presentation

● PHP Security Consortium http://phpsec.org/

● PHP Filtros de saneamiento http://php.net/manual/es/filter.filters.sanitize.php

Page 71: Seguridad en el desarrollo de aplicaciones web

Todo esto … ¿tiene que ver con Firefox?

https://secure.flickr.com/photos/nickstone333/3390456806/

Page 72: Seguridad en el desarrollo de aplicaciones web

Futuras publicaciones de Firefox

Firefox (Estable), Aurora y Mobilefirefox.com/channel

Firefox Portable (ejecutable desde USB)mozilla.pe/firefox-portable

Page 73: Seguridad en el desarrollo de aplicaciones web

Complementos en Firefox

● Hackbar

Page 74: Seguridad en el desarrollo de aplicaciones web

Complementos en Firefox

● User Agent RG

Page 75: Seguridad en el desarrollo de aplicaciones web

Complementos en Firefox

● PassiveRecon

Page 76: Seguridad en el desarrollo de aplicaciones web

Complementos en Firefox

● FoxyProxy Standard

Page 77: Seguridad en el desarrollo de aplicaciones web

Complementos en Firefox

● Tamper Data

Page 78: Seguridad en el desarrollo de aplicaciones web

Advertencia final

La piratería en redes sin la previa autorización se considera un delito

Page 79: Seguridad en el desarrollo de aplicaciones web

Y una cosa más ...

https://secure.flickr.com/photos/takomabibelot/2455018965/

Page 80: Seguridad en el desarrollo de aplicaciones web

Mozilla Perú

/mozillaperu

Page 81: Seguridad en el desarrollo de aplicaciones web

Seguridad en el desarrollo de aplicaciones web

Juan Eladio Sánchez Rosasslideshare.net/juaneladio