Идеальный инструмент для жизни в арсенале преступников, живущих за пределами земли.

Автор: Symantec Threat Engineering Team

Файл LNK - это ярлык, используемый Microsoft Windows, и часто является прямой ссылкой на исполняемый файл. Файлы LNK часто размещаются на рабочем столе и в меню Пуск, чтобы помочь пользователям быстро получить доступ к файлу или запустить его, вместо того, чтобы переходить к нему. Также нередко хакеры используют файлы LNK в качестве вектора атаки - одним из самых известных примеров был Stuxnet (PDF).

При проведении атаки наземного стиля злоумышленник должен иметь способ выполнить хотя бы одну команду или сценарий на целевой машине, чтобы запустить последовательность последующих действий. Первоначальный шаг может быть выполнен с использованием множества методов, таких как использование документа с поддержкой макросов, эксплойта уязвимости SMB, подключения RDP с грубым принудительным доступом, или они могут просто использовать файл LNK, который обманом заставляет пользователя открыть его, что затем приводит к запуск удаленно загруженного скрипта. Из упомянутых выше методов файл LNK, несомненно, является наиболее экономичным способом выбора для злоумышленника.

Возможно, из-за его экономичности в последние несколько месяцев мы наблюдаем рост числа атак с использованием файлов LNK. Эти файлы LNK часто приходят по электронной почте в виде вложения или ссылки для загрузки, содержащейся в теле письма. Хакеры используют социальную инженерию, чтобы обманом заставить пользователей щелкнуть файлы LNK. Более пристальный взгляд на телеметрию Symantec показывает, что хакеры выступают за использование файлов LNK в качестве шлюза для бесфайловых атак.

Недавно мы столкнулись с очень интересным случаем при исследовании коллекции образцов, которые могут быть связаны с определенной вредоносной кампанией. На следующей диаграмме показаны различные этапы этой вредоносной кампании, в которой на начальном этапе использовались файлы LNK. Для справки предоставляются средства защиты и обнаружения Symantec для различных этапов атаки.

Внимательно изучите файлы LNK

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

1) исполняемый файл и путь к нему

2) аргументы командной строки

Аргументы командной строки довольно просты и всегда сохраняются как уникальная строка в поле строковых данных файла LNK. Еще два важных поля - это флаги HasArguments и IsUnicode в заголовке LNK:

· Строка Arguments доступна, только если установлен флаг «HasArguments»

· Строка аргументов будет в формате Unicode, если установлен флаг «IsUnicode», в противном случае это будет стандартная строка ASCII.

Самая интересная часть файла - это целевой исполняемый файл и его путь. Давайте посмотрим на образец из упомянутого выше дела. Если мы щелкнем правой кнопкой мыши файл LNK в Windows и проверим командную строку в свойствах файла, мы увидим исполняемый файл и его путь (рисунок 3).

Как показано на рисунке 3, имя исполняемого файла - «oword.exe». Однако это вымышленное имя, вы не найдете исполняемый файл с таким именем в папке% Windir% \ system32. Но если мы нажмем «Открыть расположение файла», мы увидим, что реальный исполняемый файл, используемый в этом LNK-файле, на самом деле «mshta.exe» (рисунок 4).

С помощью этого трюка можно обойти не только окно свойств файла, но и многие сторонние сканеры и парсеры. Во время нашего исследования мы заметили, что существует множество полей и флагов, которые LNK-файл использует для указания своего целевого исполняемого файла и соответствующего пути. На рисунке 5 показана полная структура этого LNK-файла (соответствующие флаги и строки выделены).

Как видно из рисунка 5, имя исполняемого файла и информация о пути в файле LNK указаны более чем в одном месте. Информация доступна в нескольких полях в различных разделах:

· В LinkTargetIDList

o Краткие имена (8.3 имени файла) предоставляются по умолчанию (выделены синим цветом)

o Для Windows XP и более поздних версий имя версии Unicode (длинное имя) доступно в блоках расширения (красный)

o Для Windows XP и более поздних версий в блоках расширений также может быть доступно дополнительное локализованное имя (ASCII).

o Для Windows Vista и более поздних версий в блоках расширения также может быть указано дополнительное локализованное имя (Unicode).

· В LinkInfo

o Предоставляется локальный базовый путь (ASCII) (желтый)

o Также может быть указан локальный базовый путь (Unicode)

· В StringData

o Указан относительный путь к исполняемому файлу (желтый)

· В ExtraData (EnvironmentVariableDataBlock)

o Может быть предоставлена ​​строка «TargetAnsi» для указания имени и пути исполняемого файла (зеленый)

o Может быть предоставлена ​​строка «TargetUnicode» для указания имени и пути исполняемого файла (зеленый)

· В TargetMetadata (VistaAndAboveIDListDataBlock):

o Может быть указано имя исполняемого файла (желтый)

o Может быть указан путь к исполняемому файлу (желтый)

Между тем, согласно официальной документации и нашему собственному тестированию, есть несколько флагов, которые также могут влиять на поведение системы:

o HasExpString

o HasLinkTargetIDList

o EnableTargetMetadata

o DisableLinkPathTracking

o PreferEnvironmentPath

Итак, вопрос в том, какое имя и путь к исполняемому файлу будут использоваться на машине жертвы? Следующие два случая были протестированы на компьютере под управлением 64-разрядной версии Windows 7 Enterprise SP1:

СЛУЧАЙ 1: использование длинного имени исполняемого файла (тот же метод, что использовался в образце вредоносной программы, который мы видели ранее).

В соответствии с настройками флага, показанными на рисунке 5, используется фактическое имя целевого исполняемого файла, выделенное красным на рисунке 5. Авторы вредоносных программ могут изменять короткие имена на любые, по своему усмотрению, при этом обеспечивая правильную работу файла LNK.

Однако следует отметить, что путь к исполняемому файлу, используемый здесь, не соответствует пути из LinkTargetIDList. Независимо от того, на что вы меняете короткое или длинное имя, предполагаемая цель LNK по-прежнему извлекается правильно. Путь к исполняемому файлу, который используется при открытии файла LNK, на самом деле находится в блоке EnvironmentVariableDataBlock (выделен зеленым на рисунке 5). Как мы подтвердили в наших тестах, путь из версии Unicode используется по умолчанию, тогда как версия ASCII используется, если версия Unicode удалена.

Как уже упоминалось, длинное имя доступно только в Windows XP и более поздних версиях Windows. Итак, что, если мы удалим блок расширения из элементов IDList? Будет ли в этом случае использоваться краткое имя? Ответ - нет. Удаление блока расширения из элементов IDList сделает файл LNK недействительным.

СЛУЧАЙ 2: использование пути среды для восстановления файла LNK.

Из СЛУЧАЯ 1 мы понимаем, что используемое имя исполняемого файла будет длинным именем из LinkTargetIDList, а путь исполняемого файла будет извлеченным из EnvironmentVariableDataBlock. Но что, если мы изменим поле длинного имени на неправильное значение и изменим значение в поле EnvironmentVariableDataBlock на правильное значение? В результате файл LNK становится недействительным, и на нем отображается значок, как показано на рисунке 6.

Несмотря на то, что он недействителен, злоумышленники могут использовать этот LNK-файл для выполнения своих задач. Если пользователь дважды щелкнет значок недопустимого LNK, чтобы открыть «недопустимый» файл LNK, Windows автоматически восстановит поля файла LNK, используя строки из поля EnvironmentVariableDataBlock. После завершения процесса восстановления все имена и пути, кроме тех, что указаны в поле VistaAndAboveIDListDataBlock, будут обновлены до правильных значений. Более того, пользователям не нужно снова дважды щелкать файл LNK, исправленный файл LNK будет напрямую «запущен» для загрузки вредоносной программы. Пользователь даже не узнает, что процесс восстановления вообще имел место.

Безграничные возможности LNK

Помимо примера, который мы только что рассмотрели, есть много других способов, которыми авторы вредоносных программ могут повозиться с настройками файла LNK, чтобы обмануть парсеры в программном обеспечении безопасности и избежать обнаружения. Как обсуждалось ранее, есть несколько флагов и полей, которые можно установить в файле LNK для достижения различного поведения системы. Например, согласно официальным спецификациям, если установлены флаги PreferEnvironmentPath, «целевой IDList НЕ ДОЛЖЕН сохраняться; вместо этого путь, указанный в EnvironmentVariableDataBlock, ДОЛЖЕН использоваться для ссылки на цель ».

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

В Symantec мы тщательно анализируем файлы LNK и эффективно обнаруживаем цепочку последующих бесфайловых действий, чтобы не пропустить ни одной атаки.

Загляните в блог Security Response и следите за Threat Intel в Twitter, чтобы быть в курсе последних событий в мире анализа угроз и кибербезопасности.

Нравится эта история? Порекомендуйте его, нажав кнопку в виде сердечка, чтобы его увидели другие на Medium, и подписывайтесь на Threat Intel на Medium, чтобы получать больше интересного контента.