Технические подробности ZDI-CAN-25373

vulnerability

ZDI-CAN-25373 связана с тем, как Windows отображает содержимое файлов ярлыков (.lnk) в пользовательском интерфейсе Windows. Используя эту уязвимость, злоумышленник может подготовить вредоносный файл .lnk для передачи жертве. При просмотре файла с помощью пользовательского интерфейса Windows жертва не сможет определить, что файл содержит вредоносное содержимое. В следующих разделах уязвимость описана более подробно.

Формат файла MS-SHLLINK (.lnk)

Файл Windows Shortcut, также известный как файл Shell Link (.lnk), представляет собой тип двоичного файла, используемого операционной системой Windows в качестве ярлыка для файла, папки или приложения. Этот тип файлов популярен среди злоумышленников благодаря тому, что в поле Target файлов .lnk могут быть встроены аргументы командной строки, что может привести к выполнению кода на компьютере жертвы. В этом разделе мы рассмотрим основы двоичного формата Windows Shortcut (MS-SHLLINK), которые помогут понять, как эксплуатировать ZDI-CAN-25373.

ShellLinkHeader

Каждый файл .lnk начинается со структуры ShellLinkHeader. Внутри ShellLinkHeader есть два обязательных поля, которые содержат одинаковые значения во всех .lnk-файлах. Это поля HeaderSize и LinkCLSID. Эти два поля можно использовать как магические байты для определения того, является ли файл файлом .lnk.

Поле Значение
HeaderSize (4 bytes, offset 0x0000) 0x0000004C
LinkCLSID (16 bytes, offset 0x0004) 00021401-0000-0000- C000-000000000046

Выделенные HeaderSize и LinkCLSID в файле .lnk

 

LinkFlags

Структура LinkFlags появляется после HeaderSize и LinkCLSID. Она содержит флаги, указывающие, какие структуры дополнительно присутствуют в файле .lnk. Особое значение имеет флаг HasArguments. Когда этот флаг установлен, .lnk будет содержать структуру COMMAND_LINE_ARGUMENTS. Как часть двоичного формата .lnk, дополнительные COMMAND_LINE_ARGUMENTS могут быть переданы Цели файла .lnk. Во вредоносном .lnk-файле это могут быть дополнительные параметры командной строки для загрузки и установки вредоносной полезной нагрузки через cmd.exe, powershell.exe или другие двоичные файлы LOLbin. Этим часто злоумышленники используют .lnk-файлы в своих цепочках атак, и это присутствует в эксплуатации ZDI-CAN-25373.

Выделенные флаги LinkFlags и флаг HasArguments, указывающие на наличие структуры COMMAND_LINE_ARGUMENTS StringData

LinkTargetIDList

Эта структура содержит цель файла .lnk, как показано на рисунке. При использовании этой структуры в секции LinkFlags будет установлен флаг HasLinkTargetIDList.

Список LinkTargetIDList содержит цель файла .lnk

 

COMMAND_LINE_ARGUMENTS

Когда в структуре LinksFlags установлен флаг HasArguments, в ней появляется структура COMMAND_LINE_ARGUMENTS. В этой структуре хранятся аргументы командной строки, которые будут переданы указанной цели при активации ярлыка. Это часто используется в атаках на основе файлов .lnk для выполнения кода.

Структура COMMAND_LINE_ARGUMENTS содержит команды в поле Target файла .lnk

ICON_LOCATION

Злоумышленники также часто злоупотребляют структурой ICON_LOCATION, чтобы контролировать, какой значок отображается в файле .lnk, как показано на рисунке.

Структура ICON_LOCATION может использоваться для изменения значка файла .lnk

В атаках, использующих файлы .lnk, злоумышленники часто меняют иконку, чтобы запутать и заманить жертву в выполнение ярлыка. Поскольку Windows всегда подавляет отображение расширения .lnk, злоумышленники часто добавляют «поддельное» расширение, например .pdf.lnk, вместе с соответствующим значком, чтобы еще больше обмануть пользователей. Файл .lnk обычно имеет стрелку в левом нижнем углу иконки.

Подробности уязвимости

Для эксплуатации ZDI-CAN-25373 злоумышленники тщательно создавали файлы .lnk с заполненными пробельными символами в структуре COMMAND_LINE_ARGUMENTS.

Шестнадцатеричное значение Значение
\x20 Пробел
\x09 Горизонтальная табуляция
\x0A Перевод строки
\x0B Вертикальная табуляция
\x0C Подача формы
\x0D Возврат каретки

Если пользователь просматривает .lnk-файл, содержащий эту вредоносную подложку, Windows не сможет отобразить вредоносные аргументы в отведенном для них месте пользовательского интерфейса. Последствия этого эксплойта заключаются в том, что аргументы командной строки, которые будут выполняться .lnk-файлом, полностью скрыты от глаз пользователя.

Свойства файла .lnk с пробелом (\x20) или горизонтальной табуляцией (\x09) в поле «ЦельДля проверки поля Target образцов, эксплуатирующих ZDI-CAN-25373, и содержимого структуры COMMAND_LINE_ARGUMENTS требуются сторонние инструменты.

Пробел перед аргументом командной строки .lnkПри просмотре примера с помощью шестнадцатеричного редактора можно заметить большое количество символов Space (\x20) в структуре COMMAND_LINE_ARGUMENTS.

Большое количество символов пробела (\x20) в структуре COMMAND_LINE_ARGUMENTSИнтересное наблюдение мы сделали в случаях, когда злоумышленник заполнял COMMAND_LINE_ARGUMENTS символами перевода строки (\x0A) и возврата каретки (\x0D). В этом случае при просмотре свойств файла .lnk в поле Target отображается только один выделенный символ.

Результат заполнения последовательностями символов перевода строки (\x0A) и возврата каретки (\x0)

Заключение

ZDI-CAN-25373 - это пример (пользовательский интерфейс (UI) искажает критическую информацию (CWE-451). Это означает, что пользовательский интерфейс Windows не смог представить пользователю критически важную информацию. Речь идет о неправильном представлении пользователю критически важной для безопасности информации. Эксплуатируя ZDI-CAN-25373, злоумышленник может помешать конечному пользователю просмотреть критическую информацию (выполняемые команды), связанную с оценкой уровня риска файла.

Комментарии: 0