TeamViewer — популярная программа для удалённого доступа к рабочему столу. Поэтому довольно интересно посмотреть, как она хранит пароли. Если вкратце, пароли хранятся в реестре Windows в зашифрованном виде. Для шифрования используется алгоритм AES-128-CBC и секретный ключ 0602000000a400005253413100040000.
Такой метод сохранения паролей и связанное с ним повышение привилегий официально зарегистрированы 7 февраля 2020 года как уязвимость CVE-2019-18988 (применима ко всем версиям TeamViewer до 14.7.1965 включительно).
Начинающий специалист по безопасности, который обнародовал эту уязвимость, наткнулся на неё случайно. Он рассказывает, что работал у клиента и во время резервного копирования заметил ключи реестра TeamViewer, которые назывались
OptionsPasswordAES
и SecurityPasswordAES
.Впоследствии ему стало интересно, что это за ключи и как вообще TeamViewer хранит пароли. Он импортировал их на свежую систему на виртуальной машине и запустил сканер BulletPassView, который собирает пароли в системе. Сканер выдал пароль TeamViewer открытым текстом.
Сканер BulletPassView
Затем с помощью программы Cheat Engine (для взлома игр под Windows) специалист провёл поиск этого пароля в оперативной памяти — и нашёл его опять же открытым текстом. Позже выяснилось, что данная уязвимость уже зафиксирована два года назад как CVE-2018-14333.
Потом пришло время проверить, откуда в памяти у клиента TeamViewer берётся ключ: с сервера или с локального хоста. Оказалось, что сетевой трафик отсутствует, но пароль в памяти всё равно есть. Реверс-инжиниринг бинарника TeamViewer с помощью IDA Pro, API Monitor, procdump и Frida занял несколько недель, но ничего не дал, хотя парень по ходу дела освоил несколько новых инструментов, так что процесс нельзя назвать бесполезным.
В ходе поиска информации оказалось, что немало людей уже задавалось вопросом, как найти в ресурсах AES-ключи для игр Unity. Оказалось, что это совсем несложный процесс, для которого достаточно использовать дебаггер. Спустя шесть часов он нашёл фрагмент кода 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$OCngbo^??.
Этот код берёт из реестра несколько байт
ServerPasswordAES
и расшифровывает их с помощью ключа, полученного путём XOR'а прописанных значений esi
и eax
. В результате получается ключ 0602000000a400005253413100040000
, а значение IV равняется 0100010067244F436E6762F25EA8D704
.В версии TeamViewer 14 новый скриптовый движок позволяет повысить привилегии до
NT AUTHORITY\SYSTEM
, прочитав пароль TeamViewer в реестре с правами юзера.Ну и ещё можно расшифровать некоторые чужие пароли, погуглив [SecurityPasswordAES], [OptionsPasswordAES], [SecurityPasswordExported] или [PermanentPassword] с параметром поиска [filetype:reg].
TeamViewer закрыла эту уязвимость в последних версиях. Как теперь программа шифрует пароли, ещё не разобрались.
GlobalSign представляет масштабируемые PKI-решения для организаций любого размера.
Подробнее: +7 (499) 678 2210, sales-ru@globalsign.com
keydon2
Они же неоднократно горели на уязвимостях, вплоть до скрытого перехвата управления злоумышленником.
Какой дурак продолжает использовать их софт после этого?
Denai
Тот, которому нужно подключаться по удалёнке, а других идей как это сделать нет (и мыслей об альтернативном ПО тоже)
HellKaim
Anydesk ;)
Denai
Так это ваш вариант, а не тех кто «продолжает использовать их софт»
HellKaim
Это ответ на ваш комментарий ;)
Как подключаться по удаленке. Возможно, я увидел воппрос там, где его не было.
nehrung
Denai
Мне известно больше тех кто пользуется TeamViewer, чем тех кто даже слышал про AnyDesk
nehrung
И сколько из них пользовались бесплатными сессиями, а теперь остались с TeamViewer за деньги? Подозреваю — нисколько. Были платными пользователями, ими и остались.
Я же веду речь о бесплатниках, и только о них.
Denai
Я только о тех кто пользуется TW за деньги по подписке платной, бесплатников то смысла нет считать, они часто берут первое попавшееся что решит вопрос
VioletGiraffe
Я, конечно, не целевой клиент, сбежал с TV, когда у них жадность взыграла — наша компания из 10 человек не будет покупать лицензию. Но Anydesk объективно лучше работает в некоторых мелочах, особенно заметно, когда на удалённой системе работаешь в виртуальной машине, меньше глюков со вводом.
BDI
Меня больше огорчил переход с бессрочных лицензий на подписки. С одной стороны я их понимаю, народ не стремится обновляться на новые версии(не удивительно, учитывая стоимость обновления) — так например техподдержка АльтаСофт до конца 2019 сидела вообще на 6-ой версии. В результате им(разрабам Тимвьюера) приходилось поддерживать совместимость с древними версиями. Вообще-то, я думаю альтовцы(как и мы) сидели бы и дальше на старом, но Тимвьюер в начале года прекратил поддержку подключения старых версий. Правда сделали бесплатный апгрейд лицензий до 9-ой версии(за что спасибо), но с ограничением до 01.01.2023. Так что тоже приходится рассматривать альтернативы на будущее, т.к. с ценовой политикой тима мы вряд ли его выберем в дальнейшем даже для техподдержки.
Пока смотрю в сторону RMS, есть у него плюсы, есть минусы. Но зато ценник гораздо более гуманный(и бесплатный ключ на 10 ПК без ограничений функционала), и есть свой «сервер регистрации»/ID_роутер(к сожалению только под Win). Надо будет ещё глянуть LiteManager, у них ценник ещё приятнее. Судя по вики, это выходцы из одного закрывшегося проекта, насколько совпадает актуальный функционал пока не сравнивал. Но первый продукт планирую потестировать на первых удалёнщиках(имеющейся лицензии тимвьюера на всех не хватит).
remzalp
На не очень быстрых каналах (3G, 4G, ADSL) может не передавать нажатия клавиатуры и мыши на удаленный компьютер. Похоже канал управления идёт отдельным потоком и он может не пролазить в узкое горлышко. Тимвьювер (иногда ужатый до однобитного цвета) всё-таки справляется даже в особо жутких условиях сети.
Dr_Sigmund
DameWare ещё.
be52
За одного битого двух небитых дают. Ж) А кого не ломали?