Как за одну неделю захватить контроллер домена, или Пивотинг за 300
У этичных хакеров не принято держать при себе то, что поможет кому-то найти брешь в системе защиты до того, как наступит недопустимое событие. А семь лет практики в анализе защищенности ИТ-инфраструктур дают свои плоды. Например, нетривиальные кейсы, о которых хочется рассказать. По этим причинам мы решили поделиться своим опытом и выпустить серию публикаций о необычных пентестах нашей команды.
Предупреждаем заранее: все данные, которые могли бы указывать на конкретных людей или компании, изменены, а любые совпадения — случайны. Конфиденциальность — это то, что мы гарантируем по умолчанию.
Итак, начнем с истории о том, как за одну неделю удалось захватить контроллер домена ИТ-инфраструктуры промышленного предприятия.
Предыстория
В 2020 году наша команда проводила внешнее тестирование на проникновение для одного из крупных градообразующих предприятий. Пентест был направлен на пробитие периметра с возможностью попасть во внутреннюю сеть завода.
В результате проведенных работ периметр был пробит с двух точек: Windows и Linux-серверов. После демонстрации результатов руководство предприятия обратилось с дополнительной просьбой — осуществить «захват» внутренней инфраструктуры, что мы и сделали в качестве бонуса.
Пивотинг — набор техник, позволяющий организовывать канал передачи данных в условиях межсетевого экранирования или прочих неполноценностей среды.
Что мы сделали?
Пробитые машины в ДМЗ (DMZ, демилитаризованная зона, часть внутренней сети, изолированная от других сегментов) не имели выхода в сеть Интернет, и единственным транспортом для передачи данных был DNS.
Чтобы выполнить задачу, нам требовалось выйти из DMZ, просканировать тысячи компьютеров и захватить контроллер домена, — и всё это за одну неделю! Сделать такой объем работ в столь небольшие сроки на скорости DNS казалось почти нереальным. В скобках заметим: предыдущие работы по внутреннему анализу защищенности на этом заводе с комфортным гигабитным подключением длились три недели до полной компрометации и достижения бизнес-риска.
Оба сервера были скомпрометированы под непривилегированными учетными записями, поэтому для пивотинга не мог быть использован полноценный VPN (iodine), а только проксирование и пробросы портов.
Продвижение началось с попытки открытия туннеля через dnscat. Но вот незадача, как же передать его сначала на сервер, ведь Интернета там нет? Попытка запивотиться шла одновременно на Windows и Linux-серверах. Чтобы передать dnscat, используя только базовые команды операционной системы, мы написали vbs/bash-скрипты под Windows и Linux соответственно, использующие dns-запросы для скачивания/выкачивания произвольных файлов.
Серверная часть, подставляющая в DNS-ответы hexastring (текстовое представление двоичных данных) требуемого содержимого, приведена тут.
Ход загрузки dnscat через DNS-загрузчик выглядел примерно так:
В последствии эти скрипты выручали нас еще не раз. Кстати, более подробное их использование мы описывали в статье на Хакер.ru.
В результате на Linux-сервер успешно был загружен и запущен dnscat.
Dnscat умеет пробрасывать порт через DNS, но возможность динамического проброса портов там отсутствует. Поэтому далее был загружен socks-прокси (3proxy) и через dnscat проброшен порт на него.
Так как работа с DNS требует делегированную зону и, соответственно, белый IP-адрес, размещенный на выделенном сервере (VDS), а весь хакерский инструментарий расположен на ноутбуке пентестера, то с помощью SSH дополнительно был проброшен порт, ведущий на dnscat через опорный VDS.
Теперь, используя DNS-туннель, можно было использовать локальный socks-прокси на скомпрометированном Linux-сервере и получить сетевой доступ до любых узлов через него.
К сожалению, выяснилось, что этот сервер не имел сетевого доступа никуда, кроме сегмента DMZ.
Параллельно шла попытка поднятия DNS-туннеля на втором скомпрометированном Windows-сервере. Однако антивирусное программное обеспечение удаляло известные хакерские инструменты по типу dnscat, а писать собственные решения не позволяло время. Так как DNS достаточно медленный, то на скачивание очередного хакерского инструмента и ещё одной попытки обойти антивирус уходило достаточно много времени. Поэтому, чтобы задействовать этот сервер для возможности передачи сетевого трафика, был использован локальный прокси-сервер (ncat.exe), достаточно безобидный для антивирусов.
Вход в указанный прокси производился уже через Linux-сервер с настроенным доступом по DNS.
Задействовав таким образом прокси на Windows-сервере, было установлено, что через него возможен сетевой доступ в другие сетевые сегменты за пределами DMZ.
В результате сканирования портов в новых доступных сетевых сегментах были быстро выявлены Linux-серверы со слабыми паролями.
Это позволило получить к ним root-доступ:
Обладание правами root открыло возможности создания VPN-туннеля. В нашем случае, используя базовые команды Linux, удалось открыть L3 VPN-туннель (victim и attacker, соответственно):
Теперь у нас был VPN-туннель внутри DNS-туннеля. Сетевой доступ через туннель давал возможность более быстрого сканирования портов и шанс задействовать UDP и ICMP. Таким образом мы получили полноценный сетевой доступ до узлов корпоративной сети.
Возможность полноценно взаимодействовать с внутренними корпоративными узлами уже чего-то стоила.
Дальнейшее развитие во внутренней сети атак, направленных на захват контроллеров домена и компрометации всей внутренней инфраструктуры, было лишь делом времени. И времени весьма немалого… Низкая скорость соединения делала непригодными половину хакерских инструментов. Например, psexec падал с ошибкой, пока его серверный компонент успевал скачаться на целевой узел.
На дальнейшее развитие атаки оставалось всего несколько дней. Осознание того, что лишь один дамп реестра с локальными хэшами будет скачиваться по DNS более часа, не позволяло верить в успешность компрометации хотя бы одного узла и получение простой доменной учетной записи. Однако на следующий день случился выход в паблик zerologon.
Уязвимость, способная скомпрометировать контроллер домена и не требовать для это даже учетную запись, случается лишь раз в 10 лет! Профессионализм, целеустремленность и невероятная удача позволила нам выйти победителями, захватив огромную сеть завода через тончайший DNS-туннель.
Вывод
Изложенный кейс — отличная демонстрация того, что вертикальное повышение привилегий в реальных условиях нужно далеко не всегда. Ведь для целей пивотинга всё необходимое доступно из непривилегированного контекста.
Автор: Андрей Жуков, ведущий специалист по анализу защищенности