Вы находитесь на странице: 1из 81

Seguridad en el desarrollo de aplicaciones web

Juan Eladio Snchez Rosas Mozilla Per

Seguridad en el desarrollo de aplicaciones web?

Tres principios, tres

Defensa en profundidad Menos privilegios Lo menos complicado

Dos prcticas generales

Filtrar entradas
Asegurarse que los datos de entrada son vlidos

Escapar salidas
Asegurar que los datos salientes no se malinterpreten

Por dnde 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 Ms Crticos sobre Seguridad en Aplicaciones

Inyeccin

Inyeccin - Ejemplo

Efectuar una consulta a partir de un dato enviado como parmetro


http://caralibro.com/usuario.php?id=8262 $sql = 'SELECT * FROM USERS where id = '. $_GET['id'];

Qu pasa si ingreso sentencias SQL?

Inyeccin - Riesgos

Explotacin FCIL Prevalencia COMN Deteccin MEDIA Impacto SEVERO

Inyeccin - Nota

Inyeccin no es slo SQL


LDAP Envo de e-mail Comandos de SO ...

Inyeccin - Defensa

Usar una API segura que evite el uso del intrprete o provea una interface parametrizada

$stmt = $dbh->prepare("SELECT * FROM USERS where id = ?"); if ($stmt->execute(array($_GET['id']))) {

Inyeccin - Defensa

Si no hay una API segura validar entradas


if (is_int($_GET['id'])) { if (filter_var($_GET['id'],FILTER_VALIDATE_IN T))

Secuencia de Comandos en Sitios Cruzados (XSS)

2 Secuencia de Comandos en Sitios Cruzados (XSS) - Ejemplo

El contenido de una pgina 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

Explotacin MEDIA Prevalencia MUY DIFUNDIDA Deteccin FCIL Impacto MODERADO

2 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_CHAR S);

2 Secuencia de Comandos en Sitios Cruzados (XSS) - Defensa

Validacin de entradas positivas (permitir ciertas etiquetas)

Funciones ms complicadas

Prdida de Autenticacin y Gestin de Sesiones

3 Prdida de Autenticacin y Gestin de Sesiones - Ejemplo

Un usuario mantiene su sesin activa siguiendo enlaces que incluyen su identificador de sesin

http://caralibro.com/preferencias.php? sessionid=52e83279678a

Si copio el enlace en otra PC, ingreso a la misma pgina?

3 Prdida de Autenticacin y Gestin de Sesiones - Ejemplo

Un usuario inicia sesin desde una cabina de Internet y luego cierra el navegador sin cerrar sesin Qu sucede si luego otro usuario entra a la misma web?

3 Prdida de Autenticacin y Gestin de Sesiones - Ejemplo

Un atacante accede a la base de datos de contraseas SIN CIFRAR

3 Prdida de Autenticacin y Gestin de Sesiones - Riesgos

Explotacin MEDIA Prevalencia COMN Deteccin MEDIA Impacto SEVERO

3 Prdida de Autenticacin y Gestin de Sesiones - Defensa


Un fuerte control de gestin de sesiones Tiempos lmites de vigencia Cifrar las claves de tus usuarios!!! session_regenerate_id(TRUE)

Referencia Directa Insegura a Objetos

Referencia Directa Insegura a Objetos - Ejemplo

El usuario accede a informacin personal con una direccin que incluye su identificador

http://caralibro.com/cuenta.php?id=87392

Qu pasa si cambio el valor de id?

Referencia Directa Insegura a Objetos - Riesgo

Explotacin FCIL Prevalencia COMN Deteccin FCIL Impacto MODERADO

Referencia Directa Insegura a Objetos - Defensa

Comprobar que el usuario tiene los privilegios para acceder al recurso

if ($_GET['id']==$_SESSION['id'])

Falsificacin de Peticiones en Sitios Cruzados (CSRF)

5 Falsificacin de Peticiones en Sitios Cruzados (CSRF) - Ejemplo

Una aplicacin de correo electrnico permite configurar una cuenta adicional para reenviar los mensajes

http://caralibro.com/reenviar.php? mail=root@local.com

Qu pasa si creo una pgina con una etiqueta HTML que hace una llamada a la URL con otra direccin e-mail

5 Falsificacin de Peticiones en Sitios Cruzados (CSRF) - Riesgos

Explotacin MEDIA Prevalencia MUY COMN Deteccin FCIL Impacto MODERADO

5 Falsificacin de Peticiones en Sitios Cruzados (CSRF) - Defensa

Incluir token (testigo) en la peticin, de preferencia de manera oculta:

<input type="hidden" name="token" value="856c2f50ddc49fd710f14a406ec1fef6 52d3c9f">

Defectuosa Configuracin de Seguridad (NUEVO)

Defectuosa Configuracin de Seguridad (NUEVO) - Ejemplo

Se descubre una vulnerabilidad importante en el framework empleado en la aplicacin

Una actualizacin corrige el problema

Qu pasa si nadie actualiza la versin en la aplicacin?

Defectuosa Configuracin de Seguridad (NUEVO) - Ejemplo

Defectuosa Configuracin 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?

Defectuosa Configuracin de Seguridad (NUEVO) - Ejemplo

Se suben por error carpetas .SVN en el servidor de produccin Qu sucede si la configuracin del servidor web permite ver archivos ocultos?

Defectuosa Configuracin de Seguridad (NUEVO) - Ejemplo

La aplicacin muestra el detalle completo de los errores Y si el detalle completo muestra informacin relevante del funcionamiento de la aplicacin?

ERROR [credit-card-db] (MySqlSystem.java:1331) - Invalid column name java.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)

Defectuosa Configuracin de Seguridad (NUEVO) - Ejemplo

Defectuosa Configuracin de Seguridad (NUEVO) - Riesgos

Explotacin FCIL Prevalencia COMN Deteccin FCIL Impacto MODERADO

Defectuosa Configuracin de Seguridad (NUEVO) - Defensa

Definir procesos para actualizar versiones de herramientas empleadas Verificar que herramientas administrativas no se encuentren accesibles Proteger la configuracin de los componentes que usa la aplicacin Deshabilitar mensajes de errores, advertencias o informacin

Almacenamiento Criptogrfico Inseguro

Almacenamiento Criptogrfico Inseguro - Ejemplo

Una aplicacin almacena archivos cifrados pero la clave de cifrado es accesible.

Almacenamiento Criptogrfico Inseguro - Ejemplo

La base de datos de claves usa algn 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

Almacenamiento Criptogrfico Inseguro - Riesgos

Explotacin DIFCIL Prevalencia POCO COMN Deteccin DIFCIL Impacto SEVERO

Almacenamiento Criptogrfico Inseguro - Defensa

Asegrese de que los datos cifrados y la clave que los descrifra se encuentran en lugares distintos

Almacenamiento Criptogrfico Inseguro - Defensa

Utilice una sal al usar un algoritmo hash


md5($sal.$_POST['clave']);

Almacenamiento Criptogrfico Inseguro - Defensa

Dejar de usar algoritmos MD5, SHA1, DES.

Almacenamiento Criptogrfico Inseguro - Nota

Usa SHA-256, AES, RSA.

hash('sha256',$sal.$_POST['clave']);

Falla de Restriccin de Acceso a URL

Falla de Restriccin de Acceso a URL - Ejemplo

Generalmente una aplicacin web tiene una seccin administrativa

http://caralibro.com/admin

La seccin administrativa requiere clave?

Falla de Restriccin de Acceso a URL - Riesgos

Explotacin FCIL Prevalencia POCO COMN Deteccin MEDIA Impacto MODERADO

Falla de Restriccin de Acceso a URL - Defensa

Verificar por cada pgina que se requiera que el usuario tenga los privilegios suficientes para acceder a ella.

if (is_capable($_SESSION['userid'],$page))

Proteccin Insuficiente en la Capa de Transporte

9 Proteccin Insuficiente en la Capa de Transporte - Ejemplo

Una aplicacin no utiliza certificados de seguridad en la transmisin de datos sensibles Qu sucede si un atacante lee las transmisiones del usuario?

9 Proteccin Insuficiente en la Capa de Transporte - Ejemplo

Una aplicacin utiliza certificados de seguridad pero han sido mal configurados y muestran errores frecuentemente a los usuarios Qu sucede si un atacante crea una pgina falsa y que muestra errores similares?

9 Proteccin Insuficiente en la Capa de Transporte - Riesgos

Explotacin DIFCIL Prevalencia COMN Deteccin FCIL Impacto MODERADO

9 Proteccin Insuficiente en la Capa de Transporte - Defensa

Usar SSL para todas las pginas que utilizan datos sensibles

9 Proteccin Insuficiente en la Capa de Transporte - Defensa

Verificar que el certificado sea vlido, no se haya vencido y est configurado para todos los dominios usados por la aplicacin.

Redirecciones y reenvos no validados (NUEVO)

10

Redirecciones y reenvos no validados (NUEVO) - Ejemplo

10

Una aplicacin tiene pginas del tipo redirect, con un parmetro URL

http://caralibro.com/ir.php?url=curso.php

Qu sucede si coloco una direccin externa en url?

Redirecciones y reenvos no validados (NUEVO) - Ejemplo

10

Una peticin enva, adems de los datos normales, la url que mostrar al confirmarse la transaccin

http://caralibro.com/transaccion.php? dato1=cualquiera&exito=inicio.php

Qu sucede si cambio el valor de exito?

Redirecciones y reenvos no validados (NUEVO) - Riesgos

10

Explotacin MEDIA Prevalencia POCO COMN Deteccin FCIL Impacto MODERADO

Redirecciones y reenvos no validados (NUEVO) - Defensa


10

Evitar usar redirecciones. Si se utiliza, evitar que el usuario pueda manipular el destino. Tambin se debe asegurar que el destino ser vlido y autorizado.

Y esto es slo el comienzo (para ustedes :D) Clickjacking


Plugins (Flash, Acrobat, Java) XSS con CSS JSON con datos sensibles Remote Code Injection XSS + Ajax + CSRF

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

Referencias bibliogrficas

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-odysseytop-ten-hacks-of-the-year RIA And AJAX Security Workshop, Part 1 http://www.slideshare.net/astamos/ria-and-ajax-security-workshop-part-1presentation Evolution Of Web Security http://www.slideshare.net/shiflett/evolution-of-websecurity Rails Security Best Practices http://www.slideshare.net/ihower/rails-security3299368 Web Application Security Tutorial http://www.slideshare.net/xplodersuv/EducauseAnnualWebAppSecTutorialV3 Web Security Horror Stories http://www.slideshare.net/simon/web-securityhorror-stories-presentation PHP Security Consortium http://phpsec.org/ PHP Filtros de saneamiento http://php.net/manual/es/filter.filters.sanitize.php

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

Todo esto tiene que ver con Firefox?

Futuras publicaciones de Firefox

Firefox (Estable), Aurora y Mobile firefox.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 piratera en redes sin la previa autorizacin se considera un delito

Y una cosa ms ...

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

Mozilla Per
/mozillaperu

Seguridad en el desarrollo de aplicaciones web

Juan Eladio Snchez Rosas slideshare.net/juaneladio

Вам также может понравиться