09. autentificacion[1]

58
Autentificación y Seguridad en Aplicaciones Aplicaciones Web

Upload: jose-manuel-vega-monroy

Post on 28-Jun-2015

122 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 09. Autentificacion[1]

Autentificación y Seguridad enAplicacionesAplicacionesWeb

Page 2: 09. Autentificacion[1]

Autenticación en Web

� El tráfico en Internet puede ser espiado y alterado con mucha facilidad

� ¿Cómo intercambiar datos � ¿Cómo intercambiar datos confidenciales?

Page 3: 09. Autentificacion[1]

Packet Sniffing

Login y pass van en caberas

Cabeceras HTTP en texto plano

van en caberas HTTP. Contenidos en HTML (texto)

Page 4: 09. Autentificacion[1]

Seguridad, alternativas

Codificar el mensaje …

… o emplear un canal seguro

Page 5: 09. Autentificacion[1]

Tipos de autenticación

Page 6: 09. Autentificacion[1]

Autentificación HTTP Básica

� Desde el protocolo HTTP 1.0

� Muy simple

� Poco seguro

autentificación HTTP > básica

� Cuando el navegador solicita un recurso (jsp, por ejemplo), el servidor solicita usuario y contraseña, que viajan codificadas en base 64 bits.

� Se puede reforzar combinándola con protocolo HTTPs, de forma que las peticiones HTTP viajen encriptadas.

Page 7: 09. Autentificacion[1]

Autentificación HTTP Básica

Navegador Servidor

autentificación HTTP > básica

Page 8: 09. Autentificacion[1]

Autentificación HTTP Básica

� Login: Aladdin, pass: open sesame

� “Aladdin:open sesame”� QWxhZGRpbjpvcGVuIHNlc2FtZQ==

autentificación HTTP > básica

Base64Aladdin

Page 9: 09. Autentificacion[1]

Codificación Base64

autentificación HTTP > básica

� Los caracteres ASCII se secuencian y se tomas de 6 en 6 bits.

� Cada grupo de 6 bits es índice de la tabla de caracteres Base64

Page 10: 09. Autentificacion[1]

Autentificación HTTP digest (hash)

� Incorporada en la versión 1.1 de la especificación del protocolo HTTP.

� Algo más complicada internamente que la autentificación básica.

autentificación HTTP > digest

autentificación básica.

� La codificación va en base al timestampgenerado por el servidor en el momento de la petición -> Más difícil de decodificar -> Más seguro.

� No está totalmente difundida ni aceptada por todos los navegadores y servidores.

Page 11: 09. Autentificacion[1]

Autentificación HTTP digest

Navegador Servidor

Challenge: “nonce” en Base64

nonce(client-IP ":" time-stamp ":" private-key )

autentificación HTTP > digest

MD5: Algoritmo de hash, genera una cadena de 32 char a partir de cualquier longitud de mensaje

Page 12: 09. Autentificacion[1]

Hashing

� Message Digest (MD4, MD5, …)

� Un algoritmo produce como resultado una secuencia de bits de tamaño fijo al aplicarlo sobre unos datos

autentificación HTTP > digest

nov-08 Alberto M.F.A. 12

al aplicarlo sobre unos datos� digest = hash(datos, longitud)

� digest tiende a ser aleatorio y uniformemente distribuido

� Solo funciona en un sentido� No existe datos = hash-1(digest)

Page 13: 09. Autentificacion[1]

Hashing

� Si digest es suficientemente largo (>= 128 bits) se puede usar como identificador único de un documento

� Prácticamente ningún otro

autentificación HTTP > digest

nov-08 Alberto M.F.A. 13

� Prácticamente ningún otro documento con la misma función hash() producirá el mismo digest� Cualquier cambio en los datos, por mínimo que sea, producirá otro digestimpredeciblemente diferente

Page 14: 09. Autentificacion[1]

Autentificación HTTPs

� Es el más seguro de los disponibles hoy en día.

� Se basa en mecanismos de Clave

autentificación HTTP > HTTPS (SSL)

� Se basa en mecanismos de Clave Pública (PKI): SSL (aka TLS)

� Requiere certificado(s) generado(s) por una autoridad certificadora (CEA)

� Hay un proceso “complicado” de handshake que garantiza la conexión segura.

Page 15: 09. Autentificacion[1]

Seguridad para WEB (HTTPS)

� HTTPS = HTTP Secure

� HTTP sobre un protocolo de transporte seguro

HTTP � SSL � TCP

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 15

� HTTP � SSL � TCP

� SSL también es conocido como TLS según IETF

Page 16: 09. Autentificacion[1]

SSL (o TLS)

� El servidor tiene un certificado� opcionalmente el cliente tiene el suyo

� Permite intercambio seguro de datos (p.e. claves de sesión)

autentificación HTTP > HTTPS (SSL)

datos (p.e. claves de sesión)

� Usa algoritmos de clave simétrica y asimétrica

� Ofrece:� Autentificación � Confidencialidad� Integridad� No repudio

Del servidor siempre, del cliente si tiene certificado

Page 17: 09. Autentificacion[1]

Cifrado con clave simétrica

� Ambas partes (A y B) conocen la clave

� Existe una pareja de funciones, de forma que: ( )kmfm ,* =

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 17

forma que:

� Con:� m, mensaje original

� m*, mensaje cifrado

� k, clave

( )( )kmfm

kmfm

*,

,*1−=

=

Page 18: 09. Autentificacion[1]

Esquema

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 18

Page 19: 09. Autentificacion[1]

Claves asimétricas

� También conocidos como Sistemas de clave pública (PKI)

� Cada parte tiene una pareja de claves

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 19

claves

� Se cumple que

� Con:� k1 y k2, claves pública y privada

( )( )2

1

1

*,

,*

kmfm

kmfm−=

=

Page 20: 09. Autentificacion[1]

Claves asimétricas

� Lo que se cifra con una se puede descifrar con la otra y viceversa

� La clave pública se da a todos los interlocutores

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 20

interlocutores

� La clave privada se guarda bajo 7 llaves

� Cada interlocutor tiene:� Su clave privada

� Las claves públicas de los demás

� Solo N + 1 claves � escala mucho mejor

Page 21: 09. Autentificacion[1]

¿Qué se consigue con clave asimétrica?

� Confidencialidad� Solo lo ve aquel a quien va dirigido

� Firma digital� Si se combina con hash

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 21

� Si se combina con hash

� El que lo recibe puede estar seguro de que lo envió el poseedor de la clave privada

� No repudio

� Autentificación

Page 22: 09. Autentificacion[1]

Confidencialidad

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 22

Page 23: 09. Autentificacion[1]

Firma digital

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 23

Page 24: 09. Autentificacion[1]

Autentificación

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 24

Page 25: 09. Autentificacion[1]

Intercambio de claves simétricas

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 25

Page 26: 09. Autentificacion[1]

Autoridades certificadoras

�� ¿Cómo sé que la clave pública que ¿Cómo sé que la clave pública que tengo es de quien realmente dice tengo es de quien realmente dice ser?ser?� Puede ser alguien suplantando al original

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 26

� Puede ser alguien suplantando al original

� Las autoridades certificadoras (CAs) actúan como notarios de la red.� Dan fe de que el poseedor de la clave privada es quien dice ser

� Tienen sus protocolos de autentificación

� No generan las claves solo las firman

Page 27: 09. Autentificacion[1]

Certificados

� Las claves públicas validadas por CA

� Contienen� La clave pública

� Datos de identificación del propietario

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 27

� Datos de identificación del propietario

� Fecha de expiración

� Firma digital de la CA� Verificable con la clave pública de la CA

� ¡Se debe conocer la clave pública de la CA!

Page 28: 09. Autentificacion[1]

Jerarquías de CA

� Las CA raíz autorizan a otras CA

� Esas CA pueden autorizar a otras, etc

Al recibir un certificado se debe

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 28

� Al recibir un certificado se debe recorrer toda la cadena de certificaciones hasta llevar a una raíz en la que se confíe

� Claves públicas raíz no hay muchas� Verising, Tawte, Microsoft, Verizon, etc.

Page 29: 09. Autentificacion[1]

Claves públicas de CA’s

� Vienen en:� Los sistemas operativos

� Los navegadores, etc

� Necesidad de actualizarse, cada

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 29

� Necesidad de actualizarse, cada nueva versión actualiza las claves públicas

� Si se recibe certificado de CA desconocida hay que “Depositar confianza” expresamente

Page 30: 09. Autentificacion[1]

Alerta de seguridad

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 30

Page 31: 09. Autentificacion[1]

SSL y claves públicas

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 31

1. CA root dan sus claves públicas a los fabricantes de navegadores

Page 32: 09. Autentificacion[1]

SSL y claves públicas

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 32

2. Los fabricantes de navegadores ponen las CA’s en sus navegadores

Page 33: 09. Autentificacion[1]

SSL y claves públicas

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 33

3. Los sitios WEB obtienen certificados firmados con la clave privada de una CA

Page 34: 09. Autentificacion[1]

SSL y claves públicas

4. Los sitios WEB

autentificación HTTP > HTTPS (SSL)

nov-08 Alberto M.F.A. 34

4. Los sitios WEB mandan su certificado con SSL. El navegador los verifica contra sus claves de CA’s

Page 35: 09. Autentificacion[1]

autentificación por programa

Autentificación por Programa

� Todo lo tenemos que programar

� La aplicación coteja la contraseña contra su propio sistema de control de usuarios

Hay que basarla en protocolos seguros de � Hay que basarla en protocolos seguros de comunicación como HTTPs (SSL) para evitar que nadie “escuche” la contraseña interpretando los paquetes HTTP.

� Más tedioso de programar

� Ventajas: No dependemos de la autentificación del entorno � Más portable.

Page 36: 09. Autentificacion[1]

Eje

mpl

o po

r pr

ogra

ma

Page 37: 09. Autentificacion[1]

Especificación

� En web.xmlweb.xml

� Una colección de recursos (URLs) solo podrán ser accedidos por usuarios que actúen bajo

autentificación por contenedor

usuarios que actúen bajo determinado rol usando determinados métodos HTTP

� La autenticación para cada ámbito de seguridad (realm) se hará usando alguna de las técnicasestablecidas por la especificación de servlets

Page 38: 09. Autentificacion[1]

Web.xml

� Colección de recursos, roles y métodos

autentificación por contenedor

Si no hay método todos están protegidos

Page 39: 09. Autentificacion[1]

Web.xml

� Roles

autentificación por contenedor

� Técnicas

Page 40: 09. Autentificacion[1]

Usuario y roles

� BDD de usuarios y roles� El contenedor consulta los datos de una fuente directamente

� Tipos de fuentes y configuración dependen de la implementación del

autentificación por contenedor

� Tipos de fuentes y configuración dependen de la implementación del contenedor� Base de datos (tablas: usuarios, roles)

� Ficheros XML

� Ficheros de propiedades

� . . .

� Consultar documentación del contenedor

Page 41: 09. Autentificacion[1]

Tipos de autenticación soportados

� BASIC

� DIGEST

� FORM

autentificación por contenedor

� CLIENT-CERT

Page 42: 09. Autentificacion[1]

Autentificación por Formulario

� No es segura por sí sola, es necesario combinarla con HTTPs (SSL – Secure Socket Layer)

� Permite controlar la apariencia de la pantalla

autentificación por contenedor > formulario

� Permite controlar la apariencia de la pantalla de login

� La pantalla de login es HTML estándar, sigue un convenio de nombres� Action: j_security_check

� Login: j_username

� Pass: j_password

Page 43: 09. Autentificacion[1]

Filtros Servlet HTTP

� Incorporados en la versión 2.3 de la especificación de servlets.

� Interceptan la invocación del servlet ANTES de que sea invocado el propio servlet.

autentificación por servlet > filtros

de que sea invocado el propio servlet.

� Permiten examinar y modificar la request antes de que le llegue al servlet.

� Permite modificar el response y redirigir, en caso necesario, la petición a otro recurso distinto.

� Ideales para el control de acceso de usuarios autentificados

Page 44: 09. Autentificacion[1]

Filtros, ventaja

� Permiten hacer autenticación por programa de forma transversal a la aplicación � el código de la aplicación no se modifica

autentificación por servlet > filtros

aplicación no se modifica

� Lo habitual es redireccionar a formulario � necesario HTTPs� Sigue siendo autenticación por formulario

� A parte de autenticación permiten añadir de forma genérica “aspectos” a la aplicación

Page 45: 09. Autentificacion[1]

Filtros Servlet HTTP

� Interfaz javax.servlet.Filter

� Tres métodos:� void init(FilterConfig config) throws

ServletException Invocado antes de que el filtro

autentificación por servlet > filtros

ServletException Invocado antes de que el filtro entre en servicio. Permite configurar el filtro.

� void destroy() Invocado cuando el filtro dejar de estar en servicio.

� void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throwsIOException, ServletException: Método que implementará el filtrado.

Page 46: 09. Autentificacion[1]

Interfaz filter y ciclo de vida

autentificación por servlet > filtros

Page 47: 09. Autentificacion[1]

Procesamiento típico en un filtro

― Examinar las cabeceras de request

― [Si procede]Preprocesar la petición

― Invocar al resto de la cadena de filtros

― [Si procede]Postprocesar la petición

autentificación por servlet > filtros

� A la ida puede:� Responder él a la request y terminar proceso

� Abortar la ejecución � UnavailableException

� Redirigir a otra URL

� Añadir info a session, request o contexto

� A la vuelta puede:� Examinar la respuesta, modificarla

� Examinar las cabeceras añadidas

Page 48: 09. Autentificacion[1]
Page 49: 09. Autentificacion[1]

Ejemplo, redirección a loginautentificación por servlet > filtros

Page 50: 09. Autentificacion[1]

Ejemplo, redirección, web.xml

<url-pattern> o

autentificación por servlet > filtros

<url-pattern> o<servlet-name>

Los filtros siempre se declaran antes que los servlets a los que se aplican.

El orden en el que se forma la cadena de filtros es el orden de la declaración de <filter-mapping> para cada recurso afectado

Page 51: 09. Autentificacion[1]

Struts interceptor

� Mismos conceptos que Servlet Filterspero incrustado en el Stack de interceptores de Struts2

� Ciclo de vida similar

autentificación por servlet > struts interceptor

� Ciclo de vida similar

� Recibe todo en ActionInvocation� Action, Stack, etc.

� InvocationContext: Session, request, etc.

Page 52: 09. Autentificacion[1]

Interceptores, esquema

autentificación por servlet > struts interceptor

Page 53: 09. Autentificacion[1]

API en ActionInvocation

autentificación por servlet > struts interceptor

Page 54: 09. Autentificacion[1]

Pasos para la creación de interceptores Struts

autentificación por servlet > struts interceptor

� Crear la clase interceptora� Hereda de AbstractInterceptor

� Implementa StrutStatics

� Para heredar constantes declaradas en el � Para heredar constantes declaradas en el interfaz

� Declarar el interceptor

� Añadirlo al Stack de interceptores

� Añadir global-result

En struts.xml

Page 55: 09. Autentificacion[1]

LoginInterceptor, ejemplo

autentificación por servlet > struts interceptor

Page 56: 09. Autentificacion[1]

struts.xml: declarar el interceptor y global-results

Page 57: 09. Autentificacion[1]

struts.xml: declarar la pila de interceptores

Page 58: 09. Autentificacion[1]

Resumen