TeamViewer bajo la lupa Forense.

TeamViewer es un programa que permite a los usuarios controlar remotamente otro ordenador sin necesidad de grandes conocimientos informáticos. Tan solo es necesario introducir un identificador y un PIN para de este modo tomar el control de cualquier ordenador, así de fácil, desde cualquier parte del mundo podremos controlar un ordenador con la única condición de que disponga de una conexión a Internet y el programa Teamviewer instalado. Lógicamente este es un programa totalmente lícito, que está pensando para administrar o reparar remotamente ordenadores sin la necesidad de estar físicamente delante de ellos.

 

Fig. 1 Hack Teamviewer

 

Pero, si este software está diseñado para ahorrar costes y facilitar el trabajo a los administradores de sistemas. – ¿Qué hago escribiendo sobre TeamViewer en GLIDER.es?. – La realidad nos indica que muchos “ciber ataques“, normalmente sufridos en pequeñas y medianas empresas, no son producto de APTs (Advanced Persistent Threat), ni tampoco de ataques avanzados mediante el uso malware tipo 0 Day cuyo código no es todavía conocido. Siguiendo la premisa del principio de economía de la Navaja de Ockham: en igualdad de condiciones, la explicación más sencilla suele ser la más probable. Así que si nos tenemos que enfrentar a un ataque que ha sufrido una empresa, por el cual le han borrado toda la base de datos de clientes o facturación. – ¿Por dónde comenzaríamos el análisis?, ¿buscaríamos trazas de malware o analizaríamos los logs de acceso de la máquina comprometida para ver y determinar lo que ha ocurrido?. Si disponemos de un equipo lo suficientemente grande, podemos comenzar a estudiar varias hipótesis al mismo tiempo, pero en condiciones normales, iremos una por una, siguiéndola hasta que la podamos descartar o nos lleve a unos indicios suficientemente robustos que identifiquen la causa del incidente de seguridad. Hoy, como tantas otras veces, el origen del ataque provine de algo tan antiguo como es el ego, la venganza o la ira, más concretamente de un hipotético empleado que fue despedido de una empresa y como venganza decidió conectarse a los servidores de su antiguo trabajo para hacer todo cuanto daño esté a su alcance.

Ahí es donde entra TeamViewer, si conjugamos una empresa con una política de credenciales laxa, que no elimina las cuentas de usuario de un empleado despedido, con un empleado/delincuente, con mucho ego, mucha ira, mucha ansía de venganza y poco sentido común y auto control, que aprovechándose del programa que utilizó durante años para conectarse de forma remota a su empresa y poder trabajar desde fuera de la sede de la misma, obtenemos un nuevo artículo para GLIDER.es. Un nuevo artículo en el que TeamViewer será la fuente de Evidencia Digital a estudiar.

 

Fig. 3 Una fuente de evidencia digital

 

Tampoco hay que olvidar que no siempre todo va a ser culpa de un empleado al que han despedido y decide conectarse de forma remota a su anterior empresa para eliminar o robar información importante. En otras ocasiones el ataque podrá ser fruto de una mala configuración del sistema, por ejemplo al exponer de forma pública e involuntaria las credenciales de acceso al sistema remoto de TeamViewer, credenciales que alguien con no muy buenas intenciones puede utilizar para hacer el mal.

 

Fig. 4 Leak TeamViewer en un establecimiento hostelero

 

Aclarada la motivación de este artículo, comenzaremos a desgranar fichero por fichero el funcionamiento de TeamViewer y que datos nos pueden ser interesantes en caso de tener que averiguar qué es lo que ha ocurrido con un sistema informático que ha sufrido un sabotaje, un ciber ataque o cualquier tipo de acto mal intencionado. Comenzamos:

En primer lugar hay que diferenciar entre dos elementos distintos en una conexión de TeamViewer, por un lado estará el cliente, es decir, desde dónde se controla remotamente el ordenador. Por otro lado estará el servidor, es decir, el ordenador que se controla remotamente desde el cliente. Es importante establecer esta diferenciación, ya que los logs (registros de actividades) que vamos a encontrar en ambos equipos son diferentes.

Comenzaremos analizando el servidor. Para poder conectarnos remotamente a un equipo es preciso que este disponga de conexión a Internet y del programa TeamViewer instalado e iniciado. Lo habitual es que necesitemos el ID y la contraseña del equipo remoto para poder controlarlo, sin esta información no podremos controlarlo, ya que estos datos son los que evitan que alguien no autorizado pueda tomar el control de un equipo de forma remota, por eso es muy importante evitar que nadie no autorizado pueda ver estas credenciales.

En el servidor nos tendremos que centrar en dos ficheros a la hora de realizar el análisis, el primero de ellos se encuentra en la ruta: “C:\Program Files (x86)\TeamViewer\Connections_incoming.txt“, en el que se registrarán las conexiones entrantes, es decir, quien está controlando el equipo. La primera columna corresponde al ID del usuario de Teamviewer del ordenador que está controlando remotamente el equipo, la segunda columna corresponde al usuario de Windows que ha iniciado sesión en la máquina de control, la tercera y cuarto columna corresponden a las fechas de conexión y la quinta columna corresponde al usuario que ha iniciado sesión en la maquina que está siendo controlada remotamente.

 

Fig. 5 Fichero de log Connections_incoming.txt

 

Por otro lado en la ruta: “C:/Usuarios/(usuario)/AppData/Local/TeamViewer/Connections.txt” encontraremos un registro de todas las conexiones remotas que se han establecido en el ordenador, de nuevo la primera columna es el identificador de TeamViewer, la segunda y tercera columna son las fechas de conexión y la última columna es el nombre del usuario que inició sesión en la maquina Windows.

 

Fig. 6 Fichero de log Connections.txt

 

Si creemos que este log puede estar alterado, podremos buscar los ficheros con extensión “.tvc” de Teamviewer, y de este modo a través de su fecha de creación, cotejar si sus fechas corresponden con los ficheros de log.

 

Fig. 7 Ficheros TVC

 

Aunque las explicaciones anteriores son para máquinas Windows, en sistemas Linux encontraremos los mismos ficheros, para saber dónde se encuentran podremos ejecutar los comandos: “updatedb” y “locate” para localizarlos.

Ahora pasaremos al análisis del ordenador cliente, es decir, desde dónde se controlará remotamente al otro equipo, como se muestra en la siguiente imagen tan solo es necesario insertar el ID del asociado y su contraseña para poder establecer el control remoto. Este número de ID, es el que nos permitirá identificar en todo momento a todos los usuarios que están haciendo uso de TeamViewer.

 

Fig. 8 Venta inicial de TeamViewer

 

En este caso el cliente es un sistema Linux, pero en realidad esto nos da igual, ya que podremos obtener exactamente la misma información que en un cliente Windows. El primer fichero interesante se llama “global.conf” que encontraremos normalmente en la ruta: “etc/teamviewer“. En este fichero podremos encontrar dos datos muy interesantes, que son el ID de usuario de Teamviewer (445328025) y la versión de la aplicación con la que está operando, en este caso la 13.0.06634.

 

Fig. 9 Fichero del log global.conf

 

La información del identificador único del cliente, también la podremos encontrar en otro fichero llamado “client.conf” que se encontrará en la ruta “/.config/teamviewer“. Por eso me gusta tanto la informática forense, podremos encontrar el mismo dato repartido en distintos ficheros, lo que nos permitirá detectar posibles manipulaciones o alteraciones de la evidencia.

 

Fig. 10 Fichero de log client.conf

 

En la ruta “/local/share/teamviewer13/logfiles” encontraremos si cabe uno de los ficheros de log más importantes, este es el: “TeamViewer13_Logfile.log“, (el número 13 irá correlativo a la versión del programa). Lo primero que encontraremos en este fichero, es un log de todas las conexiones remotas que ha establecido el ordenador en cuestión, es decir, aparecerán los ordenadores que se han controlado remotamente desde ese equipo. Como se aprecia en la parte sombreada, veremos la fecha de conexión, el usuario en este caso de Windows al que nos conectamos de forma remota (MANU-PC) y el identificador único de Teamviewer (821799848).

 

Fig. 11 Fichero de log TeamViewer13_Logfile.log

 

Si seguimos leyendo este log hacía abajo, veremos la fecha y la hora concreta en la que se cierra la sesión de control remoto, en este caso se cerró a las 20:12 horas del día 25 de mayo de 2018. Este dato nos permitirá genera una zona roja del “timeline” para analizar de forma mucho más pormenorizada el resto de logs y registros de eventos de la máquina afectada.

 

Fig. 12 Log con la finalización de la conexión

 

Otro fichero que nos encontraremos en la ruta: “/local/share/teamviewer13/logfiles“, será el “startup.log“, en el que de nuevo podremos obtener la versión concreta de TeamViewer (13.0.6634), el perfil de usuario (m4nu) y el tipo de escritorio utilizado, en mi caso un Linux Mint Cinnamon.

 

Fig. 13 Fichero de log startup.log

 

Volviendo al fichero “TeamViewer13_Logfile.log“, de nuevo nos volvemos a encontrar con datos repetidos, lo que por cierto, ¡nos vienen muy bien!. Estos datos son:

 

      Hora y fecha de inicio de sesión: 20:01 horas del día 25/05/2018

     Versión de TeamViewer: 13.0.6634

     Nivel de registro de logs: 100 (Máximo)

     Tipo de licencia: 10000 (No Comercial)

     Servidor de Teamviewer utilizado: master13.teamviewer.com

    Tipo de procesador: Intel Core i5 4210U

     Sistema operativo: Linux Mint 18.3 Sylvia de 64bits

     Direcciones IP locales: 192.168.1.39…

 

Fig. 14 Log con los datos de usuario

 

Y la pregunta del millón… ¿TeamViewer registra la dirección IP pública?, la respuesta es que si,  pero para encontrarla tendremos que bucear lo suficiente en los logs de la aplicación, normalmente buscando la cadena “UDP” podemos tener suerte:

 

Fig. 15 IP de conexión en TeamViewer

 

Siguiendo buceando por el fichero de log: “TeamViewer13_Logfile.log“, podremos confirmar de nuevo el usuario que ha ejecutado la herramienta, en este caso fue el usuario: “m4nu“.

 

Fig. 16 Datos de usuario del sistema

 

En este caso el análisis fue bastante sencillo ya que los archivos de log era lo suficientemente cortos como para poder leerlos directamente e ir recabando los datos que nos pudieran ser de interés, por desgracia en la “vida real” las cosas no son así, y es preciso utilizar expresiones regulares o cualquier otro tipo de búsqueda automatizada para poder hallar estos artefactos forenses, ya que si no, nos podríamos tirar horas y horas buscando en estos logs sin llegar a encontrar nada de interés.

Como guinda del pastel, os recuerdo que TeamViewer almacena las contraseña en la memoria RAM del ordenador (formato Unicode), por lo que si hemos podido realizar un dumpeado de memoria RAM del equipo a analizar, podremos llegar a obtener las credenciales de TeamViewer. Ahora gracias a Este Scrip escrito por @vah_13, podremos realizar el parseo de la memoria para localizar las credenciales de TeamViewer de forma totalmente automatizada.

 

Fig. 17 Script para dumpear contraseñas de TeamViewer

 

Si os habéis quedado con ganas de mas forense a TeamViewer, quizás en otra ocasión os hable de los registros que deja la transferencia de ficheros entre dos máquinas en TeamViewer u otras características de esta herramienta, como por ejemplo iniciar sesión en una máquina a través de una cuenta de correo electrónico vinculada al servidor.

Salu2

¿Te ha gustado este artículo? Si quieres, puedes ayudarme a escribir el siguiente artículo de GLIDER invitándome a un café con hielo a través de mi perfil en Ko-fi.com

 

Pulsa Aquí para invitarme a un café con hielo.

  Salu2.

Manuel Guerra

Manuel Guerra

Mi nombre es Manuel Guerra. Investigador especializado en: [eCrime] | [Forensic] && [Hacking]. Editor de GLIDER.es

Navegación de la entrada


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puede usar las siguientes etiquetas y atributos HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>