seguridad en el desarrollo de aplicaciones web
Post on 06-Dec-2014
6.613 Views
Preview:
DESCRIPTION
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