seguridad en el desarrollo de aplicaciones web

Post on 06-Dec-2014

6.613 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

Seguridad en el desarrollo de aplicaciones web

Juan Eladio Sánchez RosasMozilla Perú

¿Seguridad en el desarrollo de aplicaciones web?

Defensa en profundidad

Menos privilegios

Lo menos complicado

1

2

3

Tres principios, tres

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

¿Por dónde empezar?

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

OWASP

● Proyecto Abierto de Seguridad en Aplicaciones Web

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

OWASP Top 10 2010

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

Inyección

1

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

Inyección - Riesgos1

ExplotaciónFÁCIL

PrevalenciaCOMÚN

DetecciónMEDIA

ImpactoSEVERO

Inyección - Nota

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

1

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

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

Secuencia de Comandos en Sitios Cruzados (XSS)

2

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

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

Secuencia de Comandos en Sitios Cruzados (XSS) - Ejemplo

2

Secuencia de Comandos en Sitios Cruzados (XSS) - Riesgos

2

ExplotaciónMEDIA

DetecciónFÁCIL

ImpactoMODERADO

PrevalenciaMUY DIFUNDIDA

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

Secuencia de Comandos en Sitios Cruzados (XSS) - Defensa

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

2

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

3

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

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

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

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

3

ExplotaciónMEDIA

PrevalenciaCOMÚN

DetecciónMEDIA

ImpactoSEVERO

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

Referencia Directa Insegura a Objetos

4

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

Referencia Directa Insegura a Objetos - Riesgo

4

ExplotaciónFÁCIL

PrevalenciaCOMÚN

DetecciónFÁCIL

ImpactoMODERADO

Referencia Directa Insegura a Objetos - Defensa

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

4

Falsificación de Peticiones en Sitios Cruzados (CSRF)

5

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?

mail=root@local.com

● 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

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

5

ExplotaciónMEDIA

DetecciónFÁCIL

ImpactoMODERADO

PrevalenciaMUY COMÚN

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

Defectuosa Configuración de Seguridad (NUEVO)

6

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

Defectuosa Configuración de Seguridad (NUEVO) - Ejemplo

6

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

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

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

Defectuosa Configuración de Seguridad (NUEVO) - Ejemplo

6

Defectuosa Configuración de Seguridad (NUEVO) - Riesgos

6

ExplotaciónFÁCIL

PrevalenciaCOMÚN

DetecciónFÁCIL

ImpactoMODERADO

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

Almacenamiento Criptográfico Inseguro

7

Almacenamiento Criptográfico Inseguro - Ejemplo

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

7

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

Almacenamiento Criptográfico Inseguro - Riesgos

7

ExplotaciónDIFÍCIL

DetecciónDIFÍCIL

ImpactoSEVERO

PrevalenciaPOCO COMÚN

Almacenamiento Criptográfico Inseguro - Defensa

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

7

Almacenamiento Criptográfico Inseguro - Defensa

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

7

Almacenamiento Criptográfico Inseguro - Defensa

● Dejar de usar algoritmos MD5, SHA1, DES.

7

Almacenamiento Criptográfico Inseguro - Nota

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

7

Falla de Restricción de Acceso a URL

8

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

Falla de Restricción de Acceso a URL - Riesgos

8

ExplotaciónFÁCIL

DetecciónMEDIA

ImpactoMODERADO

PrevalenciaPOCO COMÚN

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

Protección Insuficiente en la Capa de Transporte

9

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

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

Protección Insuficiente en la Capa de Transporte - Riesgos

9

ExplotaciónDIFÍCIL

PrevalenciaCOMÚN

DetecciónFÁCIL

ImpactoMODERADO

Protección Insuficiente en la Capa de Transporte - Defensa

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

9

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

Redirecciones y reenvíos no validados (NUEVO)

10

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

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

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

10

ExplotaciónMEDIA

DetecciónFÁCIL

ImpactoMODERADO

PrevalenciaPOCO COMÚN

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

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

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

Todo esto … ¿tiene que ver con Firefox?

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

Futuras publicaciones de Firefox

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

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

Complementos en Firefox

● Hackbar

Complementos en Firefox

● User Agent RG

Complementos en Firefox

● PassiveRecon

Complementos en Firefox

● FoxyProxy Standard

Complementos en Firefox

● Tamper Data

Advertencia final

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

Y una cosa más ...

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

Mozilla Perú

/mozillaperu

Seguridad en el desarrollo de aplicaciones web

Juan Eladio Sánchez Rosasslideshare.net/juaneladio

top related