F#ck AMSI! Как обходят Anti-Malware Scan Interface при заражении Windows - «Новости» » Самоучитель CSS
Меню
Наши новости
Учебник CSS

Невозможно отучить людей изучать самые ненужные предметы.

Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3

Надо знать обо всем понемножку, но все о немногом.

Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы

Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)

Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода

Самоучитель CSS

Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5

Новости

Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости

Справочник CSS

Справочник от А до Я
HTML, CSS, JavaScript

Афоризмы

Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы

Видео Уроки


Наш опрос



Наши новости

       
9-09-2021, 00:02
F#ck AMSI! Как обходят Anti-Malware Scan Interface при заражении Windows - «Новости»
Рейтинг:
Категория: Новости

Ес­ли тебе зна­кома фра­за «Этот сце­нарий содер­жит вре­донос­ное содер­жимое и был заб­локиро­ван анти­вирус­ным прог­рам­мным обес­печени­ем», то сегод­няшняя статья — для тебя. Такое сооб­щение генери­рует встро­енный в Windows 10 механизм AMSI, бло­киру­ющий выпол­нение вре­донос­ных сце­нари­ев и скрип­тов. Мож­но ли его обой­ти? Зап­росто, и сей­час я рас­ска­жу, как это сде­лать.

warning


Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.



Аб­бре­виату­ра AMSI рас­шифро­выва­ется как Anti-Malware Scan Interface. Эту тех­нологию Microsoft раз­работа­ла в качес­тве метода защиты поль­зовате­лей от вре­донос­ных прог­рамм и впер­вые внед­рила в Windows 10. AMSI в реаль­ном вре­мени перех­ватыва­ет скрип­ты и коман­ды PowerShell, jаvascript, VBScript, VBA или .NET и отсы­лает на про­вер­ку анти­вирус­ному прог­рам­мно­му обес­печению (это необя­затель­но Defender, более десяти вен­доров под­держи­вают AMSI). Но в наших при­мерах мы рас­смот­рим все же Defender.


 

Как это работает


Ког­да поль­зователь запус­кает скрипт или ини­циали­зиру­ет про­цесс PowerShell (либо PowerShell_ISE), в про­цесс авто­мати­чес­ки заг­ружа­ется биб­лиоте­ка AMSI.DLL. Она‑то и пре­дос­тавля­ет необ­ходимый API для вза­имо­дей­ствия с анти­вирус­ным ПО. Преж­де чем выпол­нить­ся, скрипт или коман­да при помощи уда­лен­ного вызова про­цедур (RPC) отправ­ляет­ся Microsoft Defender, он, в свою оче­редь, ана­лизи­рует получен­ную информа­цию и отсы­лает ответ обратно AMSI.DLL. Если обна­руже­на извес­тная сиг­натура, выпол­нение пре­рыва­ется и появ­ляет­ся сооб­щение о том, что скрипт заб­локиро­ван анти­вирус­ной прог­раммой.


При­мер­но так работа­ет AMSI

На при­веден­ной выше схе­ме обоз­начены две фун­кции — AmsiScanString() и AmsiScanBuffer(), они, по сути, глав­ные в цепоч­ке AmsiInitialize, AmsiOpenSession, AmsiScanString, AmsiScanBuffer и AmsiCloseSession. Если гля­нуть Exports для amsi.dll, то мы уви­дим сле­дующее.


Эк­спор­ты биб­лиоте­ки amsi.dll

Од­нако зна­читель­ная часть это­го спис­ка нам сегод­ня не при­годит­ся.


Итак, мы запус­тили 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) детек­тирова­ние угроз. Зная этот факт, мож­но при­думы­вать раз­ные так­тики и тех­ники. Некото­рые извес­тные спо­собы уже не сра­бота­ют, но, исполь­зуя модифи­кацию кода, обфуска­цию и крип­тование, мож­но добить­ся инте­рес­ных резуль­татов.



info


Для верифи­кации детек­та я буду исполь­зовать стро­ки AmsiUtils либо Invoke-Mimikatz. Разуме­ется, сами по себе эти сло­ва безобид­ны, но на них сра­баты­вает детект, так как они ловят­ся сиг­натура­ми. Если уж на AmsiUtils нет детек­та, то мож­но сме­ло гру­зить, нап­ример, PowerView и исполь­зовать его воз­можнос­ти по мак­симуму.



Итак, поеха­ли.


 

PowerShell downgrade


Пер­вый спо­соб, который иног­да сра­баты­вает, три­виален. PowerShell 2.0 уста­рел, но Microsoft не спе­шит уда­лять его из опе­раци­онной сис­темы. У ста­рой вер­сии PowerShell нет таких защит­ных механиз­мов, как AMSI, поэто­му для обхо­да детек­та иног­да дос­таточ­но исполь­зовать коман­ду powershell -version 2.


Ис­поль­зуем PowerShell 2.0

Ес­ли тебе зна­кома фра­за «Этот сце­нарий содер­жит вре­донос­ное содер­жимое и был заб­локиро­ван анти­вирус­ным прог­рам­мным обес­печени­ем», то сегод­няшняя статья — для тебя. Такое сооб­щение генери­рует встро­енный в Windows 10 механизм AMSI, бло­киру­ющий выпол­нение вре­донос­ных сце­нари­ев и скрип­тов. Мож­но ли его обой­ти? Зап­росто, и сей­час я рас­ска­жу, как это сде­лать. warning Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону. Аб­бре­виату­ра AMSI рас­шифро­выва­ется как Anti-Malware Scan Interface. Эту тех­нологию Microsoft раз­работа­ла в качес­тве метода защиты поль­зовате­лей от вре­донос­ных прог­рамм и впер­вые внед­рила в Windows 10. AMSI в реаль­ном вре­мени перех­ватыва­ет скрип­ты и коман­ды PowerShell, jаvascript, VBScript, VBA или .NET и отсы­лает на про­вер­ку анти­вирус­ному прог­рам­мно­му обес­печению (это необя­затель­но Defender, более десяти вен­доров под­держи­вают AMSI). Но в наших при­мерах мы рас­смот­рим все же Defender. Как это работает Ког­да поль­зователь запус­кает скрипт или ини­циали­зиру­ет про­цесс PowerShell (либо PowerShell_ISE), в про­цесс авто­мати­чес­ки заг­ружа­ется биб­лиоте­ка AMSI.DLL. Она‑то и пре­дос­тавля­ет необ­ходимый API для вза­имо­дей­ствия с анти­вирус­ным ПО. Преж­де чем выпол­нить­ся, скрипт или коман­да при помощи уда­лен­ного вызова про­цедур (RPC) отправ­ляет­ся Microsoft Defender, он, в свою оче­редь, ана­лизи­рует получен­ную информа­цию и отсы­лает ответ обратно AMSI.DLL. Если обна­руже­на извес­тная сиг­натура, выпол­нение пре­рыва­ется и появ­ляет­ся сооб­щение о том, что скрипт заб­локиро­ван анти­вирус­ной прог­раммой. При­мер­но так работа­ет AMSIНа при­веден­ной выше схе­ме обоз­начены две фун­кции — AmsiScanString() и AmsiScanBuffer(), они, по сути, глав­ные в цепоч­ке AmsiInitialize, AmsiOpenSession, AmsiScanString, AmsiScanBuffer и AmsiCloseSession. Если гля­нуть Exports для amsi.dll, то мы уви­дим сле­дующее. Эк­спор­ты биб­лиоте­ки amsi.dllОд­нако зна­читель­ная часть это­го спис­ка нам сегод­ня не при­годит­ся. Итак, мы запус­тили PowerShell. До того как мы смо­жем вво­дить какие‑либо коман­ды, будет заг­ружена AMSI.DLL и про­изой­дет вызов AmsiInitialize(). HRESULT AmsiInitialize ( LPCWSTR appName , 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 , PVOID buffer , ULONG length , LPCWSTR contentName , HAMSISESSION amsiSession , AMSI_RESULT * result ) ; HRESULT AmsiScanString ( HAMSICONTEXT amsiContext , LPCWSTR string , LPCWSTR contentName , HAMSISESSION amsiSession , AMSI_RESULT * result ) ; Defender про­веря­ет буфер или стро­ку и воз­вра­щает резуль­тат. Если ответ от Defender — 32768, то мал­варь обна­руже­на, еди­нич­ка сиг­нализи­рует, что все чис­то. Мал­варь обна­руже­на Мал­варь не обна­руже­наНу и пос­ле всех перечис­ленных выше про­верок текущая сес­сия зак­рыва­ется с исполь­зовани­ем AmsiCloseSession. Как обойти проверку Ме­ханизм AMSI исполь­зует сиг­натур­ное (rule-based) детек­тирова­ние угроз. Зная этот факт, мож­но при­думы­вать раз­ные так­тики и тех­ники. Некото­рые извес­тные спо­собы уже не сра­бота­ют, но, исполь­зуя модифи­кацию кода, обфуска­цию и крип­тование, мож­но добить­ся инте­рес­ных резуль­татов. info Для верифи­кации детек­та я буду исполь­зовать стро­ки AmsiUtils либо Invoke-Mimikatz. Разуме­ется, сами по себе эти сло­ва безобид­ны, но на них сра­баты­вает детект, так как они ловят­ся сиг­натура­ми. Если уж на AmsiUtils нет детек­та, то мож­но сме­ло гру­зить, нап­ример, PowerView и исполь­зовать его воз­можнос­ти по мак­симуму. Итак, поеха­ли. PowerShell downgrade Пер­вый спо­соб, который иног­да сра­баты­вает, три­виален. PowerShell 2.0 уста­рел, но Microsoft не спе­шит уда­лять его из опе­раци­онной сис­темы. У ста­рой вер­сии PowerShell нет таких защит­ных механиз­мов, как AMSI, поэто­му для обхо­да детек­та иног­да дос­таточ­но исполь­зовать коман­ду powershell -version 2. Ис­поль­зуем PowerShell 2.0

Теги: CSS

Просмотров: 784
Комментариев: 0:   9-09-2021, 00:02
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

 
Еще новости по теме:



Другие новости по теме: