- Регистрация
- 14.05.16
- Сообщения
- 11.398
- Реакции
- 501
- Репутация
- 0
TeamViewer — популярная программа для удалённого доступа к рабочему столу. Поэтому довольно интересно посмотреть, как она хранит пароли. Если вкратце, пароли хранятся в реестре Windows в зашифрованном виде. Для шифрования используется алгоритм AES-128-CBC и секретный ключ 0602000000a400005253413100040000.
Такой метод сохранения паролей и связанное с ним повышение привилегий официально зарегистрированы 7 февраля 2020 года как уязвимость
You must be registered for see links
(применима ко всем версиям TeamViewer до 14.7.1965 включительно).Начинающий специалист по безопасности, который обнародовал эту уязвимость, наткнулся на неё случайно. Он
You must be registered for see links
, что работал у клиента и во время резервного копирования заметил ключи реестра TeamViewer, которые назывались OptionsPasswordAES и SecurityPasswordAES.Впоследствии ему стало интересно, что это за ключи и как вообще TeamViewer хранит пароли. Он импортировал их на свежую систему на виртуальной машине и запустил сканер
You must be registered for see links
, который собирает пароли в системе. Сканер выдал пароль TeamViewer открытым текстом.Сканер BulletPassView
Затем с помощью программы Cheat Engine (для взлома игр под Windows) специалист провёл поиск этого пароля в оперативной памяти — и нашёл его опять же открытым текстом. Позже выяснилось, что данная уязвимость уже зафиксирована два года назад как
You must be registered for see links
.Потом пришло время проверить, откуда в памяти у клиента TeamViewer берётся ключ: с сервера или с локального хоста. Оказалось, что сетевой трафик отсутствует, но пароль в памяти всё равно есть. Реверс-инжиниринг бинарника TeamViewer с помощью IDA Pro,
You must be registered for see links
,
You must be registered for see links
и
You must be registered for see links
занял несколько недель, но ничего не дал, хотя парень по ходу дела освоил несколько новых инструментов, так что процесс нельзя назвать бесполезным.В ходе поиска информации оказалось, что немало людей уже задавалось вопросом, как найти в ресурсах AES-ключи для игр Unity. Оказалось, что это совсем несложный процесс, для которого достаточно
You must be registered for see links
. Спустя шесть часов он нашёл фрагмент кода TeamViewer, отвечающий за 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ò^¨×.
Этот код берёт из реестра несколько байт ServerPasswordAES и расшифровывает их с помощью ключа, полученного путём XOR'а прописанных значений esi и eax. В результате получается ключ 0602000000a400005253413100040000, а значение IV равняется 0100010067244F436E6762F25EA8D704.
В версии TeamViewer 14 новый скриптовый движок позволяет повысить привилегии до NT AUTHORITY\SYSTEM, прочитав пароль TeamViewer в реестре с правами юзера.
Ну и ещё можно расшифровать некоторые чужие пароли, погуглив [SecurityPasswordAES], [OptionsPasswordAES], [SecurityPasswordExported] или [PermanentPassword] с параметром поиска [filetype:reg].
TeamViewer закрыла эту уязвимость в последних версиях. Как теперь программа шифрует пароли, ещё не разобрались.
GlobalSign представляет масштабируемые PKI-решения для организаций любого размера.
You must be registered for see links
Подробнее: +7 (499) 678 2210, [email protected]