Уязвимость «физического присутствия» в UEFI


    Новые стандарты UEFI предполагают, что физическое присутствие человека (оператора) позволит защититься от автоматизированных действий вредоносного ПО по модификации различного рода ключей (которыми проверяется валидность загружаемого ПО), заливки неправильных версий БИОСа и т.д.

    Логика такая: разрешить эти действия (которые позволят загрузить что попало) только при физическом подтверждении с клавиатуры. Мол, ни один злобный вирус не сможет физически нажать кноку на клавиатуре для биоса.

    Я сейчас даже не буду рассматривать вероятность взлома прошивок USB-устройств для отправки нужных комбинаций кнопок.

    Я хочу поговорить о такой страшной вещи, как IPMI и iLO со встроенными KVM'ами. И о том, как легко обходится задача «физического присутствия» в современном серверном железе.

    Итак, давайте взглянем на IPMI. Для примера я взял первую попавшуюся лабораторную машинку с IPMI на борту. Что он предоставляет?

    1) Отдельный сетевой интерфейс на материнской плате.
    2) Отдельный компьютер, питающийся от standby напряжения с блока питания, работающий независимо от основного.
    3) Встроенные возможности по управлению питанием основного компьютера (power on, power off, reset)
    4) IPMI (плата видеозахвата плюс виртуальные мышь и клавиатура, так же есть возможность подключить виртуальные floppy и оптические диски).

    Всё это делалось для благих целей. Чтобы сисадмин мог посмотреть на работу компьютера так, как будто он подключил монитор и клавиатуру, но не сходя со своего рабочего места. Просто заходишь на IP-адрес IPMI устройства, тыкаешь «remote console» — и оно на экране. Включая, заметим, менюшку биоса.

    Так как IPMI — это обычный (хоть и хиленький) компьютер, то у него есть свой ssh.

    Зайдём туда.

    На одной модели мы увидим довольно скудное зрелище из текстового меню с опциями.
    А вот на втором…
    BusyBox v1.1.3 (2009.08.12-22:19+0000) Built-in shell (ash)
    Enter 'help' for a list of built-in commands.
    
     # uname -a
    Linux SMC003048F209F5 2.6.24-ami #1 Wed Aug 12 15:18:58 PDT 2009 armv5tejl unknown
    
    


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

    Но там же пароль!

    В силу устройства IPMI им можно управлять с хоста:

    ipmitool -I open user set password 2 ADMIN mynewpass


    Ну и прочие вещи, типа warm reboot, cold reboot и т.д. В принципе, есть даже возможность загрузить свою версию фирмвари.

    Сценарий атаки


    1. Через дырку в похапе и локальный right escalation вредоносное ПО получает root'а.
    2. ПО обнаруживает и подгружает модули под хардварную конфигурацию сервера.
    3. ПО устанавливает сетевое соединение с IPMI (адрес можно посмотреть) или просто подменяет фирмваре и перезапускает IPMI
    4. ПО в IPMI слушает POST-коды с материнской платы и ждёт перезагрузки.
    5. При перезагрузке в клавиатуру отсылаются нажатия (магию OCR'а картинки мы пока исключаем, так же как и людское участие во взломе).
    6. Посредством нажатий (заметим, нажатия выбираются под конкретную модель БИОСа и скачиваются в виде модулей на этапе проникновения) устанавливается в качестве доверенного ключ к bluepill (rootkit гипервизору).
    7. Малваря полностью удаляет все первичные следы (себя в IPMI, себя в виде PHP и эксплоита для ядра)
    8. PROFIT????

    К чему всё это?

    К тому, что в условиях современных серверных технологий нельзя полагаться на «физическое присутствие» как защиту от автоматического исполнения кода.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 52

      +1
      очень занятно
        0
        Да, на модификацию прошивок IPMI, iLO, DRAC и прочих аппаратных и программных KVM тоже придется предуcматривать нечто аналогичное UEFI
          +1
          Но тут нужно понимать, что «прошивка» это громко сказано. Внутри там обычная система с обычным линуксом, плюс проприентарный блоб для KVM'а.

          Даже если «рут-доступ» туда будет закрыт, то нужно понимать, что сброс пароля с хоста — штатная функциональность. А дальше там есть официальный метод взаимодействия с клавиатурой, ради которого всё и задумывалось. Да, схема чуть усложнится (нужен будет промежуточный сервер), но сама идея — что физическое присутствие это всего лишь сетевые пакетики IPMI, не изменится.

          Узявимость тут не в реализации, а в идеи «клавиатура=физическое присутствие».
            +1
            хорошая тема
              0
              именно. физическое присутствие не означает буквально «физическое присутствие администратора».
              В контексте рабочих станций еще более менее — если все работают под учеткой без админских прав + антивирус — то с рабочими станциями проблем почти не будетю
                0
                Насчет обычного линукса — это так лишь отчасти. Если не брать супермикры, а сервера на базе BMC server engines pilot/pilot II, то они практически все были на ThreadX (возможно с кусками кода от VxWorks, типа ssh), хотя есть и исключения — Dellы на pilot II работают на линуксе. Стоит заметить, что современные прошивки все чаще стараются делать на линуксе, видимо простота разработки перевешивает, а памяти в современных BMC полно, хоть php с питоном запускай.

                При все при этом весьма мало систем, у которых на 22ом порту слушает обычный шелл, чаще всего там CLP/SMASH, что позволяет использовать всякие энтерпрайзные системы по управлению и мониторингу, для более эффективного расходования на них лишних денег =) Стало быть, проникновение в ОС bmc возможно либо эксплоитом шелла или веб-интерфейса, либо путем заливки своей прошивки в BMC.

                Вкупе с тем, что уязвимостей при несанкционированном обновлении прошивок нашли достаточно (LaserJet получил широкую огласку), то все реже при обновления прошивок будет проверятся просто контрольная сумма. Что делает эту уязвимость всего лишь побочным эффектом кривой реализации, и на брендовых серверах это будет исправлено в ближайшее время (если уже не исправлено). Да и реверсинг прошивок для определения алгоритма их подписи — дело довольно затруднительное, и индивидуальное для каждого производителя

                Отдельным фактором мог бы быть парный взлом, когда два сервера в сети пытаются скомпрометировать друг друга — один перезагружается, второй контроллирует его клавиатуру. Однако это возможно лишь в том случае, если vlan серверов имеет доступ к vlanу IPMI. Ну или в случае, если IPMI доступен снаружи, что часто бывает в случае предоставления серверов в аренду.
                  0
                  Добавьте ещё, что сетевые настройки IPMI меняются штаным же образом, так что можно, например, оказаться в другом вилане, если транк приходит, причём ленивый (т.е. все транки принимаются).

                  Суть-то проблемы чуть в другом — не катит в условиях IPMI нажатия кнопок на клавиатуре в биосе за «физическое присутствие пользователя» никак.
                    0
                    Тут уж либо удобство для пользователя (сопряженное с довольно-таки большими сложностями для хакера), либо заставлять его вставлять электронный ключ (или там, получать у производителя код активации по телефону) для установки свежей версии grub.
              –1
              Насколько я понимаю, это сознательное решение администратора или заказчика иметь возможность эмулировать физическое присутствие. Ведь по дефолту такие системы не поставляются? В таком случае просто нужно понимать, что в системе появляется ещё одно уязвимое звено для проведения удаленной атаки, позволяющей получить полный контроль над целевой системой и исходя из требований по защите от этой угрозы выбирать подобное оборудование или отказаться от его использования.
                +1
                1) Для десктопов — пока что нет.
                2) Для серверов — почти что правило по-умолчанию. Вот у меня в хозяйстве есть 2 (прописью ДВА) сервера (среди всего того количества, которым я занимаюсь) без IPMI.
                3) Речь не про то, что «появляется ещё одно звено бла-бла-бла самим думать надо было», а про то, что предложенная техника «усиления защиты загрузки и биоса»:
                а) Никак особо не улучшает ситуацию.
                б) Доставляет особый геморрой при обслуживании
                в) Усиливает сложность конструкции, в результате чего порог уверенного знания сильно вырастает. Незнание = вилокеры.
                  +1
                  Зависит от контор, Ит бюджета и морального устаревания серверов, угу. на одной из прошлых работ ведущий админ про IPMI знал на уровне «Опппа, до чего прогресс дошел!». Хотя с другой стороны, у него все было настроено один раз, четко и так, что при смерти железки единственное что было надо — прийти в серверную, достать и отключить старый юнит и воткнуть и подключить на его место новый юнит.
                    0
                    На большинстве современных десктопов есть Intel AMT.
                      0
                      В общем Вы правы, но руководство (В основном по СНГ) надо очень сильно мотивировать на покупку современного железа туда, где сейчас справляется какой-нить пень 4, который будет работать у сотрудника пока не сдохнет от старости, и то, с 90% вероятности ему выдадут такого же старичка, собранного из запчастей.
                      На моей текущей работе современное железо только у программистов, даже у топов компьютеры попроще.
                      Но шанс того, что меня на помощь позовёт программист неизмеримо меньше, чем когда меня позовет бухгалтер или юрист.

                      Пройдёт не один год, пока вымрет по регионам всё старое железо и все перейдут хотя бы на core iX, или что там будет на тот момент дешевое и современное.

                      И чем крупнее контора тем сложнее мониторить и обновлять парк устаревшего железа — я работал в опсосе, я работал в банке. Обычно замена в авральном режиме, когда железка у сотрудника уже умерла и надо срочно-вот-сейчас.
                      И даже при intel amt и всем подобном — берутся дешевые core duo и материнки за 300 гривен (~40usd) которые этого не умеют…
                      А потом сотрудники жалуются — то тормозит, это тормозит…
                  0
                  Интересно, как завоют всякие спец-подразделения по кибербезопасности, СБ банков и прочих структур
                    +4
                    А разве спецификация на такую аппаратную защиту не говорит о наличии на материнской плате СПЕЦИАЛЬНОЙ КНОПКИ (типа джампера) разрешения записи (смены колюча и так далее)?

                    Причем кнопка эта к клавиатуре, а значит и к удаленной консоли, никак не относится. Нажимайте сколько хотите клавиши удаленно, но аппаратную кнопку отключения защиты удаленно нажать не выйдет.

                    Это был бы правильный подход к реализации защиты через физическое присутствие оператора :)
                      0
                      Насколько я понимаю, большинство всех публикаций про UEFI говорят про то, что это настройка в биосе или начальном разгрузчике (типа, «да, разрешить изменения»). Аппаратная кнопка непонятно где жутко неудобна и я на 100% уверен, что её не будут делать.
                        0
                        при доступе в биос эта настройка отключится влёт, ну а дальше по накатанной, хоть винлокер, хоть еще что.
                        аппаратный джампер тут намного приятнее — в конторах внутрь железа лезут только инженеры, ну а дома ССЗБ — хочешь отключить — получи варианты проблем, не хочешь — сиди, как хомячок, под виндой и пользуйся без проблем.

                        У меня в своё время товарищ аппаратный джампер сброса биоса вывел на одну из кнопок прямо на системнике, когда развлекался с оверклокингом…
                          0
                          А нет ли вероятности, что инженеры будут по дефолту это джампер замыкать, чтобы в будущем облегчить себе обслуживание?
                            +1
                            Вероятность идиотов есть всегда.
                            Вот Вы часто обновляете биосы на конкретной железке?
                            Сколько всегда видел на момент ввода в экспуатацию сервера делается один полный апгрейд биосов iLo, raid, материнки, после чего сервер ставится в стойку, настраивается и работает.

                            В десктопном обычно так же, некоторые еще обновляют биос если вдруг случилось чудо и за три года пока тазик жил и работал у пользователя, вдруг вышла новая версия биоса…
                              0
                              Биосы мы обновляем крайне редко. Только если есть конкретный issue, который нужно исправить. И обычно это делается с полным выведением железки из эксплуатации.

                              Но речь-то про другое. Речь про то, что люди собираются использовать механизмы UEFI для обновления биосов. Мол, если мы ключу доверяем, то обновлять можно, если нет, то нельзя. А если человек физически за машиной настраивает на обновлении, значит, таки можно.

                              Вот про это «физически за машиной» я и написал. По мотивам вот этого: habrahabr.ru/company/group-ib/blog/150218

                              Кроме того, главная проблема не с биосами (фиг с ними), а с начальным загрузчиком и доверенным ключом в цепочке доверия в UEFI.
                                0
                                Ну это от политики зависит. Я например, всегда ставлю последнюю версию iLO, биосов к материнским платам и к RAID, если сервер и просто биос, если десктоп.
                                В свое время было с десяток инцидентов когда нужная ОС на железе не запускалась по разным причинам — старая версия биоса рейда, которая не видел 2ТБ диски, а с ней последние драйвера под ESXi не работали даже с текущими винчестерами, например., и приходилось шаманить, поэтому делаю апгрейд биоса на текущей операционке.
                              0
                              Обслуживание? Замена ОС на удаленной машине как периодический технологический процесс? :)
                                0
                                Даже не ОС, а ядра.

                                Сильно отличается в зависимости от сценария использования. На некоторых серверах ядро годами работает без обновлений и изменений, на других обновления регулярные и связаны с обновлениями функционала.
                                  0
                                  Вот тут я не уверен в том, как оно будет работать на самом деле… поэтому просто предположу…

                                  Подписан ключем и не может быть замещен без физического вмешательства оператора загрузчик ОС. Замена модулей ОС (системных библиотек, драйверов, ядра), скорее всего, не должна приводить к изменению подписанной части ОС, а значит может быть выполнена удаленно в рамках периодического процесса.
                                    0
                                    Вот если аппаратный ключ — одноразовая флешка, по типу биоса — раз записал и всё, если переткнул другой свой, вперед с песней, а нет — тогда только разрешенные линуксы/вин8…
                                    Захотел экспериментов снял себе, воткнул что надо и вперед — если что пошло не так — сам виноват.
                                    это моё личное мнение.
                                      0
                                      Вы имеете в виду съемное устройство с BIOS или некий аппаратный ключ, разрешающий загрузку той или иной ОС?

                                      Съемные устройства с BIOS — так они уже давным-давно делаются в виде микросхем, вставляемых в разъемы, а не припаиваемые к платам. Можете иметь несколько копий BIOS для опытов и работы.

                                      Если же речь о некотором аппаратном ключе, то не думаю о широкой применимости такой техники. В лабораторных целях можно просто отключить защиту (допустим, тумблером на плате), а для стабильно работающей машины — это излишество. Зачем какие-то дополнительные устройства, если в материнскую плату все уже встроено?
                                        0
                                        тут согласен — баба надвое сказала — можно и подпись аппаратную сэмулировать, если биос уже подмененный, и сообщить всё что угодно. и влепить прослойку между ОС и железом.
                                        Но тут я чайник и может где-то капитанничаю, это мои предположения.
                                          0
                                          Я вот только вас немного расстрою, гдето со времен i945 большинство чипов BIOS стало c интерфейсом SPI, и в силу того, что смонтировать SOIC8/чтото другое для опверхностного монтажа гораздо дешевле, чем насверлить 8 дырок и поставить DIP панель и мсх под неё, возможность извлечения мсх биос просто пропала. Маленький хинт — в брендовом (т.е. компак, хп, леново и т.п.) запаивать начали ещё раньше.
                                    0
                                    Я, например имею полную карту по рабочим станциям — железо, дата установки ОС, в случае переустановки ОС всегда проверяю стоит ли последняя версия биосак материнской плате — по сложившейся привычке если есть свежая версия биоса обновляю её до переустановки операционки — да, это моя ошибка, т.к. в теории могу заразить биос какой-нить фигней, если на машине есть какая-то гадость.
                                0
                                Я пока читал только про специальный аппаратный тумблер или что-то в этом роде.
                              +2
                              При всем моем уважении, насколько я помню, основная задача UEFI — это предотвратить массовую установку Windows 8 RT на дешевые китайские ARM планшеты. Позиционирование как «защита» от вирусов и прочей малвари — это маркетинговая позиция чтобы в очередной раз сменить парк железа энтерпрайзу. Зачем ее так серьезно воспринимать?
                                +4
                                Мотивация в вопросах разборок с консьюмерским железом (а-ля планшеты и мобильники) это одно.

                                Тут проблема в другом — UEFI планируется в качестве замены существующему boot cycle для всего AMD64 (пардон, x86_64), то есть в качестве индустриального стандарта загрузок ОС как на десктопах, так и на серверах.

                                Именно в контексте этого весь сыр-бор и идёт. Ровно так же, как кипишатся FSF и EFF по поводу возможных проблем в запуске линуксов.
                                  0
                                  Насколько я помню, в функционал UEFI заложена цепочка «доверия», при этом имеется рекомендация, что по дефолту доверенная загрузка должна быть вырублена, либо включена, но пользователю должно быть сообщено, как её выключить.

                                  А для замены мега-костыльного архаизма INT19h — давно пора было к черту снести этот realmode.
                                  +2
                                  Ну, маркетинговые цели — это одно.
                                  Совсем другое — реальные нужды банков, государств и крупных корпораций. Для них вся эта новомодная виртуализация действительно проблема — условный мальчиш-плохиш, каким-то образом однократно пропихнув свой начальный загрузчик или модуль ядра, может полностью скрыть следы своего присутствия и потенциально делать с системой что угодно (переводить деньги, красть секретные ключи и т.д.). Если он не идиот, это может длиться годами без какого-либо обнаружения.
                                  При этом «плохишу» достаточно устроиться на работу уборщицей в офисе и подловить момент, когда Авторизованный Админ отойдет покурить, забыв выйти из консоли на атакуемом сервере.
                                  Именно поэтому придумывают «минус второе» кольцо защиты, именно поэтому UEFI, именно поэтому подпись всего и вся.
                                    0
                                    С точки зрения сокрытия своего присутствия нет разницы между модулем яда и любым процессом, запущенным с root/localsystem доступом.

                                    Загрузчики и вирусы, перепрошивающие BIOS — это что-то из разряда urban legend. Сделать можно, есть технодемки — но нафиг никому не нужно. «Годами красть деньги» — это у Р. Желязны, в «Крысе из нержавещей стали». В рельности информационные системы банков и прочих «enterprise» имеют множество уровней защиты, и поражение одого физического компьютера любым способом — от трояна до его физической замены — обнаруживается довольно быстро, в течении часов.
                                      0
                                      М… если раньше поражение биоса было экзотикой, то после появления preboot environment, стандартизированного и очень функционального — не знаю.

                                      А насчёт «много уровней защиты» — это всего лишь благопожелание, но не неотъемлимое свойство всяких «опердней».
                                    0
                                    Не совсем так. UEFI — замена биоса, а вы про SecureBoot. Я сейчас пользуюсь Lenovo ThinkPad X220, здесь есть UEFI и нет SecureBoot.
                                      0
                                      Взаимосвязанные технологии, автор топика как раз про безопасности говорил.
                                    0
                                    Мне кажется достаточно и необходимо не светить ipmi порт с белым ip и прятать его за прокси в изолированной сети. И сразу вопрос, можно ли попасть с хоста в консоль ОС ipmi и/или передавать между ними файлы или как-то еще взаимодействовать именно со стороны хоста?
                                      0
                                      Обычно «железо» стоит где-нибудь в дата-центре, а админы сидят в уютном офисе за сотню километров. У них, соответственно, должен быть полный доступ. При этом атаковать компы админов обычно намного проще, чем сервер напрямую.
                                        0
                                        Не совсем понял смысл вашего комментария.
                                          +2
                                          Смысл в том, что «не светить порт» и «прятать за прокси» не поможет, атакуют не сервера, а компы самоуверенных админов, у которых в PuTTy хранится список серверов и настроена авторизация по ключу.
                                            0
                                            Только умный админ не будет работать под учеткой доменного админа.
                                            Я с Вами согласен — при грамотной сети IPMI, ssh & co вынесены в отдельный менеджмент влан, но если поражена машина администратора, то доступ в менеджмент влан уже есть, и влан тут не спасет.
                                              0
                                              в PuTTY? так это же FreeBSD-админы, а у них соответственно на серверах и ipmitool не будет работать.
                                              очень простое разделение проверенное временем: админы работают из под тех OS под которыми их сервера, то есть GNU/Linux админят из под GNU/Linux и только BSDшники сидят под виндой и гнут пальцы, что у них на серверах бздя.
                                              не жалко таких
                                                0
                                                У нас на работе у человека бздя на ноуте, а админит от сетевые железки.
                                                  0
                                                  Не хочу и не буду разводить тут холивар, но обычно компьютер, операционная система, телефон, планшет, ноутбук — это всего лишь инструменты, и каждый инструмент выбирается под свои задачи и настраивается так, как удобно тому кто его будет использовать. и вести всех под одну гребенку, как предлагаете Вы — не очень хорошо.
                                                  В PuTTY, кстати, администрируется не только фря, а и солярка, линукс, и коммутаторы с маршрутизаторами.
                                                  Да, я администрирую всю свою сеть из под Windows, да, у рабочей учётной записи нет даже повышенных прав — для записи DVD диска я использую UAC, да, я уверен в своей машине и уверен, что вирусов я не словлю.
                                                  Да, когда мне в свое время было удобно я использовал и BSD, и Linux несколько лет как дома, так и на работе — но для меня это всего лишь рабочий инструмент, который отлично решает поставленные задачи.
                                              0
                                              ну и что, что полный доступ.
                                              У меня когда стояла пачка серверов в ДЦ, отдельный сервер как раз занимался менеджментом зоопарка.
                                              0
                                              Зависит от реализации. У нас IPMI в отдельной сети с серыми адресами, но в эту сеть есть доступ с management'а, потому что через него осуществляется xe host-power-on.
                                              +1
                                              Про обновление BIOS зря упомянуто было — обновляемый BIOS должен быть подписан, иначе его просто пошлют.
                                                0
                                                Да сделайте вы (производители) на корпусе доп. кнопку «Confirm», которую нельзя эмулировать и проблема будет решена.
                                                  0
                                                  Кто на нее будет нажимать при удаленном администрировании?
                                                    +1
                                                    Специальный хак.

                                                    Потом этот хак сочтут небезопасным и сделают ещё одну иерархию PKI, требуюущую нажатия кнопки. Потом к этой кнопке снова сделают remote control…

                                                    И так черепахи до самого низа.

                                                Only users with full accounts can post comments. Log in, please.