Защита от детекта в Active Directory. Уклоняемся от обнаружения при атаке на домен

Как известно, любая атака выполняется в несколько этапов. Мы успешно провели разведку, повысили собственные привилегии, продвинулись, куда только захотели, и в итоге сумели захватить всю сеть. Но вот проблема: нас обнаружили, отрезали от сети и поймали. Чтобы избежать подобного развития событий, настало время рассмотреть методы защиты от обнаружения.

 

Читай также про пентесты Active Directory

  • Разведка в Active Directory. Получаем пользовательские данные в сетях Windows без привилегий
  • Атаки на Active Directory. Разбираем актуальные методы повышения привилегий
  • Боковое перемещение в Active Directory. Разбираем техники Lateral Movement при атаке на домен

Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами этой статьи.

 

Уклонение от сканеров памяти

Любые действия в системе так или иначе регистрируются, и полностью скрыться от опытного наблюдателя никогда не получится. Но можно максимально замаскироваться. Большинство команд Red Team или пентестеров при атаке на домен используют PowerShell. Причем он стал настолько популярен, что появились целые фреймворки, к примеру Empire и PowerSploit. Кроме того, скрипты PowerShell могут быть обфусцированы с помощью того же Invoke-Obfuscation. В ответ на появление всех этих инструментов сторона защиты разработала методы их обнаружения, такие как выявление странных родительских-дочерних связей, подозрительные аргументы командной строки и даже различные способы деобфускации PowerShell.

Одно из самых передовых средств для атак на домены Windows с возможностью скрытия активности — Cobalt Strike, в частности использование модуля execute-assembly. Есть возможность выполнять близкие к PowerShell-скриптам программы, написанные на C#. К примеру, собранный на C# get-users, который дублирует функции модуля Get-NetUser из пакета PowerView. В данном примере у контроллера домена запрашиваются свойства SAMAccountName, UserGivenName и UserSurname для каждой учетной записи.

Запуск get-users с помощью модуля execute-assembly

Давай посмотрим, что происходит в это время на целевой машине. Сделать это можно с помощью ProcMon.

Дерево процессов, построенное ProcMon

Процесс powershell.exe содержит нагрузку Cobalt Strike, а процесс rundll32.exe используется для загрузки и выполнения get-users. Стоит сказать, что powershell.exe является родителем rundll32.exe только потому, что нагрузка Cobalt Strike была запущена из-под PowerShell.

Но нагрузку Cobalt Strike можно запускать из-под любого процесса, при этом также имеется возможность мигрировать в разные процессы. Кроме того, некоторые функции Cobalt Strike выгружаются в новые процессы, что позволяет обеспечить стабильную работу этого ПО. Помимо прочего, библиотеки DLL, загруженные в процесс rundll32, включают в себя те, которые необходимы для get-users, например библиотеки LDAP и аутентификацию Kerberos.

DLL-библиотеки, загруженные в rundll32

Главное преимущество данного модуля заключается в том, что файл никогда не пишется на диск, то есть сборка выполняется строго в памяти. При этом во время анализа памяти большое внимание уделяется функции CreateRemoteThread, благодаря которой вредоносные программы мигрируют в другие процессы и загружаются образы. Модуль execute-assembly загружает пользовательскую сборку при помощи встроенной функции LoadImage, а так как эта функция используется в основном легитимными процессами для загрузки DLL, обнаружить загрузку сборки очень сложно.

Стоит добавить, что PowerShell — не единственный легитимный процесс, использование которого пристально отслеживается стороной защиты. Другие распространенные программы и службы (такие как WMIC или schtasks/at) также подлежат тщательному контролю. Но и функции этих инструментов могут быть воспроизведены в пользовательских сборках .NET. А это значит, что есть возможность их скрытного использования с помощью того же модуля execute-assembly.

 

Уклонение от EDR

Endpoint Detection and Response (EDR) — технология обнаружения угроз и реагирования на оконечном оборудовании. EDR постоянно отслеживает и анализирует подозрительную активность и принимает необходимые меры в ответ нее. Так как большинство организаций сосредотачиваются на безопасности сети, то они оставляют без внимания активность на оконечном оборудовании. Являясь одним из основных источников информации для SOC, EDR помогает закрыть эту брешь за счет настройки разных политик, включающих в себя контроль запуска приложений, контроль макросов и скриптов, анализ действий с памятью и многое другое.

Все описанные в статье методы могут перекликаться с темой уклонения от EDR, но именно в этом разделе хотелось бы рассмотреть скрытую работу критического ПО (такого как mimikatz) и доставление первоначальной нагрузки.

 

Скрываем работу mimikatz

Как правило, почти все EDR обнаруживают использование одного из главных инструментов любого пентестера, редтимщика или злоумышленника, атакующего Windows-системы, — mimikatz. Поэтому использование данного инструмента в чистом виде, когда имеешь дело с серьезными организациями, не имеет никакого смысла.

Как вариант, можно сдампить процесс LSASS, с которым и работает mimikatz для получения важных данных. Но использование ProcDump EDR также обнаружит из-за перехвата соответствующих вызовов API. Таким образом, если отсоединить процесс LSASS от соответствующих API, то его можно незаметно сдампить. Именно так и работает инструмент под названием Dumpert. Благодаря прямым системным вызовам и отсоединению API данный инструмент позволяет сделать укороченный дамп процесса LSASS в обход антивирусных средств и EDR.

Создание дампа LSASS с помощью Dumpert

И теперь можно использовать mimikatz для извлечения информации из дампа, предварительно указав файл дампа.

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *