Три кейса про обход средств защиты

Дорогой дневник…

Пришло время разбавить трёхмесячную ноющую пустоту внутри постом по мотивам моего выступления на конференции CyberCrimeCon, организованной Group-IB. Выступление было посвящено трём кейсам (вымышленным, само собой) из практики тестирования на проникновение, имевшим место в течение последних 6-8 месяцев (естественно, в воображении автора).

Кейс 1

Внутренний пентест. Инфраструктура в несколько тысяч хостов, преимущественно Windows. Все хосты c Windows защищены решением McAfee Endpoint Security.

Разделим перемещение по сети на три этапа:

  • сбор информации и планирование атаки;
  • исполнение кода на хостах с работающим антивирусом;
  • дамп памяти на хостах с работающим антивирусом.

Планирование атаки

Сбор информации нынче принято осуществлять при помощи BloodHound и я настойчиво рекомендую всем синим и красным командам провести интенсивное изучение данного инструмента. Вот так выглядит путь от привилегированной учётной записи (администратор серверов CRM) до группы администраторов контроллеров домена:

А вот так — полный маршрут от рядового пользователя, админа на своей доменной машине, до группы доменных администраторов:

Я надеюсь, что теперь понятно, как пентестерам удаётся не заблудиться в сети на тысячи машин, когда для получения максимальных прав требуется скомпрометировать всего 3-4.

Исполнение кода

В данном кейсе, благодаря ряду других мисконфигураций, имелась возможность удалённо исполнять команды при помощи старого-доброго PsExec. Один вопрос — как запускать исполняемый файл на удалённом хосте с работающим антивирусом McAfee? Ответ — при помощи msfvenom. В 2018-м году всё ещё находятся антивирусы, корорые из коробки дружат с этим инструментом. Для обхода McAfee годится первая версия полезной нагрузки, использованной прошлым летом в изучении способностей Антивируса Касперского.

Не забывайте только, что для доставки лучше использовать какой-нибудь легитимный 64-битный исполняемый файл, который нравится всем антивирусам. Я всё ещё фанат штук из набора SysInternals.

Дамп процессов

Наконец, когда мы на хосте, мы захотим, сдампить память lsass.exe, почему бы и нет? Совсем обнаглев, мы можем попытаться сделать это при помощи Mimikatz, но исполняемый файл, само собой, не подойдёт.

Зато подойдёт обфусцированный PowerShell. Берём Mimikatz в виде скрипта, обфусцируем при помощи ISESteroids (если не лень, то бесплатно) — и получаем на выходе исполняющийся без проблем скрипт. McAfee не возражает.

Запоминаем. Не бро:

Бро:

Повторяем процедуру сбора учётных данных из памяти на хостах согласно маршруту, построенному в BloodHound, пока не достигнем поставленной цели.

Итого

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

Кейс 2

Снова внутренний пентест. Однако теперь рассматриваем конкретную задачу — осуществить соединение с сервером в Интернете изнутри корпоративной сети. Здесь у нас на пути стоят как минимум два решения. Первое – это корпоративный прокси-сервер с возможностью перехвата SSL и, предположительно, снабжённый антивирусом. Второе – неизвестная, но очень агрессивная IPS-система. Нам потребуется установить meterpreter-соединение для управления заражёнными машинами.

Снова разделим перемещение по сети на три этапа:

  • поиск учётных записей с правами на выход в Интернет;
  • обход системы репутации прокси-сервера;
  • сокрытие своего управляющего трафика от инспектирующих систем.

Поиск учётных записей

В очередной раз мы воспользуемся BloodHound, только в данном случае для поиска групп пользователей, имеющих право на выход в Интернет. Как мы раздобудём учётные записи пользователей, состоящих в этой группе — за пределами темы данного поста.

Создание репутации

Теперь у нас есть учётная запись с доступом в Интернет, но корпоративный прокси реализует систему репутации, не позволяя переходить ни на какие ресурсы, которые могли бы быть использованы для сообщения с трояном – Twitter, Github, Pastebin и прочие. Я правда попытался, они все справедливо заблокированы. Естественно, по IP-адресу он не пускает, на свежеприобретённый домен тоже.

К счастью, у каждого пентестера есть заброшенный месяцами блог, в который он ничего не пишет (Вы находителсь здесь). Вбиваю свой домен и меня пускают, потому что ресурс известен Интернету уже несколько лет. Но дальше происходит нечто странное, потому что порт для прокси не имеет никакого значения. Уж не знаю, это у моего блога такая репутация, что ему позволяют располагаться на порту 4444 или нет, но мне остаётся только открыть любой удобный порт на выделенном сервере и установить соединение. Готово.

Сокрытие трафика

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

Здесь приходится отказаться от HTTPS, но тогда, проходя прокси, незашифрованное соединение привлекает внимание IPS и та сразу понимает, что творится неладное. И вот здесь приходится немного приложить руки, потому что потребуется и на стороне сервера и на стороне клиента реализовать некую трансормацию трафика так, чтобы он не выглядил зашифрованным и при этом IPS не видела в нём управляющие команды и передачу вредоносных DLL.

Тут открывается настоящий простор для творчества. Вот Вам ссылка на статью, где было предложено решение – добавлять к трафику 64 килобайта мусора и только после этого начинать передавать легитимные данные. Можно добавлять 2 килобайта мусора каждые 4 килобайта легитимного трафика и так далее. Можно поступить ещё проще и воспользоваться простыми преобразованиями вроде сдвига ROT13 или замены определённых частых символов на какие-либо другие, всё это скорее всего сработает.

Итого

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

Кейс 3

Третий кейс о рассылке писем с вредоносной полезной нагрузкой на предприятие, о котором заранее было известно, что соединение с Интернетом там возможно только на специально выделенных машинах в изолированном сегменте сети. Впрочем, электронная почта пользователям доставляется исправно. Сложно сделать предположения обо всех средствах защиты, с которыми исполняемый код имел дело внутри сети, но однозначно можно сказать, что на хостах установлен Kaspersky Endpoint Security 11.

В очередной раз делим всё на три условных этапа:

  • формирование письма, которое не попадёт в спам;
  • сборка документа Microsoft Office с вредоносной полезной нагрузкой;
  • выгрузка данных из сети в условиях отсутсвия соединения с Интернетом.

Обход антиспама

В части спам-фильтров всё относительно просто. Лично я пользуюсь сервисом mail-tester, он в наглядной и понятной форме показывает присланное ему письмо с точки зрения спам-фильтра. Существуют как технические показатели (такие как SPF, DMARC и прочее) так и косметические, вроде разметки, наличия изображений и тому подобное. Письмо оценивается по десятибальной шкале и когда удаётся устранить все недостатки и получить оценку 9 и выше – можно начинать подготовку документа Office.

Документ с нагрузкой

Документ Office содержит самописный макрос на Visual Basic, который активирует содержащуюся внутри документа самописную полезную нагрузку. Способ запуска нагрузки в обход антивируса Касперского мы в блоге уже обсуждали, так что Вам придётся поверить, что присланный почтой троян ничем не хуже любого другого — Касперский пропускает его не менее охотно. Однако даже в отрыве от этой полезной нагрузки имеется VBA-код, который её активирует и этого уже достаточно, чтобы документ отправился на карантин. Если только не воспользоваться уже знакомой по первому кейсу обфускацией. Берём любой публичный обфускатор Visual Basic и устраняем проблему.

Снова запоминаем. Не бро:

Бро:

Выгрузка данных

Наконец, содержащийся в документе макрос запустил на хосте троян. Остаётся только наладить канал коммуникации. Как мы помним, доступа в Интернет нет, но это не всегда означает,что соединения не будет. Нередко хост жертвы способен делать запросы на доверенный DNS-сервер внутри корпоративной сети, а этот сервер, в свою очередь (может быть даже через несколько других серверов) производит запрос в Интернет. Если запрос был на подконтрольный потенциальному злоумышленнику домен, он попадёт на подконтрольный ему же сервер. Сервер может направить произвольный ответ, который тем же способом вернётся на протрояненную машину в изолированной сети. Таким образом, имеем небыстрый, но всё же двусторонний канал коммуникации.

Лучшим, на данный момент, решением является DNS-туннель, разработанный Алексеем Синцовым и представленный на ZeroNights 2017. Вам потребуется форк Metasploit и промежуточный сервер, который будет ловить запросы с заражённых нагрузкой хостов (подойдёт любая линуксовая VPS).

Как только справитесь с подготовкой инфраструктуры — получите хоть и не самый быстрый, но всё же meterpreter-шелл изнутри изолированной сети.

Итого

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

Добавить комментарий

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