Wie TeamViewer Passwörter speichert



TeamViewer ist ein beliebtes Programm für den Fernzugriff auf den Desktop. Daher ist es sehr interessant zu sehen, wie Passwörter gespeichert werden. Kurz gesagt, Kennwörter werden in der Windows-Registrierung verschlüsselt. Für die Verschlüsselung werden der AES-128-CBC-Algorithmus und der geheime Schlüssel 0602000000a400005253413100040000 verwendet .

Diese Methode zum Speichern von Kennwörtern und die damit verbundene Eskalation von Berechtigungen wurden am 7. Februar 2020 offiziell als Sicherheitsanfälligkeit CVE-2019-18988 registriert (gilt für alle Versionen von TeamViewer bis einschließlich 14.07.1965).

Der unerfahrene Sicherheitsspezialist, der diese Sicherheitsanfälligkeit aufgedeckt hat, ist zufällig darauf gestoßen. Er sagt, dass er für den Client gearbeitet hat und während der Sicherung die TeamViewer-Registrierungsschlüssel bemerkt hat, die aufgerufen wurden OptionsPasswordAESund SecurityPasswordAES.

Anschließend interessierte er sich für diese Schlüssel und wie TeamViewer Passwörter im Allgemeinen speichert. Er importierte sie in ein neues System in einer virtuellen Maschine und startete den BulletPassView- Scanner , der Passwörter im System sammelt. Der Scanner gab das TeamViewer-Passwort im Klartext.


Scanner BulletPassView

Anschließend suchte ein Spezialist mithilfe des Cheat Engine-Programms (zum Hacken von Spielen unter Windows) im RAM nach diesem Kennwort - und fand es im Klartext wieder. Später stellte sich heraus, dass diese Sicherheitsanfälligkeit bereits vor zwei Jahren als CVE-2018-14333 behoben wurde .

Dann ist es Zeit zu überprüfen, woher der Schlüssel im Speicher des TeamViewer-Clients stammt: vom Server oder vom lokalen Host. Es stellte sich heraus, dass kein Netzwerkverkehr vorhanden ist, sich jedoch noch ein Kennwort im Speicher befindet. Das Reverse Engineering der TeamViewer-Binärdatei mit IDA Pro, API Monitor , procdump und Frida dauerte mehrere Wochen, gab aber nichts, obwohl der Typ auf dem Weg mehrere neue Tools beherrschte, sodass der Prozess nicht als nutzlos bezeichnet werden kann.

Bei der Suche nach Informationen stellte sich heraus, dass sich bereits einige Leute gefragt hatten, wie man AES-Schlüssel für Unity-Spiele in den Ressourcen findet. Es stellte sich heraus, dass dies ein sehr einfacher Prozess ist, für den es ausreicht, einen Debugger zu verwenden . Sechs Stunden später fand er einen TeamViewer-Code, der für die AES-Verschlüsselung verantwortlich war:

=================================================
"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ò^¨×.

Dieser Code nimmt einige Bytes aus dem Register ServerPasswordAESund entschlüsselt sie mit dem Schlüssel, der durch den von XOR'a vorgeschriebenen Wert esiund erhalten wird eax. Das Ergebnis ist ein Schlüssel 0602000000a400005253413100040000und der Wert von IV ist gleich 0100010067244F436E6762F25EA8D704.

In TeamViewer 14 können Sie mit der neuen Skript-Engine die Berechtigungen erhöhen, indem Sie NT AUTHORITY\SYSTEMdas TeamViewer-Kennwort in der Registrierung mit Benutzerrechten lesen.

Sie können auch einige andere Kennwörter entschlüsseln, indem Sie [SecurityPasswordAES], [OptionsPasswordAES], [SecurityPasswordExported] oder [PermanentPassword] mit dem Suchparameter [Dateityp: reg] googeln.

TeamViewer hat diese Sicherheitsanfälligkeit in neueren Versionen geschlossen. Da das Programm jetzt Passwörter verschlüsselt, haben sie es noch nicht herausgefunden.



GlobalSign PKI- .



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

All Articles