Использование микрокода в процессорах Интел — Архив WASM.RU

Все статьи

Использование микрокода в процессорах Интел — Архив WASM.RU

0. Дисклэймер

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

1. Введение

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

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

Для чего? С какой целью? В большинстве случаев для обычной диверсии... если только Интел не скрывает от нас что-нибудь. Тогда могут появиться и другие мотивы. Если Интел хочет что-то скрыть... то что? Может возникнуть возражение, что парни из Интела просто беспокоились или сделали это для собственного развлечения, чтобы занять нейроны, однако сомнительно, что это так. Должна существовать действительно веская причина. Как вы можете видеть, это типичная провокаторская статья, подобные которой с определенной периодичностью публикуются в SET (испанский хакерский журнал, в котором была опубликована оригинальная статья).

Интересно узнать, скрывается ли здесь что-то интересное. Но прежде, чем посвятить свободное время этой проблеме, необходимо изучить доступную информацию...

1.1 Что такое микрокод?

Микрокод используется для реализации некоторых инструкций процессора. Я объясню. Архитектуры компьютеров делятся на две большие категории: RISC и CISC.

Архитектура RISC предусматривает простые инструкции, в то время как CISC - более сложные. В CISC'е компьютеру говорят: "Взломай аккаунт моей бабушки и тети". В RISC'е: "Взломай. Счет. Моей бабушки. Взлома. Счет. Моей тети.".

RISC'овыми являются такие архитектуры как ARM и Sparc. x86 (PC у вас на столе) - CISC'овая архитектура. Что лучше... ладно, это другая история. В x86 есть "большие инструкции", которые разлагаются на более мелкие, выполняемые затем процессором. Конкретные реализации микрокода могут менять то, на какие инструкции разлагаются "большие инструкции". Таким образом Интел сделал возможным появление багов, которые согласно интеловской номенклатуре называются "Errata". Багов много. Просто сделайте поиск по словам "processor Specification Update" на странице Интела.

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

Понятие микрокода и все, что с ним связано объясняется в главе 8, секции 11 "IA-32 Intel Architecture Software developers manual Volume 3: Systems programming guide", который можно скачать со страницы Intel. Микрокод - это 2048 байтов данных, 48 из которых являются заголовочными. Остальные 2000 - это и есть собственно микрокод. Он зашифрован. Если вы измените микрокод и попробуете его залить в процессор, это не получится, так же как и в том случае, если заливаемый микрокод предназначается для другого процессора.

2. Каким образом можно залить новый микрокод в мой процессор?

Обычно этим занимается BIOS. Также есть одна утилита, которая может установить микрокод из-под Windows, используя специальные файлы, предоставляемые Интелом.

Но мне, например, Windows не нравится. Мне нравится Линукс, и под ним мы можем использовать микрокод легко и просто. Как? Если есть ядро 2.4.X, то при его установки можно выбрать опцию использования микрокода. Я думаю, что в RedHat этот выбок недостаточен. В вашем дистрибутиве Линукса выполните команду

	make menuconfig

и выберите все, что видите в /dev/cpu.

Вы можете скачать ASCII-файл со всеми микрокодами с http://www.urbanmyth.org/microcode/.

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

3 - Как работает драйвер

Это очень просто.

Смотрит заголовок
        Проверяет наличие процессора, для которого предназначается микрод, и 
        корректнось чексуммы
                Переходит на следующий за заголовком микрокод
        Если все в порядке
        Иницилиазирует регистры для вызова WRMSR
                EAX содержит адрес микрокода
                EDX содержит 0
                ECX содержит 79h
        Вызов WMSR 
Инициализирует регистры для вызова WRMSR
                EAX содержит 0
                EDX содержит ноль
                ECX содержит 8ир
        Вызов WMSR
        Инициализация регистров для вызова CPUID
                EAX содержит 1
        CPUID
        Инициализация регистров для вызова RDMSR
                ECX содержит 8bh
        Вызов RDMSR

Обратите внимание:

Регистры MSP (Model Specific registers) предназначаются для внутреннего использования процессором при выполнении различных функций. Эти регистры практически недокументированны, хотя есть некоторые документы, дающие определенную информацию по этому поводу, которую я не буду излагаться здесь. Эти документы можно найти в Сети (google: MSR and appendix H). Возможно, в конце концов Интел будет вынужден документировать эти регистры.

Запись и чтение из регистров MSR производится с помощью инструкций RDMSR и WRMSR. Полный список MSR-регистров можно найти здесь:

http://chip.ms.mff.cuni.cz/~pcguts/cpu/msr.txt

Мы записываем в MSR под номером 79h, так как хотим модифицировать микрокод.

Затем используем другой регистр (8bh) и вызываем CPUID. Это инструкция поможет нам узнать различную информацию информацию о процессоре. Вы можете узнать больше об этой инструкции здесь:

http://microcodes.sourceforge.net/CPUID.htm

Если все идет нормально, в 8bh находится находится специальный код.

Если код в 8bh совпадатет с тем, что находится в 79h, поздравления! у нас новый микрокод. В /var/log/messages (или используя инструкцию dmesg|tail 10)

появится новый микрокод.

4 - Мой вклад

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

  1. Микрокод предназначается не для данного типа процессора
  2. Микрокод бы модифицирован

Другими словами, внутри процессора есть сперциальная система безопасности.

Я проанализировал микрокода и установил, что:

  • В Celeron'ах 2000 байтов различаются у всех микрокодов.
  • В Pentium Pro 1136 представляют собой мусор, который можно модифицировать и который не оказывает никакого влияния на конечный результат
  • В Pentium II и III 1056 байтов - это также мусор, модификация которого не оказывает влияния на конечный результат.

Новые драйвера и инструкции можно найти здесь: http://microcodes.sourceforge.net

5 - Что нужно сделать

Криптографический анализ микрокодов, атака с помощью "грубого подбора".

Спать.

2002-2013 (c) wasm.ru