Top 5 OWASP + WAF 66.69 Criptografía y Seguridad Informática 1er. Cuatrimestre 2011
Top 5 OWASP + WAF66.69 Criptografía y Seguridad Informática
1er. Cuatrimestre 2011
OWASP
Organización focalizada en mejorar la seguridad de las aplicaciones de software.
Consenso general sobre cuáles son las vulnerabilidades más críticas de las aplicaciones web.
Incluye una lista de las diez vulnerabilidades más críticas.
OWASP Top Ten (2010 Edition)
A1: InjectionA2: Cross-Site
Scripting (XSS)
A3: Broken Authentication and Session Management
A4: Insecure Direct Object References
A5: Cross Site Request Forgery (CSRF)
A6: Security Misconfigurat
ion
A7: Failure to Restrict URL
Access
A8: Insecure Cryptographi
c Storage
A9: Insufficient Transport
Layer Protection
A10: Unvalidated
Redirects and Forwards
Mutillidae
Herramienta didáctica para ilustrar el Top 10 Hecha en PHP/MySQL Simple de explotar Fácil de restaurar Incluye tips de ayuda para explotar y
entender las distintas vulnerabilidades
A1 - SQL Injection
SQL Injection
• Se inserta o "inyecta" código SQL invasor dentro del código SQL programado, a fin de alterar el funcionamiento normal del programa y lograr así que se ejecute la porción de código "invasor" en la base de datos.
Ocurre cuando…
• Reciben strings y los interpretan como comandos• SQL, OS Shell, LDAP, XPath, Hibernate, etc…
Intérpretes…
• Muchas aplicaciones continúan siendo vulnerables• A pesar que es muy simple de evitar
SQL injection sigue siendo muy común
• Usualmente severo. La base de datos puede ser leída por completo, o modificada.
Impacto típico
SQL InjectionFi
rew
all
Hardened OS
Web Server
App ServerFi
rew
all
Data
base
s
Leg
acy
Syst
em
s
Web
Serv
ices
Dir
ect
ori
es
Hu
man
Resr
cs
Bill
ing
Custom Code
APPLICATIONATTACK
Netw
ork
Layer
Ap
plic
ati
on
Layer
Acc
ou
nts
Fin
an
ce
Ad
min
istr
ati
on
Tran
sact
ion
s
Com
mu
nic
ati
on
Kn
ow
led
ge M
gm
tE-C
om
merc
e
Bu
s. F
un
ctio
ns
HTTP request
SQL
query
DB Table
HTTP response
"SELECT * FROM accounts WHERE acct=‘’ OR 1=1--’"
1. La aplicación muestra un formulario
2. El atacante ingresa una consulta SQL maliciosa en algún campo del formulario3. La aplicación reenvía dicha consulta al motor de base de datos
Account Summary
Acct:5424-6066-2134-4334Acct:4128-7574-3921-0192Acct:5424-9383-2039-4029Acct:4128-0004-1234-0293
4. El motor de la BD ejecuta la consulta con código malicioso y envía los resultados a la aplicación5. La aplicación muestra los resultados al usuario
Account:
SKU:
Account:
SKU:
Demo
Métodos de Prevención
Escapar las variables antes de ser enviadas al intérprete
Parametrizar las sentencias sql Realizar una “white list” de validación para los
datos ingresados por el usuario Acotar los privilegios de la base de datos para
reducir el impacto
A2 – Cross-Site Scripting (XSS)
XSS
• Una aplicación toma datos ingresados por el usuario y los envía al navegador sin previo encoding ni validación. Permite ejecutar scripts en el navegador de la víctima permitiendo el robo de cookies de sesión, ejecución de virus, etc.
Ocurre cuando…
• Guardados en la base de datos• Reflejados desde los inputs de la aplicación (form field, hidden
field, URL, etc.)• Envíados directamente embebiendo código javascript
Tipos de ataques
• Robo de cookies de sesión, robo de datos sensibles, sobreescritura de páginas web, Phishing
• Crítico: Instalación de un proxy XSS el cual permite al atacante observar el comportamiento de un usuario en un sitio vulnerable y forzarlo a ingresar a otros sitios.
Impacto típico
XSS
Aplicación vulnerable a XSS (guardado)
2
El atacante prepara la trampa – “Mi Perfil”
El atacante ingresa un script malicioso dentro de una página web que almacena los datos en el servidor
La víctima ingresa al perfil del atacante - “Mi Perfil”
El script envía (silenciosamente) la cookie de sesión de la víctima al atacante
El script corre en el browser de la víctima con acceso completo al DOM y a las cookies
Custom Code
Acc
ou
nts
Fin
an
ce
Ad
min
istr
ati
on
Tran
sact
ion
sC
om
mu
nic
ati
on K
now
led
ge
Mg
mt
E-C
om
merc
e
Bu
s. F
un
ctio
ns
1
3
Demo
Métodos de Prevención
No mostrar directamente los datos ingresados por el usuario Encode a la salida de los datos ingresados por el usuario Frameworks: filtrado y validación automática Enterprise Security API
Creado por OWASP Provee un conjunto de interfases para encode y validación de datos Disponible en varios lenguajes.
AntySamy API para sanitizar HTML Creado por OWASP Modelo de protección “white list” Fácil de usar Toma un html/css crudo y lo retorna seguro
A3 – Broken Authentication and
Session Management
Broken Authentication and Session
Management
• El SESSION ID es usado para trackear el estado en HTTP• El SESSION ID está expuesto en las redes, navegadores, etc.• Métodos no estandarizados de autenticación
Ocurre cuando…
• Las credenciales viajan en cada request• Se debe usar SSL cuando se requiera autenticación
HTTP es “stateless”
• Los cambios de password, recordarme, olvidé mi password, pregunta secreta, logout, email, etc…
Proteger…
• Severo: Se comprometen cuentas y sesiones de usuario
Impacto típico
Broken Authentication
Custom Code
Accou
nts
Fin
an
ce
Ad
min
istr
ati
on
Tran
sacti
on
sC
om
mu
nic
ati
on
Kn
ow
led
ge
Mg
mt
E-C
om
merc
eB
us.
Fu
ncti
on
s
1El usuario envía credenciales y reserva un viaje en una agencia
2
3 El usuario reenvía el link a sus amigos
http://tourism.com/sale/saleitems;jsessionid=2P0OC2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii
4
Cuando sus amigos ingresen al link usarán su sesión y su tarjeta de crédito
El sitio reescribe la url concatenando el session id
Demo
Autenticación simple, centralizada y estandarizada
SSL para proteger credenciales y session id en todo momento
Verificar que el logout destruya la sesión Usuarios y passwords encriptados en la base de
datos Configuración adecuada del timeout de sesión Evitar vulnerabilidades XSS
Métodos de Prevención
A4 – Insecure Direct Object References
Insecure Direct Object References
• Un desarrollador expone referencias a la implentación interna de un archivo, directorio, registro de base de datos, claves, url’s, etc. Los atacantes pueden manipular esas referencias y acceder a contenido no autorizado.
Ocurre cuando…
• Accesos a objetos• Referencias (deben ser indirectas)
Proteger…
• Severo: Acceso a información no autorizada
Impacto típico
Insecure Direct Object References
El atacante decubre que su número de cuenta es 6065
Lo modfica por otro valor ?account=6066
El atacante logra acceder a otra cuenta
https://www.onlinebank.com/user?account=6065
Demo
Métodos de Prevención
Eliminar referencias directas Reemplazarlos por mapeos temporales Interfaz ESAPI para mapero indirecto
Validar referencias directas Verificar que el usuario tiene acceso al recurso
A5 – Cross Site Request Forgery (CSRF)
CSRF
• EL navegador de la victima logueada envía un request pre-autenticado a una aplicación vulnerable, la cual fuerza al navegador a realizar acciones en beneficio del atacante
Ocurre cuando…
• Idem XSS
Proteger
• Severo: Acceso a información sensible• Severo: Cambio de datos de cuenta
Impacto típico
CSRF
3
2
El atacante prepara una trampa para un sitio web vulnerable1
El usuario logueado ingresa al sitio del atacante
El sitio vulnerable al ver el request legítimo de la víctima, ejecuta la acción.
El tag <img> cargado por el browser envía por GET las credenciales al sitio vulnerable
Custom Code
Acco
unts
Fina
nce
Adm
inis
trati
onTr
ansa
ction
s
Com
mun
icati
onKn
owle
dge
Mgm
tE-
Com
mer
ceBu
s. F
uncti
ons
Un tag oculto <img> contiene un ataque embebido
La aplicación tiene la vulnerabilidad CSRF
Demo
Métodos de Prevención
Agregar un nonce por request (Number used once) a la URL
y a todos los formularios
Los tokens deben ser criptográficamente fuertes.
No utilizar request del tipo GET (URL) para datos o
transacciones importantes. Utilizar POST, aunque esto solo
no es suficiente.
Verificar que el request HTTP provenga del sitio original
ESAPI
OWASP Top 5
A1. SQL Injection
A2. Cross Site Scripting (XSS)
A3. Broken Authentication and Sessions
A4. Insecure Direct Object Reference
A5. Cross Site Request Forgery (CSRF)
OWASP ESAPI
Encoder
Validator, Encoder
Authenticator, User, HTTPUtils
AccessReferenceMap, AccessController
User (CSRF Token)
Interfaces para Top 5ESAPI
Input Validation
Output Validation
Esquema de encoding con ESAPI
HTML Style Property Values
(e.g., .pdiv a:hover {color: red; text-decoration: underline} )
JavaScript Data(e.g., <script> some javascript
</script> )
HTML Attribute Values(e.g., <input name='person'
type='TEXT' value='defaultValue'> )
HTML Element Content(e.g., <div> some text to display
</div> )
URI Attribute Values(e.g., <a
href="javascript:toggle('lesson')" )
#4: All non-alphanumeric < 256 \HH
ESAPI: encodeForCSS()
#3: All non-alphanumeric < 256 \xHH
ESAPI: encodeForJavaScript()
#1: ( &, <, >, " ) &entity; ( ', / ) &#xHH;
ESAPI: encodeForHTML()
#2: All non-alphanumeric < 256 &#xHHESAPI:
encodeForHTMLAttribute()
#5: All non-alphanumeric < 256 %HH
ESAPI: encodeForURL()
Demo
WAF
Filtro que aplica un conjunto de reglas a una comunicación HTTP
Controla entradas, salidas y accesos Buena (y única) solución para enlatados Falsos positivos Soporta seguridad con listas negras y listas
blancas. Alta performance.
Características principales
#Preventing Cookie Stealing, CSRF Post and Phishing attackSecRule ARGS “<script”#Preventing CSRF Post IframeSecRule ARGS “<iframe”#Preventing Flash attackSecRule ARGS “<embed”#Preventing CSRF Get attackSecRule ARGS "<img“#Preventing SQL Injection and Broken Authentication and Session
ManagementSecRule ARGS "'.+=.+--“SecRule ARGS "select.+from“#Preventing Insecure Direct Object ReferenceSecRule ARGS "\.\./“SecRule ARGS ";[[:space:]]*(ls|id|pwd|wget|dir)”
Configuración
Demo
Conclusiones Desarrollar código seguro
Seguir las best practices de la guía de OWASP’s de como construir una aplicación web segura http://www.owasp.org/index.php/Guide
Usar OWASP’s Application Security Verification Standard como guía para saber las necesidades de seguridad http://www.owasp.org/index.php/ASVS
Usar componentes estandar (ESAPI) http://www.owasp.org/index.php/ESAPI
Revisar las aplicaciones Tener un experto en el equipo que revise las aplicaciones Seguir las guías propuestas por OWASP
OWASP Code Review Guide:
http://www.owasp.org/index.php/Code_Review_Guide OWASP Testing Guide:
http://www.owasp.org/index.php/Testing_Guide