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 |
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.
LinkTargetIDList
Эта структура содержит цель файла .lnk, как показано на рисунке. При использовании этой структуры в секции LinkFlags будет установлен флаг HasLinkTargetIDList.
COMMAND_LINE_ARGUMENTS
Когда в структуре LinksFlags установлен флаг HasArguments, в ней появляется структура COMMAND_LINE_ARGUMENTS. В этой структуре хранятся аргументы командной строки, которые будут переданы указанной цели при активации ярлыка. Это часто используется в атаках на основе файлов .lnk для выполнения кода.
ICON_LOCATION
Злоумышленники также часто злоупотребляют структурой 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-файлом, полностью скрыты от глаз пользователя.
Для проверки поля Target образцов, эксплуатирующих ZDI-CAN-25373, и содержимого структуры COMMAND_LINE_ARGUMENTS требуются сторонние инструменты.
При просмотре примера с помощью шестнадцатеричного редактора можно заметить большое количество символов Space (\x20) в структуре COMMAND_LINE_ARGUMENTS.
Интересное наблюдение мы сделали в случаях, когда злоумышленник заполнял COMMAND_LINE_ARGUMENTS символами перевода строки (\x0A) и возврата каретки (\x0D). В этом случае при просмотре свойств файла .lnk в поле Target отображается только один выделенный символ.
Заключение
ZDI-CAN-25373 - это пример (пользовательский интерфейс (UI) искажает критическую информацию (CWE-451). Это означает, что пользовательский интерфейс Windows не смог представить пользователю критически важную информацию. Речь идет о неправильном представлении пользователю критически важной для безопасности информации. Эксплуатируя ZDI-CAN-25373, злоумышленник может помешать конечному пользователю просмотреть критическую информацию (выполняемые команды), связанную с оценкой уровня риска файла.