Incident Response, Security and Forensics"

.

lunes, 21 de diciembre de 2009

Analizando Skype



Hola lectores,

El caso que vamos a ver hoy empieza a ser muy común con la crisis que tenemos encima. De todos es sabido que la facturación telefónica de móviles y de teléfonos fijos se revisa en las empresas con mucha exactitud con objeto de reducir gastos.

En este caso una empresa de servicios de soporte telefónico recibe una factura elevada por un empleado y se quiere analizar con objeto de depurar responsabilidades.

Más tarde se detecta una llamada a un número 800 lo que implica que se ha llamado a una linea erótica.
El empleado disponía de la aplicación Skype. Objeto de este post.


Skype es un programa que permite realizar llamadas utilizando Internet como medio. Esta aplicación es gratuita e incluye una característica denominada SkypeOut que permite a los usuarios llamar a teléfonos convencionales, cobrándoseles diversas tarifas según el país de destino. Otra opción que brinda Skype es SkypeIn, gracias al cual te asignan un número de teléfono para que desde un aparato telefónico en cualquier parte del mundo puedan contactar con tu ordenador.

El código y protocolo de Skype es propietario y no se dispone de código fuente. Su éxito reside en comprimir la transmisión de voz sin que afecte a la calidad. El programa ha sido desarrollado en Pascal, usando Delphi y también ha sido portado a Linux utilizando las librerias Qt.

Skype utiliza el algoritmo AES A 256-bit para cifrar la voz, la transferencia de archivos o un mensaje instantáneo. Para la versión de pago se utiliza el algoritmo RSA a 2048-bit y 1536-bit para la negociación a la hora de establecer la conexión. Para ello utilizan una llave asimétrica lo cual permite evitar ataques man-in-the-middle.

Una vez instalado mantiene un histórico con información como llamadas, ficheros transferidos, sesiones de mensajería, etc.

Deciros también que en cuanto a privacidad el perfil publico de una persona se mantiene durante 10 días, después de no haber iniciado sesión este perfil se elimina

Los otros usuarios de Skype pueden ver todo lo que escribes en tu perfil público, salvo el campo de tu dirección de correo electrónico, ya que se cifra antes de enviarla a la red para que nadie pueda verla cuando buscan contactos. No obstante, si ya conocen tu dirección de correo electrónico, pueden buscarte en el directorio.

El siguiente caso esta basado en un hecho real vamos a por ello.


La información de Skype se almacena en 'Document and Settings\usuario\datos de programa\skype'


Figura 1: Ruta de ficheros de Skype

Dentro de la carpeta Skype nos encontramos el fichero 'shared.xml' que contiene parámetros relativos a la configuración del audio, cortafuegos y servidores o supernodos. También dentro de cada perfil esta el fichero 'config.xml' que contiene la mayoría de los parámetros configurables desde la propia aplicación y a decisión del usuario.



En estos parámetros podemos ver estos importantes datos:

Primero la fecha de instalación en formato de fecha juliana, que una vez convertido nos dice que se configuro el perfil el día 25 de Noviembre de este año. Ademas se ve el alias utilizado y los destinatarios de su agenda.
También dentro del perfil nos encontramos con dos ficheros (main y dc) en formato BD-Lite o SQLite, siendo 'main' el más importante en cuanto a la información que debemos de buscar.


Para ver su contenido nos podemos descargar la utilidad SQLlite Admin disponible desde aquí

Podemos ver en formato gráfico como se componen la base de datos en tablas e indices.



Para centrarnos en la investigación voy a omitir algunas tablas importantes, dado que no son relevantes para este ejemplo como la tabla de SMS'S enviados y llamadas de pago (simplemente no se utilizo estos servicios).

EMPEZAMOS

Una vez ejecutado SQLlite Admin podemos ver varias tablas por las que podemos 'navegar' viendo su estructura y sus datos. Previamente a este proceso os recuerdo la necesidad de hacer un hash de los ficheros a análizar para mantener la integridad de los datos como ya comente en anteriores post.

La tabla 'accounts' contiene las cuentas o perfiles dadas de alta en el equipo los campos de interés en este caso son:

Skypename: Nombre del usuario Skype
Fullname: Nombre completo
languages: Idioma
email: Correo
profile_timestamp:Fecha de creación o modificación del perfil
aliases: Alias utilizado
avatar_timestamp: Fecha de creación o modificación del avatar
registration_timestamp: Fecha de registro de la cuenta


Figura 2: Cuentas

Aquí tenemos la base para establecer nuestra línea de tiempo y algo muy importante el 'avatar' dado que muchas veces se utilizan seudonimos para ocultar información.

La tabla 'contacts' contiene los contactos agregados, veamos los campos de interes:

Skypename: Nombre del usuario Skype
Fullname: Nombre completo
Displayname: Nombre mostrado
Mood_text: Mensaje de bienvenida del usuario agregado a los contactos



Figura 3:Contactos

Como vemos la cuenta agregada 'virginia' es de lo más sugerente ;-)

La tabla 'messages' muestra:

Chatname: Contiene el emisor y receptor con un valor númerico que corresponde a una carpeta temporal del disco que crea por cada conversación de chat iniciada
Timestamp: Fechas de inicio de la conversación
autor: Orden en nicks que inician la conversación
body_xml: Contiene el contenido de la conversación
call_guid: Contiene el directorio temporal que se crea en la sesión



Figura 4:Mensajes

Esta información importante dado que contiene lo que se ha dicho entre diversas conversaciones entre fechas

Tabla chats


Name: Identificadores de la sesión
Timestamp: Fechas de inicio de la conversación
Participants: Lo dicho participantes en la conversación por chat
FriendIlname: Contiene mensajes de texto intercambiados
FriendIlname: Contiene mensajes de texto intercambiados
lastchange: Ultimo cambio entre mensajes
dbpath: Contiene el nombre de los ficheros temporales que se crean durante la conversación



Figura 5: Chats

Es muy similar a la anterior de mensajes pero con la diferencia de que obtenemos algo más de información como es el número de telefono a donde se ha realizado alguna llamada.

Para comprobarlo realizamos una busqueda por google y este es el resultado:


Figura 6: Sin comentarios

Como buen análista voy a llamar desde el teléfono del cliente para comprobarlo

Tabla 'Transfers':

Partner_handle y partner_dispname: Contiene el receptor de ficheros
Startime: Tiempo de comienzo del envío de fichero (creo)
Filepath:Ruta y fichero que se adjunto para el envío de este.
Filename:Nombre del fichero
Filesize: Tamaño del fichero enviado


Figura 7: Transferencias

Es curioso que ademas de darnos la ruta y el fichero de origen que es aparentemente un PDF en el campo 'filename' aparezca un EXE. Tiene pinta de troyano. Esta será una evidencia a buscar posteriormente en el disco

CONCLUSIONES

Prácticamente en estos ficheros SQLLite disponemos de una completa información que nos puede ayudar en la búsqueda de información, aunque el fabricante no pone a disposición las especificaciones dado que considera confidencial la arquitectura de la aplicación.

Hemos visto algunas tablas, pero existe mucha más información en otros campos que son relevantes y que por el caso y por tiempo no pueden ser comentadas, quizás mas adelante en futuros post podamos aportar algo más de luz.

4 comentarios:

Hola Pedro. Estupendo artículo, como siempre. ¿Cual es tu opinión sobre el uso de Skype en redes de empresas?. Desde mi modesta opinión, no me gusta la idea de una aplicación p2p que encripta el tráfico y que permite intercambiar ficheros.

Un saludo :-)

Hola Jose Luis, Gracias por tu comentario. Yo la verdad opino como tu, eso de que los datos (tu datos) viajen sin tu control, no me gusta nada. Mas cuando rompe la política de la empresa en el modo de enviar ficheros.

Un saludo

Hola Pedro, excelente analisis del programa, tengo una duda.. estoy pensando en programar algún tipo de programa que obtenga información detallada como en tu explicación, pero faltaría una cosa.. como se podría obtener la contraseña de acceso a la cuenta? no la guarda en ningún fichero como sus datos personales?

Un saludo!

SharkI

Muy buen artículo, gracias. Una pregunta. como podemos saber la fecha a partir del timestamp, que como dices esta en juliano ?