CVE-2017-5689 — уязвимость Intel AMT в подробностях

в 8:43, , рубрики: AMT, Intel Active Management Technology, Intel AMT, защита AMT, информационная безопасность, уязвимость AMT, метки: ,

В начале 2017-го года Максим Малютин (Maksim Malyutin) из компании Embedi обнаружил уязвимость в Intel AMT, которая была официально оглашена Intel первого мая и получила номер CVE-2017-5689 (INTEL-SA-00075 в кодификации Intel). Уязвимости был присвоен тип «повышение прав» (Elevation of Privilege) и критический уровень опасности. Многие СМИ в ответ разразились заголовками что-то типа «серверные чипсеты Intel 9 лет имели уязвимость», видимо отталкиваясь от фразы «This vulnerability does not exist on Intel-based consumer PCs» в описании. Однако это не совсем так с переходом в совсем не так. Потому далее подробное техническое описание уязвимости, её реализация и, главное, способы защиты для систем, не имеющих обновления прошивки.

Intel ME, AMT, ISM, SBT

Без углубления в подробности что такое технология Intel Active Management Technology (AMT), всё же, нужно отметить, что не стоит путать Intel ME и Intel AMT, т.к. AMT всего лишь один из модулей (условно говоря — плагин), работающий на «движке» Intel ME. Мажорная версия Intel ME меняется с каждым поколением процессоров, вместе с ней, меняется и мажорная версия Intel AMT. Затронуты уязвимостью все версии начиная с Intel AMT 6 (соответственно Intel ME 6 и выше) — вплоть до самых новых (Intel ME 11.6 на момент написания статьи).

Также нужно добавить, что Intel Standard Manageability (ISM) — это урезанная версия Intel AMT (с ограниченным функционалом, но это AMT), а вот Intel Small Business Technology (SBT) — это технология, которая использует функционал AMT для своей работы (неточное определение но в общем смысл такой), но ею никак не является (это другой, отдельный плагин в составе движка Intel ME).

Hardware

Для поддержки Intel AMT требуется наличие трёх составляющих:

  1. Поддержка AMT в чипсете
  2. Поддержка AMT в процессоре
  3. Поддержка поддержка AMT в BIOS

Только наличие всех трёх даёт полноценную поддержку Intel AMT. Грубо (без совсем старых и деления на мобильные/десктоп) чипсеты Intel можно поделить на:

  1. Обычные — чипсеты Hxx и Zxx
  2. Малый бизнес — чипсеты с Bxx
  3. Бизнес/Корпоратив — чипсеты Qxx
  4. «Для энтузиастов» — чипсеты Xxx
  5. Серверные — чипсеты C2xx

Технологию Intel AMT поддерживают лишь чипсеты из 3-го и 5-го пункта, а технологию Intel SBT из 2-го — только этих сегментов касается уязвимость CVE-2017-5689. Если же уточнить, то из-за «непрямого» отношения SBT к AMT 2-й пункт рассматривать можно лишь условно, а поддерживающий на уровне чипсета 5-й пункт обычно отпадает, т.к. серверные чипсеты рассчитаны на использование BMC-контроллеров для удалённого управления, в многом дублируя функционал Intel AMT (или наоборот), потому реализовывать и поддержку BMC и поддержку AMT в BIOS вендоры особенно не спешат, в то время как для поддержки Intel AMT требуется и поддержка всех трёх условий (см. выше).

Соответственно, почти всегда в случае наличия Intel AMT речь будет идти лишь о чипсетах Qxx.
В системах SoC (System on Chip — когда процессор и чипсет интегрированы) узнать поддержку AMT сложней, т.к. это зависит от конкретной модели. В общем случае процессоры, поддерживающие Intel AMT можно найти на ark.intel.com/ru/Search/Advanced?ExtendedPageTables=True, выбрав в самом низу галку «Intel vPro Technology» (но также стоит не забывать про требования поддержки в BIOS).

Доступ

Уязвимостью можно воспользоваться:

  1. Локально на AMT-компьютере — требуется наличие установленных драйверов AMT, в частности драйвера LMS
  2. В локальной сети — firewall при этом не защищает, т.к. технология AMT перехватывает трафик ДО его обработки ОС. Кроме того, компьютер может быть вообще выключен (но подключён к сети+электросети)
  3. По интернету — в случае того, если компьютер был настроен на работу AMT через Intel MPS (плюс ранее указанное в пункте 2)

Во всех случаях требуется, чтобы технология AMT уже была проинициализирована/сконфигурирована.

Отдельной неприятной вещью является тот факт, что несконфигурированный компьютер, начиная с Intel AMT версии 7 и выше можно программно проинициализировать локально в клиентский режим (т.е. даже из расконфигурированного состояния). Потому в рекомендациях от Intel по борьбе с уязвимостью CVE-2017-5689, кроме различных телодвижений из разряда «всё выключить» есть опциональные «Disable CCM» — отключить клиентский режим и «Disable HBE» — отключить автоматическую инициализацию AMT (неприменимо для обычных компьютеров-ноутбуков — это лишь для встраиваемых систем). Потому как с помощью данных возможностей, предназначенных для упрощения программной инициализации, эту процедуру можно сделать на любой системе с поддержкой AMT (исключение — запрещённое AMT в BIOS).

Дизассемблирование

Все подробности нахождения уязвимости указаны в первоисточнике, они сделаны на примере Intel AMT 9 системы. Если коротко, то была дизассемблированная часть, обрабатывающая запросы к встроенному в Intel AMT web-серверу по характерным заголовкам (username, realm, nonce и т.д.) процесса аутентификации:

image

При исследовании на выходе функции проверки авторизации (заголовок «Authorization»), где сравниваются пароли (переданный с установленным) был обнаружен код проверки пароля:

image

ld	r1, [sp:user_response+10ch]; проверяемый пароль → в регистр r1 (второй аргумент strncmp)
mov	r0, r13		; АМТ-пароль → в регистр r0 (первый аргумент strncmp)
ld	r2, [sp:a4h]	; длина проверяемого пароля → в регистр r2 (третий аргумент strncmp)
bl	strncmp		; call strncmp()

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

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

Практическая проверка уязвимости AMT-систем

В документе от Embedi был описан простой вариант с локальным доступом при сконфигурированном AMT без использования TLS — когда используется AMT-порт 16992. Чтобы не повторяться, будет приведён другой случай — доступ к расположенному в локальной сети компьютеру с поддержкой AMT, сконфигурированному на использование TLS (т.е. через AMT-порт 16993).

Подключаемся к системе с поддержкой AMT (т.к. при подключении по TLS будет проверяться имя сервера, то используется FQDN, а не IP):

image

Залогиниться со стандартным логином admin и оставив поле пароля пустым не получится (что понятно):

image

Теперь произведём манипуляцию с HTTP-заголовками, для этого используем расширение для Firefox HttpRequester.

Делаем пробный запрос (данные не важны), чтобы просто узнать realm из ответа (в ошибке в заголовке WWW-Authenticate будет нужный для составления дальнейшего запроса параметр:

image

Теперь добавляем вручную заголовок «Authorization»:

image

А в качестве значения указываем полученный ранее realm и следующие параметры:

Digest username=«admin», realm=«Digest:EB580000000000000000000000000000», uri="/index.htm", qop=auth, nc=, cnonce="", opaque=""

После чего жмём Add и отправляем запрос.

image

Нас интересует параметр nonce, который уникален для каждой сессии. Добавляем его в заголовок (для этого придётся удалить старый и добавить новый), должно получиться что-то типа:

Digest username=«admin», realm=«Digest:EB580000000000000000000000000000», nonce=«dh8jcw1CAQCTmvMOLG5UghjzJper6NvS», uri="/index.htm", qop=auth, nc=, cnonce="", response="", opaque=""

С поправкой на каждый раз разный nonce и свой realm.

Сама уязвимость выделена жирным — пустое значение пароля, чтобы после была проверка по его нулевой длине.

Отправляем составленный таким образом (но достаточно быстро — пока не истекла сессиия):

image

Есть логин, теперь можно открыть страницу в Firefox:

image

Никаких при этом запросов на пароль не было.

Защита действующих AMT-систем (с ошибкой CVE-2017-5689 в firmware) с помощью настройки аутентификации по сертификату (mutual auth)

Рекомендации Intel по защите от CVE-2017-5689 в основном заключаются в отключении AMT на поддерживающих её системах. Но, во-первых, многие (например, я) с удовольствием пользуются и хотят пользоваться впредь этой реально удобной технологией удалённого администрирования (особенно освоив её работу через интернет) и потому нет никакого желания отказываться от этого, банально выключая AMT в BIOS. Во-вторых, по опыту прошлых проблем различных вендоров с отключением AMT в BIOS, несложно предположить аналогичные и в будущем — когда отключённая в BIOS технология Intel AMT почему-то работала или могла быть активирована (несмотря на «Disabled» в BIOS Setup). Зная это, всегда наиболее правильной рекомендацией является проинициализовать и правильно настроить AMT — как раз для защиты систем с поддержкой Intel AMT (в противоположность «отключить и/или расконфигурировать»). В правильную настройку в том числе входит использование сертификатов для аутентификации (в дополнение к парольной) — сколько уж говорилось про ненадёжность парольной защиты, глупо повторяться.

Для этого можно использовать различные утилиты, например, официальный Manageability Commander от Intel (или другой удобной, я предпочитаю MeshCommander).

image
(На «Invalid TLS» обращать внимания не стоит, т.к. используется самоподписанный сертификат)

Закрываем доступ для не-TLS соединений и включаем клиентскую аутентификацию и для локального (через LMS) и для удалённого доступа (по сети и интернету), предварительно создав и загрузив нужные сертификаты.

Теперь при попытке зайти сначала (до парольной уязвимости) будет запрос на сертификат:

image

И только предоставив корректный сертификат, хэш рута которого был предварительно добавлен в хранилище сертификатов AMT данного компьютера и DNS которого был прописан в списке разрешённых — будет получен доступ к системе. Где уже дальше будет запрос на пароль (подвержённый уязвимости).

Таким образом AMT-система будет защищена и её можно привычно пользоваться, даже если обновление прошивки с исправлением уязвимости CVE-2017-5689 так и не будет выпущено производителем вашей системы.

Ссылки:

Автор: apple_rom

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js