Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Аббревиатура AMSI расшифровывается как Anti-Malware Scan Interface. Эту технологию Microsoft разработала в качестве метода защиты пользователей от вредоносных программ и впервые внедрила в Windows 10. AMSI в реальном времени перехватывает скрипты и команды PowerShell, jаvascript, VBScript, VBA или .NET и отсылает на проверку антивирусному программному обеспечению (это необязательно Defender, более десяти вендоров поддерживают AMSI). Но в наших примерах мы рассмотрим все же Defender.
Когда пользователь запускает скрипт или инициализирует процесс PowerShell (либо PowerShell_ISE), в процесс автоматически загружается библиотека AMSI.
. Она‑то и предоставляет необходимый API для взаимодействия с антивирусным ПО. Прежде чем выполниться, скрипт или команда при помощи удаленного вызова процедур (RPC) отправляется Microsoft Defender, он, в свою очередь, анализирует полученную информацию и отсылает ответ обратно AMSI.
. Если обнаружена известная сигнатура, выполнение прерывается и появляется сообщение о том, что скрипт заблокирован антивирусной программой.
На приведенной выше схеме обозначены две функции — AmsiScanString(
и AmsiScanBuffer(
, они, по сути, главные в цепочке AmsiInitialize
, AmsiOpenSession
, AmsiScanString
, AmsiScanBuffer
и AmsiCloseSession
. Если глянуть Exports для amsi.
, то мы увидим следующее.
Однако значительная часть этого списка нам сегодня не пригодится.
Итак, мы запустили 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, то малварь обнаружена, единичка сигнализирует, что все чисто.
Ну и после всех перечисленных выше проверок текущая сессия закрывается с использованием AmsiCloseSession
.
Механизм AMSI использует сигнатурное (rule-based) детектирование угроз. Зная этот факт, можно придумывать разные тактики и техники. Некоторые известные способы уже не сработают, но, используя модификацию кода, обфускацию и криптование, можно добиться интересных результатов.
Для верификации детекта я буду использовать строки AmsiUtils либо Invoke-Mimikatz. Разумеется, сами по себе эти слова безобидны, но на них срабатывает детект, так как они ловятся сигнатурами. Если уж на AmsiUtils нет детекта, то можно смело грузить, например, PowerView и использовать его возможности по максимуму.
Итак, поехали.
Первый способ, который иногда срабатывает, тривиален. PowerShell 2.0 устарел, но Microsoft не спешит удалять его из операционной системы. У старой версии PowerShell нет таких защитных механизмов, как AMSI, поэтому для обхода детекта иногда достаточно использовать команду powershell
.
|
|