Limited Entropy Dot Com Not so random thoughts on security featured by Eloi Sanfèlix

14May/080

Análisis del protocolo de establecimiento de TLS

Posted by Eloi Sanfèlix

Como parte de una asignatura hemos tenido que analizar el establecimiento de sesión del protcolo TLS, es decir el TLS Handshake Protocol. En este post voy a dar una visión del funcionamiento de este protocolo haciendo uso de narraciones informales de una versión algo simplificada del protocolo.

Supondremos que tenemos dos partes implicadas en el protocolo, A y B (de Alice y Bob ), y una autoridad de certificación CA, cuya clave pública es conocida bajo Kca. Con esto, el establecimiento de una sesión TLS mediante la cual se negocia una clave vendría a ser algo como:

A -> B: A, Na, emptyId
B -> A: Nb, Sid
B -> A: {|B, KB |}Kca^-1
A -> B*: {|A, KA |}Kca^-1
A generates a random PMS (Pre Master Secret)
A begins ClientAuth(A, PMS)*
A -> B: {|PMS|}Kb
B begins ServerAuth(B, PMS)
A -> B*: {|#(Nb, B, PMS)|}Ka^-1
B ends ClientAuth(A, PMS)*
A and B generate:
M = PRF(PMS, Na, Nb), finished = #(M, Sid, Na, Nb, A, B).
A -> B: {finished}ClientK(Na,Nb,M)
B -> A: {finished}ServerK(Na,Nb,M)
A ends ServerAuth(B, PMS)

Donde {|m|}k significa cifrar el mensaje m con la clave k mediante criptografía asimétrica. Por tanto, cuando usamos kb estamos cifrando, mientras que si usamos kb^-1 estamos usando la clave privada y por tanto firmando. Además, #(m) significa un hash criptográfico del mensaje m, y {m}k significa cifrar m mediante la clave simétrica k.

Como se puede observar, el cliente inicia la sesión enviando un nonce y un identificador de sesión vacío. Un nonce es un número aleatorio con el objetivo de garantizar la frescura de la sesión y de la clave generada por ésta. Además, aunque lo he obviado aquí, se envían preferencias de cifrado con las opciones que soporta el cliente para el cifrado asimétrico, simétrico y el hashing.

El servidor responde con un nuevo nonce y un nuevo identificador de sesión. Además también añade sus preferencias criptográficas, que son seleccionadas en base a las del cliente y determinan los algoritmos usados en la sesión. Como ya he dicho, se ha obviado y asumismo que están de acuerdo (o que solo existe una posible opción).

Seguidamente el servidor manda su certificado ( es decir, su identidad y clave pública firmadas por la autoridad de certificación), y el cliente opcionalmente el suyo (el * significa opcional). Después el cliente envía PMS cifrado con la clave pública del servidor; el pre master secret (PMS), que es una cadena aleatoria de 48 bits, se supone secreto y compartido entre ambas partes, y será la base para generar la nueva clave de sesión.

Tras esto, si el cliente mandó su certificado (si se requería autenticación del cliente) se manda un hash de algunos elementos recibidos firmados con su clave privada, para que el servidor pueda verificar su identidad.

Seguidamente, ambas partes crean un nuevo Master secret, M, con una función pseudoaleatoria en base a los nonces y el PMS. Además, crean finished como un hash de todos los mensajes anteriores e intercambian el valor de finished mediante las nuevas claves para ver que ambos han llegado al mismo resultado.

Como se puede ver, se utilizan dos claves distintas para servidor y cliente. Además se generan dos claves para usarlas en códigos de autenticación de mensajes que no se muestran aquí ya que no se han usado. Todas las claves se generan en base al PMS y los nonces. De esta forma, todas las partes pueden influenciar de la misma manera la clave, y una sola parte no es capaz de predeterminar una clave concreta.

Los begin y ends son lo que llamamos aserciones de correspondencia (traducido on-the-fly de correspondence assertions 😆 ). Sirven para especificar objetivos de autenticación al analizar el protocolo, y se debe probar que para que ocurra la finalización del evento ( end xxx(a,b,c) ) debe haber ocurrido antes un begin xxx(a,b,c). De esta forma, cuando el servidor hace "B begins ServerAuth(B, PMS)", se inicia una sesión de autenticación del servidor ante el cliente. Cuando el cliente puede asumir que está hablando con el servidor B, entonces puede hacer el end correspondiente. Si se consigue que ocurra un end antes que su correspondiente start significa que de alguna forma un atacante ha hecho que el cliente asuma que está hablando con el servidor de confianza mientras que éste no ha iniciado la sesión.

Por último, el protocolo permite resumir una sesión simplemente reusando un identificador de sesión en el primer mensaje en lugar de mandar el identificador nulo. En este caso, la narración queda así

A -> B: A, Na, Sid
B -> A: Nb, Sid
A and B generate: PMS is looked up in a database
M = PRF(PMS, Na, Nb), finished = #(M, Sid, Na, Nb, A, B).
A -> B: {finished}ClientK(Na,Nb,M)
B -> A: {finished}ServerK(Na,Nb,M)

Como se puede ver, lo único que se obtiene de la sesión anterior es el PMS, mientras que M es generado de nuevo con los nuevos nonces. De esta forma, se crean nuevas claves que serán presumiblemente seguras incluso si las anteriores han podido ser obtenidas, siempre que PMS haya permanecido secreto.

Esto es todo de momento, a ver si puedo poner nuestro modelo de ProVerif de este protocolo para que veáis más o menos cómo funciona... pero primero esperaré a tener la corrección del profesor ;-). Si algo no está bien explicado o no queda claro de este post, no dudéis en decirlo en los comentarios 🙂

3May/083

Volviendo…

Posted by Eloi Sanfèlix

Tras la muerte del server, he trasladado el blog a otro sitio y ya está online de nuevo. Gracias a Javi y Bea que cogieron los discos duros del antiguo equipo para pasarme la info, al menos tengo la base de datos ya que el disco duro donde estaba /home ha muerto 🙁

Voy a dejar esto así de momento, con el tema por defecto hasta que tenga un ratillo para buscar uno nuevo... mientras me recupero del mega-puente (acueducto lo menos) que tenemos aquí esta semana con motivo del día  de la Reina y tal.

A ver si pronto puedo volver a escribir cosillas por aquí 🙂

Filed under: General 3 Comments
15Apr/083

Meme…

Posted by Eloi Sanfèlix

Pues me manda Bea uno de esos utilísimos memes, y por ser el primero voy a darle el honor de responderlo... no os acostumbréis 😛

Y no se lo voy a pasar a nadie, si alguien lo quiere que lo coja, y si no que lo deje.

1-. Coge el libro que tengas más cerca, ve a la página 18 y escribe la línea 4:

For example, it is necessary to decide which operations are performed in hardware and which aoperations are performed in software  ( Power Analysis attacks ).

2-. ¿Si estiras tu brazo derecho, qué tocas?

El libro de antes que lo acabo de dejar ahí xD

3-. Qué ha sido lo último que has visto por la televisión?

Por la televisión? Pues supongo que algo de la MTV holandesa... durante cinco minutos. Quitando eso, lo último que vi entero fue The Big Bang Theory 1x11, hace un par de noches.

4-. Sin mirar, ¿Qué hora es?
Las 19:45

5-. Ahora mira, ¿Qué hora es?
19:53

6-. Quitando el ordenador, ¿qué escuchas?
Poco más que algún pajaro silbando ahí fuera.

7-. ¿Cuánto tiempo estuviste fuera el día que estuviste más tiempo en la calle?
Puede que unas 48 horas...

8-. Antes de estar escribiendo en el blog, ¿qué estabas haciendo?
Venía en un bus porque el tren que me trae de Delft a Eindhoven ha parado en Tilburg, supongo que por problemas de obras en las vías o algo... aunque como no entiendo mucho holandés que se diga no lo sé decir.

9-. ¿Qué llevas puesto ahora mismo?
Pues lo mismo que todo el día, unos vaqueros y una camiseta de manga corta.

10-. ¿Soñaste ayer?
Que yo recuerde no.
11-. ¿Cuánto tiempo te estuviste riendo la última vez que lo hicisteis?
Cuánto tiempo? La última poco... una de las últimas (el sábado noche) un rato largo 😆 .

12-. ¿Qué hay en las paredes de la habitación donde estás?
Algún cuadro feo que colgaron los dueños de la casa

13-. ¿Has visto alguna cosa extraña últimamente?
mmm no sé.

14-. ¿Cual es la última película que has visto?
No me acuerdo... 😳

15-. Si fueses multimillonario de la noche al día, ¿qué comprarías?
Supongo que lo que me hiciera falta, algún caprichito y luego lo invertiría o a saber. Dame el dinero y te respondo en unos días 😀

16-. Alguna cosa sobre tí…
Estooo... (casi) ingeniero de teleco estudiando en Holanda de Erasmus.

17-. Si pudieras hacer alguna cosa en el mundo, independientemente de tus tendencias políticas, ¿qué harías?
Hacer algo en el mundo? Algo por el mundo? Si estuviera en mi mano, que no hubiera violencia , hambre, injusticias, etc... pero creo que no poco puedo hacer al respecto.

18-. ¿Te gusta bailar?
Bueno... no se me da muy bien que se diga xD

19-. ¿Qué piensas de George Bush?
Que mejor que lo cambien por cualquier otro.

20-. Imagina que, por reacción espontánea, tienes una niña; ¿como la llamarías?
Reacción espontánea o estimulada?  NS/NC

21-. Imagina que, en vez de tener a una niña, tienes un niño, ¿que nombre le pondrías?
Como antes, NS/NC
22-. ¿Te gustaría vivir en el extranjero?
La pregunta 16 lo deja claro.

23-. ¿Qué te gustaría que te dijese Dios cuando llegues al cielo?
Que me mandara de vuelta a la tierra, con paracaídas por favor.

Filed under: General 3 Comments
30Mar/080

Volviendo a la vida…

Posted by Eloi Sanfèlix

Después de una semana santa con visitas en la que no he parado un minuto, ahora intento volver a la rutina. El día 20 vino mi prima de visita, se fue el 25 y luego vino otra visita (tíos y abuela) que se fue el sábado por la mañana. Además el viernes noche salimos por Amsterdam por primera vez desde que llegué aquí y ayer había fiesta en una casa (y ganamos el concurso de cerveza 😀 ) ... Resultado: mucho turismo y fiestas, y bastante reventado.

Hace más de dos semanas que tengo un post a medias en borradores y nunca encuentro el momento de acabarlo, y así está el blog, abandonaico el pobre. A ver si en unos pocos días vuelvo con contenidos de verdad 😉

Al menos sabéis que estoy vivo 😆

PD: He actualizado la versión de wordpress que ya era hora... ahora tengo tags además de las categorías anteriores, así que empezaré a intentar taggear los posts

Tagged as: No Comments
24Feb/080

Visita al FOSDEM 2008 ( Bruselas )

Posted by Eloi Sanfèlix

Como dije en el post anterior, hoy me he acercado al FOSDEM 2008 en Bruselas. He salido en tren a eso de las 8 de la mañana desde Eindhoven y he llegado al campus de la ULB pasadas las 11:30, así que no he podido asistir a algunas de las charlas que quería.

La primera charla a la que he asistido ha sido sobre la suspensión a RAM y a disco de Linux, dada por Stefan Seyfried de openSUSE . Ha durado media hora y ha comentado el state of the art y lo que deberíamos ver en un futuro próximo en el soporte de suspensión.

Después he dado una vuelta por los stands que hay ( OpenBSD y OpenSSH, Mozilla foundation, *BSD, OOo, fsfef, ... ) y he comido algo antes de meterme en la charla de la devRoom de CentOS y Fedora donde he asistido a una charla sobre las últimas novedades de lvm2: caching, nuevos comandos, nuevas opciones y algunas mejoras.

Ahora mismo estoy escribiendo este post desde una charla del OWASP sobre WebScarab-NG, un proxy HTTP al estilo paros proxy (y muchos otros) con spider, fuzzer y demás utilidades para realizar tests de penetración sobre aplicaciones web. Aunque no parece aportar mucho respecto al resto de proxies que conocía, ahora está empezando a mostrar funcionalidades para acceso a servicios web accediendo al fichero WSDL y demás... le echaré un ojo al programilla un día de estos.

Al acabar (que será cuando postee esto porque en esta sala no hay red) me acercaré a una otra charla corta sobre migración de Linux a FreeBSD a ver qué se cuentan. Y luego ya toca la closing talk y a coger el bus y hacia Eindhoven de nuevo... aunque posiblemente pase a comprarme alguna camiseta por los stands, de merchandising de OpenSSH o del propio FOSDEM.

Filed under: General No Comments
23Feb/080

FOSDEM: el evento europeo de ‘la comunidad’ SL y OS

Posted by Eloi Sanfèlix

Este fin de semana está teniendo lugar el FOSDEM en Bruselas.  Para quien no lo conozca, como digo en el título es un evento sobre software libre y código abierto a nivel europeo que se realiza todos los años.  En él tienen lugar charlas sobre diferentes proyectos de software libre, lenguajes de programación, distribuciones, etcétera.

En Linux Magazine están retransmitiendo las charlas principales vía streaming, y supuestamente estarán colgadas una vez terminado el evento para quien no haya podido verlas en directo. Yo por mi parte mañana me acercaré, si las líneas de trenes de aquí me lo permiten que parece ser que hay obras entre Eindhoven y Tilburg y debo pasar por ahí para ir a Bruselas.

Filed under: General No Comments
4Feb/081

On vacation…

Posted by Eloi Sanfèlix

Pues como dice el título, desde hoy hasta el próximo día 14 estaré de vacaciones... ahora mismo estoy en España, parto hacia Valencia en un rato y hacia Madrid esta noche, desde donde volaremos a Punta Cana como viaje final de carrera (aunque aun no he acabado, pero lo haré si todo va bien en septiembre, cuando presentaré el PFC).

Así pues, el blog estará abandonado estos días, y probablemente no de señales de vida hasta el día 15 cuando llegue a Holanda de nuevo.

Cuidad de esto por mi 😛

Filed under: General 1 Comment
17Oct/072

LaTeX-Suite: Plugin para editar LaTeX en VIM

Posted by Eloi Sanfèlix

Puesto que aquí lo habitual es usar LaTeX en los trabajos, hace unos días me instalé gwTex en el macbook y empecé a trastear con el tema. Hace años toqué LaTeX para escribir un trabajillo, pero lo dejé ahí apartado y no lo había usado desde entonces (hará como 5 años).

Me puse a buscar si había algún editor de LaTeX majo, y me encontré con un plugin para Vim que puede resultar bastante cómodo a los que estén acostumbrados a vim y tengan que usar latex: Latex-Suite . Tras la instalación me leí un tutorial rápido y empecé a usarlo para uno de los problemas de Crypto1 que debo entregar esta semana, ya que es más cómodo para escribir los polinomios que andar usando OpenOffice, buscando en el menú 'Insertar fórmula', añadiendo la fórmula, saliendo con doble click, etc.

El caso es que el plugin tiene muuuuchas cosas, y voy a resumir aquí algunas interesantes para tenerlas a mano y no tener que leerme el manual cada vez que busque alguna de estas en el futuro.

  • Exx añade un nuevo environment. Ejemplo: EDO añade un documento, y te situa en el \documentclass
  • Placeholders: cuando estás en algún comando, con Ctrl-J puedes moverte al símbolo <++> que muestra Latex-Suite.
  • F5 en el preámbulo sobre una palabra te añade un paquete. Por ejemplo, graphicx y <F5> resulta en \usepackage{graphicx}
  • F5 en una línea en blanco te ofrece una lista de environments ( equation, eqnarray, ...)
  • F9 sirve para completion, aunque tendré que cambiar las hotkeys de expose o este binding para poder usarlo en OS X.
  • F7 sobre una palabra la convierte en comando.
  • Fxx sirve para poner tipos de fuente: FBF --> \textbf{}. Te situa dentro de las llaves con un placeholder al final.
  • Sxx para poner secciones: SSE --> \section{}, SSS --> \subsection{} y así con algunos más.
  • Para poner letras griegas, se usa `x , con una a para alpha, b para beta, etc. Además con algunas mayúsculas también sirve ( S == sigma, W == omega, L==lambda , etc).

A parte de las mejoras para edición, latex-suite te permite compilar mediante \ll cuando estás en modo comando en vim, y en teoría visualizar mediante \lv, aunque a mí no me va y no me he parado mucho a mirarlo...

Seguro que me dejo muchas cosas, porque Latex-Suite tiene un montón de bindings y ayudas para muchos casos, y justo ahora empiezo a usar LaTeX en serio, y por ejemplo el tema de bibliografía y demás no lo he usado pero Latex-Suite lleva ayudas para ello.

Filed under: General 2 Comments
15Oct/073

En busca de un tema para el proyecto

Posted by Eloi Sanfèlix

El otro día estuve hablando con Andries Brouwer y parece ser que el hombre está dispuesto a supervisarme el proyecto, aunque me recordó que él era matemático y no experto en seguridad, aunque pensaba que había mucha gente en la universidad con conocimientos formales sobre seguridad pero que (en su opinión) fallaban en el aspecto práctico.

El problema es que el tema del proyecto no está nada claro.  De hecho, me dijo que hiciera el proyecto sobre lo que yo quisiera. Si él sabía del tema que elegía, entonces me podría ayudar, y si no sabía aprendería de mis investigaciones.

Me propuso comparar SMACK con SELinux, ver si pese a ser mucho más sencillo (por lo poco que he mirado hay cosas que se pueden ahcer con SELinux que no se pueden hacer con SMACK) sigue siendo suficiente seguro o no... pero quizás el tema puede resultar demasiado pesado de configurar y analizar en detalle.

Otra opción que había pensado yo es en tratar de desarrollar alguna herramienta de seguridad como por ejemplo sobre detección/prevención de rootkits en linux o algo por el estilo, o quizás analizar alguna solución como grsec.

De todas formas no estoy totalmente convencido por ninguna opción, así que si alguien tiene alguna idea que pueda resultar interesante desarrollar o analizar, le agradecería lo dejara en los comentarios :).

Filed under: General 3 Comments
15Oct/071

De nuevo fuera de servicio

Posted by Eloi Sanfèlix

Una vez más el blog ha estado fuera de servicio este fin de semana.  El problema fue la tormenta que cayó en Valencia el jueves pasado... al parecer los equipos estaban en marcha, pero la electrónica de red no estaba funcionando.

Hasta que esta mañana no han entrado de nuevo a trabajar en la escuela y se ha puesto todo en orden, el servidor ha estado caído 🙁 Esperemos que pase mucho tiempo hasta la próxima caída de este estilo jeje

Filed under: General 1 Comment