Операционные системы семейства Windows по-прежнему широко распространены как в корпоративных, так и промышленных сетях различных российских компаний, в том числе и довольно крупных. Существует множество различных инструментов для тестирования на проникновение, один Metasploit чего стоит. Но сегодня я хотел рассказать об Evil-WinRM и о том, как его можно использовать для пентеста.

Этот инструмент написан на Ruby и имеет открытый исходный код. Как уже упоминалось, он существенно упрощает пентест сред под управлением ОС Windows. В его состав входят различные интересные функции, например средства для организации удаленного доступа различными методами и многое другое.

Системные и сетевые администраторы часто используют протокол удаленного управления WinRM для работы с файлами. WinRM - это протокол на основе SOAP, который совместим с брандмауэром и работает с HTTP-транспортом через HTTP-порт по умолчанию 5985. В свою очередь, Evil-winrm работает с протоколом удаленного взаимодействия PowerShell (PSRP). Таким образом, мы можем использовать штатные протоколы Windows для своих целей.

На этом полагаю, вводную часть можно завершить и перейти непосредственно к практической работе с Evil-WinRM.

Evil в Kali

Для начала работы с Evil-WinRM нам собственно не нужно ничего ставить, достаточно загрузить Kali Linux и данный инструмент будет нам доступен. Для того, чтобы использовать данный инструмент на практике необходимо, чтобы на атакуемой машине была запущена служба WinRM. Если у вас тестовый стенд с Виндой, то запустите cmd.exe с правами администратора и выполните следующую команду:

winrm quickconfig

При пентесте признаками запущенного WinRM является наличие следующих открытых портов:

Естественно, для работы с удаленной машиной нужны учетные данные. Попытаться добыть их можно различными способами, начиная от поиска на файловых помойках сети жертвы и различных атак перебором, и заканчивая более сложными техниками перехватов NTLM хэшей, использования Mimikatz и прочих техник, выходящих за рамки данной статьи. Для нас важно, что у нас есть учетные данные реального пользователя.

Подключаемся с паролем

Если у нас есть учетка, и служба winrm включена на удаленном хосте, то мы можем провести удаленный сеанс в целевой системе, используя evil-winrm, указав IP-адрес удаленного хоста с флагом -i, имя пользователя с флагом -u и пароль с флагом -p.

evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987

Установим удаленный сеанс PowerShell.

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

Так как, служба WinRM передает трафик по протоколу HTTP, мы можем использовать функцию Secure Socket Layer (SSL) для обеспечения безопасности соединения. Для подключения с помощью evil-winrm мы можем использовать флаг -S в нашей предыдущей командой, которую мы использовали для установления соединения с удаленным хостом.

evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 –S

Атака pass The Hash

При проведении пентеста, равно как и в реальных атаках мы можем столкнуться с ситуацией, когда нам удалось получить хэш пароля, но сам пароль подобрать не удалось. В среде Windows, мы можем использовать Evil-WinRM для установления сеанса PowerShell, выполнив атаку Pass the Hash, при которой мы вводим хэш в качестве пароля вместо обычного текстового пароля. Кроме того, эта атака также поддерживает другие протоколы. Мы можем передать хэш, используя флаг -H, вместе с командой, которую мы использовали ранее, заменив раздел пароля хэшем.

evil-winrm -i 192.168.1.19 -u administrator -H 32196B56FFE6F45E294117B91A83BF38

(Бес)полезная AMSI

Завершая тему удаленных подключений необходимо добавить в наше повествование небольшую ложку дегтя. Дело в том, Evil-WinRM не предоставляет полностью интерактивную сессию. Чтобы иметь такую возможность, нужно получить интерактивный реверс шелл. Для этого можно  использовать различные средства, например PowerShell скрипт ConPtyShell (https://github.com/antonioCoco/ConPtyShell).

Для начала работы на атакующем хосте нужно открыть порт, к примеру 8888, и ожидать подключения

stty raw -echo; (stty size; cat) | rlwrap nc -lvnp 8888

Однако, просто запустить скрипт не получится. Майкрософт думает о нас заботясь о безопасности ОС разработала интерфейс AMSI (Antimalware Scan Interface). Это компонент Microsoft Windows, который обеспечивает более глубокую проверку встроенных служб сценариев. Эту технологию Microsoft разработала в качестве метода защиты пользователей от вредоносных программ и впервые внедрила в Windows 10. AMSI в реальном времени перехватывает скрипты и команды PowerShell, JavaScript, VBScript, VBA или .NET и передаёт их на проверку установленному на хосте антивирусному ПО. Но это “заболевание” тоже лечится - AMSI можно пропатчить, тогда скрипты не будут отправлены на проверку, и как следствие, не будут заблокированы. Evil-WinRM имеет для этого встроенную команду Bypass-4MSI. Выполним ее на удаленной машине:

Bypass-4MSI

Все, Майкрософт нам больше не помешает.

Загрузка скрипта Powershell

Теперь мы можем безнаказанно загружать и запускать скрипты на атакуемой машине. Для того, чтобы загружать скрипты непосредственно в память, воспользуемся флагом –s, указав его вместе   с путем к файлу скрипта, в котором мы сохранили скрипты на нашем локальном компьютере. В приведенном ниже примере мы обходим AMSI, затем напрямую вызываем скрипт Invoke-Mimikatz.ps1 (https://github.com/clymb3r/PowerShell/blob/master/Invoke-Mimikatz/Invoke-Mimikatz.ps1) из нашей системы на целевой компьютер и загружаем его в память.

Да, для загрузки на машину жертвы любого файла можно воспользоваться командой upload. Например:

upload /root/notes.txt .

Соответственно, для выгрузки с машины используем download:

download notes.txt /root/raj/notes.txt

Запуск исполняемого файла

Использование скриптов PowerShell может быть е всегда удобно и нам может потребоваться запустить выполнимый файл в сеансах evil-winrm. Предположим, у нас есть исполняемый файл, который мы хотим запустить в целевой системе.

Аналогично тому, как мы использовали флаг -s при работе со скриптами PowerShell, здесь мы воспользуемся флагом -e для выполнения исполняемых двоичных файлов exe. В приведенном ниже примере мы указываем путь к файлу whereWinPEAS.exe. Данный исполняемый файл хранится на локальном компьютере и запускается с помощью дополнительной функции (Invoke-Binary) из меню evil-winrm. Эта функция позволяет нам запускать любые исполняемые двоичные файлы, которые обычно запускаются в командной строке.

Заключение

Мы рассмотрели работу с утилитой Evil-WinRM. При проведении пентеста она может стать полезным инструментом, позволяющим автоматизировать выполнение различных рутинных, но важных задач аудита безопасности.


Приходите на открытые уроки, посвященные Acl атакам в Windows AD: рассмотрим основные механизмы работы Kerberos в windows AD и основные ошибки при конфигурациях kerberos. Записаться можно по ссылкам: 9 июля - теоретические основы, 23 июля - практика.

Комментарии (0)