Первоисточник:
Перевод: Перевод выполнен от команды Codeby
Примечание от команды форума:
Все инструменты, обсуждаемые в этом посте, являются общедоступными. В процессе я объясню обход IPS ((Intrusion Prevention System) системы предотвращения вторжений), которая обнаруживает поэтапное соединение Meterpreter, даже если оно установлено по протоколу HTTPS! Обратите внимание, что в этом посте не рассматривается создание любого исполняемого файла с нуля, а обсуждается использование уже доступных инструментов в сочетании друг с другом.
Недавно я участвовал в двух red team проектах по анализу защищенности. Сценарии были следующими:
Небольшой обзор по Reverse Metasploit’s HTTPS payload и её обнаружение антивирусом
Решил я создать исполняемый файл Meterpreter (reverse_https). Все работало чудесно, и пришло время протестировать систему с запущенным антивирусом. Для этого я запустил исполняемый файл на виртуальной машине с включенным Symantec Endpoint Protection. Исполняемый файл запустился, но сеанс не удалось установить, так как соединение было перехвачено модулем антивируса IPS, указав, что соединение Meterpreter было обнаружено и заблокировано. Вопрос заключается в том, каким образом зашифрованное соединение может быть обнаружено IPS? Итак, давайте рассмотрим, что случилось.
Чтобы обойти правила фаерволла, злоумышленники обычно используют порт, который, скорее всего, будет разрешен, например, 80, 53, 443 и т. д. Хотя использование этих портов может обойти правила фильтрации, настроенных с помощью средств как брандмауэры, фаерволлы и межсетевые экраны, но более интеллектуальные сервисы, такие как IPS, проксируют исходящий трафик, чтобы заблокировать соединение и предупредить администратора об атаке.
Хорошо, что в 2011 году Metasploit добавил поддержку reverse HTTPS-соединений, что позволило использовать зашифрованный канал через SSL. В моем случае, хоть я и использовал reverse-shell (windows/meterpreter/reverse_https), он все еще детектился модулем IPS антивируса (далее AV) Symantec.
После дальнейшего расследования я нашел сообщение
Проверка HTTPS сертификата антивирусом
Чтобы проверить как блокирует антивирус трафик по HTTPS, я настроил Listener в Metasploit. Был выбран следующий payload «windows/reverse/meterpreter/https», а LPORT выбран 443 (это стандартный порт для https протокла). Обратите внимание, что payload не создавался, только listener был настроен, как показано ниже:
Когда listener готов, я запускаю Wireshark и начинаю сниффать траффик на мой URL. Следующий слайд показывает данные незашифрованного текста (cleartext) во время начала установления TCP соединения (хэндшейка) через SSL. Сервер отправил сертификат в ответ на запрос клиента ‘hello’ в незашифрованном тексте (cleartext), как показано на следующем изображении:
Затем я открыл мой URL на листенер в различных браузерах. Используя Wireshark, проанализировал сетевой dump при помощи NetworkMiner, который является инструментом форензики.
Были извлечены три различных сертификата. Детали двух сертификатов показаны на скриншотах, приведенных ниже.
Как показано выше, у сертификатов имеются различные случайные данные. Детали, такие как CN, срок действия являются рандомными и не одинаковым в обоих сертификатах.
Базовый анализ IPS подписи в действии
Теперь, когда мы получили сертификаты, давайте проверим их на предмет защиты Symantec Endpoint.
Я просто скопировал мой URL и открыл его в браузере. Сразу же он блокируется Symantec IPS, определяя соединение как reverse - shell Meterpreter HTTPS.
На приведенном ниже скриншоте показано предупреждение, сгенерированное Symantec:
Детали подписи подтверждают, что она обнаруживает и блокирует активность reverse-shell HTTPS Meterpreter.
Вывод по обнаружению AV
Первоначальное SSL соединение устанавливается в незашифрованном виде, где расшарены детали сертификата, а простое SSL соединение к HTTPS без нагрузки обнаруживается IPS. Это подтверждает, что модуль IPS антивируса (AV) сканирует сертификат, а затем проверяет на определенные атрибуты. Они могут включать в себя доменное имя и т. п.
SSL impersonation - Обход SSL обнаружения
Когда я понял причину блокировки, захотелось найти способ использования сертификата клиента вместо сертификата Metasploit по умолчанию. Для этого вы можете либо создать ваш собственный самоподписанный сертификат или использовать модуль Metasploit SSL impersonation.
Модуль (auxiliary/gather/impersonate_ssl) создает самоподписанный сертификат с данными удаленного сертификата, делая внешний вид сертификата подлинным. Подобная техника используется в Paranoid Meterpreter, который используется, чтобы обезопасить соединение путем проверки SHA1 hash сертификата с обеих сторон для того, чтобы никто не мог взломать хакера.
Давайте создадим сертификат:
Теперь нам надо настроить листенер для созданного сертификата с применением опции handlersslcert и stagerverifysslcert.
Как только handler запущен и доступен через браузер по HTTPS, Symantec не обнаруживает payload. Миссия выполнена!
Часть 2: Создание пейлоада
После того, как я обнаружил способ забайпассить мое соединение и обойти обнаружение посредством IPS, я перешел к созданию нагрузки.
Для этого, необходимо выполнить следующие три шага:
Сначала я создал нагрузку при помощи Metasploit. В этом случае следует убедиться, что handlercert и stagerverifycert установлены. Чтобы обойти фильтрацию по исходящему порту, я проверил доступ к нему, выполнив сканирование 443 порта (данный вопрос не обсуждался в этом посте).
Создание вредоносного ВМР с DKMC
Когда этот шелкод был создан, я юзал тулзу DKMC, чтобы встроить вредоносный шеллкод в картинку BMP. Опции DKMC показаны на скриншоте ниже:
Чтобы запутать шеллкод, созданный с помощью Metasploit, используйте сначала модуль sc. Это сгенерирует его в шестнадцатеричном формате.
Теперь скопируйте этот шелкод и создайте вредоносный файл BMP, использующий модуль gen.
В итоге была создана картинка в формате ВМР. Я разместил её на сервере Ubuntu в AWS. Теперь мне нужно загрузить изображение с сервера жертвы, а затем выполнить встроенный шеллкод. Далее я использовал модуль PowerShell (команда ps) из тулзы DKMC для создания команды PowerShell.
Следующий этап – это доставка картинки на компьютер жертвы. Доставка может быть выполнена следующими способами:
Однако, в реалии такое не бывает, поэтому давайте рассмотрим третий случай - создание HTA.
Встраивание кода PowerShell в зашифрованный HTA
Я использовал Demiguise, который создает HTML с зашифрованным файлом НТА. Когда пользователь посещает страницу, НТА динамически дешифруется в браузере. Цель состоит в том, чтобы обойти проверку антивируса на содержимое файла. Хотя в этом случае наш payload уже способен обойти антивирус. Поэтому, мы будем использовать это просто, как средство для доставки и запуска нашей команды PowerShell.
Следующая команда создает файл под названием horizon.html, зашифрованный horizon.hta.
Заключительное действие
Я разместил файл HTML на веб сервере в AWS, и файл доступен с компьютера с системой Windows 7, который управляет Symantec AV. Когда получен доступ к странице HTML, загружается файл HTA.
А так же, давайте настроим наш Listener в metasploit.
После того, как файл HTA запущен, прилетает сессия Meterpreter через HTTPS. Обратите внимание, что хэш подписи SHA1 проверяется перед тем, как устанавливается соединение.
На следующем скриншоте показано состояние подключения в консоли мониторинга сетевой активности Symantec; которая показывает мой шелл, созданный на Kali на AWS в процессе PowerShell. Потрясающе!
Заключение
Итак, в заключение, небольшой читшит:
Шаг 1: Impersonate SSL сертификата;
Шаг 2: создание шелкода, конфигурированного с SSL сертификатом;
Шаг 3: Создание изображения BMP со встроенным шеллкодом;
Шаг 4: Создание Listener’a, конфигурированного с SSL сертификатом, чтобы обойти обнаружение соединения посредством IPS.
Шаг 5: Создание команды PowerShell для загрузки и выполнения нагрузки.
Шаг 6: Создание файл НТА, внедренного в код PowerShell.
Во время написания статьи исполняемый файл был протестирован на Symantec, Kaspersky, AVG и Windows Defender. При этом исполняемый файл, а также соединение не обнаруживались.
Ссылка скрыта от гостей
Перевод: Перевод выполнен от команды Codeby
Примечание от команды форума:
- Статья является переводом.
- Метерпретер - это очень мощный по функционалу и основной payload для Metasploit.
- В статье рассматривается способ обхода антивируса при создании нагрузки в метасплоите.
Дисклеймер: Эта статья создана исключительно в ознакомительных целях. Автор не одобряет и не поощряет использование информации в противозаконных целях. Всю ответственность за твои действия несешь только ты.
Все инструменты, обсуждаемые в этом посте, являются общедоступными. В процессе я объясню обход IPS ((Intrusion Prevention System) системы предотвращения вторжений), которая обнаруживает поэтапное соединение Meterpreter, даже если оно установлено по протоколу HTTPS! Обратите внимание, что в этом посте не рассматривается создание любого исполняемого файла с нуля, а обсуждается использование уже доступных инструментов в сочетании друг с другом.
Недавно я участвовал в двух red team проектах по анализу защищенности. Сценарии были следующими:
- В одном, у меня были права администратора на публичном сервере. Получил я их через SQL-Injection и последующим RCE. В этом случае я стремился получить стабильную оболочку с высокими правами.
- Во втором, у меня был ноутбук клиента. Я был подключен к внутренней сети, и система была частью домена.
- Windows 7 Professional 64 bit (размещенный на виртуальной машине, установленной на локальном компьютере)
- Symantec Endpoint Protection 14.0 – с обновленными сигнатурами (установленная на Win7)
- Kali Linux на AWS
- Ubuntu на AWS
Небольшой обзор по Reverse Metasploit’s HTTPS payload и её обнаружение антивирусом
Решил я создать исполняемый файл Meterpreter (reverse_https). Все работало чудесно, и пришло время протестировать систему с запущенным антивирусом. Для этого я запустил исполняемый файл на виртуальной машине с включенным Symantec Endpoint Protection. Исполняемый файл запустился, но сеанс не удалось установить, так как соединение было перехвачено модулем антивируса IPS, указав, что соединение Meterpreter было обнаружено и заблокировано. Вопрос заключается в том, каким образом зашифрованное соединение может быть обнаружено IPS? Итак, давайте рассмотрим, что случилось.
Чтобы обойти правила фаерволла, злоумышленники обычно используют порт, который, скорее всего, будет разрешен, например, 80, 53, 443 и т. д. Хотя использование этих портов может обойти правила фильтрации, настроенных с помощью средств как брандмауэры, фаерволлы и межсетевые экраны, но более интеллектуальные сервисы, такие как IPS, проксируют исходящий трафик, чтобы заблокировать соединение и предупредить администратора об атаке.
Хорошо, что в 2011 году Metasploit добавил поддержку reverse HTTPS-соединений, что позволило использовать зашифрованный канал через SSL. В моем случае, хоть я и использовал reverse-shell (windows/meterpreter/reverse_https), он все еще детектился модулем IPS антивируса (далее AV) Symantec.
После дальнейшего расследования я нашел сообщение
Ссылка скрыта от гостей
. Интересный факт, который я осознал, заключается в том, что, во время связи SSL, некоторые данные, в частности сертификат SSL, передаются через незашифрованный текст. Таким образом, AV сканирует определенные атрибуты сертификата, чтобы проверить, выполняется ли какая-либо вредоносная деятельность. В результате, даже если используется reverse-shell, AV идентифицирует сертификат; он понимает, что он принадлежит Metasploit и блокирует обратное соединение, помечая его как полезную нагрузку Meterpreter.Проверка HTTPS сертификата антивирусом
Чтобы проверить как блокирует антивирус трафик по HTTPS, я настроил Listener в Metasploit. Был выбран следующий payload «windows/reverse/meterpreter/https», а LPORT выбран 443 (это стандартный порт для https протокла). Обратите внимание, что payload не создавался, только listener был настроен, как показано ниже:
Когда listener готов, я запускаю Wireshark и начинаю сниффать траффик на мой URL. Следующий слайд показывает данные незашифрованного текста (cleartext) во время начала установления TCP соединения (хэндшейка) через SSL. Сервер отправил сертификат в ответ на запрос клиента ‘hello’ в незашифрованном тексте (cleartext), как показано на следующем изображении:
Затем я открыл мой URL на листенер в различных браузерах. Используя Wireshark, проанализировал сетевой dump при помощи NetworkMiner, который является инструментом форензики.
Были извлечены три различных сертификата. Детали двух сертификатов показаны на скриншотах, приведенных ниже.
Как показано выше, у сертификатов имеются различные случайные данные. Детали, такие как CN, срок действия являются рандомными и не одинаковым в обоих сертификатах.
Базовый анализ IPS подписи в действии
Теперь, когда мы получили сертификаты, давайте проверим их на предмет защиты Symantec Endpoint.
Я просто скопировал мой URL и открыл его в браузере. Сразу же он блокируется Symantec IPS, определяя соединение как reverse - shell Meterpreter HTTPS.
На приведенном ниже скриншоте показано предупреждение, сгенерированное Symantec:
Детали подписи подтверждают, что она обнаруживает и блокирует активность reverse-shell HTTPS Meterpreter.
Вывод по обнаружению AV
Первоначальное SSL соединение устанавливается в незашифрованном виде, где расшарены детали сертификата, а простое SSL соединение к HTTPS без нагрузки обнаруживается IPS. Это подтверждает, что модуль IPS антивируса (AV) сканирует сертификат, а затем проверяет на определенные атрибуты. Они могут включать в себя доменное имя и т. п.
SSL impersonation - Обход SSL обнаружения
Когда я понял причину блокировки, захотелось найти способ использования сертификата клиента вместо сертификата Metasploit по умолчанию. Для этого вы можете либо создать ваш собственный самоподписанный сертификат или использовать модуль Metasploit SSL impersonation.
Модуль (auxiliary/gather/impersonate_ssl) создает самоподписанный сертификат с данными удаленного сертификата, делая внешний вид сертификата подлинным. Подобная техника используется в Paranoid Meterpreter, который используется, чтобы обезопасить соединение путем проверки SHA1 hash сертификата с обеих сторон для того, чтобы никто не мог взломать хакера.
Давайте создадим сертификат:
Теперь нам надо настроить листенер для созданного сертификата с применением опции handlersslcert и stagerverifysslcert.
Как только handler запущен и доступен через браузер по HTTPS, Symantec не обнаруживает payload. Миссия выполнена!
Часть 2: Создание пейлоада
После того, как я обнаружил способ забайпассить мое соединение и обойти обнаружение посредством IPS, я перешел к созданию нагрузки.
Для этого, необходимо выполнить следующие три шага:
- Используйте Metasploit для генерации Meterpreter HTTPS нагрузки, сконфигурированного с собственным SSL-сертификатом.
- Используйте Don’t Kill My Cat (DKMC), который генерирует шеллкод в картинке.
- Создайте команду PowerShell с использованием DKMC, который загружает картину, а затем выполняет шелкод.
- Создайте файл НТА при помощи PowerShell.
Сначала я создал нагрузку при помощи Metasploit. В этом случае следует убедиться, что handlercert и stagerverifycert установлены. Чтобы обойти фильтрацию по исходящему порту, я проверил доступ к нему, выполнив сканирование 443 порта (данный вопрос не обсуждался в этом посте).
Создание вредоносного ВМР с DKMC
Когда этот шелкод был создан, я юзал тулзу DKMC, чтобы встроить вредоносный шеллкод в картинку BMP. Опции DKMC показаны на скриншоте ниже:
Чтобы запутать шеллкод, созданный с помощью Metasploit, используйте сначала модуль sc. Это сгенерирует его в шестнадцатеричном формате.
Теперь скопируйте этот шелкод и создайте вредоносный файл BMP, использующий модуль gen.
В итоге была создана картинка в формате ВМР. Я разместил её на сервере Ubuntu в AWS. Теперь мне нужно загрузить изображение с сервера жертвы, а затем выполнить встроенный шеллкод. Далее я использовал модуль PowerShell (команда ps) из тулзы DKMC для создания команды PowerShell.
Следующий этап – это доставка картинки на компьютер жертвы. Доставка может быть выполнена следующими способами:
- Если у вас есть доступ к системе жертвы и вам нужен более привилегированный Meterpreter shell, тогда вы можете просто запустить ps команду в Windows cmd, чтобы скачать вредоносный файл и выполнить шелкод.
- Нагрузку можно сохранить в .ps1 (PowerShell script) и выполнить оттуда.
- Ссылка может быть встроена в другой исполняемый файл, такой как HTA, а затем доставляется с помощью фишинга, USB (USB baiting) и т. д.
Однако, в реалии такое не бывает, поэтому давайте рассмотрим третий случай - создание HTA.
Встраивание кода PowerShell в зашифрованный HTA
Я использовал Demiguise, который создает HTML с зашифрованным файлом НТА. Когда пользователь посещает страницу, НТА динамически дешифруется в браузере. Цель состоит в том, чтобы обойти проверку антивируса на содержимое файла. Хотя в этом случае наш payload уже способен обойти антивирус. Поэтому, мы будем использовать это просто, как средство для доставки и запуска нашей команды PowerShell.
Следующая команда создает файл под названием horizon.html, зашифрованный horizon.hta.
Заключительное действие
Я разместил файл HTML на веб сервере в AWS, и файл доступен с компьютера с системой Windows 7, который управляет Symantec AV. Когда получен доступ к странице HTML, загружается файл HTA.
А так же, давайте настроим наш Listener в metasploit.
После того, как файл HTA запущен, прилетает сессия Meterpreter через HTTPS. Обратите внимание, что хэш подписи SHA1 проверяется перед тем, как устанавливается соединение.
На следующем скриншоте показано состояние подключения в консоли мониторинга сетевой активности Symantec; которая показывает мой шелл, созданный на Kali на AWS в процессе PowerShell. Потрясающе!
Заключение
Итак, в заключение, небольшой читшит:
Шаг 1: Impersonate SSL сертификата;
Шаг 2: создание шелкода, конфигурированного с SSL сертификатом;
Шаг 3: Создание изображения BMP со встроенным шеллкодом;
Шаг 4: Создание Listener’a, конфигурированного с SSL сертификатом, чтобы обойти обнаружение соединения посредством IPS.
Шаг 5: Создание команды PowerShell для загрузки и выполнения нагрузки.
Шаг 6: Создание файл НТА, внедренного в код PowerShell.
Во время написания статьи исполняемый файл был протестирован на Symantec, Kaspersky, AVG и Windows Defender. При этом исполняемый файл, а также соединение не обнаруживались.
Последнее редактирование модератором: