Обнаружено перенаправление dll через dotlocal

Обновлено: 03.07.2024

Из-за того, что системы не идентичны, с клиентом alt:V могут возникать различные проблемы. Первым делом Вы должны проверить, подходит ли Ваша система под Минимальные требования, а после этого продолжить читать эту статью далее. Если ничего из этой статьи не помогает, вы можете попросить помощи на нашем Discord-сервере.

Содержание

Минимальные требования

Из-за того, что alt:V использует дополнительные технологии, наши минимальные требования слегка выше, чем у самой GTA V. Если ваш компьютер не подходит под эти требования, Вы всё равно можете попробовать запустить alt:V, но при этом будет высок шанс того, что будут происходить какие-либо проблемы.

Основные шаги

  1. Вы должны запустить Сюжетный режим хотя бы один раз.
  2. Попробуйте запустить от имени Администратора
  3. Добавьте alt:V в исключения Вашего антивируса (в т.ч. Windows Defender).
  4. Avast блокирует alt:V даже если добавить его в список исключений!
  5. Убедитесь, что alt:V установлен не на Рабочем столе, не в папке GTA:V и путь установки не содержит никаких спец. символов.
  6. Убедитесь, что Visual C++ 2015-2019 Redistributeable установлен. Ссылка на загрузку
  7. Убедитесь, что у Вас установлены последние драйвера для все устройств, особенно для видеокарты.
  8. Используйте только символы ASCII в пути установки alt:V.
  9. Используйте короткий путь для установки alt:V, например D:/altV
  10. Используйте Windows 10.
  11. Если версия из Steam зависла на "Load alt:V Client", попробуйте остановить процесс(ы) Steam. (Так же попробуйте убрать Steam из автозагрузки.)
  12. У вас должна быть чистая версия GTA V. Графические моды такие как Redux или Natural Vision не должны быть установлены.
  13. Если игра крашится во время входа на сервер, попробуйте зайти на сервер без модов (например, сервера Freeroam). Если там клиент работает - обратитесь к администрации сервера, на котором у вас происходит краш.

Известные проблемы и их решения

Запускается RageMP

Это происходит в случае, если RageMP был установлен в папку GTA. Вы можете установить его в любую другую папку.

  1. Откройте папку GTA.
  2. Удалите оттуда все файлы RageMP.

Запускается Steam или версия из Steam

Эти шаги предназначены только для игры, купленной в Rockstar Games Launcher или Epic Games

  1. Откройте папку GTA
  2. Удалите оттуда steam_api64.dll

Проблемы с FPS

  1. Запустите Сюжетный режим
  2. Откройте настройки графики
  3. Установите "MSAA" на "Выкл"

Лаги внутриигрового браузера (Webview)

  1. Нажмите "Windows + R" на клавиатуре
  2. Введите "ms-settings:display-advancedgraphics" в появившемся окне
  3. Нажмите ОК
  4. Выключите опцию "Планирование графического процессора с аппаратным ускорением" ("Hardware-accelerated GPU scheduling")

Внутриигровой браузер (Webview) не работает

Если вы застряли под миром после запуска alt:V или видите серый мир (Скриншот), значит внутриигровой браузер (webview) alt:V и GTA рендерятся на разных видеокартах. Вам нужно заставить Windows рендерить altv.exe, cef/altv-webengine.exe, и gta5.exe на одной вдиеокарте. Пример, как это сделать:

Для ноутбуков

  1. Нажмите "Windows + R" на вашей клавиатуре
  2. Введите "ms-settings:display-advancedgraphics" в окне, которое открылось
  3. Нажмите ОК
  4. Нажмите "Обзор" и выберите "altv.exe", "altv-webengine.exe" и "gta5.exe" по очереди
  5. Нажмите "Параметры" и выберите "Высокая производительность" для всех выбранных программ

Видеокарта NVIDIA

  1. Откройте Панель управления NVIDIA
  2. Параметры 3D
  3. Управление параметрами 3D
  4. Программные настройки
  5. Добавьте "altv.exe", "altv-webengine.exe" и "gta5.exe"
  6. Выберите одну и ту же видеокарту для опции "ГП рендеринга OpenGL" или "Предпрочтительный графический процессор для этой программы" для всех выбранных программ

Видеокарты AMD

  1. Нажмите правой кнопкой мыши по рабочему столу, и выберите AMD Radeon Settings
  2. Выберите System
  3. Выберите Switchable Graphics
  4. Добавьте "altv.exe", "altv-webengine.exe" и "gta5.exe", и выберите "High Performance"
  5. Более детальное описание может быть найдено здесь

Signed out from Social Club

Если Вас постоянно выкидывает из аккаунта Social Club во время игры alt:V, значит включён мониторинг доступа к папкам. Шаги решения проблемы:

  1. Откройте "Безопасность Windows"
  2. Выберите "Защита от вирусов и угроз"
  3. Выберите "Управление настройками"
  4. Выберите "Контроллируемый доступ к папкам"
  5. Выключите его или добавьте папку alt:V в исключения.

"altv-client.dll can't be loaded"

Антивирус Касперского или Kaspersky Internet Security

Если вы используете Антивирус Касперского или Kaspersky Internet Security, это может вызывать ошибку "altv-client.dll can't be loaded", даже если вы добавили alt:V в исключения. Единственное решение этой проблемы - отключение сканирования вирусов. Удержание окна alt:V в фокусе уменьшает шанс возникновения проблемы.

Другие

Другой проблемой может быть отсутствие у Вашего пользователя необходимых прав доступа к папке alt:V

  1. Нажмите правой кнопкой мыши по папке alt:V и выберите "Свойства"
  2. Откройте вкладку "Безопасность"
  3. Нажмите на кнопку "Редактировать"
  4. Выберите Вашего пользователя в списке "Group or user names:"
  5. Выберите галочку "Полный доступ" под "Разрешить"
  6. Нажмите "Применить"

Курсор застрял в центре экрана

  1. Откройте Сюжетный режим GTA V.
  2. Откройте Mouse Settings
  3. Измените режим на другой.

Something else hooked DirectX context. Try to shutdown programs that can do it. (Riva Tuner, Fraps, etc.)

Закройте такие программы, как Riva Tuner, Fraps или Streamlabs OBS

Failed to fetch updates

Эта ошибка обычно появляется если подключение было прервано во время во время обновления клиента alt:V или в случае, если Ваш антивирус блокирует загрузку. Попробуйте отключить ваш антивирус, если это не помогает - попробуйте позже.

Your game version is X, but only Y supported at the moment. Update your Game!

Вам нужно обновить Вашу GTA:V до последней версии. Попробуйте проверить целостность игры, или найти другой способ заставить игру обновиться.

Widevine CDM registration failed

Клиент крашится/закрывается во время запуска

Это может значить, что программа или сервис блокирует alt:V, приводя к крашу. Вы должны попробовать выключить все сервисы, не относящиеся к Microsoft.

  1. Нажмите "Windows + R" на клавиатуре
  2. Введите "msconfig" в появившемся окне
  3. Нажмите ОК
  4. Выберите вкладку "Сервисы"
  5. Нажмите на галочку "Скрыть все сервисы Microsoft" внизу окна
  6. Нажмите на кнопку "Выключить все"
  7. Прокрутите вниз и включите сервис "Rockstar Games Library Service"
  8. Нажмите "Применить"
  9. Перезапустите ПК

Если alt:V запустился, Вы можете пробовать включать сервисы до тех пор, пока не найдёте источник проблемы. Если вы нашли проблемный сервис, пожалуйста, напишите нам в Discord.

Известные сервисы, вызывающие проблемы:

alt:V просит выбрать папку установки при запуске из браузера

Это может происходить, если в вашем браузере сохранена старая запись запуска.

Easy eSports || EasyAntiCheat

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

Поврежденная память
Сохраненный в оперативной памяти код игры поврежден. Это очень редкая ошибка, обычно возникающая при физическом повреждении оперативной памяти, что ведет к нарушениям в рабочей памяти.

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

Удалите конфликтующий файл из папки с установленной игрой.
Закройте игру , если она запущена, и удалите файл из папки с игрой. После удаления файла снова запустите .

Подозрительный системный файл
Игра подгрузила системный .dll-файл, не прошедший проверку подлинности. Эта ошибка указывает на повреждение на системном уровне.

Восстановите недостающие или поврежденные системные файлы.
Выполните следующую команду с правами администратора для восстановления поврежденных системных файлов. sfc /scannow

Следуйте этому руководству для выполнения команды с правами администратора.

Обновите Windows.
Убедитесь в том, что установлены все доступные обновления Windows.

Разберитесь с заражением вирусом.
Эта ошибка может говорить о заражении системы вирусом. Если ошибка сохраняется, мы рекомендуем выполнить полную проверку системы на вирусы. Следуйте этому руководству для получения инструкций по удалению вредоносных программ из системы.

Обнаружен отладчик
Ошибка появляется, когда игра запускается через отладчик. Easy Anti-Cheat запрещает запускать игры через отладчик.

Обнаружено перенаправление через .local
Ошибка появляется, если в папке игры есть перенаправляющий файл DotLocal (.local) для исполняемого файла игры. Удалите его, чтобы устранить ошибку.

Обязательная проверка подписи драйверов (ОППД) отключена
Easy Anti-Cheat требует включенной обязательной проверки подписи драйверов.

Включите обязательную проверку подписи драйверов
Чтобы включить ОППД, выполните следующие команды с правами администратора и перезагрузите Windows.

bcdedit -set TESTSIGNING OFF
bcdedit -set NOINTEGRITYCHECKS OFF
Следуйте этому руководству для выполнения команды с правами администратора.

Выполнение команд не помогло?
Если эти команды по какой-то причине не сработал, выполните следующие действия, чтобы включить ОППД.

Отключите отладку ядра.
Чтобы выключить отладку ядра, выполните следующую команду с правами администратора и перезагрузите Windows. bcdedit -set DEBUG OFF

Следуйте этому руководству для выполнения команды с правами администратора.

Отключена защита ядра от изменения
Защита ядра от изменения — механизм безопасности в 64-битной версии Windows, и ее нельзя отключить вручную. Поэтому единственная возможная причина этой ошибки — заражение руткитом. Если вы столкнулись с этой ошибкой, мы настоятельно рекомендуем вам переустановить Windows.

Приветствую всех, кто решил прочитать мою новую статью с разбором уязвимостей. В прошлый раз небольшим циклом из трех статей я рассказал об уязвимостях в Steam (1, 2 и 3). В данной статье я расскажу об уязвимостях похожего продукта — Origin, который тоже является лаунчером для игр. Обнаруженные уязвимости получили номера CVE-2019-19247 и CVE-2019-19248.


В этот раз не будет никакой дичи с банами-анбанами. История общения с security подразделением компании Electronic Arts Inc изначально шла на профессиональном уровне. При обращении мне выдали регистрационный номер, отчеты тщательно изучили и подтвердили. Ни один мой имейл не был проигнорирован, а для небольшого обсуждения был организован конфколл. Сопровождение этих отчетов было для меня очень простым, за что большое спасибо Adrian Stone, Elise Murphy и другим сотрудникам EA, работавшим с моими отчетами. Запись в security-блоге и advisory.

Теперь к уязвимостям. Я нашел две уязвимости типа «повышение привилегий» (lpe — local privilege escalation или eop — escalation of privileges) в Windows клиенте Origin. Такой тип уязвимостей позволяет любому пользователю ОС Windows получить больше прав, чем изначально выдано администратором. В данном случае речь идет о двух «типовых» повышениях — от любого пользователя до NT AUTHORITY\SYSTEM (учетная запись, обладающая максимальными правами в ОС). Первая уязвимость довольно скучная, поэтому в следующем разделе я вкратце опишу ее. А вот вторая была довольно интересной, в ее разделе я расскажу именно о том, как я ее искал.

CVE-2019-19248

Данная уязвимость состоит из двух частей:

  1. Создание папки по произвольному пути (с правами «Все-Полный доступ»);
  2. Использование пункта 1 для получения прав NT AUTHORITY\SYSTEM.

Подготовка окружения

Необходимо закрыть клиент Origin и остановить сервис «Origin Client Service» (по идее, сервис сам остановится если закрыть клиент, но на всякий случай).

Для папки «C:\ProgramData\Origin» действуют права «Все-Полный доступ», что позволяет нам полностью удалить ее содержимое.

Создание ссылок

Теперь создадим пару ссылок. Первая ссылка будет типа NTFS Reparse Point (NTFS Mount Point) — вид ссылок, указывающих с папки на папку: «C:\ProgramData\Origin» <-> «\RPC Control». Для создания репарс-поинтов не нужны права администратора. Необходимо только, чтобы папка-источник была пуста, и пользователь имел права на запись в нее (очистили в прошлом шаге, там же проверили права). «\RPC Control» — это не папка в файловой системе, а особый вид папки — объектная директория. Ее нельзя посмотреть обычным эксплорером, но зато туда можно сделать репарс-поинт, видимо, из-за общих абстракций, используемых в недрах Windows.

Теперь мы создадим обычную символьную ссылку «\RPC Control\CatalogCache» <-> «C:\Путь\К\Целевой\Папке». В файловой системе создание символических ссылок без прав администратора запрещено, но это правило не распространяется на объектные директории. Поэтому наша ссылка успешно будет создана. В результате комбинации этих двух ссылок обращения к «C:\ProgramData\Origin\CatalogCache» будут перенаправлены на «C:\Путь\К\Целевой\Папке».

Почитать подробнее про такие ссылки можно тут. В этом же репозитории можно скачать утилиты для работы с ссылками.

Запуск

На последнем шаге запускаем клиент. Он в начале своей работы запустит «Origin Client Service» и, обнаружив, что папки «C:\ProgramData\Origin\CatalogCache» нет, попробует создать ее. В результате перехода по симлинкам создаст «C:\Путь\К\Целевой\Папке» и выдаст этой папке права «Все-Полный доступ».

Что и требовалось получить в первом пункте эксплуатации. Перейдем ко второму.

Эксплуатация создания папки по произвольному пути

Здесь можно работать уже большим количеством способов.

Длинный, но интересный путь — через особые махинации вычитать хэш пароля администратора. Подробнее тут.

Итого

Уязвимость эксплуатируется довольно легко, нужно только немного поработать над вторым пунктом — найти цель и написать подходящую dll. Кроме того, о данной уязвимости сообщил и Мэтт Нельсон, его райтап можно прочитать тут.

CVE-2019-19247

Это одна из моих самых любимых уязвимостей. Она показывает, насколько аккуратно надо относиться к используемой криптографии.

Все началось с того, что я установил игру через Origin. Все прошло как-то слишком гладко — пару кликов и через несколько минут скачивания игру можно запускать. Не сразу, но я понял в чем было дело: игра установилась по пути «C:\Program Files\GameName», но не задала ни единого вопроса через UAC. Я быстро проверил права, все было стандартно — обычный пользователь не мог писать в «C:\Program Files». Еще немного исследований и я узнал, что игру «прописывает» не сам клиент Origin, а его сервис «Origin Client Service».

Я начал строить предположения о том, как клиент передает информацию в сервис, чтобы проверить, а нельзя ли что-то поэксплуатировать.

Способ передачи информации оказался простым — именованный пайп. Об этом я узнал из логов при установке — открытым текстом указывалось, что пайп «OriginClientService» принимал команды на работу с файлами и папками.

Открыл IDA, загрузил туда клиент.

*работ проведено в IDA: 1*

Довольно быстро я нашел, что в пайп команды отправляют в общем-то в текстовом виде. Рядом нашел список команд и, не мудрствуя лукаво, отправил в пайп команду вида «copy “C:\test\payload.dll” “C:\Windows\pwn.dll”». В ожидании быстрого результата проверяю папку «C:\Windows» и ничего нового в ней не нахожу. Зато новое есть в логах — какие-то слова про то, что клиент у пайпа не прошел проверку цифровой подписи.

Открыл IDA, загрузил туда сервис.

*работ проведено в IDA: 2*

Выяснил, что команд от абы кого не ждут. При подключении к пайпу сервис проверяет, кто же такой к нему подключился. Из соединения извлекается pid процесса, из pid'а извлекается путь к исполняемому файлу, у файла проверяется подпись на корректность и то, что она выдана EA.
Звучит проверка здраво, но недостаточно. Можно взять легальный «Origin.exe» (исполняемый файл клиента), скопировать его куда-то в свою папку. В этой папке разместить какую-нибудь dll из списка импорта «Origin.exe». Например, подошла version.dll. Я назвал этот подход «обратная dll-инъекция»: в обычной dll-инъекции мы копируем dll к exe-файлу, а сейчас поступили наоборот. Быстро пишу прокси-dll для version.dll, добавляю код с отправкой команды в пайп. Полезная нагрузка все равно не скопировалась. Читаем логи — «что значит, не удалось расшифровать команду!?». Пропустил я шифрование.

Открыл IDA, загрузил туда клиент.

*работ проведено в IDA: 3, обход подписи: 1*

Раз клиент в обычной своей работе отправляет зашифрованные команды, значит и я смогу. Там посмотрел, тут посмотрел, результат такой: шифрование AES, инициализирующий вектор постоянный, ключ читается из файла. Практически копируем этот кусок и IDA в код, компилируем, проверяем. И снова ничего. Но логи снова дают полезную информацию — нельзя в качестве целевого пути указывать не Program Files.

Открыл IDA, загрузил туда сервис.

*работ проведено в IDA: 4, обход подписи: 1, обход шифрования: 1*

Так, и правда, на получение команды стоят проверки, что, оказывается, не всюду можно файлы копировать. И пути с «\..\» нельзя писать. Смотрим, какие еще команды есть.
Работа с реестром — там снова куча ограничений. А вот запуск файлов выглядит интересно. По крайней мере проверок особо не видно. Правим код, отправляем команду «ExecuteProcess “C:\test\payload.exe”». Ну вы поняли… Ничего.

Логи снова говорят про подпись. Ох, мы же это уже победили. Указываем в коде, что вызвали наш скопированный Origin.exe, чтобы снова загрузилась наша прокси-dll, но уже с правами системы. Добавляем проверки и запуск консоли. Запускаем и появляется консоль с правами NT AUTHORITY\SYSTEM — наконец-то все заработало.

*работ проведено в IDA: 4, обход подписи: 2, обход шифрования: 1*

Так, надо перезагрузить, провести финальный прогон и еще полюбоваться на консоль с максимальными правами. Перезагрузка, проверка и… ничего. Как так-то? Только что же работало.

Диагностика показывает, что сервис «Origin Client Service» не был запущен, поэтому я его запускаю. А он не запускается. Точнее запускается, но тут же завершает работу. Запускаю клиент Origin и сервис нормально запускается. После этого эксплоит снова корректно отрабатывает. Можно было бы на этом остановится, но это не мой путь — я хочу заставить эксплоит отрабатывать полноценно.

Открыл IDA, загрузил туда сервис.

*работ проведено в IDA: 5, обход подписи: 2, обход шифрования: 1*

Оказывается, при старте он проверяет то, с какими параметрами стартовали сервис. Там оказывается ничего прям интересного. Base64 от зашифрованного pid процесса, у файла которого проверяется подпись. Вроде звучит сложно, но шифрование мы уже обошли, подпись тоже. Пишем немного кода и полноценный эксплоит готов.

Итого

Эксплоит работает. Работ проведено в IDA: 5 раз, обход подписи: 3 раза, обход шифрования: 2 раза.

Вывод

Уязвимости поправлены: разработчики из EA ввели специальный restricted-режим работы для клиента, в котором устанавливаются серьезные ограничения на работу с папками и пайпами Origin.

1 апреля 2019: передача отчета об уязвимости с пайпом;

7 апреля 2019: передача отчета об уязвимости с произвольной папкой;

Что значит точка входа DllRegisterServer не найдена

Файлы библиотек DLL в общем случае представляют собой наборы программных функций, иногда — ресурсов, которые могут быть вызваны из других программ Windows 10 и предыдущих версий.

Когда в командной строке от имени администратора вы вводите команду regsvr32 имя_файла.dll, программа regsvr32.exe ищет и пробует вызвать функцию DllRegisterServer из указанного вами файла DLL для регистрации сервера, не находит её и сообщает об ошибке «Точка входа DllRegisterServer не найдена».

Почему так происходит? Потому что далеко не все DLL содержат такую функцию и не все библиотеки можно установить в системе с помощью regsvr32.exe, а рекомендации использовать команду для регистрации DLL во многих инструкциях вводят в заблуждение и неприменимы.

Для исправления проблемы можно предложить следующие подходы:

Использование regsvr32.exe без DllRegisterServer

  1. Попробовать использовать ту же команду, но с дополнительными параметрами для установки файла DLL (перед слэшами и именем файла пробелы):При использовании этих ключей, поиск процедуры DllRegisterServer выполняться не будет, вместо этого будет использоваться DllInstall. Но и её может не оказаться в файле и это нормально.
  2. Разобраться, что это за файл DLL и устанавливать его правильно, обычно в составе набора компонентов, содержащих этот файл, при условии, что это требуется. Что имеется в виду? Например, при проблемах с файлами, имена которых начинаются с msvc, как правило требуется установить нужную версию распространяемых компонентов Visual C++ (причем для x64 систем часто нужно устанавливать также и x86 или 32-бит версии), для файлов с именами dx — установить недостающие библиотеки DirectX, используя веб-установщик от Microsoft, а для файлов unarc.dll, ISDone.dll обычно и вовсе не требуется установка каких-либо файлов и дело не в них.
  3. Иногда может сработать следующий подход: просто копируем файл .dll в ту же папку, где находится файл .exe программы или игры, которая сообщает об ошибке.
  4. Использовать поиск у меня по сайту, указав имя DLL, из-за которой происходит ошибка: по большинству наиболее часто встречающихся у меня есть подробные инструкции с указанием, какие именно компоненты необходимо установить.

Важный момент по всем пунктам: файлы DLL для x64 и 32-бит (x86) систем отличаются даже при одинаковом имени, при этом даже в 64-бит Windows 10, 8.1 или Windows 7 для работы какой-то программы может требоваться DLL для 32-бит, а с DLL для x64 она может не запускаться.

Видео инструкция

Также вы можете описать вашу проблему с DLL в комментариях, а я постараюсь подсказать решение.

Приветствую всех, кто решил прочитать мою новую статью с разбором уязвимостей. В прошлый раз небольшим циклом из трех статей я рассказал об уязвимостях в Steam (1, 2 и 3). В данной статье я расскажу об уязвимостях похожего продукта — Origin, который тоже является лаунчером для игр. Обнаруженные уязвимости получили номера CVE-2019-19247 и CVE-2019-19248.


В этот раз не будет никакой дичи с банами-анбанами. История общения с security подразделением компании Electronic Arts Inc изначально шла на профессиональном уровне. При обращении мне выдали регистрационный номер, отчеты тщательно изучили и подтвердили. Ни один мой имейл не был проигнорирован, а для небольшого обсуждения был организован конфколл. Сопровождение этих отчетов было для меня очень простым, за что большое спасибо Adrian Stone, Elise Murphy и другим сотрудникам EA, работавшим с моими отчетами. Запись в security-блоге и advisory.

Теперь к уязвимостям. Я нашел две уязвимости типа «повышение привилегий» (lpe — local privilege escalation или eop — escalation of privileges) в Windows клиенте Origin. Такой тип уязвимостей позволяет любому пользователю ОС Windows получить больше прав, чем изначально выдано администратором. В данном случае речь идет о двух «типовых» повышениях — от любого пользователя до NT AUTHORITY\SYSTEM (учетная запись, обладающая максимальными правами в ОС). Первая уязвимость довольно скучная, поэтому в следующем разделе я вкратце опишу ее. А вот вторая была довольно интересной, в ее разделе я расскажу именно о том, как я ее искал.

CVE-2019-19248

Данная уязвимость состоит из двух частей:

  1. Создание папки по произвольному пути (с правами «Все-Полный доступ»);
  2. Использование пункта 1 для получения прав NT AUTHORITY\SYSTEM.

Подготовка окружения

Необходимо закрыть клиент Origin и остановить сервис «Origin Client Service» (по идее, сервис сам остановится если закрыть клиент, но на всякий случай).

Для папки «C:\ProgramData\Origin» действуют права «Все-Полный доступ», что позволяет нам полностью удалить ее содержимое.

Создание ссылок

Теперь создадим пару ссылок. Первая ссылка будет типа NTFS Reparse Point (NTFS Mount Point) — вид ссылок, указывающих с папки на папку: «C:\ProgramData\Origin» <-> «\RPC Control». Для создания репарс-поинтов не нужны права администратора. Необходимо только, чтобы папка-источник была пуста, и пользователь имел права на запись в нее (очистили в прошлом шаге, там же проверили права). «\RPC Control» — это не папка в файловой системе, а особый вид папки — объектная директория. Ее нельзя посмотреть обычным эксплорером, но зато туда можно сделать репарс-поинт, видимо, из-за общих абстракций, используемых в недрах Windows.

Теперь мы создадим обычную символьную ссылку «\RPC Control\CatalogCache» <-> «C:\Путь\К\Целевой\Папке». В файловой системе создание символических ссылок без прав администратора запрещено, но это правило не распространяется на объектные директории. Поэтому наша ссылка успешно будет создана. В результате комбинации этих двух ссылок обращения к «C:\ProgramData\Origin\CatalogCache» будут перенаправлены на «C:\Путь\К\Целевой\Папке».

Почитать подробнее про такие ссылки можно тут. В этом же репозитории можно скачать утилиты для работы с ссылками.

Запуск

На последнем шаге запускаем клиент. Он в начале своей работы запустит «Origin Client Service» и, обнаружив, что папки «C:\ProgramData\Origin\CatalogCache» нет, попробует создать ее. В результате перехода по симлинкам создаст «C:\Путь\К\Целевой\Папке» и выдаст этой папке права «Все-Полный доступ».

Что и требовалось получить в первом пункте эксплуатации. Перейдем ко второму.

Эксплуатация создания папки по произвольному пути

Здесь можно работать уже большим количеством способов.

Длинный, но интересный путь — через особые махинации вычитать хэш пароля администратора. Подробнее тут.

Итого

Уязвимость эксплуатируется довольно легко, нужно только немного поработать над вторым пунктом — найти цель и написать подходящую dll. Кроме того, о данной уязвимости сообщил и Мэтт Нельсон, его райтап можно прочитать тут.

CVE-2019-19247

Это одна из моих самых любимых уязвимостей. Она показывает, насколько аккуратно надо относиться к используемой криптографии.

Все началось с того, что я установил игру через Origin. Все прошло как-то слишком гладко — пару кликов и через несколько минут скачивания игру можно запускать. Не сразу, но я понял в чем было дело: игра установилась по пути «C:\Program Files\GameName», но не задала ни единого вопроса через UAC. Я быстро проверил права, все было стандартно — обычный пользователь не мог писать в «C:\Program Files». Еще немного исследований и я узнал, что игру «прописывает» не сам клиент Origin, а его сервис «Origin Client Service».

Я начал строить предположения о том, как клиент передает информацию в сервис, чтобы проверить, а нельзя ли что-то поэксплуатировать.

Способ передачи информации оказался простым — именованный пайп. Об этом я узнал из логов при установке — открытым текстом указывалось, что пайп «OriginClientService» принимал команды на работу с файлами и папками.

Открыл IDA, загрузил туда клиент.

*работ проведено в IDA: 1*

Довольно быстро я нашел, что в пайп команды отправляют в общем-то в текстовом виде. Рядом нашел список команд и, не мудрствуя лукаво, отправил в пайп команду вида «copy “C:\test\payload.dll” “C:\Windows\pwn.dll”». В ожидании быстрого результата проверяю папку «C:\Windows» и ничего нового в ней не нахожу. Зато новое есть в логах — какие-то слова про то, что клиент у пайпа не прошел проверку цифровой подписи.

Открыл IDA, загрузил туда сервис.

*работ проведено в IDA: 2*

Выяснил, что команд от абы кого не ждут. При подключении к пайпу сервис проверяет, кто же такой к нему подключился. Из соединения извлекается pid процесса, из pid'а извлекается путь к исполняемому файлу, у файла проверяется подпись на корректность и то, что она выдана EA.
Звучит проверка здраво, но недостаточно. Можно взять легальный «Origin.exe» (исполняемый файл клиента), скопировать его куда-то в свою папку. В этой папке разместить какую-нибудь dll из списка импорта «Origin.exe». Например, подошла version.dll. Я назвал этот подход «обратная dll-инъекция»: в обычной dll-инъекции мы копируем dll к exe-файлу, а сейчас поступили наоборот. Быстро пишу прокси-dll для version.dll, добавляю код с отправкой команды в пайп. Полезная нагрузка все равно не скопировалась. Читаем логи — «что значит, не удалось расшифровать команду!?». Пропустил я шифрование.

Открыл IDA, загрузил туда клиент.

*работ проведено в IDA: 3, обход подписи: 1*

Раз клиент в обычной своей работе отправляет зашифрованные команды, значит и я смогу. Там посмотрел, тут посмотрел, результат такой: шифрование AES, инициализирующий вектор постоянный, ключ читается из файла. Практически копируем этот кусок и IDA в код, компилируем, проверяем. И снова ничего. Но логи снова дают полезную информацию — нельзя в качестве целевого пути указывать не Program Files.

Открыл IDA, загрузил туда сервис.

*работ проведено в IDA: 4, обход подписи: 1, обход шифрования: 1*

Так, и правда, на получение команды стоят проверки, что, оказывается, не всюду можно файлы копировать. И пути с «\..\» нельзя писать. Смотрим, какие еще команды есть.
Работа с реестром — там снова куча ограничений. А вот запуск файлов выглядит интересно. По крайней мере проверок особо не видно. Правим код, отправляем команду «ExecuteProcess “C:\test\payload.exe”». Ну вы поняли… Ничего.

Логи снова говорят про подпись. Ох, мы же это уже победили. Указываем в коде, что вызвали наш скопированный Origin.exe, чтобы снова загрузилась наша прокси-dll, но уже с правами системы. Добавляем проверки и запуск консоли. Запускаем и появляется консоль с правами NT AUTHORITY\SYSTEM — наконец-то все заработало.

*работ проведено в IDA: 4, обход подписи: 2, обход шифрования: 1*

Так, надо перезагрузить, провести финальный прогон и еще полюбоваться на консоль с максимальными правами. Перезагрузка, проверка и… ничего. Как так-то? Только что же работало.

Диагностика показывает, что сервис «Origin Client Service» не был запущен, поэтому я его запускаю. А он не запускается. Точнее запускается, но тут же завершает работу. Запускаю клиент Origin и сервис нормально запускается. После этого эксплоит снова корректно отрабатывает. Можно было бы на этом остановится, но это не мой путь — я хочу заставить эксплоит отрабатывать полноценно.

Открыл IDA, загрузил туда сервис.

*работ проведено в IDA: 5, обход подписи: 2, обход шифрования: 1*

Оказывается, при старте он проверяет то, с какими параметрами стартовали сервис. Там оказывается ничего прям интересного. Base64 от зашифрованного pid процесса, у файла которого проверяется подпись. Вроде звучит сложно, но шифрование мы уже обошли, подпись тоже. Пишем немного кода и полноценный эксплоит готов.

Итого

Эксплоит работает. Работ проведено в IDA: 5 раз, обход подписи: 3 раза, обход шифрования: 2 раза.

Вывод

Уязвимости поправлены: разработчики из EA ввели специальный restricted-режим работы для клиента, в котором устанавливаются серьезные ограничения на работу с папками и пайпами Origin.

1 апреля 2019: передача отчета об уязвимости с пайпом;

7 апреля 2019: передача отчета об уязвимости с произвольной папкой;

Читайте также: