У этичных хакеров не принято держать при себе то, что поможет кому-то найти брешь в системе защиты до того, как наступит недопустимое событие. А семь лет практики в анализе защищенности ИТ-инфраструктур дают свои плоды. Например, нетривиальные кейсы, о которых хочется рассказать. По этим причинам мы решили поделиться своим опытом и выпустить серию публикаций о необычных пентестах нашей команды.

Предупреждаем заранее: все данные, которые могли бы указывать на конкретных людей или компании, изменены, а любые совпадения — случайны. Конфиденциальность — это то, что мы гарантируем по умолчанию.

Итак, начнем с истории о том, как за одну неделю удалось захватить контроллер домена ИТ-инфраструктуры промышленного предприятия.

Предыстория

В 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-туннель.

Вывод

Изложенный кейс — отличная демонстрация того, что вертикальное повышение привилегий в реальных условиях нужно далеко не всегда. Ведь для целей пивотинга всё необходимое доступно из непривилегированного контекста.

Автор: Андрей Жуков, ведущий специалист по анализу защищенности

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


  1. mamontovss
    22.11.2023 10:45
    +1

    Как вы попали на машины в ДМЗ?


    1. USSCLTD Автор
      22.11.2023 10:45

      Как был пробит периметр - это уже другая история. Но если в двух словах - уязвимые самописные сайты.


  1. Rubilnik
    22.11.2023 10:45

    Странно мне казалось что настройка DMZ в роутере открывала доступ к указанному узлу как бы в обход фаервола роутера...


    1. USSCLTD Автор
      22.11.2023 10:45

      Проникновение в компанию несколько отличается от взлома домашнего роутера.