Категорически не рекомендуется ставить эксперименты на основном
рабочем компьютере, лучше найти какую-нибудь старую плату, оставшуюся, например,
с прошлого апгрейда или частично исправную и собрать на ее базе "полигон".
Об аппаратной защите и ее эффективности
Микросхема 24C02 поддерживает аппаратную
защиту записи. Для этого используется вход WP (Write Protect). Это контакт 7 на
8-контактном корпусе микросхемы. При WP=0 запись разрешена, при WP=1 запрещена.
С точки зрения использования этой функции, модули памяти бывают трех типов:
Первый вариант – вход WP подключен к схемной "земле", то есть WP=0. Защиты нет.
Второй вариант – вход WP подключен к плюсовой линии питания, то есть WP=1. При
этом микросхема SPD постоянно защищена от записи, и программно изменить ее
содержимое невозможно.
Третий вариант – вход WP подключен к соответствующему контакту на разъеме DIMM.
При этом наличие защиты записи будет зависеть от материнской платы, а именно от
того, какой логический уровень подает она на данный контакт. Обычно подается
постоянный уровень "0" или "1", что обеспечивает разрешение или запрет записи
соответственно. Теоретически, на материнской плате может быть реализован
программно-доступный регистр, через который можно управлять состоянием этой
линии, то есть программно устанавливать и снимать защиту записи SPD. Но на
практике такие решения встречаются крайне редко.
Тем, кто решит поэкспериментировать с перезаписью SPD, необходимо проверить
наличие логического "0" на контакте 7 микросхемы 24C02 и при необходимости
внести изменения в схему. Описание этой микросхемы приведено в [13].
Расположение сигналов на разъеме DIMM для разных типов памяти приведено в
[19-22].
Другой тип защиты – отключение сигналов шины SMBus с помощью
программно-управляемых коммутаторов. Смысл такой защиты в том, что для
управления указанными коммутаторами используются специфические ресурсы
материнской платы, не являющиеся частью чипсета. Поэтому для ответа на вопрос,
что и в какой регистр нужно записать для выключения защиты, документации на
чипсет недостаточно, требуется принципиальная электрическая схема данной
материнской платы, которая обычно недоступна. На практике этот тип защиты
используется достаточно редко. Автор встречал его только в некоторых моделях
плат производства фирмы ASUS.
Таким образом, в большинстве платформ, защищенность информации SPD от
программного искажения зависит только от подключения входа WP микросхемы 24C02
на модуле DIMM.
Симптомы неисправности
Разумеется, содержимое микросхемы SPD модуля памяти может быть искажено не
только в результате действия вредоносных программ. Причиной может быть
программный сбой, а также аппаратная неисправность самой микросхемы SPD или
контроллера SMBus.
Симптомы такой неисправности существенно различаются в зависимости от двух
факторов: типа платформы и характера искажения (какие именно параметры
искажены).
В "древних" платформах, использующих память PC66, PC100, PC133 SDRAM, несмотря
на то, что модули DIMM уже содержали SPD, разработчики BIOS в силу определенной
инерционности использовали "старые" методы детектирования памяти, основанные на
записи в ОЗУ тестовых данных и их контрольном считывании по специальному
алгоритму без использования SPD. В таких платформах искаженность содержимого
микросхемы SPD и даже ее физическое снятие с модуля DIMM, в большинстве случаев
не приводит к потере работоспособности, хотя контроллер памяти может быть
проинициализирован неоптимально.
Используя данное свойство "древних" платформ автор успешно применял плату на
чипсете Intel BX в качестве программатора для микросхем 24C02, временно
устанавливая микросхему, которую требуется записать, на один из модулей памяти,
вместо микросхемы SPD.
В более новых платформах, использующих DDR, DDR2, DDR3, процедура настройки
контроллера памяти значительно сложнее и выполнить ее без привлечения информации
из SPD невозможно. Такие платы обычно не стартуют, если присутствует хотя бы
один модуль DIMM с некорректным содержимым SPD. Даже если этот модуль установлен
в старшем банке, а в младшем находится исправный модуль.
Разумеется, многое зависит и от того какой параметр искажен. Например, если
увеличено значение байта, задающего тактовый период, BIOS будет устанавливать
пониженную частоту при инициализации контроллера памяти, что приведет к падению
быстродействия.
Отметим, что данные SPD защищены контрольной суммой, поэтому вредоносная
программа, желающая изменить тайминги модуля памяти без вывода его из строя,
должна корректировать значение контрольной суммы после изменения значений
параметров. Также отметим, что на некоторых материнских платах BIOS не
проверяет контрольную сумму SPD. Поэтому модуль памяти с работоспособными
значениями параметров, но некорректной контрольной суммой SPD, может нормально
работать на таких платах.
Меры предосторожности
Тем, кто решится поэкспериментировать с перезаписью микросхем SPD, следует
заранее позаботиться о восстановлении их содержимого. Исходное содержимое SPD
всех модулей памяти следует предварительно сохранить в файлах с помощью
программы чтения SPD, имеющейся в предлагаемом наборе. Категорически не
рекомендуется ставить такие эксперименты на основном рабочем компьютере, лучше
найти какую-нибудь старую плату, оставшуюся, например, с прошлого апгрейда или
частично исправную и собрать на ее базе "полигон".
Оптимально, если это будет плата на чипсетах, например Intel TX, LX, BX,
использующая SDRAM первого поколения. Как было сказано выше, такие платы обычно
сохраняют работоспособность при некорректном содержимом SPD, поэтому вероятность
получить нестартующую систему будет ниже.
Напомним, что BIOS считывает SPD только при перезапуске компьютера, поэтому,
делая опыты по перезаписи SPD, по возможности восстанавливайте исходное
содержимое перед сбросом или выключением питания.
Программа чтения SPD (каталог WORK\READ)
Как и в ранее опубликованных статьях данного цикла, в целях монопольного и
беспрепятственного взаимодействия программы с оборудованием при работе с
предлагаемыми примерами, автор применил "древнюю" технологию отладки под DOS.
Аргументация такого шага и рекомендации по организации рабочего места приведены
в ранее опубликованной статье "64-битный режим под DOS: исследовательская работа
№ 1".
Программа считывает содержимое SPD заданного модуля памяти (номер модуля
запрашивается) и сохраняет его в двоичном файле SPD.BIN, размером 256 байт. В
текущей версии поддерживаются чипсеты:
Intel от 430TX до 945 (c "южными мостами" PIIX4, ICH0-ICH7).
VIA от MVP3 до К8x (с "южными мостами" VT82C586B, VT82C596A/B, VT82C686A/B,
VT8233, VT8235, VT8237).
Поддержка чипсетов NVidia, SiS, ATI планируется в последующих реализациях
программы. При наличии читательского интереса автор вернется к данной теме.
Каталог WORK\READ содержит следующие файлы:
ASM_TD.BAT – обеспечивает ассемблирование, линковку и запуск программы под
отладчиком. При запуске TASM и TLINK используются опции, обеспечивающие
добавление отладочной информации в EXE файл.
ASM_EXE.BAT – обеспечивает ассемблирование и линковку. Генерируется EXE файл.
RD_SPD.ASM – основной модуль программы.
A20.INC – Библиотека для управления и контроля состояния адресной линии A20 с
использованием выходного порта контроллера клавиатуры.
BIGREAL.INC – Библиотека поддержки режима Big Real Mode, для использования
32-битных адресов в диапазоне 0-4 Гб. Этот режим, как и управление адресной
линией A20, необходимы в данной программе только в том случае, когда чипсет
содержит конфигурационные регистры, находящиеся в пространстве памяти и для
включения контроллера SMB требуется перенастройка данных регистров (в том
случае, если BIOS запретил контроллер SMB перед загрузкой ОС). Такие регистры
имеются, например, в "южных мостах" Intel ICH6, ICH7. Это регистры memory-mapped
диапазона Root Complex Base Address – RCBA, подробности в [3].
SCREEN.INC – Библиотека функций для вывода на экран в текстовом режиме 80x25
символов.
NUMPRINT.INC – Библиотека для вывода шестнадцатеричных чисел в текстовом виде.
PCIBIOS.INC – Библиотека для доступа к конфигурационному пространству с
использованием функций PCIBIOS. Подробности в [8-10].
REFRDEL.INC – Подпрограмма задержки, использующая Refresh Trigger. Подробности в
[26].
SMBUS.INC – Диспетчер функций для процедур поддержки System Management Bus.
SMBDEVS.INC – Библиотека, обеспечивающая поддержку чипсетов. В этот модуль
вынесены подпрограммы, написанные под заданные чипсеты.
TEXT.INC – Текстовые строки.
CPU_DATA.INC – Данные, используемые для управления адресной линией A20 и
включения режима Big Real Mode, обеспечивающего 32-битную адресацию.
SMB_DATA.INC – Переменные и константы, используемые процедурами поддержки System
Management Bus.
Примечание 1.
Если файл с именем SPD.BIN уже существует, он будет перезаписан без
предупреждения.
Примечание 2.
В большинстве плат нумерация модулей памяти идет от центра платы. Например,
если на плате 4 разъема для DIMM, то у ближайшего к процессору разъема 3-битный
адрес микросхемы SPD будет 000b=0, у дальнего разъема 011b=3. Вместе с тем,
встречаются исключения, поэтому перед выполнением экспериментов следует
проверить нумерацию модулей. Это можно сделать с помощью диагностических утилит,
либо устанавливая один модуль поочередно во все разъемы и проверяя, при задании
какого номера DIMM программа его распознает.
Примечание 3.
В исходных текстах программы, наряду с процедурами чтения и записи байтов,
используемыми при операциях с микросхемами SPD (Read_Byte, Write_Byte),
содержатся также процедуры чтения и записи блоков (Read_Block, Write_Block). В
данной версии программы они не используются и резервируются для будущего
расширения функциональности. Процедуры блокового чтения и записи SMB потребуются
для взаимодействия с регистрами тактового генератора.
Программа записи SPD (каталог WORK\WRITE)
Программа считывает двоичный файл SPD.BIN, размером 256 байт и записывает его
содержимое в заданную микросхему SPD (номер модуля DIMM запрашивается).
Контрольная сумма автоматически корректируется.
Каталог WORK\WRITE содержит такой же набор файлов, что и каталог WORK\READ,
описанный выше.
Примечание 1.
Для плат с "южным мостом" VIA VT82C586B поддерживается только чтение SPD, без
записи. Это ограничение программы, не чипсета.
Примечание 2.
Программа записи SPD автоматически корректирует контрольную сумму данных.
Согласно стандарту, байт с адресом 3Fh должен содержать младшие 8 бит суммы
байтов с адресами 00h-3Eh. Если программа используется для модулей памяти,
использующих другой формат, либо требуется запрограммировать в микросхему
данные, не являющиеся информацией SPD, процедуру вычисления контрольной суммы
потребуется модифицировать.
Примечание 3.
На некоторых модулях памяти, в целях снижения стоимости, вместо микросхемы
24C02, допускающей перезапись, используется масочная микросхема постоянного
запоминающего устройства (ПЗУ), переписать содержимое которой невозможно.
Текстовые документы (каталог WORK\DOC).
README.TXT – краткая справка по использованию программ чтения и записи SPD.
SPD_SDR – описание формата SPD для модулей памяти SDRAM.
SPD_DDR – описание формата SPD для модулей памяти DDR SDRAM.
SPD_DDR2 – описание формата SPD для модулей памяти DDR2 SDRAM.
Документы в текстовом формате MS DOS. Перечисленные текстовые файлы могут быть
использованы как краткая русскоязычная справка по форматам SPD для различных
типов модулей памяти. Детальная информация содержится в [14-18].
Заключение
В статье рассмотрена одна из уязвимостей, которая может быть использована
вредоносными программами для выведения из строя оборудования, в частности
модулей памяти. Материал будет полезен при оценке степени защищенности систем и
выработке методов ее повышения. Для разбирающихся в схемотехнике и умеющих
держать в руках паяльник приведенных сведений будет вполне достаточно для
выполнения ремонта модулей DIMM у которых искажена информация SPD, а также
реализации программатора микросхем Serial Flash ROM на базе обычной материнской
платы.
Прилагаемые программы также будут полезны оверклокерам, для которых
редактирование содержимого SPD открывает новые возможности по "разгону" памяти,
так как набор параметров, которыми можно управлять, изменяя содержимое SPD,
существенно шире, чем набор опций BIOS Setup. Разумеется, действовать нужно
очень осторожно, заранее продумав пути восстановления работоспособности системы,
так как при записи некорректных параметров в SPD, обнуление CMOS уже не поможет.
Еще один вариант применения указанной технологии – хранение в неиспользуемой
области SPD "ключей", обеспечивающих, например, распознавание заданного
компьютера для защиты программ от несанкционированного копирования.
Источники информации
Электронные документы, доступные на сайте
developer.intel.com.
1) Intel 82371AB PCI-TO-ISA / IDE XCELERATOR (PIIX4) Datasheet. Order Number
290562-001.
2) Intel 82801DB I/O Controller Hub 4 (ICH4) Datasheet. Document Number
290744-001.
3) Intel I/O Controller Hub 6 (ICH6) Family Datasheet. Document Number
301473-001.
Электронные документы, доступные на сайте
developer.amd.com.
4) AMD-8111 HyperTransport I/O Hub Data Sheet. Publication # 24674.
Электронные документы, доступные на сайте
datasheetarchive.com.
(Информация на данном сайте более полная, чем на "родных" сайтах
производителей указанных микросхем.)
5) VIA VT82C586B PIPC PCI Integrated Peripheral Controller. Для поиска
документа набирать строку "VT82C586B".
6) VIA VT82C686A South Bridge Datasheet. Revision 1.54. Для поиска документа
набирать строку "VT82C686".
7) VIA VT82C686B South Bridge Datasheet. Revision 1.71. Для поиска документа
набирать строку "VT82C686".
Электронные документы, доступные на сайте
pcisig.com.
Документы [9], [10] на сайте pcisig.com доступны только для членов PCI
Special Interest Group. Воспользовавшись поисковыми системами, можно найти
данные документы для свободной загрузки.
8) PCI BIOS Specification. Revision 2.1.
9) PCI Local Bus Specification. Revision 3.0.
10) PCI-to-PCI Bridge Architecture Specification. Revision 1.1.
Электронные документы, доступные на сайте
smbus.org.
11) System Management Bus (SMBus) Specification. Version 2.0.
12) The I2C-Bus Specification. Version 2.1.
Электронные документы, доступные на сайте
atmel.com.
13) AT24C01A/02/04/08/16 2-Wire Serial CMOS E2PROM Data Sheet.
Электронные документы, доступные на сайте
jedec.org.
14) JEDEC Standard No. 21-C. Page 4.1.2.5-1. Appendix E: Specific PD’s for
Synchronous DRAM (SDRAM).
15) JEDEC Standard No. 21-C. Page 4.1.2.4-1. Appendix D: DDR Synchronous DRAM
(DDR SDRAM). 16) JEDEC Standard No. 21-C Page 4.1.2.10-1. Appendix X: Serial
Presence Detects for DDR2 SDRAM (Revision 1.2).
17) JEDEC Standard No. 21-C. Page 4.1.2.11-1. Appendix K: Serial Presence Detect
(SPD) for DDR3 SDRAM Modules. SPD Revision 1.0.
18) DDR2 FB-DIMM SPD 1.0. Appendix X: Serial Presence Detect (SPD) for Fully
Buffered DIMM (Revision 1.0).
19) JEDEC Standard No. 21-C. Page 4.5.4-1. 168-pin Unbuffered SDRAM DIMM family.
20) JEDEC Standard No. 21-C. Page 4.5.10-1. 184-pin Unbuffered DDR SDRAM DIMM
family.
21) JEDEC Standard No. 21-C. Page 4.5.14-1. 240-pin Unbuffered and Registered
DDR2 SDRAM DIMM family.
22) JEDEC Standard No. 21-C. Page 4.20.19-1. 240-pin
PC3-6400/PC3-8500/PC3-10600/PC3-12800 DDR3 SDRAM Unbuffered DIMM Design
Specification.
Книги
23) В.Л. Григорьев. Микропроцессор i486. Архитектура и программирование.
Москва ТОО "ГРАНАЛ" 1993.
24) В.Г. Артюхов, А.А. Будняк. В.Ю. Лапий. С.М. Молявко, А.И. Петренко.
Проектирование микропроцессорной электронно-вычислительной аппаратуры.
Справочник. Киев "Тэхника" 1988.
25) К. Г. Самофалов, О.В. Викторов. Микропроцессоры. Библиотека инженера. Киев
"Тэхника" 1989.
26) 2B ProGroup: В.А. Вегнер, А.Ю. Крутяков, В.В. Серегин, В.А. Сидоров, А.В.
Спесивцев. Аппаратура персональных компьютеров и ее программирование. IBM
PC/XT/AT и PS/2. Москва "Радио и связь" 1995.
|