PIF-ярлыки
Ярлык, используемый для запуска программ MS-DOS. По назначению PIF-ярлыки близки к ярлыкам LNK, но в отличие от последних не нуждаются в посредниках вроде интерфейса IShellLink, а запускаются напрямую. Их содержимое представлено путем к исполняемому файлу, инструкциями для исполнения DOS-приложения в среде Windows и различными метаданными — сведениями об используемых шрифтах, дату создания и модификации и прочее. PIF-ярлыки пользовались популярностью в ранних версиях Windows, сегодня встречаются редко, иногда под ярлыки PIF маскируются вирусы, так что будьте осторожны, если встретите такой файл в интернете.
Особенности линкования
Чтобы понимать уязвимость и успешно ее проэксплуатировать, нужно сначала разобраться непосредственно с самим форматом LNK-файлов. К счастью, нам не придется продираться через дебри бинарщины вслепую, потому что ребята из Microsoft позаботились и написали подробную техническую спецификацию под названием Shell Link (.LNK) Binary File Format. Будем заглядывать туда периодически.
Еще нам понадобится утилита для просмотра детальной информации по файлам LNK. Так как моя основная ОС — это Windows 10, то я воспользуюсь приложением LNKParser. Если ты ищешь что-то платформонезависимое, то попробуй модуль pylnk () для Python.
Shell Link Binary File Format состоит из последовательности структур, которые регулируются правилами ABNF (Augmented Backus-Naur Form). Правила же описаны в спецификации RFC5234.
Совокупность этих структур и называется shell link, а в простонародье — «ярлык».
В нем содержится не только ссылка на местоположение объекта, как можно было ожидать, но и множество других параметров.
Рассмотрим все это на живом примере. Для этого создадим ярлык на любой файл (я создал для explorer.exe) и натравим на него LNKParser.
Просмотр содержимого ярлыка с помощью LNKParser
Здесь я рассмотрю только нужные для создания эксплоита структуры, ты же можешь покопаться в тонкостях строения .LNK в свое удовольствие.
За загрузку, анализ и парсинг данных из файла ярлыка отвечает функция из библиотеки .
Функция парсинга содержимого LNK-файла
Первый обязательный блок, который должен присутствовать в каждом уважающем себя LNK-файле, — это . По большому счету это единственная обязательная структура в ярлыке. Она содержит идентификационную информацию, временные метки и флаги, которые определяют наличие или отсутствие дополнительных блоков с информацией, включая , и .
Структура блока SHELL_LINK_HEADER
Пройдемся по остальным структурам.
- (4 байта) — размер блока Header, он фиксированный — .
- (16 байт) — уникальный идентификатор класса (CLSID). Структура CLSID — это оболочка для идентификатора COM-класса. Также имеет фиксированное значение — .
- (4 байта) — флаги, которые отвечают за опции ярлыка. Некоторые флаги означают наличие дополнительных структур в файле.
- (4 байта) — атрибуты файла, на который ссылается ярлык.
- (8 байт), (8 байт), (8 байт) — время создания файла, последнего доступа к нему и его изменения.
- (4 байта) — размер файла. Формат — 32-битное беззнаковое целое.
- (4 байта) — индекс иконки файла в указанном хранилище. Формат — 32-битное беззнаковое целое.
- (4 байта) — вид окна приложения, запущенного через ярлык. Формат — 32-битное беззнаковое целое. Он может быть трех видов: нормальный (, ), развернутый на весь экран (, ), свернутый (, ).
- (2 байта) — структура отвечает за назначенные ярлыку горячие клавиши. В настройках линка ты можешь указать требуемое сочетание клавиш, и если сам LNK лежит на рабочем столе или в меню, то при их нажатии он будет срабатывать.
- (2 байта), (4 байта), (4 байта) — зарезервированные значения. Должны быть нулевыми.
Из всего этого многообразия нас интересует только . Секция состоит из 32 бит, каждый из которых отвечает за разные опции ярлыка.
Битовая маска секции LinkFlags
Нужные нам биты — это 0 () и 7 ().
Важные для эксплуатации флаги
С , думаю, все ясно из названия, а вот нулевой бит рассмотрим подробнее.
Флаг указывает, что следующим блоком, идущим за хидером, будет структура .
Структура IDList в файле легитимного ярлыка
Функция сначала читает первые два байта данных из блока (это размер структуры) и выделяет требуемое количество памяти для его загрузки.
Функция CShellLink::_LoadIDList для парсинга содержимого структуры IDList
Затем начинается чтение данных из . Каждый элемент этой структуры — это часть пути до объекта, на который ссылается ярлык. Система проходит по каждому такому элементу и читает его данные.
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!
Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя!
Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
Стенд
В качестве подопытного кролика для теста уязвимости я буду использовать виртуалку с Windows 10 х64.
Уязвимая версия Windows 10 x64
При работе с бинарщиной нам, конечно же, пригодится дизассемблер. Не будем оригинальничать и возьмем IDA.
Также нам понадобится какой-нибудь дебаггер. Я решил использовать WinDbg в режиме отладчика ядра. Вот один из способов настроить удаленный дебаггинг виртуалки.
-
Запустить WinDbg. Затем File → Kernel Debug. Там во вкладке NET нужно указать порт. Его будет слушать программа в ожидании подключения от отлаживаемой системы. Еще можно указать ключ для шифрования передаваемых данных во время соединения.
-
Включить режим отладки на гостевой машине. В этом нам поможет консольная утилита .
где — IP хостовой ОС, и — порт и ключ, которые ты указал в настройках WinDbg. После перезагрузки виртуалки она подключится к отладчику.
Гостевая ОС готова к отладке
Проверка системы на наличие команд автозапуска вируса
В некоторых случаях вирусы прописывают себя в автозапуск системы. Проверьте руками следующие ветки реестра (regedit.exe) на наличие подозрительных записей:
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run – эти программы запускаются при загрузке компьютера
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run – программы, автоматически запускаемые при входе текущего пользователя
Удалите все подозрительные записи и незнакомые программ (ничего плохого вы не сделаете, и если даже вы отключите автозагрузку какой-то нужной программы, вы сможете всегда запустить ее вручную после входа в систему).
Другие способы автозапуска программ в системе описаны в статье Управление автозапуском программ в Windows 8.
Удаляем исполняемые файлы вируса на USB флешке
Первым делом необходимо избавиться от исполняемых фалов вируса. Это можно сделать с помощью любого антивируса (благо есть куча бесплатных или portable версий, таких как Dr.Web CureIt или Kaspersky Virus Removal Tool), если же его нет – можно попробовать найти и обезвредить вирус вручную. Как же найти файлы вируса, заразившего USB флешку?
В проводнике Windows включаем отображение скрытых и системных фалов.В Windows XP: Пуск-> Мой компьютер->Меню Сервис->Свойства папки->вкладка Вид. На ней снимаем галку у параметра «Скрывать защищенные системные файлы (рекомендуется)» и устанавливаем у «Показывать скрытые файлы и папки».
В Windows 7 путь немного другой: Пуск->Панель Управления->Оформление и персонализация->Параметры папок->Вкладка Вид
Параметры те же самые.
Для Windows 8/10 инструкция есть в статье Показать скрытые папки в Windows 8.
Открываем содержимое флешки, и видим на нем множество ярлыков на папки (обратите внимание на значок ярлыка у иконок папок). Теперь нужно открыть свойства любого ярлыка на папку (ПКМ -> Свойства)
Они будут выглядеть примерно так: Нас интересует значения поля Target (Объект). Строка, указанная в нем довольно длинная, и может выглядит примерно так:
В этом примере RECYCLER\e3180321.exe это и есть тот самый вирус. Т.е. файл вируса с именем e3180321.exe находится в папке RECYCLER. Удаляем этот файл, а можно и папку целиком (рекомендую проверить наличие этой папки как на самой зараженной флешке, так и в системных каталогах C:\windows, C:\windows\system32 и в профиле текущего пользователя (о них чуть ниже)).
Так же рекомендую посмотреть исполняемые файлы вируса в следующих каталогах:
- в Windows 7, 8 и 10 —
- в Windows XP —
Если в этих каталогах имеются файлы с расширением «.exe», то скорее всего это и есть исполняемый файл вируса и его можно удалить (на незараженном компьютере в этом каталоге .exe файлов быть не должно).
В некоторых случаях такие вирусы не детектируются антивирусами, т.к. их могут создавать в виде .bat/.cmd/.vbs файлов сценариев, которые в принципе не выполняют никаких деструктивных действия на компьютере. Рекомендуем руками проверить флешку на наличие файлов с такими разрешениями (их код можно посмотреть с помощью любого текстового редактора).
Теперь клик по ярлыку не опасен!
Проверка ярлыков браузеров вручную
Простой и эффективный способ проверки ярлыков браузеров — сделать это вручную средствами системы. Шаги будут одинаковыми в Windows 10, 8 и Windows 7.
Примечание: если требуется проверка ярлыков на панели задач, сначала зайдите в папку с этими ярлыками, для этого в адресной строке проводника введите следующий путь и нажмите Enter
%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
- Нажмите по ярлыку правой кнопкой мыши и выберите пункт «Свойства».
- В свойствах проверьте содержимое поля «Объект» на вкладке «Ярлык». Далее перечислены те моменты, которые могут говорить о том, что с ярлыком браузера что-то не так.
- Если после пути к исполняемому файлу браузера указан какой-то адрес сайта — вероятно он был добавлен вредоносным ПО.
- Если расширение файла в поле «объект» .bat, а не .exe и речь идет о браузере — то, судя по всему, с ярлыком тоже не всё в порядке (т.е. он был подменен).
- Если путь к файлу для запуска браузера отличается от того расположения, где фактически установлен браузер (обычно они устанавливаются в Program Files).
Как поступать, если вы увидели, что ярлык «заражен»? Самый простой способ — вручную указать размещение файла браузера в поле «Объект» или же просто удалить ярлык и создать его заново в нужном расположении (а предварительно вычистить компьютер от вредоносных программ, чтобы ситуация не повторилась). Для того, чтобы создать ярлык — нажмите правой кнопкой в пустом месте рабочего стола или папки, выберите «Создать» — «Ярлык» и укажите путь к исполняемому файлу браузера.
Стандартные расположения исполняемого (использующегося для запуска) файла популярных браузеров (могут быть как в Program Files x86, так и просто в Program Files, в зависимости от разрядности системы и браузера):
- Google Chrome — C:\ Program Files (x86)\ Google\ Chrome\ Application\ chrome.exe
- Internet Explorer — C:\ Program Files\ Internet Explorer\ iexplore.exe
- Mozilla Firefox — C:\ Program Files (x86)\ Mozilla Firefox\ firefox.exe
- Opera — C:\ Program Files\ Opera\ launcher.exe
- Яндекс Браузер — C:\ Users\ имя пользователя\ AppData\ Local\ Yandex\ YandexBrowser\ Application\ browser.exe
Программы для проверки ярлыков
c http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>lass=»remon-after-2nd-h2″ id=»remon-1610648032″>
С учетом актуальности проблемы, появились бесплатные утилиты для проверки безопасности ярлыков в Windows (кстати, попробовал отличное во всех отношениях ПО для борьбы с вредоносными программами, AdwCleaner и пару других — там это не реализовано).
Среди таких программ на данный момент можно отметить RogueKiller Anti-Malware (комплексное средство, которое, в том числе, проверяет ярлыки браузеров), Phrozen Software Shortcut Scanner и Check Browsers LNK. На всякий случай: после загрузки проверяйте подобные малоизвестные утилиты с помощью VirusTotal (на момент написания этой статьи они полностью чистые, но не могу гарантировать что так будет всегда).
Shortcut Scanner
Первая из программ доступна в виде portable версии отдельно для x86 и x64 систем на официальном сайте https://www.phrozensoft.com/2017/01/shortcut-scanner-20. Использование программы выглядит следующим образом:
- Нажмите по иконке в правой части меню и выберите, какое сканирование использовать. Первый пункт — Full Scan сканирует ярлыки на всех дисках.
- По завершении сканирования вы увидите список ярлыков и их расположений, распределенных по следующим категориям: Dangerous Shortcuts (опасные ярлыки), Shortcuts that require attention (требующие внимания, подозрительные).
- Выделив каждый из ярлыков, в нижней строке программы вы можете увидеть, какую команду запускает этот ярлык (это может дать информацию о том, что именно с ним не так).
В меню программы предусмотрены пункты для очистки (удаления) выделенных ярлыков, но в моем тесте они не сработали (и, судя по комментариям на официальном сайте — не работают и у других пользователей в Windows 10). Тем не менее, используя полученную информацию можно удалить или изменить подозрительные ярлыки вручную.
Check Browsers LNK
Небольшая утилита Check Browsers LNK предназначена именно для проверки ярлыков браузеров и работает следующим образом:
- Запускаете утилиту и ждете некоторое время (автор рекомендует также отключить антивирус).
- В месте расположения программы Check Browsers LNK создается папка LOG с текстовым файлом внутри, содержащим информацию об опасных ярлыках и командах, которые они выполняют.
Полученную информацию можно использовать для самостоятельного исправления ярлыков или же для автоматического «лечения» с помощью программы того же автора ClearLNK (требуется перенести файл журнала на исполняемый файл ClearLNK для исправления). Скачать Check Browsers LNK можно с официальной страницы https://toolslib.net/downloads/viewdownload/80-check-browsers-lnk/
А вдруг и это будет интересно: