0-day в Windows XP\Vista\7

    Хабрапользователь 0xA0 нашёл 0-day в Windows XP\Vista\7 (в Windows 8 не работает).
    Данная статья написана с позволения 0xA0, т.к. в силу низкой кармы на тот момент он не мог её здесь написать.
    Судя по всему, это отзвуки отгремевшей в далёком 2010 году уязвимости CVE-2010-2568 (писали об этом и на хабре), которую активно использовал небезызвестный StuxNet. Суть баги в том, что при обращении к DLL-файлу операционная система вместо ресурсов из этой библиотеки выполняет код из самой библиотеки. В общем-то, по описанию действительно очень схожа с названной CVE-2010-2568. Но автор не смог найти возможности также удалённо использовать уязвимость, как это делал StuxNet, и единственный известный вектор её использования — социальная инженерия. Необходимо обманом заставить пользователя якобы сменить значок папки на значок из присланного ему DLL-файла.

    image

    Видео демонстрация использования уязвимости:



    В приведённом в видео примере при обращении к dll открывается командная строка
    Метки:
    Поделиться публикацией
    Комментарии 31
    • +8
      Как-то теги статьи слабо коррелируют с серьёзностью уязвимости.
      • 0
        <айрони>Да, теперь-то точно капец</айрони>
        • +2
          Кто знает. Автор не нашёл как использовать уязвимость лучше, а кто-то может и догадается. Мне про мою находку об обходе проактивки в Outpost тоже говорили, что ничего в этом нет ужасного. Пока я не автоматизировал процесс обхода
          • –3
            Это не баг — это фича.
        • +2
          Как я понимаю это всего-лишь еще одна разновидность «авторана».
          И прав админа она не дает. Тогда почему она 0-day?
          • +10
            Тогда почему она 0-day?

            Википедия подскажет

            Как я понимаю это всего-лишь еще одна разновидность «авторана»

            Что Вы под этим подразумеваете? Самого по себе авторана пока что из этого не получилось
            • +5
              Можно будет создать папку на флешке, и прописать в них desktop.ini который указывает на ресурс иконки из DLL что тоже на флешке.
              И при просмотре флешки explorer попытается загрузить картинку и выполнит код DLL?
              Или я не правильно понял и это работает только вручную в диалоге смены иконки папки?
              • +2
                Возможно, этот вариант отработает! Автор об этом не упоминал. Думаю, в ближайшее время народ поэксперементирует с этим и станет всё совсем ясно
                • +1
                  Если да, и это сработает, можно ожидать наплыв новых авторанных вирусов на флешках…
                  И эра заражения автораном через USB флешки на ХР прийдет на 7 :)
                  Это печально, но баг очень интересный, заодно стимул перейти на Windows 8 :)
                  • +3
                    Это стимул своевременно накатывать обновления безопасности :)
                  • +3
                    Не работает. Через выбор иконки срабатывает, а когда она уже установлена — нет.
                    • 0
                      А если сделать lnk файл с явным указанием иконки из dll-ки и положить рядом?
                      • 0
                        Можно попробовать, но WinXP будет под рукой только через 3 недели.
                  • 0
                    Путь к ресурсу абсолютный и надо быть телепатом, чтоб отгадать, под какой буквой загрузится флешка. Хотя конечно, можно создать 22 скрытые папки. Тогда ни о какой скрытности речи не идёт.
                    • +1
                      А кто вам сказал что только абсолютный путь поддерживается?
                      • +1
                        Проверил загрузка иконки относительно корня диска работает.

                        Для проверки в desktop.ini в Dropbox убрал C: — иконка успешно загружается.

                        [.ShellClassInfo]
                        IconFile=\Users\hazzik\AppData\Roaming\Dropbox\bin\Dropbox.exe
                        IconIndex=-2001
                        InfoTip=A securely backed up place to put your important files.
                        


                        PS: какой функцией загружается библиотека в таком случае не смотрел еще.
                      • 0
                        У меня есть флешка на которой в папках заданны иконками в desktop.ini:
                        [.ShellClassInfo]
                        IconResource=LogoSetup.exe,0
                        IconIndex=0
                        IconFile=LogoSetup.exe
                        
                        И это работает на XP, 7 и 8 с любой буквой диска.
                        Не помню, может действительно есть исключение для DLL ресурсов.
                        Даже если так то вирусам не составит труда создать 26 папок с прописями на все буквы алфавита в корне диска.
                        А следует из этого что простое отключение авторана от таких ловушек на ХР,7 не будет защищать.
                        • +2
                          StuxNet создал всего 4 ярлыка. Он использовал абсолютный путь, сгенерированный по уникальным VID и PID флешки. А 4 ярлыка были вызваны некоторыми различиями в пути для Windows XP\Vista\7
                  • +1
                    В Win7 SP1 x64 с последними обновлениями не смог воспроизвести:(
                    • 0
                      windows xp x86 с последними обновлениями — сработало
                      windows 7 x64 с последними обновлениями — не сработало
                      • +2
                        Вы, вероятно, пробовали воспроизвести фокус с 32 битной dll'кой. Я тоже попробовал и уже почти обрадовался — не подвержена. А потом скомпилировал 64 битную dll и радость закончилась, всё воспроизводится, просто в x64 системах нужна dll соответствующей битности.
                    • +4
                      Это детский сад а не уязвимость. Чтобы вытянуть ресурсы из длл-ки, ее нужно загрузить, что неизбежно вызывает ф-цию DllMain, в которой может быть любой код.

                      Таких «уязвимостей» в винде есть 100500 — начиная от хуков, заканчивая расширениями шелла. Все они заставляют винду загрузить вашу ддл-ку в контекст процесса.
                      • +9
                        Это — не детский сад, а серьезная уязвимость.
                        Когда я открываю dll как контейнер иконок, последнее, о чем я думаю — это о запуске кода из библиотеки. Операции «открыть» и «запустить» я почему-то всегда считал принципиально разными операциями, и не один я.

                        Чтобы вытянуть ресурсы из длл-ки, ее нужно загрузить, что неизбежно вызывает ф-цию DllMain, в которой может быть любой код.
                        Да неужели? Вы желаете сказать, что ResHacker загружает и выполняет DllMain всех тех файлов, ресурсы которых я редактирую?

                        Вот цитата из оригинальной статьи:
                        Давайте разберёмся что же произошло. Происходил вызов библиотеки при попытке сменить значок для каталога (для файлов или ярлыков вызов библиотеки происходил безопасным образом при помощи LoadLibraryEx)
                        • 0
                          DLL можно загрузить безопасным образом, без выполнения кода. А вот с уязвимостями вида dll hijacking да, полная печаль.
                          • +2
                            Для загрузки DLL с целью извлечения ресурсов есть функция LoadLibraryEx с флагами типа LOAD_LIBRARY_AS_DATAFILE, LOAD_LIBRARY_AS_IMAGE_RESOURCE, которая, по идее, не должна исполнять код DLLки.
                          • +4
                            Почему еще никто не написал «решето»?
                          • +1
                            единственный известный вектор её использования — социальная инженерия. Необходимо обманом заставить пользователя якобы сменить значок папки на значок из присланного ему DLL-файла.


                            А не проще ли сразу заставить пользователя запустить exe'шник из аттача?)
                            • 0
                              Я прихожу с флешкой и у меня все папки имеют клевые иконки (возможно на флэшке задать иконки папкам и они отобразяться на другом компьютере). Человек спрашивает «а как ты сделал их»? А я отвечаю-а вот в длл-ке глянь. Хотя тут и правда проще отвлечь его и запустить ехе.
                              Вообще данный сценарий мог бы использоваться для сокрытия стороннего кода(типа руткита) в explorer.exe. Но я не смог придумать такую последовательность кода, которая бы все это делала.
                            • –3
                              Autoit? :) В режиме hidden откроет-закроет окна?)

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