В комментариях произошла дискуссия, можно ли считать это уязвимостью. Но меня зацепил один комментарий автора:
нельзя ли это было реализовать например в виде DLL, которая при вызове её API проверяла бы цифровую подпись вызывающей программы?
Дело в том, что буквально перед этим я исследовал несколько программ, которые точно так же полагались на проверку цифровой подписи. И такую проверку было очень легко обойти.
Цифровая подпись файла соответствует только самому исполняемому файлу, но работающая программа это не только исполняемый файл. Существует несколько способов повлиять на работу программы, не меняя исполняемый файл: можно подменить библиотеки, которые загружаются или сделать инъекцию кода прямо в памяти.
Я посмотрел на профиль автора: «Работает в: Доктор Веб». А что если посмотреть, не используется ли в продуктах этой компании проверка, о которой говорит автор? Я решил посмотреть и, спойлер, нашел уязвимость, которая позволяет повысить свои привилегии до системных пользователю Dr.Web Security Space для Windows.
Разведка
Я не разбираюсь в продуктах Доктор Веб, поэтому взял первое попавшееся, что можно было скачать на сайте — это был Dr.Web Security Space 12 для Windows. При настройках по умолчанию данный продукт проводит проверку обновлений каждые полчаса. И в механизме обновления была обнаружена уязвимость.
Ниже я предлагаю видео эксплуатации с описанием того, что происходит на видео с привязкой ко времени. Там же будет описание, в чем же конкретно состояла уязвимость.
Видео эксплуатации
Демонстрация проходит на ОС Windows 10 x64 от пользователя без прав администратора.
0:00-0:12 через консоль Windows показываю, что текущий пользователь не является администратором
0:12-0:24 показываю установленную версию Dr.Web Security Space
0:24-0:29 в папке на рабочем столе находится файл drweb_eop_upd_dll.dll (исходные коды и файл приложены к тикету)
0:29-0:34 показываю, что в папке C:\ProgramData\Doctor Web\Updater\etc находится 3 файла
0:34-0:47 копирую библиотеку drweb_eop_upd_dll.dll в папке на рабочем столе и один экземпляр называю version.dll, другой — cryptui.dll
0:47-0:56 копирую файл C:\Program Files\Common Files\Doctor Web\Updater\drwupsrv.exe в папку на рабочем столе, рядом с dll.
0:56-1:00 запускаю скопированный файл
Запускаемый файл drwupsrv.exe из папки на рабочем столе загружает расположенную рядом version.dll. Данная библиотека создает файл C:\ProgramData\Doctor Web\Updater\etc\drwupsrv.xml.new. На папку C:\ProgramData и вглубь у пользователя есть права на создание файлов, поэтому это легальная операция. Если попробовать создать такой файл вручную, то, вероятно, защитные механизмы Dr.Web предотвращают такую операцию. Но в эксплуатации создание файла проходит от имени drwupsrv.exe, что вероятно обходит внутренние проверки и файл создается. Фактически, это обход той самой проверки подписи о которой и идет речь в начале статьи.
1:00-1:22 демонстрирую созданный файл и его содержимое. В общем смысле файл совпадает по содержимому с файлом C:\ProgramData\Doctor Web\Updater\etc\drwupsrv.xml, но все пути указывают папку на рабочем столе (C:\Users\User\Desktop\dwtest)
1:22-2:00 ничего не происходит (на этом этапе я ожидаю процесса обновления ПО, который по умолчанию происходит раз в полчаса и ожидаемое время можно найти в логах)
2:00-2:14 судя по всему, взяв созданный файл конфигурации, обновлятор видит, что в папке C:\Users\User\Desktop\dwtest нет файлов ПО Dr.Web, начинает туда файлы ПО копировать.
Среди копируемых файлов есть файл dwservice.exe, который запускается в момент обновления от имени пользователя NT AUTHORITY\SYSTEM. Данный файл загружает в себя библиотеку cryptui.dll, которая была в папке C:\Users\User\Desktop\dwtest. Код библиотеки просто запускает интерактивную консоль, которую и видно на экране. Командой whoami убеждаюсь, что получены права системы.
Итог
Отчет об уязвимости был отправлен в Доктор Веб и, вроде бы, разработчики все поправили.
Таймлайн:
15.05.2020 — Обращение в техподдержку с просьбой предоставить security-контакт.
20.05.2020 — Получаю ответ, что можно передать отчет в данном обращении
20.05.2020 — Передаю отчет
14.06.2020 — Получаю ответ, что для 12 версии уязвимость исправлена. Ожидают портирование для версии 11.
07.07.2020 — Разработчики подтверждают, что исправления выпущены.
This article in english.
saipr
А Премию выписали?
Или большое спасибо?
xi-tauw Автор
Просто поблагодарили
simplix
Но от всей души!
Barbaresk
И по плечу похлопали
saipr
В наше время это дорогого стоит!
hondurasez
Никуда не послали, и то хлеб :)
Как почитаешь их форум поддержки, волосы дыбом встают
sumanai
В суд не подали, и то спасибо.
bgBrother
Ходят слухи, что в некоторых организациях «спасибо» должен говорить специалист, который нашёл брешь. За то, что через месяц в суд не подадут, хоть прошлые отношения и были с рукопожатиями.
Лицензионное соглашение Dr.Web Security Space 12.0:
Tatikoma
Это какое-то очень странное лицензионное соглашение для антивируса. Злоумышленники данное положение явно не будут исполнять.
teecat
Желающие разобраться в антивирусе и продавать свой вариант имеются. В основном конечно в странах Востока.
Поэтому исполнять конечно не будут, но заранее предупредить можно
JerleShannara
Законодательство РФ позволяет пользователю декомпилировать и модифицировать ПО для улучшения его характеристик(несколько спорный момент, т.к. «сделать триал не 30 дней а 300000 дней» тоже впринципе улучшение характеристик), однако делиться полученными результатами уже нельзя.
По идее попытка устранение косяка с обходом подписи вполне себе попадает в это разрешение.
sumanai
В итоге нельзя сообщать о найденных в процессе реверса багах?
saipr
Да уж. Надо быть осторожнее. А может отказаться от использования такого ПО, а использовать либо свободное (в том числе и антивирусы) или самописное?!
DoctorMoriarty
>свободное (в том числе и антивирусы)
(#сарказм) ClamAV? Без возможности даже обычной защиты в режиме реального времени, не говоря уже о «джентльменском наборе» возможностей любого приличного пользовательского антивируса типа того же KAV или встроенного в 10-ку Defender'а?
gecube
Можно получить дистрибутивный комплект программы или даже распакованные файлы без согласия с eula — раз
Два — в такой формулировке явно, что пункт противоречит з-у РФ и следовательно можно все разбирать. Более того, там в тексте eula имеется определение того, что же такое "объектный код"? Если нет, то вообще пункт ни о чем
P.s. согласен с JerleShannara
ZEEGIN
https://www.consultant.ru/document/cons_doc_LAW_64629/3cbc9e0590122df6ade6baf1d39f9ee34411c24a/
ГК РФ Статья 1280. Право пользователя программы для ЭВМ и базы данных
EzikBro
Ну если придираться к словам, то автор статьи и не взаимодействовал напрямую с кодом никаким образом, он работал именно что с функциями, которые предоставляет программа пользователю. Как мне кажется *.dll на исходный код программы тянут слабо, как минимум потому, что никак не защищены от редактирования и просмотра пользователем.
bgBrother
Не ставлю себе цели спорить по поводу взаимодействия с ПО автором статьи, но хочу уточнить, что dll точно так же является исполняемым файлом и может быть как угодно защищён. Отличием dll от exe в первую очередь есть интерфейс взаимодействия. В DLL он построен так, что бы была возможность удобно переиспользовать код в другом ПО. При прочих равных DLL редактируются и просматриваются не особо тяжелее, чем EXE.