Tesis Json Wireshak
Tesis Json Wireshak
Tesis Json Wireshak
2016/2017
Tutores
Patricia Arias Cabarcos
Florina Almenares Mendoza
Leganés, 6 de julio de 2017
[Incluir en elcaso de interés en su publicación en el archivo abierto]
Esta obra se encuentra sujeta a la licencia Creative Commons Reconocimiento - No
Comercial - Sin Obra Derivada
2
plugin OpenID Connect
Agradecimientos:
Quiero aprovechar estas lı́neas para agradecer a todas las personas que me han
ayudado y me han apoyado a lo largo de estos años en la Universidad Carlos III
de Madrid.
En primer lugar querı́a agradecer el apoyo recibido por parte de toda mi familia,
pasando por mis padres, Aljelani y Muheeba, y a mis hermanos, Rania, Mohamed
y Lujain sin los cuales no habrı́a acabado la carrera.
1
plugin OpenID Connect
Índice
1. Introducción 1
1.1. Motivaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3. Estructura de la memoria . . . . . . . . . . . . . . . . . . . . . . . 2
4. Arquitectura de despliegue 75
4.1. Requisitos funcionales . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.1.1. Requisitos de Hardware . . . . . . . . . . . . . . . . . . . . 75
4.1.2. Requisitos de Software . . . . . . . . . . . . . . . . . . . . . 75
4.2. Cliente OpenAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.2.1. Flujo Código: . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.2.2. Flujo Implı́cito: . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.3. Servidor OpenAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.3.1. Seleccionar el Realm . . . . . . . . . . . . . . . . . . . . . . 78
4.3.2. Usuario a autenticar . . . . . . . . . . . . . . . . . . . . . . 79
2
plugin OpenID Connect
5. Pruebas 91
5.1. Escenario local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.1.1. Pruebas de infrestraestructura . . . . . . . . . . . . . . . . . 91
5.1.2. Pruebas de Petición de Autenticación . . . . . . . . . . . . . 92
5.1.3. Pruebas de Respuesta de Autenticación . . . . . . . . . . . . 92
5.1.4. Pruebas de Petición de Token . . . . . . . . . . . . . . . . . 93
5.1.5. Pruebas de Respuesta de Token . . . . . . . . . . . . . . . . 94
5.2. Escenario Distribuido . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.2.1. Pruebas de Petición de Autenticación . . . . . . . . . . . . . 95
5.2.2. Pruebas de Respuesta de Autenticación . . . . . . . . . . . . 96
5.2.3. Pruebas de Petición de Token . . . . . . . . . . . . . . . . . 97
5.2.4. Pruebas de Respuesta de Token . . . . . . . . . . . . . . . . 98
8. Bibliografı́a 108
9. Glosario 110
10.Anexo 112
10.1. Instalación del Servidor OpenAM . . . . . . . . . . . . . . . . . . . 112
3
plugin OpenID Connect
Índice de figuras
1. Conjunto de protocolos de OpenID Connect . . . . . . . . . . . . . 7
2. Autenticación utilizando OpenID Connect . . . . . . . . . . . . . . 8
3. Pseudo autenticación utilizando Oauth . . . . . . . . . . . . . . . . 8
4. Flujo general de OpenID Connect . . . . . . . . . . . . . . . . . . . 9
5. Flujo de Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6. Menú de despliegue para pedir consentimiento . . . . . . . . . . . . 19
7. Flujo del Flujo Implı́cito . . . . . . . . . . . . . . . . . . . . . . . . 27
8. Diagrama de flujo general de SAML . . . . . . . . . . . . . . . . . . 35
9. Ejemplo de aserto en SAML . . . . . . . . . . . . . . . . . . . . . . 37
10. Ejemplo de arquitectura REST . . . . . . . . . . . . . . . . . . . . 40
11. Ejemplo de petición REST . . . . . . . . . . . . . . . . . . . . . . . 42
12. Ejemplo de respuesta REST . . . . . . . . . . . . . . . . . . . . . . 43
13. Ejemplo de JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
14. Servidor OpenAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
15. Cliente facilitado por OpenAM . . . . . . . . . . . . . . . . . . . . 48
16. Dashboard de Wireshark . . . . . . . . . . . . . . . . . . . . . . . . 49
17. Respuesta de Token analizada en navegador Chrome . . . . . . . . 52
18. Respuesta de Token analizada en Whireshark . . . . . . . . . . . . 53
19. Menú de acceso a la Devtools Extension . . . . . . . . . . . . . . . 53
20. Trazas SAML y resultados mostrados por Devtools Extension . . . 54
21. Información de las columnas en Wireshark . . . . . . . . . . . . . . 59
22. Creación del protocolo OIDC . . . . . . . . . . . . . . . . . . . . . 61
23. Creación de la función de disección de OIDC . . . . . . . . . . . . . 62
24. Campos configurados del protocolo OIDC . . . . . . . . . . . . . . 62
25. Campos principales de OIDC en la interfaz de Wireshark . . . . . . 63
26. Campos de ID Token de OIDC en la interfaz de Wireshark . . . . . 64
27. Campos de claims de OIDC en la interfaz de Wireshark . . . . . . . 65
28. Obtención de los datos del paquete en OIDC . . . . . . . . . . . . . 65
29. Pestaña de datos de OIDC en Wireshark . . . . . . . . . . . . . . . 66
30. concatenación de los campos configurados en OIDC . . . . . . . . . 67
31. Concatenación de los campos configurados en OIDC . . . . . . . . . 68
32. Modificación de columnas en OIDC . . . . . . . . . . . . . . . . . . 70
33. Columnas de OIDC en Wireshark . . . . . . . . . . . . . . . . . . . 70
34. Función de registro de protocolo en OIDC . . . . . . . . . . . . . . 70
35. Estructuras de las variables en OIDC . . . . . . . . . . . . . . . . . 71
36. Función de catalogación de flujo en OIDC . . . . . . . . . . . . . . 72
37. Tratamiento de los datos en OIDC . . . . . . . . . . . . . . . . . . 73
38. Función de catalogación de petición en OIDC . . . . . . . . . . . . 74
39. Muestra del mensaje final del cliente . . . . . . . . . . . . . . . . . 77
40. Seleccionar el realm del Servidor . . . . . . . . . . . . . . . . . . . . 79
41. Usuarios de OpenAM por defecto . . . . . . . . . . . . . . . . . . . 80
42. Creación de un usuario nuevo . . . . . . . . . . . . . . . . . . . . . 80
43. Parte de la configuración del cliente . . . . . . . . . . . . . . . . . . 81
44. Submenú de Agentes . . . . . . . . . . . . . . . . . . . . . . . . . . 82
45. Creación de un Agente . . . . . . . . . . . . . . . . . . . . . . . . . 82
4
plugin OpenID Connect
5
plugin OpenID Connect
Índice de tablas
1. Principales caracterı́sticas de ID Token. . . . . . . . . . . . . . . . . 12
2. Caracterı́sticas de los flujos OpenID Connect . . . . . . . . . . . . . 13
3. Principales claims de la petición de autenticación . . . . . . . . . . 18
4. Claims obligatorios de la respuesta de autenticación fallida . . . . . 20
5. ID Token claims en Flujo Código . . . . . . . . . . . . . . . . . . . 25
6. Claims de la petición de autenticación en Flujo Implı́cito . . . . . . 27
7. Claims en la respuesta de autenticación, Flujo Implı́cito . . . . . . . 29
8. ID Token claims en Flujo Implı́cito . . . . . . . . . . . . . . . . . . 30
9. Claims de la petición de autenticación en el Flujo Hı́brido . . . . . 31
10. Valores de response type en el Flujo Hı́brido . . . . . . . . . . . . . 32
11. Pruebas de infraestructura en local . . . . . . . . . . . . . . . . . . 91
12. Pruebas de Petición de Autenticación en local . . . . . . . . . . . . 92
13. Pruebas de Respuesta de Autenticación en local . . . . . . . . . . . 93
14. Pruebas de Petición de Token en local . . . . . . . . . . . . . . . . 94
15. Pruebas de Respuesta de Token en local . . . . . . . . . . . . . . . 95
16. Pruebas de Petición de Autenticación en entorno distribuido . . . . 96
17. Pruebas de Respuesta de Autenticación en entorno distribuido . . . 97
18. Pruebas de Petición de Token en entorno distribuido . . . . . . . . 98
19. Pruebas de Respuesta de Token en entorno distribuido . . . . . . . 99
20. Coste del personal en el proyecto . . . . . . . . . . . . . . . . . . . 103
21. Coste del equipo en el proyecto . . . . . . . . . . . . . . . . . . . . 103
22. Otros costes directos en el proyecto . . . . . . . . . . . . . . . . . . 104
23. Costes totales del proyecto . . . . . . . . . . . . . . . . . . . . . . . 105
6
plugin OpenID Connect
1. Introducción
En esta sección se plantea una visión global del proyecto, con las respectivas
motivaciones que han impulsado el trabajo y los objetivos que se pretenden
conseguir y satisfacer.
1.1. Motivaciones
Esta era donde todo está informatizado, para facilitar el dı́a a dı́a, obliga a que
la información sensible quede expuesta en cualquier ámbito de la red al tener que
auntenticar en multitud de aplicaciones web.
Este problema hace aflorar nuevos protocolos de autenticación y autorización que
permiten la centralización de los datos para una mayor seguridad, evitando ası́ que
se tenga la información digital replicada en distintas aplicaciones que podrı́an no
ser todo lo seguras que se desea o espera.
Por esta razón se ha decidido la realización de un plugin en Wireshark, que es un
programa que nos permite capturar el tráfico y cuya utilización está muy extendida
entre los estudiantes y profesionales de las redes.
Gracias a la implementación del plugin los alumnos podrán analizar el tráfico
transmitido a la hora de autenticar un usuario utilizando el protocolo OpenID
Connect, siendo uno de los protocolos de gestión de identidad que facilita la
unificación de la información para que sea posible el acceso a varias aplicaciones,
puesto que se ha desarrollado para promover los siguientes puntos:
1. Ofrece una ayuda para el estudio del protocolo OpenID Connect, ya que
además de identificar las trazas relacionadas con este protocolo, ofrece
información relevante al respecto que refuerza el conocimiento teórico gracias
a que sigue la guı́a de implementación paso a paso para los distintos flujos
existentes. Por esta razón se usa como herramienta educativa para que los
alumnos estudien OpenID Connect y puedan comprender la gran ayuda que
representan estos protocolos en el dı́a a dı́a.
1.2. Objetivos
El objetivo de este proyecto es desarrollar un plugin para analizar las trazas
del protocolo OpenID Connect en el programa Wireshark y poder ofrecer soporte
didáctico a los alumnos que estén estudiando los protocolos de gestión de identidad.
Para ello se deben de cumplir los siguientes objetivos especı́ficos:
1. Mostrar como se puede extender Wireshark a la hora desarrollar un
analizador que sea capaz de, primero, identificar que una traza sea del
protocolo a analizar, y segundo, catalogar cada una de ellas por las
especificaciones del proveedor para poder comprender mejor los flujos.
1
plugin OpenID Connect
2
plugin OpenID Connect
3. Arquitectura de despliegue
En este apartado se especifica el escenario final instalado y la configuración
del cliente final. Se desarrolla el apartado de OpenAM en la parte de
Tecnologı́as, explicando la instalación y configuración del servidor para que
sea posible la autenticación de los usuarios y la comunicación con el cliente.
Además se realiza un seguimiento de las trazas entre la parte cliente y
servidor y se utiliza la explicación de OpenID Connect del apartado de
Infraestructuras de gestión de identidad para exponer su funcionamiento real
en un entorno de pruebas.
4. Pruebas
En este apartado se detallan las pruebas realizadas sobre el plugin para dos
bloques de pruebas:
5. Planificación y presupuesto
En este bloque se trata el tema de la planificación del proyecto y el
presupuesto necesario para su ejecución.
3
plugin OpenID Connect
Definiciones importantes
Una parte importante a tener en cuenta a la hora de comprender este tipo
de infraestructuras es la diferencia entre estos dos conceptos:
• Autenticación:
A la hora de acceder a una aplicación que tiene restricciones en el acceso,
se llama autenticación al proceso de verificación de la identidad del
cliente, es decir, si alguien realmente es quien dice ser[2] .
Los mecanismos de autenticación existentes hoy en dı́a son variados,
pero el uso de usuario único y contraseña asociada es el más extendido.
• Autorización:
Una vez realizada la parte de autenticación del usuario, se realiza el
proceso de autorización. Se llama autorización al proceso de establecer
reglas que determinan los permisos del usuario que accede al sistema.
es decir: ¿a quién se le permite hacer qué?
Los protocolos de gestión de identidad permiten que un usuario autorice
el acceso a sus datos personales en una aplicación a otra tercera parte
externa que necesita esa información.
4
plugin OpenID Connect
• Usuario final:
Usuario que quiere acceder a una aplicación tercera utilizando sus
credenciales que mantiene en un sistema de información y con los cuales
intenta autenticar. Puede realizar la autenticación a través de un agente
de usuario como el navegador, dispositivo móvil, escritorio virtual, o
similar.
• Proveedor de identidad (Identity Provider (IdP)):
Es la entidad encargada de emitir la información relacionada con
el usuario a los proveedores de servicios que necesiten confirmar la
identidad del mismo.
También es el proveedores que posee la infraestructura de autenticación
e implementa las funciones de gestión de los usuarios.
• Proveedor de servicios (Service Provider (SP)):
Es la entidad que da acceso al usuario o a un sistema de información
tercero qué confı́an en el IdP para llevar a cabo las tareas de
autenticación y acceso al recurso que está solicitando.
Cada uno de los roles tiene una función especı́fica que llevada en conjunto
brindan la seguridad en las infraestructuras de gestión de identidad e
interactúan para garantizar una multitud de funcionalidades importantes
a la hora de garantizar el acceso a la información confidencial del usuario.
5
plugin OpenID Connect
6
plugin OpenID Connect
Oauth 2.0
Oauth es un estándar de flujos de autorización que permite a terceros acceder
a los contenidos propiedad de un usuario final alojado en una determinada
aplicación, sin que tengan credenciales de autenticación.
La primera implementación de Oauth no tuvo tanto éxito debido a la
complejidad del protocolo y a que únicamente se podı́a utilizar en peticiones
HTTP donde el usuario final se autenticaba a través de navegadores web, por
lo que era imposible realizar la autorización mediante una aplicación móvil o
de escritorio. Por esta razón se creó otra versión mejorada, Oauth 2.0, donde
se suplı́an las carencias anteriormente mencionadas.
Como ya se ha comentado, Oauth es un protocolo de autorización, pero
no de autenticación, por lo que siempre necesita utilizar el mecanismo de
autenticación del servidor web de destino o, como en el caso de OpenID
Connect, una capa superior que realice el proceso de autenticación e
intercambie las credenciales entre los distintos actores.
Se puede explicar este hecho con un ejemplo simple para entender la
diferencia:
7
plugin OpenID Connect
Principales roles
Antes de explicar el funcionamiento del protocolo habrı́a que dar una pequeña
introducción sobre los actores principales que entran en juego:
8
plugin OpenID Connect
9
plugin OpenID Connect
• Claim
En OpenID Connect existe el término de claim, que es la información
confirmada por parte del servidor de OpenID Connect y que envı́a al
cliente una vez se autentica el usuario. Nos sirve a la hora de autenticar
el usuario, al autorizarlo o incluso en la fase inicial al enviar el Servidor
de OpenID Connect información relevante sobre el perfil del usuario
final, nombre, foto, etc.
Este término se describe en los siguientes apartados para explicar mejor
su funcionamiento en las distintas etapas de autenticación de OpenID
Connect.
• ID Token
La principal caracterı́stica que se ha implementado en OpenID Connect
frente al otros protocolos de autenticación, como es el caso de Oauth
2.0, es que ha sabido simplificar sus peticiones mediante el uso de la
estructura creada, ID Token.
La extensión consiste en un Token de seguridad que contiene claims
sobre la autenticación de un usuario final y que es enviada por un
servidor de autorización cuando se utiliza un relying party, encapsulado
en un JSON Web Token [JWT].
Los principales claims que componen el ID Token son los siguientes:
10
plugin OpenID Connect
11
plugin OpenID Connect
Autenticación
Ahora que se tiene una visión global del flujo general de OpenID Connect y se
12
plugin OpenID Connect
13
plugin OpenID Connect
14
plugin OpenID Connect
GET /authorize?
response type=code
&scope=openid
&client id=s6BhdRkqt3
&redirect uri=https %3A %2F %2Fclient.example.org %2Fcb
HTTP/1.1
Host: server.example.com
response type=code
&scope=openid
&client id=s6BhdRkqt3
&redirect uri=https %3A %2F %2Fclient.example.org %2Fcb
15
plugin OpenID Connect
16
plugin OpenID Connect
17
plugin OpenID Connect
18
plugin OpenID Connect
19
plugin OpenID Connect
20
plugin OpenID Connect
21
plugin OpenID Connect
22
plugin OpenID Connect
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
”access token”: ”SlAV32hkKG”,
”token type”: ”Bearer”,
”refresh token”: ”8xLOxBtZp8”,
”expires in”: 3600,
”id token”: ”eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogI
mlzc yI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJ
zdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3
F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOi
AxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAKfQ.ggW8
hZ1 EuVLuxNuuIJKX V8a OMXzR0EHR9R6jgdqrOOF4daGU96Sr
P6qJp6IcmD3HP99Obi1PRs-cwh3LO-
p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJNqeGpe-
gccMg4vfKjkM8FcGvnzZUN4 KSP0aAp1tOJ1zZwgjxqGByKHiO
tX7TpdQyHE5lcMiKPXfEIQILVq0pc E2DzL7emopWoaoZTF
m0 N0YzFC6g6EJbOEoRoSK5hoDalrcvRYLSrQAZZKfly
uVCyixEoV9GfNQC3 osjzw2PAithfubEEBLuVVk4XUVrWO
LrLl0nx7RkKU8NXNHq-rvKMzqg”
}
Como se puede ver en la traza, cumple con los valores de las cabe-
ceras obligatorias por tener información sensible, Cache-Control y
Pragma. También se puede observar que el valor de id token mues-
tra el valor del ID Token codificado y que al descodificarlo tendrá
el siguiente valor:
23
plugin OpenID Connect
{”alg”:”RS256”,”kid”:”1e9gdk7”}
{
”iss”: ”http://server.example.com”,
”sub”: ”248289761001”,
”aud”: ”s6BhdRkqt3”,
”nonce”: ”n-0S6 WzA2Mj”,
”exp”: 1311281970,
”iat”: 1311280970
}
ggW8hZ1EuVLuxNuuIJKX V8a OMXzR0EHR9R6jgdqrOOF4
daGU96Sr P6qJp6IcmD3HP99Obi1PRs-cwh3LO-p146wa
J8IhehcwL7F09JdijmBqkvPeB2T9CJNqeGpe-
gccMg4vfKjkM8FcGvnzZUN4
KSP0aAp1tOJ1zZwgjxqGByKHiOtX7TpdQyHE5lcMiKPXf
EIQILVq0pc E2DzL7emopWoaoZTF m0 N0YzFC6g6EJbOEo
RoSK5hoDalrcvRYLSrQAZZKflyuVCyixEoV9GfNQC3 osjzw2PA
ithfubEEBLuVVk4XUVrWOLrLl0nx7RkKU8NXNHq-rvKMzqg”
{
”error”: ”invalid request”
}
24
plugin OpenID Connect
25
plugin OpenID Connect
26
plugin OpenID Connect
27
plugin OpenID Connect
GET /authorize?
response type=id token %20token
&client id=s6BhdRkqt3
&redirect uri=https %3A %2F %2Fclient.example.org %2Fcb
&scope=openid %20profile
&state=af0ifjsldkj
&nonce=n-0S6 WzA2Mj HTTP/1.1
Host: server.example.com
29
plugin OpenID Connect
30
plugin OpenID Connect
31
plugin OpenID Connect
32
plugin OpenID Connect
Petición UserInfo:
El Userinfo Endpoint es un recurso protegido OAuth 2.0 que devuelve claims
sobre el usuario final autenticado. Para obtener las claims solicitadas sobre
el usuario final, el cliente hace una solicitud utilizando un Token de Acceso
obtenido mediante la autenticación de OpenID Connect y este se lo devuelve
en formato JSON.
1. Petición de UserInfo
El cliente envı́a la Petición UserInfo utilizando los métodos de HTTP,
GET o POST, pero se recomienda que la solicitud utilice el método
HTTP GET y que el Token de Acceso se envı́e utilizando el campo de
cabecera de Autorización. Este serı́a un ejemplo de este tipo de petición
expuesto en las especificaciones de OpenID Connect:
HTTP/1.1 200 OK
Content-Type: application/json
”sub”: ”248289761001”,
”name”: ”Jane Doe”,
”given name”: ”Jane”,
”family name”: ”Doe”,
”preferred username”: ”j.doe”,
”email”: ”janedoe@example.com”,
”picture”: ”http://example.com/janedoe/me.jpg”
33
plugin OpenID Connect
2.1.2. SAML
SAML, acrónimo de Security Assertion Markup Language, es un protocolo de
autenticación de usuario basado en XML.
Es un estándar que se inició en el año 2001 y que su primera versión fue liberada en
el 2005, por lo que ya lleva bastantes años siendo utilizando por grandes empresas
y ha sido estandarizado como protocolo de gestión de identidad. También tiene
integradas una multitud de librerı́as que le otorgan integridad y robustez.
• Cliente:
Usuario final que intenta acceder a la aplicación utilizando unas
credenciales que mantiene en otra aplicación, siempre a través de
un agente de usuario como el navegador, dispositivo móvil, escritorio
virtual, etc.
En la infraestructura de gestión de identidad descrita en el apartado
2.1. Infraestructura de gestión de identidad este rol equivaldrı́a
al de usuario final.
• Proveedor de servicios (SP):
Es el rol equivalente al mismo con este nombre en la infraestructura
de gestión de identidad, y su función es la de dar acceso al usuario o
entidad como se ha descrito en el apartado 2.1. Infraestructura de
gestión de identidad.
• Proveedor de identidad (IdP):
Este rol serı́a el equivalente al rol de IdP genérico de una estructura
de gestión de identidad. Llevarı́a a cabo las funciones de gestión del
usuario, tales como almacenamiento de credenciales, configuración de
la cuenta de usuario, etc.
34
plugin OpenID Connect
35
plugin OpenID Connect
36
plugin OpenID Connect
37
plugin OpenID Connect
38
plugin OpenID Connect
Con los anteriores apartados se han abarcado las caracterı́sticas más importantes
del estándar de SAML, quedando demostrado que es un protocolo robusto y seguro.
2.2.1. REST
REST, acrónicmo de Representational State Transfer, es un conjunto de
arquitecturas Software que siguen un estilo de diseño y que permiten diseñar
páginas web, siguiendo un conjunto de claves fundamentales que orientan en su
metodologı́a para compartir recursos y envı́o de estos a otros clientes[7] .
En cierto modo se utiliza REST para definir de forma general cualquier principio de
arquitectura, pero hoy en dı́a se usa directamente para definir sistemas que utilizan
el protocolo HTTP, que es el protocolo más utilizado de este tipo de arquitectura.
Para obtener esta robustez en REST se han seguido unos principios que habrı́a
que seguir para definir un conjunto de arquitecturas web como RESTful.
• Sistema Cliente-Servidor:
Para cumplir con los principios de la arquitectura REST se debe distin-
guir dos roles principales, el rol de cliente y de servidor. Ambos tienen
que ser independientes uno del otro:
39
plugin OpenID Connect
40
plugin OpenID Connect
41
plugin OpenID Connect
42
plugin OpenID Connect
2.2.2. JSON
JSON, acrónimo de JavaScript Object Notation (Notación de objetos JavaS-
cript) es un formato de texto ligero que ayuda a intercambiar información ya que
utiliza una sintaxis muy intuitiva y fácil de usar[10] .
Al principio nació como una alternativa a XML, pero gracias a su éxito influen-
ciado principalmente por JavaScript ya se considera un lenguaje de programación
independiente.
43
plugin OpenID Connect
44
plugin OpenID Connect
Asignatura, que contienen el nombre y la cantidad de alumnos que tiene cada una
de ellas:
{”Asignatura”:”Programación”,”Alumnos”:35}
{”Asignatura”:”Cálculo”,”Alumnos”:60}
Cada uno de los elementos anteriores está formados por dos pares de clave y valor.
Con este formato resulta fácil entenderlo en lenguaje humano, lo que facilita su
uso y que se haya extendido de una forma tan rápida entre los usuarios.
2.2.3. JWT
JWT, acrónimo de JSON Web Tokens, es un tipo de autenticación basado en
Tokens, lo cual es una forma bastante compacta y segura de transferir los claims
de servidor a cliente.
Los claims en un JWT se codifican como un objeto JSON permitiendo que los
claims sean firmados digitalmente o protegidos con un código de autenticación de
mensajes (MAC) o cifrado directamente el contenido.
El formato de un JWT está compuesto por tres segmentos codificados en base64url
separados por los caracteres de punto (’.’) [11] :
1. Primer segmento:
El primer segmento representa la cabecera JOSE, compuesta por parámetros
identificativos. Los relevantes en nuestro documento son los siguientes:
typ: indicador que sirve para declarar que ese tipo de dato es un JWT.
kid: es un identificador clave utilizado en la identificación de la clave
para verificar la firma.
alg: representa el algoritmo con el que ha sido cifrado el JWT.
2. Segundo segmento:
El segundo segmento representa la carga útil (payload), es decir, la parte
donde están codificados los claims en JWT. Ya se ha hablado en el apartado
2.1.1. JWT. OpenID Connect de los principales claims que se van a utilizar
en nuestro protocolo.
3. Tercer segmento:
El tercer segmento representa la firma. Está formada por la parte de la
cabecera JOSE y el payload, cifrada en Base64 con una clave secreta.
Una vez conocidas todas las componentes de JWT, se puede observar en este ejem-
plo lo explicado para que quede más claro:
45
plugin OpenID Connect
eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogI
mlzc yI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJ
zdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3
F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOi
AxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAKfQ.ggW8
hZ1 EuVLuxNuuIJKX V8a OMXzR0EHR9R6jgdqrOOF4daGU96Sr
P6qJp6IcmD3HP99Obi1PRs-cwh3LO-
p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJNqeGpe-
gccMg4vfKjkM8FcGvnzZUN4 KSP0aAp1tOJ1zZwgjxqGByKHiO
tX7TpdQyHE5lcMiKPXfEIQILVq0pc E2DzL7emopWoaoZTF
m0 N0YzFC6g6EJbOEoRoSK5hoDalrcvRYLSrQAZZKfly
uVCyixEoV9GfNQC3 osjzw2PAithfubEEBLuVVk4XUVrWO
LrLl0nx7RkKU8NXNHq-rvKMzqg
46
plugin OpenID Connect
2.3. Tecnologı́as
En este apartado se hablará de las distintas tecnologı́as utilizadas en el
desarrollo del plugin y la infraestructura necesaria para poder realizar las peticiones
descritas en el apartado de OpenID Connect, además de las que se han utilizado
para realizar el plugin y el seguimiento de la trazabilidad.
2.3.1. OpenAM
47
plugin OpenID Connect
en la forma que lo deseemos, añadiendo algunos nuevos desde cero, creando sus
respectivos claims para que sean intercambiados con el cliente. Para la realización
Como se puede observar en la Figura 15, permite generar los flujos de el Flujo
Código y el Flujo Implı́cito para autenticarnos en nuestro Servidor OpenAM, lo
que facilita desarrollar el plugin usando un único cliente. También da la opción de
poder autenticarnos al Servidor OpenAM mediante un dispositivo móvil, lo que
otorga un mejor escenario de pruebas para el desarrollo de un plugin eficiente y
que contemple las máximas posibilidades posibles.
Por todas estas razones, se ha escogido OpenAM para implementar la infraes-
tructura cliente - servidor, y más adelante, en la sección 4. Arquitectura de
despliegue, se habla de la instalación de la infraestructura y de las trazas inter-
cambiadas entre ambas partes.
2.3.2. Wireshark
Wireshark es un analizador de protocolos de red, utilizado como herramienta
de análisis y de depuración de protocolos, para desarrollo tanto de éstos como de
software relacionado, y que sirve también como herramienta de aprendizaje. Es
una herramienta de software libre que progresa gracias a los donativos de expertos
en redes de todo el mundo y es la continuación de un proyecto iniciado por Gerald
Combs en 1998, con su tı́tulo original Ethereal.
Esta herramienta es similar a otras existentes en el mercado, como es el caso de
48
plugin OpenID Connect
tcpdump, pero gracias a su interfaz gráfica es más fácil de utilizar y es más intui-
tiva como se puede observar en la Figura 16:
49
plugin OpenID Connect
11. El tráfico se puede leer desde distintos tipos de red, ethernet, wifi, PPP y
loopback.
Gracias a que Wireshark tiene esta multitud de ventajas se ha escogido para crear
el plugin.
En el punto 10 se ha hablado de que Wireshark soportaba multitud de lenguajes
para la creación de los plugins, o Disectores, por ello se va a realizar una
introducción sobre LUA, el lenguaje de programación que se ha utilizado para
el desarrollo de nuestro plugin.
LUA
Según la web oficial de LUA [14], Lua es un lenguage de programación
extensible diseñado para una programación procedimental general con
utilidades para la descripción de datos. También ofrece un buen soporte para
la programación orientada a objetos, programación funcional y programación
orientada a datos. Se pretende que Lua sea usado como un lenguaje de
script potente y ligero para cualquier programa que lo necesite. Lua está
implementado como una biblioteca escrita en C limpio (esto es, en el
subconjunto común de ANSI C y C++).
50
plugin OpenID Connect
◦ Disector (Dissector)
Un disector es utilizado para analizar paquetes de datos, por lo que
es ideal su uso a la hora de analizar trazas desde cero sin que se
base en otro analizador generado por Wireshark para realizar la
disección de la traza.
◦ Post-Disector (Post-Disector)
Un post-disector es un disector que se llama después de que cada
distinto disector ya ha sido llamado. Son prácticos a la hora de
programarlos ya que todos los campos necesarios para el protocolo
ya existen para poder ser accedidos y poder ası́ agregarlos al árbol
de disección.
◦ Oyente (Listener) Un Listener se utiliza para recolectar datos
después de que un paquete ha sido diseccionado. Es el más simple
de los tres y únicamente se utiliza para mostrar información sin
tratar previamente.
• Ventajas y desventajas de utilizar LUA
A la hora del desarrollo del plugin tuvimos en cuenta los siguientes
factores para escoger el lenguaje de programación LUA sobre C:
◦ Ventajas:
1. Es un protocolo sencillo de implementar y para realizar pruebas.
2. No necesita muchas lineas de código para ser implementado.
Se ha podido comprobar que para un mismo programa utiliza
muchas menos que Java o C.
3. Un programa en LUA no necesita gestionar la memoria.
4. Es fácil de compartir dado que al no necesitar compilación,
únicamente se necesita colocar el programa en el fichero de
plugins de Wireshark.
◦ Desventajas:
1. En tiempo de ejecución es algo más lento que C, por lo que
para programas que requieran de muchos recursos se notará la
diferencia.
2. Aún no tiene implementadas tantas funciones como otros
lenguajes de programación.
3. No se utiliza tanto como C para implementar plugins en
Wireshark, por lo que es más complicado encontrar información
al respecto.
En el apartado 3. Desarrollo del plugin se habla de cual de los disectores se
escoge para el plugin y se explican las funciones necesarias para desarrollarlo.
Una vez conocido que es Wireshark como un analizador de tráfico con multitud
de funcionalidades de búsqueda, podemos preguntarnos por qué decidimos crear
el plugin en Wireshark y no por navegador, ya que el protocolo OpenID Connect
funciona ı́ntegramente en HTTP. Por esta razón serı́a lógico pensar que igualmente
el mismo contenido que aparece en Wireshark queda registrado en la herramienta
de analizador de tráfico que existen actualmente en los navegadores web, tales
51
plugin OpenID Connect
52
plugin OpenID Connect
53
plugin OpenID Connect
54
plugin OpenID Connect
Funcionalidades no desarrolladas
Al tratarse de la última versión realizada y que no ha pasado por todos
las pruebas pertinentes, algunas de sus funcionalidades directamente no
han sido terminadas, por lo que o generan error o no son ni accesibles.
Estas funcionalidades pueden variar de una versión a otra por lo que la
versión Nightly (versión gratuita) no dan ninguna garantı́a de que un entorno
instalado para una determinada versión vaya a funcionar exactamente igual
en la siguiente.
55
plugin OpenID Connect
56
plugin OpenID Connect
la información en la función.
El parámetro tree es el lugar donde se guardan los parámetros de la disección en
detalle, es la raı́z de nuestro árbol de disección y del cual colgaremos las distintas
ramas que irán formándolo.
1. Para números:
ProtoField.type (abbr, [name], [desc],[base], [valuestring], [mask])
type puede tomar uno de los siguientes valores: uint8, uint16, uint24,
uint32, uint64, framenum.
2. Para otros tipos:
ProtoField.type (abbr, [name], [desc])
type puede tomar uno de los siguientes valores: float, double, string,
stringz, bytes, bool, ipv4, ipv6, ether, oid, guid.
57
plugin OpenID Connect
58
plugin OpenID Connect
59
plugin OpenID Connect
que se han tomado para su programación. Para ello nos centraremos en cuatro
apartados para la comprensión del plugin:
1. Tipo de disector escogido
2. Configuración del plugin
3. Diferenciación por tipo de flujo
4. Diferenciación por tipo de petición
Con estas pautas abarcaremos todos los pasos tomados a la hora de la
implementación el plugin para reflejar las decisiones de la forma más ordenada
posible.
60
plugin OpenID Connect
Estos serán los campos que de forma general formarán parte de nuestro
protocolo. Más adelante se especificará si en algún tipo de petición se hará
hincapié en algún otro detalle, cuando hablemos de las medidas tomadas
para cada una de las peticiones.
61
plugin OpenID Connect
El primer grupo está compuesto por los campos que aparecerán de forma
fija en todas las trazas enviadas entre cliente y servidor indistintamente
del tipo que sean, y que cuelgan directamente del árbol principal. Están
formados por:
62
plugin OpenID Connect
63
plugin OpenID Connect
64
plugin OpenID Connect
Estos han sido todos los campos utilizados en nuestro plugin y que
mostraremos más adelante cómo los configuramos, para que, además de
concatenar datos, muestre alguna información relevante extra.
65
plugin OpenID Connect
66
plugin OpenID Connect
67
plugin OpenID Connect
68
plugin OpenID Connect
Estos son todos los campos configurados utilizados, y como dijimos al inicio
son bastante dispares uno de otros y al final, como se ha explicado, era
necesario obtener los datos de muchos disectores distintos lo que afianza la
elección de un Post-Disector.
69
plugin OpenID Connect
9. Funciones de un Post-Disector
El Post-Disector es un tipo de disector que, como se ha visto reflejado en
los anteriores pasos, se comporta igual que los demás disectores a excepción
de los detalles mencionado anteriormente en otros apartados y de que es un
tipo de disector que necesita ser registrado en el proceso de disección.
Existe una función que hay que llamar para que el Post-Disector pueda ser
llamado después de cada uno de los paquetes y es la siguiente:
70
plugin OpenID Connect
para poder compararlas posteriormente en una petición que clasifica por tipo de
flujo, como se muestra en la Figura 35:
71
plugin OpenID Connect
72
plugin OpenID Connect
Por otro lado en esta imagen vemos una función que realiza la categorización
final de la petición:
73
plugin OpenID Connect
74
plugin OpenID Connect
4. Arquitectura de despliegue
En este apartado trataremos el despliegue de la infraestructura utilizada para
las pruebas y la depuración del plugin, documentados en la guı́a de administración
de OpenAM[[17], además de resumir las especificaciones técnicas que se requieren
para el despliegue en sı́.
• CentOS 6, 7
• Microsoft Windows Server 2008, 2008 R2, 2012, 2012 R2
• Oracle Linux 6, 7
• Oracle Solaris x64 10, 11
• Oracle Solaris SPARC 10, 11
• Red Hat Enterprise Linux 6, 7
• SuSE Linux 11
• Ubuntu Linux 12.04 LTS, 14.04 LTS
75
plugin OpenID Connect
• Apache Tomcat 6, 7, 8
• IBM WebSphere Application Server 8, 8.5
• JBoss Enterprise Application Platform 6
• JBoss Application Server 7
• Oracle WebLogic Server 11g, 12c
76
plugin OpenID Connect
77
plugin OpenID Connect
Al igual que en el caso del Flujo Código, hay que elegir que el ID Token sea cifrado
con el algoritmo HS256. Una vez se haya autenticado de la forma adecuada y si se
ha configurado correctamente, aparecerá un resumen como el mostrado en el Flujo
Código.
78
plugin OpenID Connect
79
plugin OpenID Connect
80
plugin OpenID Connect
81
plugin OpenID Connect
Nombre: MyClientID
Nota aclaratoria: el servidor no diferencia entre mayúsculas y minúsculas
en el nombre, por lo que para él será el mismo agente uno con nombre
MyClientID que otro con nombre myclientid.
Contraseña: password
Una vez creado se va a realizar la configuración según las especificaciones del cliente
para ambos flujos, el Flujo Código y el Flujo Implı́cito:
82
plugin OpenID Connect
83
plugin OpenID Connect
2. Una vez se ha forzado que se haga la redirección, el usuario envı́a una petición
de autenticación al servidor OpenAM:
84
plugin OpenID Connect
En este caso se puede apreciar, en la Figura 50, que manda los claims
obligatorios que se explicaron en el apartado de OpenID Connect, que son
exactamente los mismos que en la petición de redirección.
85
plugin OpenID Connect
86
plugin OpenID Connect
87
plugin OpenID Connect
88
plugin OpenID Connect
89
plugin OpenID Connect
Estas son las trazas importantes que puede ofrecer el cliente OpenAM interaccio-
nando con el servidor OpenAM, que dan una visión más clara sobre el protocolo
OpenID Client.
90
plugin OpenID Connect
5. Pruebas
En este apartado se comentan las pruebas que se han realizado para la mejora
de nuestro plugin de OpenID Connect haciendo una diferenciación de escenarios,
primero uno local y después uno distribuido.
Cabe destacar el hecho de que se han realizado las mismas pruebas para un
escenario que para el otro, y que únicamente se testea el comportamiento de
nuestro disector ante las distintas trazas, sin entrar en temas sobre el correcto
funcionamiento del cliente y el servidor.
91
plugin OpenID Connect
92
plugin OpenID Connect
93
plugin OpenID Connect
94
plugin OpenID Connect
95
plugin OpenID Connect
96
plugin OpenID Connect
97
plugin OpenID Connect
98
plugin OpenID Connect
Con esto concluimos con que las pruebas han sido exitosas y el plugin se comporta
tal como esperábamos de forma genérica; categoriza adecuadamente por tipo de
petición en todas las pruebas realizadas y por tipo de flujo, aunque es cierto
que algún tipo de petición las evidencias mostradas no han sido totalmente las
deseadas, creemos que el plugin cumple totalmente con su función.
99
plugin OpenID Connect
6. Planificación y presupuesto
En este apartado se exponen las etapas de la planificación que se han llevado a
cabo para el desarrollo del proyecto, además de realizar un presupuesto que recoge
todos los costes que se han tenido en cuenta para su realización.
6.1. Planificación
El objetivo de la planificiación es establecer fechas de entrega del proyecto
en sı́ y la de definición de las tareas. Por ello, como punto inicial se tendá en
cuenta el primer contacto mantenido para la realización del proyecto, que fue el 2
de diciembre de 2016, donde se decidió que serı́a interesante la realización de un
analizador de trazas de OpenID Connect y que ha durado hasta el dı́a 20 de julio
del 2017.
Es cierto que la duración del proyecto fue larga, pero las horas activas a las que se
les ha dedicado es inferior a esa cantidad, por lo que se podrı́a decir que el proyecto
tuvo una duración total de 12 meses reales además de que no se dedicó el 100 %
del tiempo en la realización del mismo, lo que se tendrá en cuenta a la hora del
cálculo del presupuesto.
Fase de desarrollo
En esta fase realizamos el desarrollo del plugin de OpenID Connect y además
engloba las pruebas realizadas para su correcto funcionamiento. Además se
han realizado cambios respecto a lo acordado en la fase de análisis para
mejorar el plugin una vez se empezó esta fase.
Fase de documentación
Habiendo realizado el desarrollo del plugin se realiza la fase de documenta-
ción, donde se exponen todas las fases anteriormente mencionadas haciendo
hincapié además del funcionamiento de las tecnologı́as utilizadas y los pro-
tocolos que han formado parte de la implementación.
100
plugin OpenID Connect
Se puede observar que entre las fases del proyecto ha habido tres perı́odos
grandes de descanso, el primero de veinte dı́as, el segundo y el tercero de treinta
dı́as cada uno. También ha habido un perı́odo corto de paro en una de las subtareas.
Se puede entender mejor en la siguiente tabla que refleja las tareas y la duración
de las mismas:
101
plugin OpenID Connect
6.2. Presupuesto
Después de realizar la planificación se utilizan las horas empleadas y calculadas
en el apartado anterior para estimar el coste de todo el proyecto.
2. Se han implicado dos sujetos con perfiles ingeniero Senior para la gestión y
el análisis del proyecto. Por ello han estado implicados más en la primera
fase de análisis de requisitos pero se ha tenido en cuenta que han estado
102
plugin OpenID Connect
Euros en gastos.
103
plugin OpenID Connect
104
plugin OpenID Connect
105
plugin OpenID Connect
Cabe destacar que el estudio para la realización del proyecto que ha sido realizado
en distintas web y foros, tanto en las páginas de especificaciones del propio
protocolo, OpenID Connect, en foros donde se argumentaba las mejores formas
de programación de plugins en Wireshark y en la web del mismo proveedor, no se
hubiera podido llevar a cabo si no fuera porque todas las aplicaciones utilizadas en
este proyecto fueron de carácter gratuito, y gracias al material facilitado ayudaron
a la hora de la comprensión de cada una de las partes implicadas.
106
plugin OpenID Connect
107
plugin OpenID Connect
8. Bibliografı́a
108
plugin OpenID Connect
https://backstage.forgerock.com/docs/openam/13.5/admin-guide/chap-openid-connect
. Fecha de última consulta: junio 2017
109
plugin OpenID Connect
9. Glosario
Issuer Identifier:
Identificador Verificable para un Emisor. Es una dirección URL sensible
a mayúsculas y minúsculas utilizando el esquema https que contiene
esquema, host y opcionalmente, número de puerto y componentes de ruta y
componentes de consulta o fragmento.
Lenguajes scripting:
Son un tipo de lenguaje de programación interpretado, es decir, existe otro
programa que procesa los comandos y los ejecuta. Algunos ejemplos de este
tipo son Python, Javascript, Ruby, etc.
Hash:
Función resumen que se utiliza para crear un resumen de toda la información
que se le ha introducido como entrada. Sirve para comprobar que los datos
han sido comprometidos, o no, en alguna parte del proceso.
Cifrar:
Es el método que permite volver ilegible una cadena de caracteres aplicando
un algoritmo especial de modificación mediante el uso de una clave secreta.
Codificar:
Es el método que permite una cadena de caracteres en un determinado
lenguaje transformarla en otra distinta utilizando otro. Es decir, altera la
semántica de la misma cadena de caracteres.
Codificación de consultas:
En este modo, los parámetros de respuesta de autorización se codifican en la
cadena de consulta agregada al redirect uri al redirigir de nuevo al cliente.
Codificación de fragmentos:
En este modo, los parámetros de respuesta de autorización se codifican en el
fragmento añadido al redirect uri al redirigir de nuevo al cliente.
Userdata
LUA proporciona un tipo básico para representar los valores de arrays
ofreciéndonos un área de memoria sin operaciones predefinidas con lo que
se puede gestionar el contenido sin ninguna restricción de forma.
Schema
Estructura que se le asigna al Uniform Resource Identifier (URI) y que se
organiza de la siguiente manera:
[//[usuario[:contraseña]@]host[puerto]][/path][?query][#fragmento]
CSRF
Acrónimo de Cross-site request forgery, es un tipo de programa malicioso de
un sitio web que tiene como objetivo la falsificación de petición en sitios que
intercambian información mutuamente y haciéndose pasar por el otro. Esta
vulnerabilidad es tambén conocida como XSRF.
110
plugin OpenID Connect
XHTML
Acrónimo de eXtensible HyperText Markup Language, que es el lenguaje en
HTML cambiado a formato XML para su tratamiento.
111
plugin OpenID Connect
10. Anexo
10.1. Instalación del Servidor OpenAM
Para la instalación el sevidor OpenAM debemos seguir los siguientes pasos:
2. Ese fichero se guarda en el servidor Web, que en este caso ha sido un Tomcat:
112
plugin OpenID Connect
113
plugin OpenID Connect
114
plugin OpenID Connect
115
plugin OpenID Connect
10. Presionar en siguiente sin modificar nada más y aparece una ventana que
muestra la configuración de sitio que se dejará igual a como aparece en la
Figura 70 :
116
plugin OpenID Connect
117
plugin OpenID Connect
118
plugin OpenID Connect
14. Una vez instalado el servidor se configura para que utilice el protocolo
OpenID Connect para la autenticación. Para ello hay que escoger el realm y
una vez dentro escogemos la opción de Configure Oauth Provider. Después
la de OpenID Connect para poder configurarlo de la manera que se muestra
en la Figura 74, que es la de por defecto:
119
plugin OpenID Connect
15. Una vez se tenga hay que configurar un agente con los datos del RP tal como
se explica en el apartado 4.2. Cliente OpenAM y con ello ya está listo el
servidor OpenAM.
120