Como o TeamViewer armazena senhas


O TeamViewer é um programa popular para acesso remoto à área de trabalho. Portanto, é muito interessante ver como ele armazena senhas. Em resumo, as senhas são criptografadas no registro do Windows. Para criptografia, o algoritmo AES-128-CBC e a chave secreta 0602000000a400005253413100040000 são usados .

Esse método de salvar senhas e a escalação de privilégios associados foram oficialmente registrados em 7 de fevereiro de 2020 como a vulnerabilidade CVE-2019-18988 (aplica-se a todas as versões do TeamViewer até 14/07/1965 inclusive).

O especialista em segurança iniciante que revelou essa vulnerabilidade tropeçou nela por acidente. Ele diz que trabalhou para o cliente e durante o backup observou as chaves de registro do TeamViewer, que foram chamadas OptionsPasswordAESe SecurityPasswordAES.

Posteriormente, ele se interessou pelo que eram essas chaves e como o TeamViewer armazena senhas em geral. Ele os importou para um sistema novo em uma máquina virtual e lançou o scanner BulletPassView , que coleta senhas no sistema. O scanner forneceu a senha do TeamViewer em texto não criptografado.


Scanner BulletPassView

Então, usando o programa Cheat Engine (para invadir jogos no Windows), um especialista procurou essa senha na RAM - e a encontrou novamente em texto simples. Mais tarde, verificou-se que essa vulnerabilidade já estava corrigida há dois anos como CVE-2018-14333 .

Chegou a hora de verificar de onde a chave é retirada na memória do cliente TeamViewer: do servidor ou do host local. Descobriu-se que não há tráfego de rede, mas ainda há uma senha na memória. A engenharia reversa do binário TeamViewer usando IDA Pro, API Monitor , procdump e Frida levou várias semanas, mas não deu nada, embora o cara tenha dominado várias novas ferramentas ao longo do caminho, para que o processo não possa ser considerado inútil.

Durante a busca por informações, algumas pessoas já se perguntaram como encontrar as chaves da AES para os jogos do Unity nos recursos. Descobriu-se que este é um processo muito simples, para o qual basta usar um depurador . Seis horas depois, ele encontrou um pedaço do código do TeamViewer responsável pela criptografia 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 retira alguns bytes do registro ServerPasswordAESe os descriptografa com a chave obtida pelo valor prescrito XOR'a esie eax. O resultado é uma chave 0602000000a400005253413100040000e o valor de IV é igual 0100010067244F436E6762F25EA8D704.

No TeamViewer 14, o novo mecanismo de script permite aumentar os privilégios NT AUTHORITY\SYSTEMlendo a senha do TeamViewer no registro com direitos de usuário.

Bem, você também pode descriptografar outras senhas pesquisando [SecurityPasswordAES], [OptionsPasswordAES], [SecurityPasswordExported] ou [PermanentPassword] com o parâmetro de pesquisa [filetype: reg].

O TeamViewer fechou esta vulnerabilidade nas versões recentes. Como o programa agora criptografa senhas, eles ainda não descobriram isso.

All Articles