Vous êtes sur la page 1sur 39

(In)Seguridad en la

Web
OWASP Top-10 2013

Qu es OWASP?

Open Web Application Security Project


Organizacin sin fines de lucro enfocada en mejorar la seguridad
en el desarrollo de software
Materiales y recursos bajo licencia open source y gratuitos
Cientos de proyectos relacionados para anlisis y verificacin de
seguridad en el software
OWASP Zed Attack Proxy
OWASP Web Testing Environment Project
OWASP ModSecurity Core Rule Set Project
OWASP CSRFGuard Project
OWASP Enterprise Application Security Project

www.owasp.org

OWASP Top Ten (2013 Edition)


Los 10 riesgos de seguridad ms crticos en
aplicaciones Web

A1: Inyeccin

A5: Mala
configuracin de
Seguridad

A2: Quiebre de
autenticacin y
administracin
de la sesin

A3: Cross-Site
Scripting (XSS)

A4: Referencia
directa a objeto
inseguro

A6: Exposicin de
datos sensibles

A7: Inexistente
control de acceso
a nivel de funcin

A8: Falsificacin
de Solicitud de
sitio cruzado
(CSRF)

A9: Usar
componentes
vulnerables

A10: Reenvos y
redirecciones no
validadas

A1 - Inyeccin
Inyeccin significa
Engaar a una aplicacin incluyendo comandos en los datos enviados a un
intrprete.

Intrpretes
Toman strings y los interpretan como comandos
SQL, OS Shell, LDAP, XPath, Hibernate, etc

SQL injection es bastante comn


Muchas aplicaciones se mantienen susceptibles.
An cuando no es muy difcil evitarla.

Impacto tpico
Usualmente severo. La base de datos completa puede ser vista o modificada.
Incluso puede permitir acceso al esquema completo de la base de datos,
acceso a cuentas o acceso a nivel de sistema operativo.

Ilustracin de Inyeccin de SQL

Custom Code

App Server

Firewall

Hardened OS

Firewall

Network Layer

Web Server

Billing

Human Resrcs

Directories

Web Services

Databases

Legacy Systems

APPLICATION
ATTACK

DB Table

Communication
Knowledge Mgmt
E-Commerce
Bus. Functions

Administration
Transactions

request

Accounts
Finance

Application Layer

HTTP

HTTP
SQL
response
query

Account Summary
"SELECT
* FROM
Account:
Account:
accounts
WHERE
Acct:5424-6066-2134-4334
SKU:
SKU:
Acct:4128-7574-3921-0192
acct= OR 1=1-Acct:5424-9383-2039-4029
"
Acct:4128-0004-1234-0293

1. La aplicacin presenta un
formulario al atacante.
2. El atacante escribe datos en el
formulario
3. La aplicacin enva el ataque a
la base de datos en una query
SQL.
4. La base de datos ejecuta la
consulta que contiene el
ataque y enva el resultado a
la aplicacin.
5. La aplicacin prepara los datos
de manera normal y los enva
al atacante.

Impedir fallas de inyeccin

Recomendaciones
Evitar el intrprete completamente
Usar una interfaz que soporte variables de binding (por ejemplo sentencias
preparadas o procedimientos almacenados)
Las variables de binding permiten al intrprete distinguir entre cdigo y datos.
Codificar todas las entradas de usuario antes de entregrselas al intrprete.
Siempre efectuar validacin de los datos de usuario, respecto de lo autorizado a
ingresar.
Siempre minimizar privilegios de base de datos para reducir el impacto de los
errores de seguridad.

Referencias
Para mayores detalles
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

A2- Quiebre de la autenticacin y


administracin de sesin
HTTP es un protocolo sin estado
Significa que las credenciales deben entregarse en cada request.
Debiera usar SSL para cada requerimiento de autenticacin.

Fallas de manejo de sesin


Se usa SESSION ID para controlar el estado dado que HTTP no puede.
Y es tan bueno como entregar las credenciales a un atacante.
SESSION ID normalmente es expuesta en la red, en el browser, en los logs.

Cuidado con las puertas laterales


Cambiar la password, recordarla, olvido de contrasea, pregunta secreta,
direccin de correo electrnico.

Impacto tpico
Cuentas de usuario comprometidas o sesiones secuestradas

www.boi.com?JSESSIONID=9FA1DB9EA...

El sitio usa reescritura de URL


(Por ej. Escribe el ID de la
sesin en la URL)

El hacker usa el JSESSIONID y


toma el control de la cuenta
de la vctima.

Communication
Knowledge Mgmt
E-Commerce
Bus. Functions

El usuario enva credenciales


Accounts
Finance

Administration
Transactions

Ilustracin de quiebre de autenticacin

Custom Code

El usuario hace clic al link http://www.hacker.com


en un foro.

El hacker observa los registros en


www.hacker.com
Y encuentra el JSESSIONID del usuario.

Evitar el Quiebre de la autenticacin y


administracin de sesin.
Verifique su arquitectura
La autenticacin debe ser simple, centralizada y estandarizada.
Usar el session ID provisto por su contenedor.
Asegurarse que SSL protege las credenciales y el session ID en todo
momento.

Verificar la implementacin
Veridicar su certificado digital
Examinar todas las funciones relacionadas con la autenticacin
Verificar que el logoff realmente destruye la sesin
Use WebScarab o ZAP de OWASP para probar la implementacin

Siga las indicaciones desde:


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

A3 Cross-Site Scripting (XSS)


Ocurre en cualquier momento
Los datos maliciosos de un atacante se envan al browser de un usuario
inocente.

Datos maliciosos
Almacenados en la base de datos
Reflejados desde la entrada (campo de formulario, campo oculto, Url)
Enviados directamente va JavaScript

Virtualmente toda aplicacin web tiene este


problema
Intente en su browser dogitando: javascript:alert(document.cookie)

Impacto tpico
Robo de la sesin de usuario, robo de datos sensibles, reescritura de la pgina
web, redireccin del usuario a un sitio maligno.
Instalar proxies XSS que permiten al atacante observar y dirigir todo el
comportamiento de un usuario en un sitio vulnerable y forzar que el usuario
acceda a otros sitios.

Ilustracin de XSS
El atacante pone la trampa: Actualizar mi perfil
trap update my profile
Aplicacin con
vulnerabilidad XSS
almacenada
EL atacante ingresa un

La vctima visita la pgina e ingresa la informacin.

Administration
Transactions

Accounts
Finance

script malicioso en una


pgina web que almacena
datos en el servidor

Communication
Knowledge Mgmt
E-Commerce
Bus. Functions

Custom Code

El script se ejecuta en el
browser de la vctima con
total acceso a la informacin
que ste maneja

El script silenciosamente enva al atacante las cookies de sesin de la vctima

Impedir fallas XSS


Recomendaciones

Eliminar la falla

No inclur datos entregados por el usuario en la pgina de salida

Defenderse contra la falla

Usar polticas de seguridad de contenido


Recomendacin primaria: Codificar la salida de toda la informacin ingresada
por el usuario.(Usar OWASP ESAPI o codificadores Java para codificar la salida)
https://www.owasp.org/index.php/ESAPI
https://www.owasp.org/index.php/OWASP_Java_Encoder_Project
Crear una lista blanca de validacin en todas las entradas que sean includas en
la pgina
Para grandes cantidades de cdigo HTML entregado por el usuario, utilizar
AntiSamy de OWASP para sanitizar ese HTML y hacerlo seguro.
https://www.owasp.org/index.php/AntiSamy

Referencias
Para cmo codificar cdigo de salida apropiadamente, leer:
https://www.owasp.org/index.php/XSS_(Cross Site Scripting) Prevention Cheat Sheet

A4 Referencia directa a objeto


Cmo proteger el acceso a los datos?
Exigir autorizacin apropiada (falla al restringir acceso a URL)

Error comn

Slo listar los objetos autorizados para el usuario


Esconder las referencias a objetos en campos ocultos
No implementar esas restricciones en el lado del servidor
El atacante se salta ese control de acceso de capa de
presentacin ingresando parmetros en la URL

Impacto tpico
Los usuarios pueden acceder a archivos o datos no autorizados.

Ilustracin de Referencia directa a objeto

https://www.onlinebank.com/user?acct=6065

El atacante se percata que


el parmetro de su cuenta
es 6065
?acct=6065
Lo modifica a un nmero
cercano: ?acct=6066
Ahora el atacante tiene
acceso a la informacin de
la cuenta de la vctima.

Evitar la referencia directa a objeto


Eliminar la referencia directa a un objeto
Reemplcelas con un valor de asignacin temporal (ej. 1, 2, 3)
OWASP ESAPI entrega soporte para asignaciones numricas y aleatorias

http://app?file=Report123.xls
http://app?file=1
http://app?id=9182374
http://app?id=7d3J93

Access
Reference
Map

Report123.xls
Acct:9182374

Validar la referencia directa a un objeto


Verifique el valor del parmetro est correctamente formateado
Verifique que el usuario tiene acceso al objeto
Restricciones de SQL query (constraints)

Verifique que el modo de acceso est permitido sobre el objeto


(lectura, escritura, eliminacin)

A5 Fallas en la Configuracin de Seguridad


Las aplicaciones Web descansan en la seguridad
Desde el SO hasta el servidor de aplicaciones
Su cdigo fuente es secreto?
Piense en todos los lugares a los que su cdigo fuente viaja
La seguridad no debiera requerir cdigo fuente secreto
La administracin de credenciales debiera extenderse a
todas las partes de la aplicacin

Todas las credenciales deben cambiarse en produccin


Impacto tpico
Instalacin de backdoor aprovechando vulnerabilidades no parchadas en el
servidor
Acceso no autorizado a cuentas por defecto, funcionalidad de aplicaciones o
datos

Communication
Knowledge Mgmt
E-Commerce
Bus. Functions

Administration
Transactions

Accounts
Finance

Ilustracin de Fallas en la Configuracin de Seguridad

Database

Custom Code
App Configuration

Framework

Development

App Server
QA Servers
Web Server

Insider

Hardened OS
Test Servers

Source Control

Evitar Fallas en la Configuracin de Seguridad


Verifique la administracin de la configuracin
Seguir guas de endurecimiento de la configuracin
Debe cubrir la plataforma y la aplicacin
Analizar efectos que produce en la seguridad

Verificar la implementacin
Buscar configuraciones genricas y problemas de parches no instalados

A6 Exposicin de datos sensibles

Almacenar y trasnmitir datos sin seguridad


Fallas al identificar datos sensibles
Fallas al identificar todos los lugares en los que se almacenan los datos sensibles
Bases de datos, archivos, directories, logs, respaldos

Fallas al identificar los lugares a los que se envan los datos senibles
A la web, a otras bases de datos, a socios de negocios, comunicaciones internas

Fallas al proteger apropiadamente estos datos en cada ubicacin

Impacto tpico
Los atacantes acceden o modifican informacin confidencial o privada
Tarjetas de crdito, fichas personales, datos financieros

Los atacantes extraen secretos para usar en ataques adicionales.


Prdida de confianza en la compaia, insatisfaccin del consumidor
Gastos en corregir el inicdente, gastos en seguros
El negocio es multado

La vctima ingresa su
nmero de tarjeta de
crdito en un formulario

Accounts
Finance
Administration
Transactions
Communication
Knowledge
Mgmt
E-Commerce
Bus. Functions

Ilustracin de almacenamiento de datos inseguro

Custom Code

Log files

Un atacante interno
roba 4 millones de
nmeros de tarjetas
de crdito
Los logs son accesibles a
todos los miembros de IT
para debug

El manejador de errors
registra los nmeros de
tarjetas de crdito en el
log, porque no hay
comunicacin con el
Sistema

Evitar el almacenamiento inseguro

Verifique su arquitectura

Protegerse con mecanismos apropiados

Encriptacin de datos, encriptacin de la base de datos, encriptacin de los elementos


de datos

Usar los mecanismos correctamente

Identifique todos los datos sensibles


Identifique todos los lugares donde se almacenan los datos
Use encriptacin para contrarrestar las amenazas

Usar algoritmos robustos


Generar, distribuir y proteger claves apropiadamente
Estar preparados para cambio de claves

Verificar la implementacin

Se usa un algoritmo estndar y robusto? Es el apropiado?


Todas las claves, certificados y passwords estn correctamente almacenados y
protegidos?
Tiene lugar una distribucin segura de claves y un efectivo plan para cambio de stas?
Analizar cdigo de encriptacin para detectar fallas

Ilustracin de proteccin insuficiente de la capa de


transporte

Socios de negocio

Vctima externa
Custom Code

1
Atacante interno
roba credenciales
de acceso y datos
fuera de la red
Atacante externo

Backend Systems

Empleados

Atacante interno
roba credenciales de
acceso y datos desde
la red interna
Atacante interno

Evitar proteccin insuficiente de la capa de transporte

Protegerse con mecanismos adecuados

Usar TLS en todas las conexiones con datos sensibles


Usar HSTS (HTTP Strict Transport Security)
Usar key pinning (browser marca certificado de servidor para verificacin futura)
Encriptar mensajes antes de transmitirlos

XML-Encryption
Firmar mensajes antes de transmitirlos

XML-Signature

Usar los mecanismos correctamente


Usar algoritmos estndar y robustos
Manejar adecuadamente claves y certificados digitales
Verificar certificados SSL antes de usarlos

Ver
http://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet
para ms detalles.

A7 Control de acceso a nivel de funcin inexistente


Cmo protger el acceso a las URLs (pginas)?
O a las funciones referidas por una URL ms parmetros?

Obligando a una efectiva Autorizacin

Un error comn
Mostrar slo links y opciones de men autorizadas
El control de acceso a nivel de capa de aplicacin no funciona
El atacante lograr tener aceso directo a pginas no autorizadas.

Impacto tpico
Los atacantes invocan funciones y servicios a los que no estn
autorizados
Acceso a otras cuentas de usuarios y datos
Efectuar acciones con privilegios sobre el sistema

Ilustracin de Control de acceso a nivel de funcin


inexistente
El atacante se da cuenta
que la URL indica su rol
/user/getAccounts
Modifica la URL para accede
a otro directorio (rol)
/admin/getAccounts,
/manager/getAccounts
El atacante accede a ms
cuentas que las que su
propio rol

Evitar Control de acceso a nivel de funcin inexistente

Por funcin, un sitio necesita hacer 3 cosas:


Restringir acceso a usuarios autenticados (si no es pblico)
Aplicar permisos basados en usuarios o roles (si es privado)
No permitir requerimientos a tipos de pginas no autorizados (ej. archivos de
configuracin, logs, archivos fuente)

Verificar su arquitectura
Usar un modelo simple en cada capa
Asegrese que realmente tienen un mecanismo de control de acceso en cada capa

Verifique la implementacin
Verifique que cada URL (adems de los parmetros) referencian a una funcin que es
protegida por:
Un filtro externo, como JavaEEweb.xml
Verificaciones internas en el cdigo (ej. usar mtodo de ESAPI
isAuthorizedForURL())
Verificar que la configuracin de servidor desactiva requerimientos a tipos de archivos
no autorizados.
Usar OWASP ZAP para detectar acceso a pginas o archivos no autorizadas

A8 Solicitud de falsificacin a travs de sitios (CSRF)


Cross Site Request Forgery
Un ataque donde se engaa al browser de la vctima hacia una aplicacin web
vulnerable.
La Vulnerabilidad es causada porque los browser almacenan y escriben
automticamente datos de autenticacin de l usuario (Session ID, IP,
Credenciales de login) con cada request.
Impacto tpico
Iniciar transacciones (transferir dinero, cerrar cuenta, cerrar sesin)
Acceso a datos sensibles
Cambiar informacin de cuentas

CSRF Patrn de vulnerabilidad


El problema
Los navegadores automticamente incluyen credenciales en cada
requerimiento.
Incluso para requerimientos causados por un formulario, script o imagen
en otro sitio web.

Todos los sitios que descansan solamente en credenciales


automticas son vulnerables.
Entrega automtica de credenciales

Cookie de sesin
Header de autenticacin bsica
Direccin IP
Certificados SSL del lado del cliente
Autenticacin de dominio de Windows

Ilustracin CSRF
El Atacante pone la trampa en un sitio web o la enva por email
1

Communication
Knowledge Mgmt
E-Commerce
Bus. Functions

Mientras inicia sesin en el sitio vulnerables,


la vctima ve el sitio del atacante.

Administration
Transactions

Aplicacin con
vulnerabilidad CSRF

Accounts
Finance

Etiqueta <img> oculta


que contiene un ataque
contra el sitio
vulnerable

Custom Code

3
La etiqueta <img> cargada
por el browser enva un
request GET (incluyendo
credenciales) al sitio
vulnerable.

El sitio vulnerable ve un
request desde la vctima
y efecta la accin
solicitada.

Evitar fallas CSRF

Agregue un token secreto a todos los requests sensibles (no debe ser
automticamente enviado)
Hace imposible que el atacante modifique el requerimiento
Los tokens debieran ser robustos criptogrficamente

Opciones

Almacenar un token en la sesin y agregarlo a todos los formularios y links

Campo oculto: <input name="token" value="687965fdfaew87agrde"


type="hidden"/>
URL: /accounts/687965fdfaew87agrde
Token en el formulario: /accounts?auth=687965fdfaew87agrde

Se puede usar un token por cada funcin


Usar un hash del nombre de la funcin, session id y la password
Puede requerir autenticacin secundaria para funciones sensibles

No permitir que los atacantes almacenen cdigo malicioso en su sitio web


Codificar todas las entradas antes de enviar los datos
Esto hace que todos los links y solicitudes sean inertes ante el intrprete

Para mayores detalles revisar:


www.owasp.org/index.php/CSRF_Prevention_Cheat_Sheet

Todos usan bibliotecas vulnerables


29 MILLION
vulnerable
downloads in
2011

Libraries
Library
Versions
Organizations
Downloads

31
1,261
61,807
113,939,358

https://www.aspectsecurity.com/news/press/the-unfortunate-reality-of-insecure-libraries

A9 Usar componentes vulnerables


Los componentes vulnerables son comunes
Algunos componentes vulnerables pueden ser identificados y explotados con
herramientas automatizadas

Expansin
Virtualmente cada aplicacin tiene estos problemas
En muchos casos, los desarrolladores ni siquiera conocen todos los componentes que
usan

Impacto tpico
Completo rango de debilidades
Impacta completamente el sistema

Qu se puede hacer para evitarlo?


Ideal
Verificaciones automticas peridicamente
Que le informe las vulnerabilidades conocidas

Mnimo
Chequeo peridico manual y upgrade consecuente
Si alguna est desactualizada, pero no quiere actualizar, verificar si existen problemas
de seguridad para esa biblioteca

Tambin podra ser


Verificar bases de datos de vulnerabilidades como CVE.
Actualizar si corresponde

A10 Redirecciones y reenvos no validados


Las redirecciones de aplicaciones web son muy
comunes
Y frecuentemente usan parmetros entregados por el usuario en la
URL destino. Si no son validados, el atacante puede enviar a la vctima
a un sitio de su preferencia.
Los reenvos tambin son comunes (Transferencia en .NET)

Internamente envan los request a una nueva pgina en la misma


aplicacin
A veces los parmetros los define la pgina destino
Si no son validados, un atacante puede usarlo para saltar verificaciones
de autenticacin.
Impacto tpico
Redirigir a la vctima a un sitio phishing o malicioso
El requerimiento del atacante es reenviado para pasar por alto
verificaciones de seguridad, permitiendo funciones no autorizadas o
acceso a datos restringidos

Ilustracin de redireccin no validada


Se enva el ataque va email o por pgina web

Bus. Functions

E-Commerce

Knowledge Mgmt

Communication

Transactions

La vctima selecciona el link que contiene


parmetros no validados

La aplicacin
redirecciona a la vctima
al sitio del atacante

Accounts

Administration

From: Internal Revenue Service


Subject: Your Unclaimed Tax Refund
Our records show you have an
unclaimed federal tax refund. Please
click here to initiate your claim.

Finance

Custom Code

El request se enva a un sitio


vulnerable, incluyendo el sitio
destino del atacante como
parmetro. La redireccin
enva a la vctima al sitio del
atacante.

http://www.irs.gov/taxrefund/claim.jsp?year=2006
& &dest=www.evilsite.com

Evil Site

El sitio malicioso instala malware


en la vctima o extrae informacin
privada por phishing

Ilustracin de reenvo no validado


1

El atacante enva un ataque a la pgina vulnerable a la cual tiene acceso


El request se enva a una
pgina vulnerable a la cual
el usuario tiene acceso. La
redireccin enva al
usuario directamente a la
pgina privada,
saltndose el control de
acceso

La aplicacin autoriza el
request la cual contina a
la pgina vulnerable

public void sensitiveMethod(


HttpServletRequest request,
HttpServletResponse response) {
try {
// Do
sensitive stuff here.
...
}
catch ( ...

Filtro

public void doPost( HttpServletRequest request,


HttpServletResponse response) {
try {
String target = request.getParameter(
"dest" ) );
...
request.getRequestDispatcher( target
).forward(request, response);
}
catch ( ...

La pgina reenviada falla en validar el


parmetro, enviando el atacante a una
pgina no autorizada, saltndose el
control de acceso.

Evitar Redirecciones y reenvos no validados

1.
2.
3.

Evitar usar redirecciones y reenvos


Si se usan, no involucrar parmetros de usuario en la definicin de la URL destino
Si debe inclur parmetros de usuario:
a)
b)

Valide cada parmetro para asegurarse que es vlido y autorizado


Use asignacin del lado del servidor para traducir la opcin provista al usuario con la pgina actual.

Defensa en profundidad: Para redirecciones, valide la URL destino despus que sea
determinada y asegrese que dirige a un sitio externo autorizado
ESAPI lo puede hacer por usted

Ver: SecurityWrapperResponse.sendRedirect( URL )

http://owasp-esapi-java.googlecode.com/svn/trunk_doc/org/owasp/esapi/filters/
SecurityWrapperResponse.html#sendRedirect(java.lang.String)

Algunas ideas acerca de proteger reenvos


Idealmente, debiera llamar el controlador de acceso para asegurarse que el usuario est
autorizado antes de que usted efecte el reenvo.
Con un filtro externo, como Siteminder, no es muy prctico.
Lo mejor es asegurarse que los usuarios que pueden acceder la pgina original estn
autorizados a acceder a la pgina destino.

Resumen. Cmo lidiar con estos problemas?

Desarrollar cdigo seguro

Seguir las mejores prcticas en la gua para construir aplicaciones Web seguras de
OWASP
https://www.owasp.org/index.php/Guide
Y las hojas de apuntes: https://www.owasp.org/index.php/Cheat_Sheets

Use el estndar de verificacin de seguridad de aplicaciones de OWASP para

asegurar una aplicacin


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

Use componentes estndar de seguridad que calzan con su organizacin


Use ESAPI OWASP como base para sus componentes estndar
https://www.owasp.org/index.php/ESAPI

Revise sus aplicaciones


Tenga un team de expertos para revisar sus aplicaciones
Revise usted mismo sus aplicaciones siguiendo las guas de OWASP
Gua de revisin de cdigo de OWASP:
https://www.owasp.org/index.php/Code_Review_Guide
Gua de pruebas de OWASP:
https://www.owasp.org/index.php/Testing_Guide

Gracias
OWASP Top-10 2013

Vous aimerez peut-être aussi