Transcript
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


Top Related