Исследователи обнаружили ошибку в микрокоде процессоров AMD, эксплуатация которой может позволять злоумышленникам проникать в хост-систему гипервизора из запущенной на нем виртуальной машины. Этой уязвимости подвержены компьютеры, использующие процессоры AMD Piledriver CPU (например, линейка чипов Opteron 6300) и микрокоды версий 0x6000832 и 0x6000836.
В чем проблема
Ошибка в микрокоде приводит к модификации содержимого
регистра, указывающего на верхушку стека во время обработки прерывания — указатель RSP сдвигается на одно поле. В результате при возвращении из обработчика инструкция ``IRETQ`` «выхватывает» следующее за адресом возврата значение со стека.
Злоумышленники могут попытаться управлять этим процессом, подставляя значения, указывающие на использующееся ими адресное пространство — в результате возможно исполнение кода с правами монитора.
Это означает, что процессор исполнит код, находящийся в недоверенном адресном пространстве. Таким образом, провести атаку на хост-систему гипервизора можно даже получив доступ к виртуальной машине с правами обычного пользователя, а не администратора.
Эксплуатация этой уязвимости довольно сложна из-за необходимости создания определенного, трудновоспроизводимого состояния системной части программного обеспечения. В ходе обсуждения в рассылке разработчиков ядра Linux LKML ИБ-исследователь Роберт Свецки (Robert Swiecki), заявил, что в ходе тестов ему удалось создать условия для эксплуатации ее «пару раз из 30 “oops”».
Детали эксплуатации уязвимости до сих пор не опубликованы, также отсутствует информация о полном наборе условий, необходимых для этого.
Как защититься
Представители AMD сообщили журналистам издания The Register о том, что в курсе проблемы. Компания разработала патч, который исправляет ошибку в прошивках уязвимых версий — партнеры AMD получили доступ к исправлению начиная с 7 марта. Пользователям необходимо установить патч — скачать его можно в специальных пакетах прошивок для различных ОС или с сайта производителя — и перезапустить систему.
Кроме того, на сайте компании-производителя продуктов для виртуализации VMware опубликованы ссылки на исправления ошибки при работе с машинами, использующими процессоры AMD Opteron 6300, для VMware ESXi. При этом связана ли исправленная ошибки и уязвимостью, обнаруженную в процессорах AMD, на данный момент неизвестно.
За последние несколько месяцев это уже не первая ошибка, обнаруженная в прошивках популярных процессоров. Так в январе 2015 года исследователи обнаружили баг в процессоре Intel Skylake, который приводил к зависанию компьютера во время сложных вычислений.
Комментарии (10)
horlon
11.03.2016 11:46+1Насколько я знаю, новый микрокод грузится уже из биоса, т.к. микрокод процессора уже прошит навечно. Или я чего-то не понимаю. Получится, что нужно «прошивать» проц на каждой материнке, на которую будет устанавливаться проц с уязвимостью.
khim
11.03.2016 16:42+2Ни в Intel, ни в AMD микрокод не зашивается в процессор. Просто потому что процессор — дорогой, материнка — дешёвая. Так что прошить процессор нельзя.
При каждой загрузке в процессор из BIOS'а заливается микрокод (без микрокода современный процессоры попросту не полностью дееспособны), но его можно загрузить и позже. Разумеется только обладая соотвествующими привилегиями.
Поэтому возможны patch'и как для BIOS'а, так и для операционки.horlon
12.03.2016 16:13Спасибо за ответ. Меня удивило просто само название прошивка. Но оно по сути и есть прошивка, если шьется в BIOS в ОС это уже как драйвер. Я еще когда-то удивлялся зачем процессору драйвера. Но однажды после покупки нового ПК моим знакомым, этот ПК жутко тупил в только что установленной ОС, но после установки драйвера на процессор (какой-то AMD FX) комп начал нормально работать. Я впервые в жизни такое видел (и до сих пор такого большее не видел).
khim
13.03.2016 22:29+1Ну примерно этого и следовало ожидать, если материнка про процессор ничего не знает. Как я сказал без залитого микрокода "современные процессоры недееспособны" — но это не значит, что они совсем не могут работать: как-то же они запускаются и работают пока BIOS "не раскачается" и не зальёт в них микрокод? Могут. Но мееедленно-мееедленно.
Всё взаимодействие между частями такого процессора работает с максимально возможными задержками, в суперконсервативном режиме. Просто потому что "настоящие" задержки выявляются на испытаниях уже после того как процессоры испеклись и их готовят к продаже :-)
То есть, в качестве примера, есть у вас делитель — вы туда отправляете два числа и через несколько тактов снимаете результат. В один такт ещё ни один процессор делить не научился, но… сколько тактов ждать-то? 1, 2, 100? В "автоматической" прошивке, зашитой на заводе раз и навсегда — без вариантов: ждём 100 тактов. Так надёжно, гарантированно, ошибок не будет ни на какой частоте. А вот уже после испытаний выясняется точно сколько нужно ждать — 10 тактов или 11. Или там "7 для маленьких чисел, 10 для средних, 15 для больших". Потому эти чиселки заливается в BIOS и записывается в драйвер. Конечно это не всё, что "заливается" в процессор — там могут даже некоторые инструкции вообще отключить и реализовать на микрокоде если "в силиконе" ошибка. Но "тупит" процессор обычно именно поэтому: потому что его завели в самом наиконсервативнейшем режиме из всех возможных.
И, кстати, ошибка, обсуждаемая в статье примерно того же рода: похоже, что в каком-то месте существующая прошивка слишком оптимистична и иногда (очень-очень редко) данные всё-таки "куда надо" дойти не успевают. Починить подобного рода проблему — как два байта переслать (в буквальном смысле слова), а вот обнаружить что проблема именно в этом… тут тысячи человек вместе работают — и то это месяцы занимает...horlon
13.03.2016 23:25В 2014, если не ишибаюсь, была статья где AMD заявили, что их процессоры прекращают поддерживать ряд инструкций на уровне железа, но поддерживаться инструкции, все же, будут. Тогда я и подумал о драйверах и еще не знал о существования микрокода…
deseven
11.03.2016 22:59Непонятно вот что:
партнеры AMD получили доступ к исправлению начиная с 7 марта
А пакет от декабря 2014 года и в репах дебиана и на сайте amd64.
sasha817
Фамилия исследователя — польськая. Читается "Шьвенцки".
sulnedinfind
Если уж "читается", то следует помнить, что "w" оглушается.
А транслитерировать следует как "Сьвенцкий" или "Сьвентский" (если очевидно происхождение от "swieto" — "праздник").
Есть неплохая статья на вики, которую я бы рекомендовал всем переводчикам, увидевшим в тексте польскую фамилию: https://ru.wikipedia.org/wiki/Польско-русская_практическая_транскрипция
Но поскольку распознать принадлежность имени может быть сложно, я бы просто советовал не транслитерировать в кириллицу никакие нетривиальные имена.
sasha817
Согласен по поводу «не транслитеровать».
deniskreshikhin
Ну если учитывать языковые аналогии, то эта фамилия эквивалентна русской Святский. Т.к. др. русское святок (ед. число от святки) и swieto это одно и тоже слово.