Создаём скрытый TeamViewer #2

Для начала скачаем TeamViewer с официального сайта. На данный момент это 11 версия.

Исследование установщика

Запускаем Process Monitor, знакомый нам из первой части, открываем фильтр и выбираем критерии фильтрации:

  • Process Name  – Team
  • Operation – CreateFile

pm

Запускаем установщик TeamViewer_Setup_ru.exe, настройки выставляем по умолчанию

mon

Изучаем лог и понимаем как устанавливается программа, можно выделить следующие этапы:

  • распаковка в %TEMP%\TeamViewer\ и запуск TeamViewer_.exe
  • создание каталога в  программных файлах и сохранение туда 7z архивов C:\Program Files (x86)\TeamViewer\TVExtractTemp\tvfiles.7z
  • распаковка архивов 7z в  C:\Program Files (x86)\TeamViewer\

В логе присутствуют файлы “System.dll” и  “nsArray.dll”. Погуглив можно понять, что эти файлы принадлежат NSIS установщику, поэтому попробуем распаковать “TeamViewer_Setup_ru.exe” 7z архиватором!

Внутри находим файлы: “TeamViewer_.exe”, “System.dll” и “TvGetVersion.dll”. Распакуем первый:

И он тоже распаковался! Здесь и далее даётся листинг команды dir -R

В “./$PLUGINSDIR” файлы NSIS, а вот “*.7z” это сам TeamViewer, например tvfiles.7z:

tvfilesx86.7z – файлы VPN:

Попробуем запустить TeamViewer.exe и он работает! У нас получился portable TeamViewer. В дальнейшем мы будем работать только с содержимым tvfiles.7z

Подмена DLL

Скрывать окно TeamViewer мы будем подменой DLL, по научному DLL hijacking.

Строго говоря, DLL hijacking является нормальным системным механизмом. Когда приложение просит систему загрузить dll, она ищет её по списку директорий, первой из которых является директория приложения. Примеры других атак можно почитать в статьях dukebarman’а и jkornev’а.

Сначала нужно найти DLL которую мы будем подменять, для этого снова открываем Process Monitor и устанавливаем фильтр:

  • Process Name – contains – Team
  • Operation – contains – CreateFile
  • Result – contains – NOT FOUND

hj_f

Запускаем ранее подготовленный TeamViewer.exe

hj

Получаем список файлов которые не смог открыть TeamViewer.exe, нас интересуют DLL’ки.

В этом списке не все библиотеки используются при импорте, так как мы отфильтровали функцию открытия файла. Нужно убедиться, что DLL подгружается в процесс TeamViewer, для этого достаточно создать пустой файлик с именем из лога в директории запуска TeamViewer.exe.

Все тесты проводились на Windows 7 x64 и Windows XP x64, тестирование на других версиях приветствуется!

Если кто-то заметит, что DLL не подгружается на другой версии ОС  или разрядности  – пожалуйста отпишите в комментариях!

Переходим в наш распакованный tvfiles, и начинаем тестирование. Лучше выбирать DLL с неприметным названием и небольшим числом функций которые используются при импорте.

Мне понравилась TeamViewer_Resource_tr.dll

  • создаём пустой файл в FAR – SHIFT+F4
  • задаём имя “TeamViewer_Resource_tr.dll” и сохраняем по F2

Если DLL используется, то TeamViewer выдаст ошибку, так как содержание dll пустое. При запуске ошибки не происходит. По всей видимости, программа просто проверяет ее наличие в директории и она не участвует в импорте. Первый блин комом, продолжаем эксперимент =)

Version.dll – тоже хорошее название, создаём пустой файл с этим именем. Запуск, и программа выдаёт ошибку. Вакантная уязвимость обнаружена! Пробуем запустить TeamViewer_Desktop.exe и получаем аналогичную ошибку. То что нам нужно!

err

Хочу заметить что на Windows XP x64  – Version.dll не грузится из текущего каталога, и  для неё была подобрана уязвимая UxTheme.dll

Заключение

Мы выдрали переносимую версию TV из инсталлятора и нашли интересующую нас уязвимость. В следующей части мы немного покодим =)

Добавить комментарий