[HACK] ¿Problema de seguridad en MSNMessenger?

Alejandro Sanchez Acosta asanchez at gnu.org
Mon Sep 22 15:11:32 CEST 2003


El jue, 18-09-2003 a las 17:36, Sergio Pozo Hidalgo escribió:
> > 	Estamos hablando de un cliente cuyo codigo reside y se ejecuta
> > 	en la maquina local. Por mucho SSL o lo que quiera que use,
> > 	el cliente tal cual tendra que tener la posibilidad de cifrar
> > 	y descifrar todo el trafico; asi que bastara con cambiar el
> > 	punto de entrada: en lugar de analizar el trafico que circula
> > 	por la red habra que analizar los mensajes desde dentro del
> > 	propio cliente usando las tecnicas habituales... (supongo que
> > 	lo mas sencillo cambiar las librerias de SSL dinamicas por otras
> > 	que registren todo el trafico antes de llamar a las funciones
> > 	reales).
> 
> Efectivamente, coincido contigo (no lo había tenido en cuenta). Sin
> embargo, tampoco debemos olvidarnos que la biblioteca de cifrado que use
> (si es que estas funciones no van incrustadas en el propio programa
> principal) MSN6 probablemente sea propietaria. Por lo tanto, estamos
> hablando o bien de hacer ingeniería inversa a TODAS estas funciones de
> SSL o bien a parchear como bien dices, puntos de entrada a ella.

MSN 6 que usa msnvp8 unicamente lo que hace es autentificación via SSL,
toda la comunicación por mensajes sigue siendo en plano por lo que no
habrá gran problema. Cuando la comunicación empiece a ser cifrada es
cuando realmente empezaremos a tener un problema y será cuando
definitivamente haya que dejar usar en otros sistemas que no sea windows
la red de mensajería IM de MSN.

Actualmente ya hay implementaciones de msnvp8 para Jabber, en el
transporte de MSN-T o en la implementación de Miranda, un cliente de
multimensajeria IM, en la que ya se cuenta de una implementación en C++
de msnvp8.

Por lo demás ya hay drafts sobre msnvp7 y lo único que cambia es la
negociación al autentificar en msnvp8, que como he comentado hace lo
siguiente:

C: USR <transactionID> TWN I <userid>   // Inicia la transación
[S: <may issue redirect>]
S: USR <transactionID> TWN S .. lc=...
Toma el valor de 'lc=' hasta el final de la petición hecha por el
cliente.

Comienza SSL.  ( ver
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/miu/src/java/miu/im/msn/MSNHttpsAuth.java)
// Consigue el HOST con el que autentica SSL.
1. Baja https://nexus.passport.com/rdr/pprdr.asp
2. Mira la cabecera de respuesta de PassportURLs
3. Divide el valor de la cabezera en ','
4. Mira la parte que comienza con "DALogin=". Extrae loginURL(host&URI)

// Ahora autentifica.
1. Hace una petición de nuevo con el LoginURL desde la cabecera de
arriba DALogin.
2. En la fase de respuesta añade la cabecera de autorización:
Passport1.4
  
OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=<urlencoded
   userid>,pwd=<urlencoded password>,<challenge got from USER
   <transactionID> TWN S <challenge>
3. Lee de la cabecera de la repuesta el 'Authentication-Info'
4. Divide el valor en ',' y obtiene el valor de autenticación para
finalizar el proceso de login, sería como el token de autenticación.

Cierra SSL y empieza el proceso de login del USR.
Envia el cliene:
C: USR <transactionID> TWN S <auth-token>
Servidor responde con:
S: USR <transactionID> OK

Luego por lo demás sería msnvp7, exactamente igual que antes. Como veis
tampoco parece muy complicado de implementar y es lo que refleja en
Miranda.

Un saludo.
-- 
Alejandro Sanchez Acosta <asanchez at gnu.org>





More information about the hacking mailing list