От комментария на Хабре к уязвимости в антивирусе Dr. Web

    Относительно недавно на хабре появилась статья «Стилер паролей в антивирусном ПО Avira Free Antivirus» от пользователя Veliant. Автор обнаружил, что в стандартной поставке упомянутого антивируса присутствует компонент, который позволяет простым образом извлечь пароли из хранилища браузера Chrome.

    В комментариях произошла дискуссия, можно ли считать это уязвимостью. Но меня зацепил один комментарий автора:
    нельзя ли это было реализовать например в виде 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.

    Комментарии 42

      +15
      Отчет об уязвимости был отправлен в Доктор Веб и, вроде бы, разработчики все поправили.

      А Премию выписали?
      Или большое спасибо?

        +19
        Просто поблагодарили
          +34
          Но от всей души!
            +5
            И по плечу похлопали
            +5

            В наше время это дорогого стоит!

              +2
              Никуда не послали, и то хлеб :)
              Как почитаешь их форум поддержки, волосы дыбом встают
                +3
                В суд не подали, и то спасибо.
              +8
              Ходят слухи, что в некоторых организациях «спасибо» должен говорить специалист, который нашёл брешь. За то, что через месяц в суд не подадут, хоть прошлые отношения и были с рукопожатиями.

              Лицензионное соглашение Dr.Web Security Space 12.0:
              9. Пользователю не разрешается без письменного согласия Правообладателя изменять, декомпилировать, дизассемблировать, дешифровать и производить иные действия с объектным кодом ПО, в том числе имеющие целью получение информации о реализации алгоритмов и принципов, используемых в ПО, за исключением случаев, прямо предусмотренных действующим законодательством Российской Федерации.
                +12
                Это какое-то очень странное лицензионное соглашение для антивируса. Злоумышленники данное положение явно не будут исполнять.
                  +1
                  Желающие разобраться в антивирусе и продавать свой вариант имеются. В основном конечно в странах Востока.
                  Поэтому исполнять конечно не будут, но заранее предупредить можно
                  +14
                  Законодательство РФ позволяет пользователю декомпилировать и модифицировать ПО для улучшения его характеристик(несколько спорный момент, т.к. «сделать триал не 30 дней а 300000 дней» тоже впринципе улучшение характеристик), однако делиться полученными результатами уже нельзя.
                  По идее попытка устранение косяка с обходом подписи вполне себе попадает в это разрешение.
                    0
                    однако делиться полученными результатами уже нельзя.
                    По идее попытка устранение косяка с обходом подписи вполне себе попадает в это разрешение.

                    В итоге нельзя сообщать о найденных в процессе реверса багах?
                    0

                    Да уж. Надо быть осторожнее. А может отказаться от использования такого ПО, а использовать либо свободное (в том числе и антивирусы) или самописное?!

                      0
                      >свободное (в том числе и антивирусы)

                      (#сарказм) ClamAV? Без возможности даже обычной защиты в режиме реального времени, не говоря уже о «джентльменском наборе» возможностей любого приличного пользовательского антивируса типа того же KAV или встроенного в 10-ку Defender'а?
                      +3

                      Можно получить дистрибутивный комплект программы или даже распакованные файлы без согласия с eula — раз
                      Два — в такой формулировке явно, что пункт противоречит з-у РФ и следовательно можно все разбирать. Более того, там в тексте eula имеется определение того, что же такое "объектный код"? Если нет, то вообще пункт ни о чем


                      P.s. согласен с JerleShannara

                        +4

                        https://www.consultant.ru/document/cons_doc_LAW_64629/3cbc9e0590122df6ade6baf1d39f9ee34411c24a/


                        ГК РФ Статья 1280. Право пользователя программы для ЭВМ и базы данных


                        3'. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой, при соблюдении следующих условий:
                        1) информация, необходимая для достижения способности к взаимодействию, ранее не была доступна этому лицу из других источников;
                        2) указанные действия осуществляются в отношении только тех частей декомпилируемой программы для ЭВМ, которые необходимы для достижения способности к взаимодействию;
                        3) информация, полученная в результате декомпилирования, может использоваться лишь для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, не может передаваться иным лицам, за исключением случаев, когда это необходимо для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, а также не может использоваться для разработки программы для ЭВМ, по своему виду существенно схожей с декомпилируемой программой для ЭВМ, или для осуществления другого действия, нарушающего исключительное право на программу для ЭВМ.
                          +1
                          Ну если придираться к словам, то автор статьи и не взаимодействовал напрямую с кодом никаким образом, он работал именно что с функциями, которые предоставляет программа пользователю. Как мне кажется *.dll на исходный код программы тянут слабо, как минимум потому, что никак не защищены от редактирования и просмотра пользователем.
                            0
                            Не ставлю себе цели спорить по поводу взаимодействия с ПО автором статьи, но хочу уточнить, что dll точно так же является исполняемым файлом и может быть как угодно защищён. Отличием dll от exe в первую очередь есть интерфейс взаимодействия. В DLL он построен так, что бы была возможность удобно переиспользовать код в другом ПО. При прочих равных DLL редактируются и просматриваются не особо тяжелее, чем EXE.
                      • НЛО прилетело и опубликовало эту надпись здесь
                          +2
                          У продуктов Dr.Web есть только два плюса — цена и производительность, остальное как получится.
                            0
                            Сейчас точно не скажу но лет 10 назад по моей практике Дрвеб был лучшим практически по всем параметрам, сейчас стал заметно тормознее и возможно уже не так силен.
                              0
                              Эксплуатировал drweb для почтовых серверов под Linux, дебажить что то и настраивать это боль, даже мониторинг из коробки не завезли, пришлось к zabbix прикручивать, а выяснить по какой конкретно причине письмо было отброшено это тот ещё квест. Я бы понял если бы продукт был open source, но нет это коммерческая разработка.
                                0
                                Вы наверно шутите или практика была не слишком обширная. За годы моей работы в сервисе больше всего зараженных машин к нам приносили именно с dr.web.
                                  0
                                  У нас было с точностью до наоборот — приносили с установленным Каспером, Авастом и немного различных антивирусов, а мы лечили их Куритом, продавали мы Каспера и Дрвеб.
                                  У знакомого целая сеть предприятия 100+ компов под Нод32 болела, лечил по моей подсказке Куритом.
                                  Было это лет 10 — 15 назад.
                                +9
                                Есть еще одна очень полезная вещь для всех «тыжпрограммистов»- Curelt.
                                  +4
                                  Ага, наш зеленый антивирус такой же бесполезный, как и красный, но дешевле и легче.
                                    +1
                                    Насколько я знаю сейчас хотя-б менее вредный, раньше лечил то что находили и не лечили Каспер и Нод.

                                    Каспер и Дрвеб что-то делают в отличии от Аваста.

                                    И легким Дрвеб быть перестал — при больших потоках по сети умудряется сожрать весь I7.
                                  0
                                  Вы проделали большой труд! Благодарю! На сколько понимаю, Вы использовали механизм операционной системы, производящий поиск файлов в особом порядке для подмены загрузки «системной» библиотеки. Т.е. данной угрозе подвержены почти все исполняемые файлы (в зависимости от того какие зависимости от системных библиотек у них есть). И при этом от этого достаточно сложно защититься. Вы, случайно, не проводили тесты на остальных известных антивирусных продуктах?
                                    0
                                    Спасибо. Да, вы верно описали механизм который позволил внедрить свой код в приложение с подписью. В общем смысле, это можно назвать «обратный dll hijack» — мы не dll подкладываем к приложению, а приложение к dll.
                                    В моем понимании от этого нет смысла защищаться — даже если руками в файле прописать все зависимости по полным путям (я проверял — можно прописать полные пути в таблице импорта и все будет работать). Если приложение работает от имени пользователя, то он имеет почти полный контроль над всем, что происходит в адресном пространстве этого приложения. Не было бы возможности подменить dll — поставил бы хук или просто OpenProcess + WriteProcessMemory.
                                    Тут скорее дело в самой архитектуре фон Неймана — подпись хорошо работает если файл рассматривается как данные. Если файл рассматривается как код, то тут уже все печально.
                                    Другие антивирусные продукты я не рассматривал, а среди не антивирусов я подобную проверку встречал в 3 продуктах — во всех сработал обход типа «обратный dll hijack».
                                      0
                                      В чем разница в подкладывании exe к dll или dll к exe? Это только для обхода ограничений NTFS?
                                      При загрзуке DLL, винда вызовет из ее DllMain и передаст в нее информацию а процессе который загружает dll, из структур prcessinformation или startupinfo можно узначть имя исполняемого файла и путь к нему и проверить у него подпись. Но и сам процесс перед import_DLL может проверить подпись библиотеки, тогда hijackDLL не сработает. В таком случае останется только патчить проверку подписи, и в таком случае подпись исполняемого файла окажется невалидной и о LPE в драйвере можно забыть
                                        +1
                                        Типовой сценарий атаки dll hijack подразумевает, что есть некоторое приложение по фиксированному пути, например сервис, который запускается с высокими правами. «Подложив» dll к такому приложению мы получим запуск своего кода с теми же правами.
                                        В таком сценарии нет смысла копировать приложение к dll, поскольку его кроме нас запускать не будет, а значит и права будут те же. Но в случае, как в статье, это дает возможность запускать свой код от имени подписанного бинаря.
                                        В первом сценарии можно рассматривать проверку подписи, но там есть свои особенности, например, загрузка dll происходит до работы основного кода, поэтому нельзя добавить проверку подписи к загружаемым dll из таблицы импорта. А во втором сценарии это все и вовсе бессмысленно — все действия проходят под контролем пользователя и легко динамически правятся.
                                    +1
                                    Надо же, вам Dr.Web даже ответил. У них панель тикетов саппорта на сайте не рабочая, раз 20 пробовал аттач приложить — ошибка. Написал без вложения, так и не ответили.
                                      0
                                      Мне в мае отвечали и быстро.
                                        +2
                                        У меня проблем в прикладывании файлов не было. Отвечали, в общем-то не шустро, но в части отчета меня это не беспокоило, поскольку я всегда вместе с отчетом прикладываю дату до которой я жду реакции (45 дней). В указанный срок, я все ответы получил.
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                          +1
                                          Так странно, крупные компании обычно специально платят деньги, чтобы искали уязвимости, а тут нашли, принесли и ничего
                                            0
                                            Ну так автор уже работает в компании, которая платит ему деньги чтобы он искал уязвимости, даже в блог ее написал)
                                            0

                                            Стандартный windows DLL hell, который используется как во вред, так и во благо (например, старое ускорение Direct3D). Согласен с позицией автора, что подобная программа, как DrWeb должна проверять не только свои цифровые подписи, но и библиотек.

                                              0

                                              Кстати, а что если эта библиотека будет подписана, но не через DrWeb? Это эксперимент для версии 12 :)

                                                0

                                                Отличная идея!
                                                Я еще добавлю, что почти наверняка, что в составе Dr.Web есть компоненты уровня драйверов (*.sys), с которыми почти наверняка могут взаимодействовать любые приложения ) и там нет проверки того, что за приложение пытается сделать привилегированный вызов.


                                                На такой глупости уже попадались АСУС и прочие вендоры.
                                                Вроде такого — https://www.secureauth.com/labs/advisories/asus-drivers-elevation-privilege-vulnerabilities

                                                  +1
                                                  Интересная гипотеза, но я Вас немного разочарую — драйвера Dr.Web проверяют подпись вызывающего приложения.
                                                    0

                                                    Спасибо, тогда можно спать спокойно (на самом деле нет )))

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                              Самое читаемое