Cómo TeamViewer almacena las contraseñas



TeamViewer es un programa popular para acceso remoto al escritorio. Por lo tanto, es bastante interesante ver cómo almacena las contraseñas. En resumen, las contraseñas se cifran en el registro de Windows. Para el cifrado, se utilizan el algoritmo AES-128-CBC y la clave secreta 0602000000a400005253413100040000 .

Este método de guardar contraseñas y la escalada de privilegios asociados se registraron oficialmente el 7 de febrero de 2020 como la vulnerabilidad CVE-2019-18988 (se aplica a todas las versiones de TeamViewer hasta el 14/07/1965 inclusive).

El especialista en seguridad novato que dio a conocer esta vulnerabilidad se topó con ella por accidente. Él dice que trabajó para el cliente y durante la copia de seguridad notó las claves de registro de TeamViewer, a las que se llamó OptionsPasswordAESy SecurityPasswordAES.

Posteriormente, se interesó en cuáles eran estas claves y cómo TeamViewer almacena las contraseñas en general. Los importó a un sistema nuevo en una máquina virtual y lanzó el escáner BulletPassView , que recopila contraseñas en el sistema. El escáner proporcionó la contraseña de TeamViewer en texto claro.


Scanner BulletPassView

Luego, utilizando el programa Cheat Engine (para hackear juegos en Windows), un especialista buscó esta contraseña en la RAM y la encontró nuevamente en texto plano. Más tarde resultó que esta vulnerabilidad ya se solucionó hace dos años como CVE-2018-14333 .

Entonces es hora de verificar de dónde se extrae la clave en la memoria del cliente TeamViewer: desde el servidor o desde el host local. Resultó que no hay tráfico de red, pero todavía hay una contraseña en la memoria. La ingeniería inversa del binario TeamViewer usando IDA Pro, API Monitor , procdump y Frida tomó varias semanas, pero no dio nada, aunque el tipo dominó varias herramientas nuevas en el camino, por lo que el proceso no se puede llamar inútil.

Durante la búsqueda de información, resultó que bastantes personas ya se preguntaban cómo encontrar las claves AES para los juegos de Unity en los recursos. Resultó que este es un proceso muy simple, para el cual es suficiente usar un depurador . Seis horas después, encontró un código de TeamViewer responsable del cifrado AES:

=================================================
"ServerPasswordAES"=hex:88,44,d7,0a,b2,96,2a,3d,63,16,3c,ff,e4,15,04,fb
=================================================
Takes 8844d70ab2962a3d63163cffe41504fb into xmm0
Takes 5B659253E5E873D26723B7D5EAC06E3B into xmm1
pxor xmm0, xmm1
movdqa xmmword ptr ds:[eax],xmm0
[eax] = D3214559577E59EF04358B2A0ED56AC0

movdqa xmm1,xmmword ptr ds:[esi] | [esi] = 25C8C8BD4298BB32A57EECBDBD045BBB
movdqa xmm0,xmmword ptr ds:[eax] | [eax] = D3214559577E59EF04358B2A0ED56AC0
aesdec xmm0,xmm1 | One round of an AES decryption, using Equivalent Inverse Cipher, 128-bit data (state) from xmm1 with 128-bit round key from xmm2/m128; store the result in xmm1.
movdqa xmmword ptr ds:[eax],xmm0 | [eax] = 6F AA 98 76 DE 11 7D 8D 7E B6 EE 61 2D 3D 15 52
movdqa xmm1,xmmword ptr ds:[esi+10] | [esi+10]=[008FDE10]=79 DC 78 A6 67 50 73 8F E7 E6 57 8F 18 7A B7 06
add esi,20 |
dec ecx | ecx = 3
aesdec xmm0,xmm1 | do the actual decryption
movdqa xmmword ptr ds:[eax],xmm0 | [eax]=[008FDC90]=E3 58 26 46 A7 37 12 40 85 1C C0 43 7D 1F 1E 30

Three more rounds of aesdec then
aesdeclast xmm0, xmm1 .| Last round of AES decryption, using Equivalent Inverse Cipher, 128-bit data (state) from xmm2 with a 128-bit round key from xmm3/m128; store the result in xmm1.

008FDC90 01 00 01 00 67 24 4F 43 6E 67 62 F2 5E A8 D7 04 ....g$OCngbò^¨×.

Este código toma algunos bytes del registro ServerPasswordAESy los descifra con la clave obtenida por XOR esiy un valor prescrito eax. El resultado es una clave 0602000000a400005253413100040000, y el valor de IV es igual 0100010067244F436E6762F25EA8D704.

En TeamViewer 14, el nuevo motor de secuencias de comandos le permite aumentar los privilegios al NT AUTHORITY\SYSTEMleer la contraseña de TeamViewer en el registro con derechos de usuario.

Bueno, también puede descifrar algunas otras contraseñas buscando en Google [SecurityPasswordAES], [OptionsPasswordAES], [SecurityPasswordExported] o [PermanentPassword] con el parámetro de búsqueda [tipo de archivo: reg].

TeamViewer ha cerrado esta vulnerabilidad en versiones recientes. Como el programa ahora cifra las contraseñas, aún no lo han descubierto.



GlobalSign PKI- .



: +7 (499) 678 2210, sales-ru@globalsign.com

All Articles