Bagaimana TeamViewer menyimpan kata sandi


TeamViewer adalah program populer untuk akses jarak jauh ke desktop. Karena itu, cukup menarik untuk melihat bagaimana cara menyimpan kata sandi. Singkatnya, kata sandi dienkripsi dalam registri Windows. Untuk enkripsi, algoritma AES-128-CBC dan kunci rahasia 0602000000a400005253413100040000 digunakan .

Metode menyimpan kata sandi ini dan eskalasi hak istimewa yang terkait secara resmi terdaftar pada 7 Februari 2020 sebagai kerentanan CVE-2019-18988 (berlaku untuk semua versi TeamViewer hingga dan termasuk 07/14/1965).

Spesialis keamanan pemula yang meluncurkan kerentanan ini secara kebetulan menemukannya. Dia mengatakan bahwa dia bekerja untuk klien dan selama cadangan memperhatikan kunci registri TeamViewer, yang dipanggil OptionsPasswordAESdan SecurityPasswordAES.

Selanjutnya, ia menjadi tertarik pada apa kunci-kunci ini dan bagaimana TeamViewer menyimpan kata sandi secara umum. Dia mengimpornya ke sistem baru di mesin virtual dan meluncurkan pemindai BulletPassView , yang mengumpulkan kata sandi dalam sistem. Pemindai memberi kata sandi TeamViewer dalam teks yang jelas.


Scanner BulletPassView

Kemudian, menggunakan program Cheat Engine (untuk meretas game di Windows), seorang spesialis mencari kata sandi ini dalam RAM - dan menemukannya lagi dalam teks biasa. Kemudian ternyata kerentanan ini sudah diperbaiki dua tahun lalu sebagai CVE-2018-14333 .

Maka sudah waktunya untuk memeriksa dari mana kunci diambil dari memori klien TeamViewer: dari server atau dari host lokal. Ternyata tidak ada lalu lintas jaringan, tetapi masih ada kata sandi di memori. Rekayasa kebalikan dari biner TeamViewer menggunakan IDA Pro, API Monitor , procdump dan Frida membutuhkan waktu beberapa minggu, tetapi tidak memberikan apa-apa, meskipun orang itu menguasai beberapa alat baru di sepanjang jalan, sehingga prosesnya tidak bisa disebut tidak berguna.

Selama pencarian informasi, ternyata beberapa orang sudah bertanya-tanya bagaimana menemukan kunci AES untuk game Unity di sumber daya. Ternyata ini adalah proses yang sangat sederhana, yang cukup untuk menggunakan debugger . Enam jam kemudian, ia menemukan sepotong kode TeamViewer yang bertanggung jawab untuk enkripsi 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รฒ^ยจร—.

Kode ini mengambil beberapa byte dari register ServerPasswordAESdan mendekripsi mereka dengan kunci yang diperoleh oleh XOR'a nilai yang ditentukan esidan eax. Hasilnya adalah kunci 0602000000a400005253413100040000, dan nilai IV sama 0100010067244F436E6762F25EA8D704.

Di TeamViewer 14, mesin skrip baru memungkinkan Anda untuk meningkatkan hak istimewa dengan NT AUTHORITY\SYSTEMmembaca kata sandi TeamViewer di registri dengan hak pengguna.

Nah, Anda juga dapat mendekripsi beberapa kata sandi lainnya dengan googling [SecurityPasswordAES], [OptionsPasswordAES], [SecurityPasswordExported] atau [PermanentPassword] dengan parameter pencarian [filetype: reg].

TeamViewer telah menutup kerentanan ini dalam versi terbaru. Karena program sekarang mengenkripsi kata sandi, mereka belum menemukan jawabannya.

All Articles