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

11Jun/084

TLS Handshake protocol en ProVerif

Posted by Eloi Sanfèlix

Como dije cuando comenté el protocolo de establecimiento de sesión de TLS, en la asignatura Verification of security protocols nos mandaron modelar y analizar la seguridad del mismo mediante la herramienta automatizada ProVerif.

Esta semana nos han devuelto las soluciones y como está bastante completa, con la única pega de que modelamos una única continuación de cada sesión en lugar de (potencialmente) infinitas, la he subido para quien le pueda interesar. Modificar eso es sencillísimo y solo es añadir un signo de exclamación (replicación infinita del proceso) delante del comando que mete el identificador de sesión en un canal privado a modo de base de datos tanto en el cliente como en el servidor.

Es posible que más adelante escriba una serie de posts sobre cómo funciona ProVerif, o suba un documento que probablemente me haga para mi propio uso antes del examen de esta asignatura, a modo resumen de todo lo dado.

El modelo, aquí. Lo hice conjuntamente con un compañero, pero ha dado permiso para publicarlo en la web del profesor con nuestros nombres y aquí no creo que tenga ningún problema 🙂

La sintaxis es algo compleja si no se conoce, si estáis interesados podéis consultar la web de la asignatura, donde además hay otras dos soluciones; otra opción es esperar a que ponga algún ejemplo explicado más adelante.

Si alguien está interesado que lo diga en los comentarios y así lo tendré presente :P.

Filed under: Seguridad 4 Comments
1Jun/081

Videos Shmoocon 2008

Posted by Eloi Sanfèlix

Leído (otra vez) en McGrew Security Blog, me entero de que se han subido los vídeos de las conferencias Schmoocon 2008. El link, este: http://www.shmoocon.org/2008/videos/.

Lo que hay... parece que un poco de todo. Yo de momento me he bajado un par, la de Practical Crypto for Hackers y la que va sobre el protocolo PEAP. Solo he visto la primera, y aunque no me ha aportado demasiado de nuevo está interesante... da un repaso a los distintos tipos de algoritmos de cifrado ( de flujo, simétricos, asimétricos ) y al final da un protocolo de plausible deniability.

Algo interesante que yo no había pensado es el efecto que tienen los sistemas de ficheros con journaling sobre el borrado seguro ( wiping ). Puesto que el journaling precisamente posibilita que se puedan recuperar los datos ante un fallo del sistema operativo antes de que se hayan escrito al disco, es posible que por mucho que hayas utilizado una herramienta de wiping teóricamente segura se puedan reconstruir tus datos a partir del fichero de journal.

A ver si me los meto en el ipod y tengo algo para pasar el rato durante los trayectos de tren Eindhoven-Delft y viceversa 🙂 Que lo disfrutéis.

29May/080

Resumen de SPKI

Posted by Eloi Sanfèlix

Por si a alguien le interesa, y ya que el profesor ha opinado que está bastante completo, aquí dejo un documento que resume el juego de estándares Simple Public Key Infrastructure definidos en los RFC 2692 y 2693 y en un par de Internet Drafts.

También os dejo un par de enlaces con otra información sobre SPKI:

Documento

Página de SPKI

SPKI en la Wikipedia

Filed under: General No Comments
26May/084

Acceso System en Windows Vista

Posted by Eloi Sanfèlix

Leo en Slashdot y McGrew Security que Jesse Varsalone ha publicado un pequeño truco que permite conseguir acceso System en Vista sin necesidad de conocer o cambiar el password del usuario Administrador, si se tiene acceso físico a la máquina y un CD de Linux (o cualquier otra cosa que te permita renombrar archivos en NTFS).

Simplemente se renombra el cmd .exe (espacio en el nombre patrocinado por mod_security) a Utilman.exe ( Utility Manager ) y en la pantalla de login de Vista presionas Windows-U. Inmediatamente se abrirá el nuevo Utilman.exe, dandonos una shell con privilegios SYSTEM.
Un vídeo demostrándolo aquí: http://www.offensive-security.com/movies/vistahack/vistahack.html

Aunque me lo creo... alguien con Vista que lo pueda probar?

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 🙂

10May/081

Fault injection: Ataque a RSA-CRT

Posted by Eloi Sanfèlix

Después de mucho tiempo en el letargo, volvemos a la carga con un ejemplo de inyección de fallos en el algoritmo RSA empleando el Teorema Chino del Resto ( Chinese Remainder Theorem ). Este teorema permite que si tenemos un par de ecuaciones tal que

x \equiv x_p \pmod{p}

x \equiv x_q \pmod{q}

Con p y q primos, se pueda calcular x ( mod p·q ) a partir de ellos y dos resultados auxiliares.

Por ello, el algoritmo RSA se puede dividir de una potencia modular con un módulo enorme a dos operaciones modulares de módulos de tamaño aproximadamente la mitad del primero. Con esto se consigue una mejora de rendimiento, lo cual es fundamental en aplicaciones con recursos limitados como smart cards. Además, los resultados auxuliares pueden ser precalculados, con lo cual se pueden cargar en la tarjeta al mismo tiempo que la clave y reducir la carga.

Sin embargo, en estos entornos es posible inyectar fallos tal y como expliqué en esta entrada. ¿Y qué tiene esto que ver con las implementaciones de RSA usando el CRT? Como vamos a ver, mucho 🙂

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/081

Taller de analísis forense by Vic_Thor

Posted by Eloi Sanfèlix

Pues sí, el gran Vic_Thor vuelve a la carga, esta vez con un taller de Análisis Forense que acaba de empezar en Wadalbertia.

De momento solo tenemos parte de la primera entrega, que va sobre discos duros, sistemas de fichero y esas cosas. Se puede leer aquí, y la verdad es que el índice y lo que comenta pinta interesante. Además como siempre bien explicado y de forma sencilla, marca de la casa.

Que lo disfrutéis ;-).

Filed under: Docs, Seguridad 1 Comment
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
11Apr/083

Outline de Phrack #65

Posted by Eloi Sanfèlix

Acabo de enterarme via la web oficial de los temas que tratará el número 65 de Phrack. Aunque aun no se ha publicado, supongo que dentro de poco estará disponible este nuevo número.

Respecto a los contenidos, hay un par de artículos sobre hooking en windows. Además hay un artículo sobre explotación dentro de una serie que iniciaron en el último número sobre exploits antiguos, que esta vez va sobre un overflow en SAMBA (en la implementación de WINS).

Además habrá algo sobre NAT y UPNP, y más cosillas... habrá que mantenerse al tanto 🙂

 Actualización: El nuevo número ha sido publicado esta madrugada 😉

Filed under: Docs, Seguridad 3 Comments