![](/uploads/posts/2022-08/exports.png)
Содержание статьи
Аббревиатура AMSI расшифровывается как Anti-Malware Scan Interface. Эту технологию Microsoft разработала в качестве метода защиты пользователей от вредоносных программ и впервые внедрила в Windows 10. AMSI в реальном времени перехватывает скрипты и команды PowerShell, . Но в наших примерах мы рассмотрим все же Defender.
Как это работает
Когда пользователь запускает скрипт или инициализирует процесс PowerShell (либо PowerShell_ISE), в процесс автоматически загружается библиотека AMSI.
. Она‑то и предоставляет необходимый API для взаимодействия с антивирусным ПО. Прежде чем выполниться, скрипт или команда при помощи удаленного вызова процедур (RPC) отправляется Microsoft Defender, он, в свою очередь, анализирует полученную информацию и отсылает ответ обратно AMSI.
. Если обнаружена известная сигнатура, выполнение прерывается и появляется сообщение о том, что скрипт заблокирован антивирусной программой.
![Примерно так работает AMSI Примерно так работает AMSI](/uploads/posts/2022-08/amsi-powershell.jpg)
На приведенной выше схеме обозначены две функции — AmsiScanString(
и AmsiScanBuffer(
, они, по сути, главные в цепочке AmsiInitialize
, AmsiOpenSession
, AmsiScanString
, AmsiScanBuffer
и AmsiCloseSession
. Если глянуть Exports для amsi.
, то мы увидим следующее.
![Экспорты библиотеки amsi.dll Экспорты библиотеки amsi.dll](/uploads/posts/2022-08/exports.png)
Однако значительная часть этого списка нам сегодня не пригодится.
Итак, мы запустили PowerShell. До того как мы сможем вводить какие‑либо команды, будет загружена AMSI.DLL и произойдет вызов AmsiInitialize(
.
HRESULT AmsiInitialize(
LPCWSTRappName,
HAMSICONTEXT *amsiContext
);
Тут используются два аргумента: имя приложения и указатель на структуру CONTEXT
. Параметр amsiContext
будет использоваться в каждом последующем вызове AMSI API.
После того как мы ввели команду или попытались выполнить скрипт, происходит вызов AmsiOpenSession
():
HRESULT AmsiOpenSession(
HAMSICONTEXT amsiContext,
HAMSISESSION *amsiSession
);
Тут тоже передаются два аргумента: amsiContext
, полученный на шаге AmsiInitialize(
, и указатель на структуру SESSION
. Параметр amsiSession
будет использоваться в каждом последующем вызове AMSI API внутри этой сессии.
Далее в дело вступают те самые AmsiScanString(
и AmsiScanBuffer(
. По названию, в принципе, понятно, какие параметры они передают для проверки, да и синтаксис у них почти одинаков.
HRESULT AmsiScanBuffer(
HAMSICONTEXT amsiContext,
PVOIDbuffer,
ULONGlength,
LPCWSTRcontentName,
HAMSISESSION amsiSession,
AMSI_RESULT *result
);
HRESULT AmsiScanString(
HAMSICONTEXT amsiContext,
LPCWSTRstring,
LPCWSTRcontentName,
HAMSISESSION amsiSession,
AMSI_RESULT *result
);
Defender проверяет буфер или строку и возвращает результат. Если ответ от Defender — 32768, то малварь обнаружена, единичка сигнализирует, что все чисто.
![Малварь обнаружена Малварь обнаружена](/uploads/posts/2022-08/01_6BprROr.png)
![Малварь не обнаружена Малварь не обнаружена](/uploads/posts/2022-08/02_CjF59x5.png)
Ну и после всех перечисленных выше проверок текущая сессия закрывается с использованием AmsiCloseSession
.
Как обойти проверку
Механизм AMSI использует сигнатурное (rule-based) детектирование угроз. Зная этот факт, можно придумывать разные тактики и техники. Некоторые известные способы уже не сработают, но, используя модификацию кода, обфускацию и криптование, можно добиться интересных результатов.
Итак, поехали.
PowerShell downgrade
Первый способ, который иногда срабатывает, тривиален. PowerShell 2.0 устарел, но Microsoft не спешит удалять его из операционной системы. У старой версии PowerShell нет таких защитных механизмов, как AMSI, поэтому для обхода детекта иногда достаточно использовать команду powershell
.
![Используем PowerShell 2.0 Используем PowerShell 2.0](/uploads/posts/2022-08/03_fi0j7ZR.png)
Скачать:
Скриншоты:
Важно:
Все статьи и материал на сайте размещаются из свободных источников. Приносим свои глубочайшие извинения, если Ваша статья или материал была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.