Уязвимости Spectre, Meltdown и обновления микрокода процессоров Intel. Тесты производительности. Обновление микрокодов BIOS на материнской плате Intel DG965SS для поддержки Intel Xeon E5320 Обновление me code процессора intel

С начала января сложно было пропустить новости, касающиеся аппаратных уязвимостей Spectre и Meltdown — настолько серьёзной и всеобъемлющей оказалась тема. Хотя производители знали об этих проблемах ещё с лета прошлого года, большинство, похоже, начало реагировать лишь после обнародования подробностей специалистами команды Google Project Zero.

Например, Intel ещё в январе помимо прочих заплаток выпустила обновления микрокода против Spectre для своих процессоров Broadwell, Haswell, Skylake, Kaby Lake и Coffee Lake. Но почти сразу выяснилось, что они приводят к сбоям и . Вначале Intel заявила, что проблема касается только чипов Broadwell и Haswell, но позже признала существование сбоев на компьютерах с процессорами Skylake, Kaby Lake и Coffee Lake и партнёрам и пользователям пока воздержаться от установки заплаток. Наконец, в начале февраля исправленный вариант микрокода, но только для мобильных и настольных потребительских чипов семейства Skylake.

Теперь, после месяца интенсивных тестов и обкатки заплаток Intel и её партнёрами, пришло время и других более или менее актуальных процессоров: были выпущены обновления микрокода для чипов на базе архитектур Kaby Lake и Coffee Lake, а также незатронутых предыдущим обновлением Skylake-базированных платформ. Речь идёт о процессорах 6, 7 и 8-го поколений Intel Core i, а также последних семейств Core X, Xeon Scalable и Xeon D.

Новый вариант микрокода будет доступен в большинстве случаев через выпуск OEM-производителями новых прошивок материнских плат и ноутбуков. Intel по-прежнему призвала людей постоянно обновлять свои системы до актуальных версий, а также опубликовала документ , в котором расписала состояние аналогичных исправлений микрокода для других своих продуктов, в том числе более ранних чипов, начиная с 45-нм Core 2. Для каких-то из этих чипов заплатки только планируются, для других — находятся в состоянии раннего тестирования, для третьих — существуют уже в виде бета-версии. Как правило, чем старее архитектура, тем позже она получит прошивки с защитой против Spectre. Тем не менее, обновления микрокода для более-менее актуальных архитектур Sandy Bridge, Ivy Bridge, Haswell и Broadwell уже находятся в состоянии бета-тестирования. Также ряд чипов Atom и даже ускорители Xeon Phi уже получили заплатки.

Intel напомнила, что существуют и другие методы борьбы против вскрытых уязвимостей блока предсказания ветвлений в современных процессорах. Например, Retpoline, разработанный Google против Spectre CVE-2017-5715 (branch target injection или целевое внедрение в ветвь). Для тех, кто интересуется дополнительной информацией о Retpoline и принципах его работы, компания опубликовала особый технический доклад .

Выпущенные Intel обновления микрокода против Spectre в ближайшие дни и недели начнут выходить в виде свежих прошивок BIOS для различных материнских плат. Любопытно, окажут ли они дополнительный эффект на деградацию производительности конечных систем?

Здравствуйте дорогие друзья, с вами Артём.

Ещё в январе этого года появились сообщения о новых аппаратных уязвимостях в процессорах Intel и AMD.

Не так давно вышли обновления микрокода для процессоров Intel (ревизия 84), и я решил проверить как же обстоят дела на практике.

Хотя информация уже всем давно известна, я всё-таки расскажу короткую предысторию.

Аппаратные уязвимости процессоров получили названия Meltdown и Spectre, а выявили их исследователи из группы Google Project Zero.

Spectre имеет два варианта атаки под кодовыми именами CVE-2017-5753 и CVE-2017-5715.

Meltdown имеет один вариант атаки под кодовым именем CVE-2017-5754.

P . S . CVE это сокращение от английского «Common Vulnerabilities and Exposures » – база данных общеизвестных уязвимостей информационной безопасности.

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

Причём легче всего на практике эксплуатировать именно Meltdown, которому подвержены все современные процессоры Intel.

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

Spectre же более сложно воплотить в реальность, однако для устранения уязвимости требуется в отдельности латать каждую используемую вами программу.

Чипы от AMD в меньшей степени подвержены уязвимости типа Meltdown (хотя изначально утверждалось, что не подвержены вовсе).

Вредоносный код этого типа работает на них крайне медленно, но всё же работает.

Уязвимости типа Spectre подвержены процессоры и AMD, и Intel, тут уже без вариантов.

Этим же уязвимостям подвержены и процессоры с ARM архитектурой, однако сейчас речь пойдёт только о компьютерах с процессорами семейства x86-64.

P . S . Исследования в области безопасности никогда не останавливаются и всегда может появится что то ещё, в том числе и в процессорах AMD и Intel.

Важное замечание! Пока видео было в монтаже и писался тактовый материал на сайт, появились новые исследования в области безопасности процессоров.

Выявились новые варианты реализации уязвимости Spectre, которые получили кодовые имена CVE-2018-3640 (так называемый вариант атаки 3a) и CVE-2018-3639 (вариант атаки 4).

Напомню, что Spectre исправляется обновлением используемого программного обеспечения, например браузеров и так далее.

Однако от последнего варианта атаки CVE-2018-3639 потребуется ещё и обновить микрокод процессора на чипах Intel, что возможно несколько снизит производительность.

В AMD утверждают, что, чипам компании не потребуется новый микрокод от указанных атак, и всё обойдётся обычными патчами Windows и другого софта.

Указанные уязвимости имеют низкий приоритет опасности для обычных домашних компьютеров.

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

Речь пойдёт о микрокоде процессоров Intel, но микрокод пока что другой и не исправляет вариант атаки Spectre 4.

Если вы используете операционные системы семейства Windows, то вам будут полезны эти ссылки:

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

Например самая первая заплатка для Windows 10 вышла 3 Января 2018 года под именем KB4056892 .

Однако существовала проблема в том, что программные исправления Meltdown снижали производительность систем на базе процессоров Intel.

У меня как-то все не было свободного времени провести свои небольшие тесты.

Однако теперь с выходом новых версий прошивок для материнских плат мне стало интересно как же обстоят дела в этой сфере.

Я использую материнскую плату ASRock Z370 Gaming K6 и соответственно обращаюсь к официальному сайту производителя, для скачивания свежего BIOS.

Обновлённый микрокод для процессоров Intel появился в BIOS версии 1.60, которая вышла в 2 марта 2018 года.

Я же буду ставить ещё более свежую версию BIOS версии 1.80, которая увидела свет 26 марта 2018 года.

Для начала мне интересно протестировать исправления, касающиеся микрокода процессора, без дополнительных программных заплаток.

В качестве операционной системы используется Windows 10 версии 16299.371 без дополнительных установленных патчей от аппаратных уязвимостей Meltdown и Spectre.

P . S . Все сделанные выводы будут касаться только новых процессоров Intel, потому как для старых материнских плат новые версии BIOS вряд ли появятся.

Если вам будет интересно, то можно сделать тесты с программными заплатками и на более старых процессорах Intel.

Полная конфигурация моего компьютера:

Процессор : Intel Core i5 8600K.

Кулер процессора : Arctic Cooling Liquid Freezer 240.

Материнская плата : ASRock Fatal1ty Z370 Gaming K6.

Оперативная память : GoodRam Iridium DDR4 2400 МГц (2×8 Гб IR-2400D464L15S/8G).

Видеокарта : Asus Dual GTX 1060 6 Гб (DUAL-GTX1060-O6G).

Накопители : Sata-3 SSD Plextor M5S и Sata-3 HDD Seagate 1 Тб (ST1000DM003).

Корпус : Fractal Design Define R5.

Блок питания : Fractal Design Edison M 750 Ватт.

Первый тест - это производительность кешей центрального процессора и оперативной памяти в Aida 64 Cache & Memory Benchmark .

Как вы видите, каких-то существенных отличий в работе подсистемы оперативной памяти и кешей процессора нет.

Следующий тест коснётся работы дисковой подсистемы.

К сожалению, у меня нет скоростного M.2 SSD накопителя, поэтому тестировать я буду свой Plextor M5S на обычном SATA-3.

В итоге в тесте ATTO Disk Benchmark получаются практически идентичные результаты.

То же касается и показателей в тесте CrystalDiskMark 5.2.1.

Тест производительности в CrystalDiskMark и новый микрокод процессора Intel. Spectre и Meltdown

По крайней мере для SATA-3 падение производительности при операциях чтения и записи не наблюдается.

Следующий тест 7zip, который покажет производительность при упаковке и распаковке архивов.

Тут наблюдается всё таже картина, разницы в производительности при установке нового исправленного BIOS нет никакой.

Так как я создаю контент, то я не мог оставить в стороне монтаж видео роликов.

В качестве монтажной программы я использую Vegas Pro 13 и вне зависимости от используемой версии BIOS, время рендера не изменилось.

Исходники видео имеют разрешение 1080p, битрейт 50 Мегабит/c и с частотой 50 кадров в секунду.

В качестве профиля для рендера был выбран Sony AVC/MVC с битрейтом в 16 Мегабит/c, все остальные настройки профиля вы видите на своих экранах.

Теперь немного поговорим об играх.

В тестах принимали участие те проекты, которые были у меня установлены на компьютере в данный момент времени (Assassin’s Creed Origins, FarCry 4 и Crysis 3).

Все показатели кадров снимались при помощи программы MSI Afterburner 4.4.2.

В общем и целом, результаты не нуждаются в комментировании.

Тесты производительности в играх Assassin’s Creed Origins. Spectre и Meltdown

Если использовать новую версию процессорного микрокода за ревизией 84, то разницу в производительности невозможно заметить – всё работает также быстро и шустро.

Единственно интересно было бы посмотреть на работу M.2 SSD накопителей с интерфейсом NVMe.

Возможно, в будущем я проведу ещё ряд тестов с программными заплатками для Windows 10 и с одновременно установленным исправленном микрокодом центрального процессора.

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

Таким образом таких заметок будет выходить куда больше:)

Также не забывайте вступать в группу Вконтакте и подписываться на YouTube канал.

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

Все процессоры Intel с архитектурой P6, а к ним относятся семейства Pentium Pro, Pentium II & III, Celeron, Pentium II & III Xeon и Pentium II Overdrive, обладают таким замечательным свойством, как "reprogrammable microcode". В этих процессорах имеется возможность изменения микрокода, т.е. имеется возможность исправления ошибок в программно-схемотехнической реализации конкретных процессоров семейства P6 и некоторых встроенных ошибок практически на уровне "железа". Ошибки могут появляться на этапе проектирования процессоров, а исправляются они именно с помощью изменения микрокода. Каждое из подсемейств (PII, Celeron, PPro, Xeon) имеет спецификацию. При выпуске каждого нового степпинга процессора (внутри него все приборы являются идентичными в рамках технологических отклонений), Intel публикует для него обновление спецификации, где указываются обнаруженные и исправленные errata (отклонения от спецификации).

Ошибки эти могут, в принципе, осложнить жизнь программному обеспечению, которое работает на этих "дефектных" процессорах (и пользователю;-)) .

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

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

Сами обновления микрокода - это 2-хкилобайтные блоки данных, прошитые в системном BIOS. Такой блок есть для каждого степпинга процессора из семейства P6. Intel поставляет свежие версии микрокода ведущим производителям BIOS. База данных с обновлениями пополняется и изменяется при появлении новых моделей и версий микрокода. Intel рекомендует выполнять обновление версий микрокода с помощью своей утилиты при установке нового процессора на материнскую плату или перепрограммирования флэш-памяти, чтобы быть уверенным, что в BIOS содержится самая свежая версия микрокода. Эта программа определяет используемый процессор (с помощью CPUID) и ищет соответствующее ему обновление в своей базе. Если найдена свежая версия микрокода, утилита локально перепрошивает код в BIOS, не затрагивая остальные участки. Т.о. отпадает необходимость перепрограммирования всего флэша для поддержки нового ЦПУ, как это было ранее. Обновление базы данных Intel периодически выкладывает на своем сайте.

Последняяи из доступных нам баз имеет ревизию 5.01 и содержит следующие версии микрокода:

Processor Processor Stepping Microcode Update Rev
Pentium III Processor 0x672 0x04
Pentium III Processor 0x673 0x02
Pentium III Xeon Processor 0x672 0x21
Pentium III Xeon Processor 0x673 0x22
Pentium II Processor 0x633 0x34
Pentium II Processor 0x634 0x35
Pentium II Processor 0x650 0x32
Pentium II Processor 0x651 0x30
Pentium II Processor 0x652 0x14
Pentium II Processor 0x653 0x01
Pentium II Xeon Processor 0x652 0x29
Pentium II Xeon Processor 0x653 0x04
Intel Celeron Processor 0x650 0x32
Intel Celeron Processor 0x651 0x30
Intel Celeron Processor 0x660 0x09
Intel Celeron Processor 0x665 0x02
Pentium II OverDrive Processor x1632 0x02
Pentium Pro Processor 0x612 0xC6
Pentium Pro Processor 0x616 0xC6
Pentium Pro Processor 0x617 0xC6
Pentium Pro Processor 0x619 0xD2

Загрузить последнюю версию утилиты, исправляющую микрокод можно прямо отсюда: pupdt501.exe (115 Kb)

Старую базу (PEP15.PDB) можно загрузить отсюда: pupdt461.exe (111 Кб)

После окончания работы утилиты, необходимо выключить питание компьютера. Загрузка обновления в процессор происходит во время выполнения POST при каждом запуске системы. Естественно для работы утилиты необходимо разрешить перезапись флэш-памяти перемычкой или в BIOS Setup. Программа должна запускаться из-под "голого" ДОСа.

Однако для такого идеального варианта необходима поддержка BIOS"ом специального API обновления микрокода процессора, позволяющего утилите обновления с помощью BIOS загрузить новый микрокод. Если используемая версия системного BIOS не поддерживает API, пользователю ничего не остается, кроме как добыть новую версию у производителя материнской платы. Однако бывает, что найти её не так уж просто, если не невозможно. Зачастую, после прекращения производства какой-либо модели системной платы, производитель перестает выпускать и обновления биосов для нее, но при этом новые процессоры могут появиться в продаже, а у пользователя может возникнуть желание установить в свою систему новый CPU.

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

Возникает вопрос, а чем чревато самостоятельное обновление прошивки? Ну, во-первых, сначала нужно удостовериться, что вам это действительно необходимо. Если версия прошивки старая, а новых версий BIOS производитель системной платы не предлагает, но, главное, вы столкнулись с нестабильной работой какого-то приложения, и рассчитываете, что изменение микрокода процессора вам поможет. Только в этом случае имеет смысл самостоятельно изменить прошивку. А насчет того, чем это чревато - по-моему, ничем опасным. Во-первых, не стоит забывать, что загрузка обновления микрокода в процессор применяется во всех BIOS на платах для P6 и уже давно (многие видели в Setup загадочную опцию Microcode Update: Enable/Disable). И ничего! Все работает.

Это еще раз подчеркивает необходимость его использования. Кто знает, как бы обстояло дело без этого обновления! Отличие лишь в том, что раньше микрокод обновлялся с установкой новой версии флэша, а теперь можно перепрограммировать не все содержимое BIOS, а лишь ограниченный кусок.

Мой личный опыт работы с этой программой пока был ограничен 7 случаями, из которых удалось обновить микрокод только на одной системной плате (Abit LX6 c PII 233). В остальных случаях BIOS уже содержал обновленные версии микрокода. Также не удалось встретить BIOS, не поддерживающий обновление микрокода.

Что касается аналогичной возможности обновления микрокода в процессорах других производителей (AMD, Cyrix), то никакой информации по этому вопросу мне найти не удалось. Но я почти уверен, что в этих CPU имеется аналогичная возможность изменения микрокода.

Представляю донора BioStar A740G M2L+ (AMD 740G / SB710) и реципиента BioStar A740G M2+ (AMD 740G / SB700). Мат.плата, что с литерой «L», более свежая и поддерживает процессоры AM3 официально, в отличие от другой, что ограничена лишь поддержкой процессоров AM2+. Напрашиваются на сравнительный анализ БИОСы их.
С оф. сайта загружаем лишь последнее обновление прошивки БИОСа для каждой их этих мат.плат:
- для A740G M2+ последняя бэта A74GM916.BSS за сентябрь 2009г.
- для A740G M2L+ - файл 74GCU511.BSS - за май 2010г.

Далее вооружаемся утилитой MMTOOL (я использовал версии 3.22, 3.23 и 3.26 - различий в работе не обнаружил) . Для работы с MMTOOL расширения файлов прошивок БИОС необходимо переименовывать на *.rom.

Теперь запускаем две MMTOOL и в них подгружаем файлы прошивок от двух мат. плат. Обращаем внимание на разные размеры в столбце «Source size» (да и в «Size in Rom» тоже разумеется) модуля 11 «P6 Micro Code» в каждой из прошивок.

Переходим в раздел CPU PATCH для детального сравнения:

Файл донора 74GCU511.rom - cpu_list содержит 14 строк с поддержкой CPURev.ID + 1 пустая (рис.1).

Бэта-версия реципиента A74GM916.rom - cpu_list содержит 13 строк с поддержкой CPURev.ID + 1 пустая (рис.2).

После анализа списков этих двух БИОСов становится очевидно, что для более новой мат.платы разработчики использовали более свежие патчи для процессоров AMD, где подправлен микрокод двух строк с CPURev.ID 1043 и 1062 (датируются 2009/07/31) и одна строка с CPURev.ID 10A0 добавлена (датируется 2010/02/17).

Способ №1 - модификация отличительных строк.
Производится извлечение этих трёх отличительных строк из донора 74GCU511.rom - действия «Extract a Patch Data» + «Apply» + 1 последнюю пустую строку и сохранение их в отдельные файлы.

Предварительно в в разделе CPU PATCH файла реципиента A74GM916.rom удаляются две строк с номерами CPURev.ID 1043 и 1062 (чей микрокод более старый чем мы будем далее вставлять) и последняя пустая строка - действия «Delete a Patch Data» + «Apply» (рис.3).

После этого поочерёдно вставляется более новый микрокод из четырёх уже ранее полученных файликов-патчей для CPURev.ID 1043, 1062, 10A0 и пустая строка (рис.4).

Обращаем внимание на размеры («Source size» и «Size in Rom») модуля 11 «P6 Micro Code» до и после применения данных изменений в файле реципиента.
После применения эти размеры у реципиента (рис.6) станут идентичны размерам такого же модуля в файле-доноре 74GCU511.rom (рис.5).
Стоит заметить, что несложно понять, как формируется размер модуля (каждая строка, что в разделе CPU PATCH, занимает по 2048 байт).

Сохранять изменения лучше под новым именем файла.
Далее этот файл проверяется, чтобы по новой без ошибок открывался MMTOOL.

Способ №2 - модификация заменой модуля целиком.
Собственно именно он и описан на просторах интернета (например частично ).

В MMTOOL подкружаем файл донора 74GCU511.rom, переходим во вкладку «Extract» и ищем строку «P6 Micro Code». Затем выделяем её, в поле «module file» задаем ему имя ncpucode.bin и выполняем Extract module «in uncompressed form».

Теперь в MMTOOL подгружаем файл реципиента A74GM916.rom, переходим во вкладку «Replace» и снова ищем строку «P6 Micro Code». Выделяем её, ждём Browse и выбираем наш донорский модуль ncpucode.bin. Жмём Replase и далее соглашаемся на замену данного модуля.

Снова обращаем внимание на размеры («Source size» и «Size in Rom») модуля 11 «P6 Micro Code» до и после замены данного модуля в файле реципиента.
После применения эти размеры у реципиента (рис.7) станут идентичны размерам такого же модуля в файле-доноре 74GCU511.rom (рис.5).

Если сравнить результаты обоих способов (рис.6 и рис.7), то заметна разница в 10байт в адресе RomLoc модуля «User Defined or Reserved», следующего за обновляемым модулем «P6 Micro Code» - возможно, это особенности работы MMTOOL...

Заключение и послесловие.
Таким вот образом из разных прошивок БИОС различных мат. плат на сокете АМ2+ (и даже АМ3 для сравнения) можно найти самые свежие микрокоды для каждого типа CPURev.ID, как в Award так и AMI биосах, затем скомбинировать в единый ncpucode.bin.
В последтсвии он получился у меня размером 32768 байт из 16 строк (микрокодов) с самыми свежими датами из числа изученных прошивок различных БИОСов: с 15ю различными типами ревизий процессоров для сокета АМ2+ (040A, 0413, 0414, 041B, 0433, 0680, 0C1B, 1000, 1020, 1022, 1040, 1041, 1043, 1062, 10A0) и 16-ой строкой для RevID 0000 (видимо некий универсальный микрокод для ревизий процессоров, не описанных в других строках - имхо, например будущих).

При комбинировании собственного ncpucode.bin импортированием необходимых патчей(микрокодов) для каждой необходимой ревизии процессоров в качестве лабораторного можно использовать абсолютно любую прошивку AMI биос с модулем «P6 Micro Code».

Однако при сохранении файла прошивки была замечена неприятная особенность MMTOOL - утилита почему-то прибавляла 8 нулевых байт в конец модуля «P6 Micro Code» - он получался размером 32776 байт. При извлечении тем же MMTOOL из лабораторной прошивки файл ncpucode.bin также становился на выходе размером 32776 байт.
Можно сие отредактировать простыми доступными всем редакторами. Но я также (случайно) обнаружил альтернативный способ: при извлечении универсальной утилитой BIOS_EXT.EXE всех модулей из лабораторной прошивки файл ncpucode.bin уже получался правильного размера 32768 байт - утилита BIOS_EXT.EXE сама правильно определила конец модуля «P6 Micro Code» при сохранении его в файл.