Bypassing directory emptiness check
Возвращаясь к ответу на опрос, проводимый постом выше, Microsoft не признали это уязвимостью.
Файлы на томе NTFS хранятся в формате: <имя_файла>:<имя_потока>:<тип> и при создании символической ссылки через CreateSymbolicLinkW передаются такие параметры:
Подробнее
Упрощённо последовательность такая:
1. Нормализация путей (DOS - NT-путь), определение типа ссылки (на файл или каталог), проверка права SeCreateSymbolicLinkPrivilege либо режима разработчика;
2. Создание «контейнера» будущей ссылки;
3. Открытие этого объекта с флагами FILE_FLAG_OPEN_REPARSE_POINT;
4. Формирование REPARSE_DATA_BUFFER;
4. Формирование REPARSE_DATA_BUFFER с меткой IO_REPARSE_TAG_SYMLINK (для джанкшенов - IO_REPARSE_TAG_MOUNT_POINT).
В драйвере NTFS запрос попадает в обработчик FSCTL_SET_REPARSE_POINT. Перед записью атрибута $REPARSE_POINT NTFS выполняет валидации:
- Объект действительно файл/каталог NTFS и не содержит «несовместимых» атрибутов;
- У объекта нет уже установленного reparse-тэга (или разрешена замена специальным контролом);
- Для каталога: каталог обязан быть пустым. Проверка реализуется как перечисление записей индекса каталога (структуры $INDEX_ROOT/$INDEX_ALLOCATION) и убеждение, что присутствуют только служебные . и ... Если есть любые дочерние записи - возвращается статус ядра STATUS_DIRECTORY_NOT_EMPTY, который Procmon показывает как NOT EMPTY.
Однако, для Windows 10 (тестировал на сборке 22H2) данной проверки видимо не происходит и при передаче в качестве lpSymlinkFileName формата <имя_файла>:<любые символы> проверяется на существование полная строка, в результате существующая директория превращается в линку...
Таким образом мы получаем следующие возможности:
1. Вызвать DOS системы, если критичные системные каталоги превратить в симлинку;
2. Сделать невозможной для чтения директорию с находящимися в ней файлами (к примеру отключить полностью AV/EDR т.к. система не сможет прочитать их файлы во время загрузки;
3. Если допустим заранее скопировать папки AV/EDR в другую директорию подменить любые файлы на те которые хотим (допустим подменить службу агента EDR, то она будет запущена при старте системы, т.е. по сути возможно выполнить закрепление через службу используя уже существующую службу) и многое другое, что зависит от вашей фантазии.
Самый простой вариант эксплуатации:
Если кратко: на сборках Windows 10 открытие каталога через поток :$ позволяло обойти проверку пустоты, поэтому FSCTL_SET_REPARSE_POINT по пути вида ...\:$ завершался успешно. В Windows 11 ntfs.sys исправлен: он всегда проверяет сам каталог, поэтому возвращает NOT EMPTY.
Если данную технику комбинировать с Applocker и Backstab, то можно обойтись без перезагрузки хоста, и службы AV/EDR более не загрузятся (тестировалось как POC, не уверен, что работает с СЗИ всех вендоров, но после перезагрузки результат уже 100%)
1. Создаем политику запрета служб AV/EDR по серту издателя
2. Создаем линку (уничтожаем директорию и подменяем её своей для закрепа)
3. С помощью Backstab уничтожаем сервисы AV/EDR
(ТЕСТИРОВАЛОСЬ НА WIN10 - РАБОТАЕТ, НА WINDOWS 11, WINDOWS SERVER 2022 - НЕ РАБОТАЕТ, НА SERVER 2016 ПРЕДПОЛОЖИТЕЛЬНО РАБОТАЕТ НАДО ТЕСТИРОВАТЬ)
Дополнительно фишки NTFS
Возвращаясь к ответу на опрос, проводимый постом выше, Microsoft не признали это уязвимостью.
Файлы на томе NTFS хранятся в формате: <имя_файла>:<имя_потока>:<тип> и при создании символической ссылки через CreateSymbolicLinkW передаются такие параметры:
BOOLEAN CreateSymbolicLinkW(
[in] LPCWSTR lpSymlinkFileName,
[in] LPCWSTR lpTargetFileName,
[in] DWORD dwFlags
);
Подробнее
Упрощённо последовательность такая:
1. Нормализация путей (DOS - NT-путь), определение типа ссылки (на файл или каталог), проверка права SeCreateSymbolicLinkPrivilege либо режима разработчика;
2. Создание «контейнера» будущей ссылки;
3. Открытие этого объекта с флагами FILE_FLAG_OPEN_REPARSE_POINT;
4. Формирование REPARSE_DATA_BUFFER;
4. Формирование REPARSE_DATA_BUFFER с меткой IO_REPARSE_TAG_SYMLINK (для джанкшенов - IO_REPARSE_TAG_MOUNT_POINT).
В драйвере NTFS запрос попадает в обработчик FSCTL_SET_REPARSE_POINT. Перед записью атрибута $REPARSE_POINT NTFS выполняет валидации:
- Объект действительно файл/каталог NTFS и не содержит «несовместимых» атрибутов;
- У объекта нет уже установленного reparse-тэга (или разрешена замена специальным контролом);
- Для каталога: каталог обязан быть пустым. Проверка реализуется как перечисление записей индекса каталога (структуры $INDEX_ROOT/$INDEX_ALLOCATION) и убеждение, что присутствуют только служебные . и ... Если есть любые дочерние записи - возвращается статус ядра STATUS_DIRECTORY_NOT_EMPTY, который Procmon показывает как NOT EMPTY.
Однако, для Windows 10 (тестировал на сборке 22H2) данной проверки видимо не происходит и при передаче в качестве lpSymlinkFileName формата <имя_файла>:<любые символы> проверяется на существование полная строка, в результате существующая директория превращается в линку...
Таким образом мы получаем следующие возможности:
1. Вызвать DOS системы, если критичные системные каталоги превратить в симлинку;
2. Сделать невозможной для чтения директорию с находящимися в ней файлами (к примеру отключить полностью AV/EDR т.к. система не сможет прочитать их файлы во время загрузки;
3. Если допустим заранее скопировать папки AV/EDR в другую директорию подменить любые файлы на те которые хотим (допустим подменить службу агента EDR, то она будет запущена при старте системы, т.е. по сути возможно выполнить закрепление через службу используя уже существующую службу) и многое другое, что зависит от вашей фантазии.
Самый простой вариант эксплуатации:
mklink "<путь до первой папки где лежит AV/EDR>:$" "<Путь до новой папки с нашими файлами без имени первой папки AV/EDR>"
Если кратко: на сборках Windows 10 открытие каталога через поток :$ позволяло обойти проверку пустоты, поэтому FSCTL_SET_REPARSE_POINT по пути вида ...\:$ завершался успешно. В Windows 11 ntfs.sys исправлен: он всегда проверяет сам каталог, поэтому возвращает NOT EMPTY.
Если данную технику комбинировать с Applocker и Backstab, то можно обойтись без перезагрузки хоста, и службы AV/EDR более не загрузятся (тестировалось как POC, не уверен, что работает с СЗИ всех вендоров, но после перезагрузки результат уже 100%)
1. Создаем политику запрета служб AV/EDR по серту издателя
2. Создаем линку (уничтожаем директорию и подменяем её своей для закрепа)
3. С помощью Backstab уничтожаем сервисы AV/EDR
(ТЕСТИРОВАЛОСЬ НА WIN10 - РАБОТАЕТ, НА WINDOWS 11, WINDOWS SERVER 2022 - НЕ РАБОТАЕТ, НА SERVER 2016 ПРЕДПОЛОЖИТЕЛЬНО РАБОТАЕТ НАДО ТЕСТИРОВАТЬ)
Дополнительно фишки NTFS
IAmAntimalware: внедрение кода в процессы антивируса
Антивирусы защищают свои процессы от завершения, инъекций и доступа, в том числе через высокие привилегии, самоконтроль, проверку целостности кода, режим защищенных процессов Windows и драйверы в ядре. Идея автора - заставить сам антивирус загрузить «чужой» модуль как «свой».
1. Создается клон служебного процесса антивируса с теми же параметрами запуска, чтобы механизм самозащиты распознавал его как доверенный;
2. Используется момент инициализации, когда процесс обращается к криптографической инфраструктуре Windows: конфигурация провайдера временно указывает на управляемую библиотеку;
3. Для прохождения проверок подписи модулей применяются доверенные сертификаты - либо собственный импортированный сертификат, либо «клонирование» подписей легитимных программ по методике из отдельного инструмента автора;
4. Дополнительно возможен вариант перехвата через COM-объекты, которые подгружаются при старте.
Подробнее
https://github.com/TwoSevenOneT/IAmAntimalware
https://github.com/TwoSevenOneT/CertClone
Антивирусы защищают свои процессы от завершения, инъекций и доступа, в том числе через высокие привилегии, самоконтроль, проверку целостности кода, режим защищенных процессов Windows и драйверы в ядре. Идея автора - заставить сам антивирус загрузить «чужой» модуль как «свой».
1. Создается клон служебного процесса антивируса с теми же параметрами запуска, чтобы механизм самозащиты распознавал его как доверенный;
2. Используется момент инициализации, когда процесс обращается к криптографической инфраструктуре Windows: конфигурация провайдера временно указывает на управляемую библиотеку;
3. Для прохождения проверок подписи модулей применяются доверенные сертификаты - либо собственный импортированный сертификат, либо «клонирование» подписей легитимных программ по методике из отдельного инструмента автора;
4. Дополнительно возможен вариант перехвата через COM-объекты, которые подгружаются при старте.
Подробнее
https://github.com/TwoSevenOneT/IAmAntimalware
https://github.com/TwoSevenOneT/CertClone
Forwarded from InfoSec Portal
Открытый инструмент под названием RealBlindingEDR позволяет злоумышленникам «ослеплять», навсегда отключать или завершать работу антивирусного (AV) и EDR-ПО, очищая критические колбэки ядра в системах Windows.
Утилита использует подписанные драйверы для произвольного чтения и записи в память, обходит защиты вроде PatchGuard и нацелена на шесть основных типов колбэков ядра.
Эксплуатируя уязвимые драйверы, такие как echo_driver.sys или dbutil_2_3.sys, RealBlindingEDR получает доступ уровня ядра, не вызывая мгновенного обнаружения.
Читать далее: https://cybersecuritynews.com/realblindingedr-tool/
Please open Telegram to view this post
VIEW IN TELEGRAM
ANTIFORENSIC moment
Как отмечали специалисты Kaspersky в статье об AmCache, этот артефакт формируется и сопровождается операционной системой, и на момент выхода материала не было известных способов вмешаться в его содержимое или удалить его записи.
Похоже, что сейчас как раз наступил тот самый момент, о котором они писали. Как уже отмечалось в исходном посте, в Windows 11, в отличие от Windows 10, стало невозможно перезаписать объект каталога целиком. Однако нигде не сказано, что аналогичный прием нельзя применить к отдельным файлам внутри этого каталога. К сожалению, так удается поступить не со всеми файлами, к тому же в целевой директории должны быть права на запись. А если провернуть ещё парочку манипуляций, то к файлу не просто будет невозможно обратиться, но и он в целом перестанет существовать. )
Используя тот же подход:
становится возможным превратить файл в symlink.
Кстати какой нибудь SAM, можно перезаписать таким же образом. Возможно, у этого есть и более интересное применение, но его пока что не придумал, если есть идеи то жду в комментариях.
Как отмечали специалисты Kaspersky в статье об AmCache, этот артефакт формируется и сопровождается операционной системой, и на момент выхода материала не было известных способов вмешаться в его содержимое или удалить его записи.
Похоже, что сейчас как раз наступил тот самый момент, о котором они писали. Как уже отмечалось в исходном посте, в Windows 11, в отличие от Windows 10, стало невозможно перезаписать объект каталога целиком. Однако нигде не сказано, что аналогичный прием нельзя применить к отдельным файлам внутри этого каталога. К сожалению, так удается поступить не со всеми файлами, к тому же в целевой директории должны быть права на запись. А если провернуть ещё парочку манипуляций, то к файлу не просто будет невозможно обратиться, но и он в целом перестанет существовать. )
Используя тот же подход:
mklink "<Path_to_File>:<Any_symbols>"
становится возможным превратить файл в symlink.
Кстати какой нибудь SAM, можно перезаписать таким же образом. Возможно, у этого есть и более интересное применение, но его пока что не придумал, если есть идеи то жду в комментариях.
Продолжаем смеяться над Windows
Image File Execution Options все традиционно воспринимают как метод закрепления и повышения привилегий, но что если не только... Этот раздел реестра можно использовать для перенаправления выполнения любого приложения на другой исполняемый файл. Следовательно...
После перезапуска службы (как вариант перезагрузки хоста) служба более не стартует.
Работает с продуктами не всех вендоров, но работает.
Image File Execution Options все традиционно воспринимают как метод закрепления и повышения привилегий, но что если не только... Этот раздел реестра можно использовать для перенаправления выполнения любого приложения на другой исполняемый файл. Следовательно...
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<Имя службы AV/EDR>.exe
Value: Debugger (REG_SZ) : "C:\windows\system32\calc.exe"
После перезапуска службы (как вариант перезагрузки хоста) служба более не стартует.
Работает с продуктами не всех вендоров, но работает.
OFFICE MOMENT
Параметр, позволяющий установить, нажимал ли пользователь кнопку "Включить содержимое", хранится в ветви:
Внутри ключа
- разрешил редактирование документа, полученного из недоверенного источника;
- включил выполнение активного содержимого (макросов, встроенного VBScript).
Шаблоны Word (Normal.dotm, NormalEmail.dotm) как механизм закрепления
Стандартные шаблоны Word располагаются по пути:
Злоумышленник может внедрить вредоносный VBA-код непосредственно в базовый шаблон Word (Normal.dotm). В результате каждый запуск Word и открытие любого документа приводят к загрузке макроса и потенциальному выполнению вредоносного кода без привязки к конкретному файлу. Подробнее
Для типичной установки Office размер файлов Normal.dotm и NormalEmail.dotm находится в диапазоне примерно 17-19 КБ. Значительное увеличение размера может указывать на наличие дополнительных макросов, форм, встроенных объектов и других модификаций. Однако это лишь предварительный индикатор, требующий дальнейшего анализа содержимого.
Outlook и параметр LoadMacroProviderOnBoot
Параметр:
При этом необходимо учитывать, что в отдельных случаях настройка может быть изменена легитимным программным обеспечением или корпоративной политикой, поэтому интерпретация всегда должна сопровождаться анализом установленных надстроек Outlook и сопоставлением с перечнем разрешенного программного обеспечения.
Доверенные расположения (Trusted Locations) как обход политики макросов
В Office реализован механизм доверенных расположений, в которых документы могут содержать активное содержимое (макросы, встроенные скрипты) и при этом открываться без дополнительных предупреждений пользователя. Эти настройки задаются отдельно для каждого приложения и версии Office.
где
-
-
-
Данные техники использовались в атаках APT28.
Параметр, позволяющий установить, нажимал ли пользователь кнопку "Включить содержимое", хранится в ветви:
NTUSER.dat\Software\Microsoft\Office\<версия>\ <приложение>\Security\Trusted Documents\TrustRecords, где <версия> - числовой идентификатор версии Office (например, 14.0, 15.0, 16.0), а <приложение> - Word, Excel, PowerPoint и т.п.Внутри ключа
TrustRecords формируются значения, каждое из которых соответствует конкретному документу, для которого пользователь либо:- разрешил редактирование документа, полученного из недоверенного источника;
- включил выполнение активного содержимого (макросов, встроенного VBScript).
Шаблоны Word (Normal.dotm, NormalEmail.dotm) как механизм закрепления
Стандартные шаблоны Word располагаются по пути:
C:\Users\<имя пользователя>\AppData\Roaming\Microsoft\Templates\Normal.dotm
C:\Users\<имя пользователя>\AppData\Roaming\Microsoft\Templates\NormalEmail.dotm
Злоумышленник может внедрить вредоносный VBA-код непосредственно в базовый шаблон Word (Normal.dotm). В результате каждый запуск Word и открытие любого документа приводят к загрузке макроса и потенциальному выполнению вредоносного кода без привязки к конкретному файлу. Подробнее
Для типичной установки Office размер файлов Normal.dotm и NormalEmail.dotm находится в диапазоне примерно 17-19 КБ. Значительное увеличение размера может указывать на наличие дополнительных макросов, форм, встроенных объектов и других модификаций. Однако это лишь предварительный индикатор, требующий дальнейшего анализа содержимого.
Outlook и параметр LoadMacroProviderOnBoot
Параметр:
NTUSER.dat\Software\Microsoft\Office\<версия>\Outlook\LoadMacroProviderOnBoot управляет тем, будет ли Outlook при запуске автоматически загружать настроенный VBA. Наличие значения 1 = enable;При этом необходимо учитывать, что в отдельных случаях настройка может быть изменена легитимным программным обеспечением или корпоративной политикой, поэтому интерпретация всегда должна сопровождаться анализом установленных надстроек Outlook и сопоставлением с перечнем разрешенного программного обеспечения.
Доверенные расположения (Trusted Locations) как обход политики макросов
В Office реализован механизм доверенных расположений, в которых документы могут содержать активное содержимое (макросы, встроенные скрипты) и при этом открываться без дополнительных предупреждений пользователя. Эти настройки задаются отдельно для каждого приложения и версии Office.
NTUSER.dat\Software\Microsoft\Office\<версия>\<приложение>\Security\Trusted Locations\LocationX
где
LocationX - пронумерованные записи (Location0, Location1, Location2 и т.д.). Внутри хранятся по крайней мере следующие значения:-
Path - путь к доверенной папке;-
AllowSubFolders - флаг, указывающий, распространяется ли доверие на вложенные каталоги;-
Denoscription, Date и другие атрибуты, уточняющие суть и время создания записи.Данные техники использовались в атаках APT28.
Удаляем драйвер через smss.exe
Кто-то меня спрашивал как удалить драйвер AV/EDR, потому что службу мы уже смогли и перезаписать и удалить, а с драйвером так сделать было невозможно.
В общем я что то потыкал и удалил драйвер с перезагрузкой хоста.
Открываем:
И в параметр
Работает и на 10 и на 11 Windows
Кто-то меня спрашивал как удалить драйвер AV/EDR, потому что службу мы уже смогли и перезаписать и удалить, а с драйвером так сделать было невозможно.
В общем я что то потыкал и удалил драйвер с перезагрузкой хоста.
Открываем:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
И в параметр
ExistingPageFiles записываем путь к драйверу AV/EDR (начало пути \??\C:\ ну или иная метка диска), после ребутаем тачку и получаем профит в случае, если smss.exe сможет получить права на удаление. По этой причине работа данной техники сильно зависит от архитектуры решения которое мы пытаемся удалить.Работает и на 10 и на 11 Windows
ELF HEADERS
В исполняемых файлах формата ELF присутствуют заголовки и служебные структуры, которые не являются критичными для непосредственной загрузки и выполнения бинарного модуля операционной системой или динамическим загрузчиком, но активно используются утилитами анализа при парсинге файла. Умышленное искажение таких заголовков позволяет формировать вредоносные программы, которые будут приводить к сбоям и аварийному завершению работы песочниц и систем анализа, оставаясь при этом работоспособными на целевом хосте, а также использовать отдельные поля заголовков как контейнер для скрытого хранения конфиденциальных данных.
Подробно:
https://kyrr1s.github.io/posts/abusing-elf-header-forgotten-fields/
При поддержке:
@while_not_False
В исполняемых файлах формата ELF присутствуют заголовки и служебные структуры, которые не являются критичными для непосредственной загрузки и выполнения бинарного модуля операционной системой или динамическим загрузчиком, но активно используются утилитами анализа при парсинге файла. Умышленное искажение таких заголовков позволяет формировать вредоносные программы, которые будут приводить к сбоям и аварийному завершению работы песочниц и систем анализа, оставаясь при этом работоспособными на целевом хосте, а также использовать отдельные поля заголовков как контейнер для скрытого хранения конфиденциальных данных.
Подробно:
https://kyrr1s.github.io/posts/abusing-elf-header-forgotten-fields/
При поддержке:
@while_not_False