Seguridad de las aplicaciones web con Spring Security 3.x

34
MADRID · NOV 21-22 · 2014 Seguridad de las aplicaciones web con Spring Security 3.x Fernando Redondo Ramírez @pronoide_fer

description

Desde una aplicación web simple, previamente desarrollada, basada en la serie televisiva expediente X (X-Files), el objetivo será establecer la autenticación y autorización de usuarios de recursos de la aplicación web, como securizar la invocación de los métodos de los componentes de negocio. Se establecerá una configuración de seguridad mínima inicial, que se completará con mecanismos más sofisticados, a continuación. Todo ello, haciendo hincapié en las novedades de la versión 3.x de Spring Security como el uso de SPEL, anotaciones, espacio de nombres, configuración Java, etc. Los asistentes podrán ver muchas de las características que implementa Spring Security para establecer mecanismos de seguridad en las aplicaciones JEE. Las herramientas a utilizar serán Spring Tool Suite 3.6, Springframework 3.2, Maven 3 y Spring TC Server 2.9.

Transcript of Seguridad de las aplicaciones web con Spring Security 3.x

Page 1: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Seguridad de las aplicaciones web con Spring Security 3.x

Fernando Redondo Ramírez

@pronoide_fer

Page 2: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Roadmap

• ¿Quien soy?

• Una pequeña

introducción a Spring

Security

• Manos a la obra

• Más allá…

Page 3: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Whoami• Emprendedor y gestor de pronoide desde 2003

• Formador Java & Friends (Java EE, Spring, Groovy, Maven,

Jenkins, Sonar, Weblogic, Jboss, Websphere, Discotecas y demás )

• Haciendo cosas con Java desde 1999

• Ingeniero Informático

• Felizmente casado y padre de dos hijos ;)

• Quise ser físico después de ser informático y me

encantaban la serie de expedientes X

Page 4: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Breve Introducción a Spring Security

• ¿No es la seguridad una característica estándar de Java EE? Si, por supuesto. Pero:

• La seguridad Java EE ⇒ Esta basada en restricciones

• La seguridad Java EE ⇒ Solo define un perímetro de seguridad

• La seguridad Java EE ⇒ sus características dependen en última instancia de cada Servidor de Aplicaciones Server (Reinos, SSO, Cifrado, etc)

• La seguridad Java EE ⇒ Las aplicaciones securizadas con Java EE no se pueden transportar fácilmente entre plataformas diferentes o versiones distintas de un servidor

• La seguridad Java EE ⇒ Difícil de adaptar a Web 2.0 o a requerimientos cambiantes

Page 5: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

• ¿Por qué utilizar Spring Security?

Porque:

• Spring Security ⇒ Basado en conceder permisos

• Spring Security ⇒ Seguridad tanto perimetral

como jerárquica

• Spring Security ⇒ Las características son

independientes del servidor de aplicaciones

• Spring Security ⇒ Aplicaciones Java EE seguras y

transportables

• Spring Security ⇒ Adaptabilidad and versatilidad

Breve Introducción a Spring Security

Page 6: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Breve Introducción a Spring Security

• ¡Arquitectura y se acabó!

Spring Security 3Clases y estructuras

SecurityContextHolderSecurityContextAuthentication

GrantedAuthority

Peticiones Web

Seguridad Web/HTTP

Cadena de filtros de seguridad

Autentificación

AuthenticationManager

AuthenticationProviders

UserDetailsService

Autorización

AccessDecisionManager

Voters

AfterInvocationManager

Métodos de Negocio

Seguridad en invocación de los métodos de los Objetos de Negocio

Proxies/Interceptores de Securidad

Page 7: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Tu próxima misión

¡Necesito seguridad en

la aplicación de los

Expedientes X!

Page 8: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

¡Manos a la obra! (Más tarde en casa)

Antes de empezar, hay que…

1. Instalar git en tu equipo http://git-scm.com/book/en/Getting-Started-Installing-Git

2. Descargar Spring Tool Suite 3.5/3.6 https://spring.io/tools/sts/all

3. Arrancar Spring Tool Suite (STS) y elegir o crear

un workspace (recordar ejecutarlo con un JDK)

4. Descargar http://pronoide.com/downloads/codemotion2014-spring-

security-xfiles.zip y descomprimirlo en la carpeta del

workspace.

5. ¡Ve a tu ritmo! Es bastante fácil…

Page 9: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

La webapp de los Expedientes X

Importar la webapp (File/Import/Git/Proyect from Git)

Page 10: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

La webapp de los Expedientes X¡Ejecutarla!

Page 11: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en una webapp

i. Configurar un filtro interceptor para todas las peticiones web

Page 12: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en una webapp

ii. Crear un nuevo fichero de configuración de Spring beans

con una configuración mínima inicial y cargar vía web.xml

context parameter

Page 13: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en una webapp

iii. Configurar explícitamente los mecanismos de login / logout

iv. Arreglar problemas con recursos, imagenes y ficheros CSS

Page 14: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

La webapp de los Expedientes X

Page 15: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en una webapp

v. Encriptar las claves de los usuarios vía Spring Security Crypto

Module

• Cifrar claves

• Configurar el algoritmo y el campo de salt. Luego usar dichas

claves en el fichero de configuración de seguridad

Page 16: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en una webapp

vi. Añadir la característica Remember Me al proceso de login

Page 17: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en una webapp

vii. Asegurar el canal de transporte (HTTPS)

• Establecer restricciones y puertos

• Configurar servidor tomcat (crear el connector SSL )

Page 18: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en una webapp

viii. Gestionar la expiración de sesiones

ix. Manejar la concurrencia de sessiones

Page 19: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en una webapp

x. Usar la librería de etiquetas de JSP (Spring Security Taglibs)

Page 20: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en una webapp

xi. Uso de SpEL para proteger URLs (Spring Expression

Language)

xii. Uso de SpEL con las etiquetas de Spring Security

Page 21: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

¡Pero que has hecho!

¿Sólo hay seguridad en el

acceso a los recursos

Web? ¿Eso es lo mejor

que lo puedes hacer?

Prueba esta URL y observa lo que ocurre:

https://localhost:8443/fbi/xfiles/declassify?id=0

Page 22: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en los métodos de negocio

xii. Asegurar las invocaciones a los métodos de negocio

mediantes las Anotaciones de Spring Security

Page 23: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en los métodos de negocio

xiii. Asegurar las invocaciones de métodos con AspectJ pointcuts

Page 24: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security en los métodos de negocio

xiv. Asegurar las invocaciones de métodos con SpEL (Preinvocación)

Page 25: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

¡Mucho mejor! Pero…

¿Qué haces viendo expedientes que

no son tuyos?

¿Por qué eres capaz de acceder al

expediente de tu hermana?

¿Y por qué accedes a ciertas horas

de la noche?

Page 26: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security de forma jerárquica

xiv. Asegurar las invocaciones de métodos con SpEL (Postinvocación)

xiv. Asegurar las invocaciones de métodos con SpEL (Filtrar resultados)

Page 27: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security de forma jerárquica

xvii. Personalización de los votantes de acceso

• Codificar un nuevo votante

Page 28: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Configurar Spring Security de forma jerárquica

xviii.Personalización de los votantes de acceso (continuación)

• Descartar la configuración automática de Spring Security y mostrar la real

• Personalizar el comportamiento del Access Decision Manager

Page 29: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Spring Security Bola Extra 1

xix. Personalización de la cadena de filtros de seguridad (Ejemplo A)

• Crear un filtro personalizado

• Colocarlo en la cadena de filtros

Page 30: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Etapa: Spring Security Bola Extra 2

xix. Personalización de la cadena de filtros de seguridad (Ejemplo B)

• Crear un filtro personalizado

• Colocarlo en la cadena de filtros

Page 31: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

El Fumador (The smoking man)

Todas estas características de

Spring Security están bastante

bien, pero siempre me quedará

usar el ataque Java2:

<%System.exit(0);%>

Page 32: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Más allá…

• Configuraciones explicitas y no implicitas

• Gestión de ACL’s

• Autentificación con DataSources, LDAP, X509, OPENID, Java EE, etc

• Captchas

• Single Sign On

• Java Config

“… in most of my work, the laws of physics rarely seems to apply.”

Fox Mulder 1x01 "Pilot"

Page 33: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

¡Gracias!@pronoide_fer

https://github.com/fredondo/

[email protected]

http://pronoide.es

Page 34: Seguridad de las aplicaciones web con Spring Security 3.x

MADRID · NOV 21-22 · 2014

Apendice: ¡Manos a la obra(en casa)! Navegar a través del código del proyecto con git_presenter

1. Instalar jruby o rubyhttp://jruby.org/getting-startedhttps://www.ruby-lang.org/en/installation/

2. Instalar git presenter (gem install git_presenter)

3. Cuando el codigo este preparado ejecutar el comando"git-presenter init"

4. Una vez inicializado se puede empezar la presentación con "git-presenter start"

5. Después usar los siguientes comandos para navegar por la presentación• next/n: move to the next slide (commit)

• back/b: move to the back slide (commit)

• end/e: move to the end of presentation

• start/s: move to the start of presentation

• list/l : list slides in presentation

• help/h: display this message