Споры о том, насколько реально физическое разрушение тех или иных узлов компьютера в результате действия вредоносных программ, начались задолго до появления "персоналок", видимо сразу после того как возникли понятия "процессор" и "программа". Вместе с тем и сегодня, когда мир уже многократно переживал атаку вирусов, разрушающих содержимое ROM BIOS, встречаются люди, заявляющие о принципиальной невозможности такого сценария. Существует и противоположная крайность – описание картин дыма и огня, вырывающихся из системного блока, якобы в результате запуска таинственного фрагмента машинного кода размером несколько десятков байт.
Предлагаемый материал – это попытка навести порядок в данном вопросе. Разумеется, поставить "жирную" точку не выйдет, хотя бы потому, что список уязвимостей постоянно расширяется, в связи с появлением принципиально новых устройств и технологий.
Эта статья написана не по мотивам известных вирусов, разрушающих "железо". Вместо этого, на основе более чем 10-летнего опыта разработки аппаратного и системного программного обеспечения, а также ремонта материнских плат и других узлов персонального компьютера, автор анализирует существующие потенциальные угрозы. Каждая из них описана по стандартной схеме:
* суть угрозы;
* симптомы;
* устранение проблемы, что делать, если это уже случилось;
* минимизация угрозы, профилактические меры;
* дополнительная информация для специалистов.
Заметим, что вирусная тема, это только часть рассматриваемого вопроса. Почти все приведенные ниже сценарии, с некоторой вероятностью, могут осуществиться и в результате обычного программного сбоя.
Искажение содержимого BIOS ROM
На одном из этапов эволюции платформы PC, а именно в середине 90-х годов прошлого века, во времена процессоров Intel Pentium и AMD K5, в качестве носителя BIOS начали использовать микросхемы электрически стираемых и перепрограммируемых постоянных запоминающих устройств (Flash ROM). Это позволило изменять ("перешивать") содержимое BIOS без физического вмешательства в компьютер. Мотивацией для обновления BIOS является поддержка новых технологий и устройств, исправление ошибок, допущенных разработчиками BIOS, установка пользовательских заставок и т.п. Напомним, что одной из важнейших функций BIOS является выполнение стартовой процедуры POST (Power-On Self Test) при включении питания или сбросе. Именно в ходе этой процедуры платформа инициализируется и подготавливается к загрузке ОС. Именно к BIOS (по адресу FFFFFFF0h) обращается процессор при чтении первой команды после сброса или включения питания. Таким образом, искажение содержимого BIOS может привести к отсутствию старта материнской платы. Такое искажение может произойти не только из-за действий вредительских программ, стирающих содержимое BIOS ROM или записывающих в него некорректную информацию, но и по другим причинам, например из-за дефекта микросхемы Flash ROM или зависания программы перезаписи в интервале времени, когда старый BIOS уже вытерт, а новый еще не записан.
Большинство микросхем Flash ROM, используемых в качестве физического носителя BIOS, имеют так называемый Boot Block размером 8-16 Кбайт (в зависимости от типа микросхемы). Это область, аппаратно защищена от перезаписи и вероятность ее искажения существенно меньше, чем у основного блока. Иногда используется синоним – Top Block, поскольку данный блок расположен в верхних адресах микросхемы Flash ROM. Основная задача Boot Block – проинициализировать контроллер ОЗУ, выполнить распаковку основного блока в ОЗУ и передать управление на распакованный код для продолжения старта платформы. При распаковке проверяется целостность основного блока. Если он искажен, Boot Block активирует механизмы, позволяющие его восстановить без физического вмешательства в компьютер, например, ищет файл с образом BIOS на сменных носителях и, найдя его, записывает в микросхему Flash ROM. Этот процесс может проходить без вывода информации на экран, контролировать его можно по обращению к CD или FDD приводу и звуковым сигналам на PC Speaker. Многие производители материнских плат помещают файл образа BIOS на CD диск, которым комплектуется плата. Более старый подход – загрузка DOS и запуск утилит перезаписи BIOS с гибкого диска. Важно понимать, что функциональные возможности Boot Block существенно меньше, чем у BIOS. По этой причине, например, Boot Block часто не умеет инициализировать видео адаптеры, подключенные к шинам AGP и PCI Express. Шансы увидеть на экране какие-либо сообщения от Boot блока, пытающегося восстановить BIOS, возрастут, если установить видео адаптер, использующий "старую" шину PCI. Как было сказано выше, при распаковке основного блока и проверке его целостности используется ОЗУ, поэтому, при некоторых неисправностях ОЗУ или кэш-памяти процессора, могут быть такие же симптомы, как при искажении BIOS, несмотря на то, что BIOS не искажен.
Выше рассмотрена ситуация, при которой основной блок BIOS искажен, а Boot Block исправен и пытается выполнить восстановление основного блока. Если данная операция завершится успешно, BIOS будет восстановлен без физического вмешательства в систему. Разумеется, если для такого аварийного запуска использовался "старый" BIOS с CD диска, желательно после восстановления нормального функционирования компьютера, "прошить" свежий BIOS с сайта производителя платы.
Если защита Boot Block оказалась неэффективной, и он вытерт или искажен, восстановить работоспособность материнской платы можно только путем физического извлечения микросхемы BIOS и "перепрошивки" ее в программаторе или другой плате того же класса, методом "hot-swap". Если микросхема BIOS не установлена в "панельку", а запаяна, потребуется паяльная станция. Такая операция обычно выполняется в условиях сервисного центра.
Что, кроме банального соблюдения антивирусной дисциплины, можно сделать для профилактики подобных неприятностей?
Рекомендуется обратить внимание на перемычки (jumpers) управления доступом к Flash ROM, установленные на некоторых платах. Такая защита более эффективна по сравнению с программной защитой, управляемой из BIOS Setup. Если есть перемычка для запрета записи в Boot Block, рекомендуется запретить запись. Как было сказано выше, если BIOS искажен, но Boot Block сохранился, восстановление BIOS под силу даже рядовому пользователю. Так как данная перемычка может по-разному называться на платах различных производителей, следует обратиться к документации на плату. Пример названия - TBL (Top BIOS Lock).
Наличие перемычки, полностью запрещающей запись в BIOS Flash ROM (а не только в Boot Block), позволяет еще более повысить уровень безопасности, однако может препятствовать законным операциям BIOS по перезаписи блоков ESCD (Extended System Configuration Data) и DMI (Desktop Management Interface) при изменении конфигурации системы. Иногда помогает компромиссный вариант – после изменений в конфигурации системы (например, перестановки модулей памяти), разрешить запись на время одной перезагрузки, чтобы BIOS обновил блоки параметров. Разумеется, не следует путать информацию Flash ROM и CMOS. Память CMOS, хранящая установки BIOS Setup находится в составе "южного моста" чипсета и запрет записи Flash ROM на нее никак не влияет.
При выборе материнской платы, обратите внимание на модели, имеющие описанные механизмы защиты, если вопрос вирусоустойчивости BIOS для Вас актуален. Если на Вашей плате нет описанных перемычек, но вы разбираетесь в цифровой схемотехнике и умеете держать в руках паяльник, защиту Flash ROM можно реализовать самостоятельно. Как это сделать – тема отдельной статьи, такой материал будет подготовлен при наличии читательского интереса к данной тематике. Тем, кому "не терпится" рекомендую начать с изучения документации на Flash ROM, которая обычно доступна на сайте производителя микросхемы.
Примеры микросхем с раздельными сигналами адреса, данных и управления приведены в [1-2], [14], [22], с интерфейсом LPC (Low Pin Count) в [3], [15-16], [19-20], с интерфейсом SPI (Serial Peripheral Interface) в [17-18].
Искажение содержимого Video ROM
Если на видео адаптере, в качестве носителя BIOS, используется микросхема Flash ROM с программной перезаписью, то, как и в случае с системным BIOS, существует возможность злонамеренной модификации ее содержимого. Вирус может повторить те же действия, которые выполняет законная программа перезаписи Video BIOS, но вместо BIOS, записать например блок нулей. Насколько это реализуемо практически? Сначала требуется настроить конфигурационные регистры графического процессора для размещения Flash ROM в адресном пространстве. Это делается в соответствии со спецификацией PCI PnP. Заметим, что для непосредственного доступа к Flash ROM видео адаптера используется динамически назначаемая область адресов выше 1MB, а не сегмент 0C000h, в котором находится Shadow RAM (копия Video BIOS в оперативной памяти). Далее, требуется выключить защиту записи. Операции, необходимые для этого (в какие регистры что записать), специфичны для каждого графического процессора, а иногда и зависят от реализации видео адаптера (если защита записи реализуется средствами, внешними по отношению к микросхеме графического процессора). Здесь вирусописателю потребуется информация, которая обычно не публикуется разработчиками графических процессоров и видео адаптеров. К тому же, вирус должен быть снабжен модулями поддержки под каждый графический чип, а иногда и конкретные модели видео адаптеров. Затем требуется распознать тип Flash ROM (используя команду Read ID) и активировать процедуру записи, которая также должна быть своя для каждого Flash ROM. Как видим, процедура реализуема, а потому, угроза реальна.
Если это уже случилось, симптомы зависят от характера искажения. Обычно, если Video BIOS просто вытерт, либо вместо него записан блок данных, не имеющий сигнатуры Additional BIOS (два первых байта не 055h, 0AAh), либо некорректна контрольная сумма, признаки будут такие же, как при отсутствии видео адаптера – нет вывода на экран и специфический звуковой сигнал. Напомним, что реакция материнской платы на отсутствие видео адаптера зависит от того, как написан BIOS материнской платы и установки опций Setup. Иногда звуковой сигнал не подается. Будет ли выполнен останов процедуры POST из-за отсутствия видео адаптера или BIOS приступит к загрузке ОС, несмотря на данную неисправность (это будет заметно по обращению к жесткому диску), также зависит от модели материнской платы. Если вы хотите заранее знать, какова будет реакция заданной материнской платы на данную неисправность видео адаптера, включите ее без видео адаптера.
Как в домашних условиях отремонтировать видео адаптер, если его BIOS искажен? Во-первых, нужно найти программу для "перешивки" Video BIOS, например ATIFLASH или NVFLASH, в зависимости от производителя графического процессора – ATI или NVIDIA. Версия программы должна быть адекватна поколению адаптера. Старые программы не поддерживают новые адаптеры и наоборот. Эта задача решается с помощью стандартных методов поиска информации в Интернете. Во-вторых, нужен двоичный образ BIOS, то есть файл, который собственно будет записан в Flash ROM. С этим сложнее. Обычно для видео адаптеров, в отличие от материнских плат, файлы BIOS не выкладываются на сайте поддержки. Хотя исключения все же бывают. Если поиск нужного Video BIOS в Интернете не дал результатов, попробуйте найти такой же адаптер (не просто похожий с таким же графическим процессором, а именно адаптер той же модели) и прочитать его Video BIOS в файл. Сделать это можно не разбирая компьютер, с помощью тех же утилит ATIFLASH или NVFLASH. Напомним, что эти утилиты вычитывают образ Flash ROM, а не содержимое Shadow сегмента 0C000h, где находится распакованное в ОЗУ содержимое ROM.
Итак, у нас есть двоичный образ видео BIOS и программа для его прошивки. Если бы речь шла об обновлении BIOS на исправном видео адаптере, то дальнейшие действия очевидны, но напомним, что наш адаптер не стартует. Если мы ремонтируем адаптер с интерфейсом AGP или PCI Express, нам потребуется второй адаптер с интерфейсом PCI. Запускаемся на этом адаптере, опцию в BIOS Setup, отвечающую за последовательность опроса адаптеров на разных шинах, устанавливаем в состояние "PCI". После этого, добавляем ремонтируемый адаптер (разумеется, при выключенном питании). Теперь в нашей системе два адаптера: нестартующий, который надо "перешить" и работающий (активный), который используется для вывода на дисплей. Далее процесс "перешивки" не отличается от обновления BIOS на исправном адаптере. Перед прошивкой рекомендуется сохранить в файле старый образ BIOS. Это позволит просмотреть его, определить характер искажения, и искажен ли он вообще, а также при необходимости вернуть исходное содержимое Flash ROM. Подробности в [6-13].
Искажение содержимого DIMM SPD ROM
Детектирование объема, типа и параметров модулей оперативной памяти (DIMM) основано на использовании протокола SPD (Serial Presence Detect). На каждом модуле устанавливается микросхема Flash ROM с последовательным доступом, объемом 256 байт. Используется микросхема 24C02 фирмы Atmel, описанная в [23] или ее функциональные аналоги. BIOS на одном из этапов выполнения процедуры POST, считывает информацию из микросхем SPD и использует ее при инициализации контроллера памяти. Для доступа к SPD используется шина SMB (System Management Bus), функционирующая на базе протокола I2C, предложенного фирмой Philips. Шина SMB описана в [28]. Контроллер шины SMB обычно находится в составе "южного моста" чипсета. Примеры в [4-5]. Шина SMB также используется для доступа к регистрам тактового генератора и некоторых модификаций схем аппаратного мониторинга.
В чем, собственно, угроза? Микросхема SPD, как и любой Flash ROM, поддерживает не только считывание, но и запись. Контроллер SMB позволяет выполнить эту операцию. Таким образом, существует возможность программного искажения содержимого SPD. Отметим, что работа вирусописателя здесь осложнена тем, что на программную модель контроллера SMB не существует общего стандарта и в различных чипсетах он реализован по-разному. Существует и аппаратная защита – у микросхемы 24C02 есть вход WP (Write Protect), это 7-ой контакт 8-контактного корпуса микросхемы. Подача уровня логической "1" на этот вход запрещает запись. Если разработчики DIMM подключили WP=1, а также, если вместо 24C02 применена микросхема, не поддерживающая перезапись, возможность программного изменения содержимого SPD отсутствует.
Если SPD искажено, симптомы зависят от характера искажения и от типа материнской платы. Отметим, что во времена PC66/PC100/PC133 SDRAM протокол SPD уже применялся, но большинство плат могли работать при неисправном SPD, детектируя память по-старому, путем записей и контрольных считываний по специальному алгоритму. Платы, использующие DDR/DDR2/DDR3 обычно, не стартуют при некорректном содержимом SPD, процедура POST останавливается на детектировании памяти.
Как восстановить модуль с искаженным SPD? Во-первых, нужна информация, которую будем записывать в Flash ROM, а если конкретнее – 256-байтный двоичный файл образа SPD. Как правило, производители DIMM не предоставляют подобные файлы на своих сайтах. Составить содержимое SPD самостоятельно – достаточно интересная и познавательная задача, но это потребует больших затрат времени. Простейший путь – скопировать образ SPD из аналогичного модуля DIMM, если таковой имеется. Заметим, что DIMM должен быть строго точно такой же, того же производителя и модели. Если таковой недоступен, экспериментировать с похожими модулями есть смысл если совпадает объем, количество микросхем, частотная спецификация, и, разумеется, тип памяти (SDR/DDR/DDR2/DDR3). Можно взять за основу образ SPD от похожего модуля и редактировать параметры вручную, не забывая корректировать контрольную сумму. Для чтения и записи микросхем 24C02 можно использовать соответствующий программатор или программу, выполняющую эту операцию непосредственно на материнской плате. Написание такой программы, а также детальное рассмотрение содержимого SPD – темы для двух отдельных больших статей, автор планирует рассмотреть эту тему в будущем. Некоторые подробности приведены в [29-30].
(Продолжение следует)
Источники информации
Электронные документы, доступные на сайте developer.intel.com
1) Intel 28F002BC 2-MBIT (256K x 8) Boot Block Flash Memory. Order Number: 290578-004.
2) AB-60 Application Brief. 2/4/8-Mbit Smart Voltage Boot Block Flash Memory Family Overview. Order Number: 292154-004.
3) Intel 82802AB / 82802AC Firmware Hub (FWH) Datasheet. Order Number: 290658-002.
4) Intel 82371AB PCI-TO-ISA / IDE XCELERATOR (PIIX4) Datasheet. Order Number 290562-001.
5) Intel I/O Controller Hub 6 (ICH6) Family Datasheet. Document Number 301473-001.
6) Intel 740 Graphics Accelerator Datasheet. Order Number: 290618-002.
Электронные документы, доступные на сайте
http://developer.amd.com (информация по графическим процессорам ATI)
7) M56 Register Reference Guide. P/N RRG-216M56-03oOEM.
8) M76 Register Reference Guide. P/N 42590_m76_rrg_1.01o.
9) RV630 Register Reference Guide. 42589_rv630_rrg_1.01o.
10) AMD RS690 ASIC Family Register Reference Guide.
11) Radeon R3xx 3D Register Reference Guide (без номера).
12) Radeon R5xx Acceleration (без номера).
13) R600-Family Instruction Set Architecture (без номера).
Электронные документы, доступные на сайте superflash.com или ssti.com
14) 2 Megabit (256K x 8) Multi-Purpose Flash SST39SF020 Data Sheet.
15) 2 Mbit / 4 Mbit Firmware Hub SST49LF002A / SST49LF004A Data Sheet.
16) 2 Mbit LPC Flash SST49LF020 Data Sheet.
17) 1 Mbit SPI Serial Flash SST25VF010 Data Sheet.
18) 2 Mbit / 4 Mbit SPI Serial Flash SST25VF020 / SST25VF040 Data Sheet.
Электронные документы, доступные на сайте winbond.com.tw
19) W49V002FA 256K x 8 CMOS Flash Memory with FWH Interface Data Sheet.
20) W49V002A 256K x 8 CMOS Flash Memory with LPC Interface Data Sheet.
21) Winbond LPC I/O W83627THF.
Электронные документы, доступные на сайте macronix.com
22) MX28F1000P 1M-BIT [128K x 8] CMOS Flash Memory Data Sheet.
Электронные документы, доступные на сайте atmel.com
23) AT24C01A/02/04/08/16 2-Wire Serial CMOS E2PROM Data Sheet.
Электронные документы, доступные на сайте ite.com.tw
24) IT8712F Environment Control – Low Pin Count Input/Output (EC-LPC I/O).
Электронные документы, доступные на сайте pcisig.com
Документы [26], [27] на сайте pcisig.com доступны только для членов PCI Special Interest Group. Воспользовавшись поисковыми системами, можно найти данные документы для свободной загрузки.
25) PCI BIOS Specification. Revision 2.1.
26) PCI Local Bus Specification. Revision 3.0.
27) PCI-to-PCI Bridge Architecture Specification. Revision 1.1.
Электронные документы, доступные на сайте smbus.org
28) System Management Bus (SMBus) Specification. Version 2.0.
Электронные документы, доступные на сайте jedec.org.
29) 4.1.2.4 – Appendix D: DDR Synchronous DRAM (DDR SDRAM). JEDEC Standard No.21-C Page 4.1.2.4 – 1.
30) Appendix X: Serial Presence Detects for DDR2 SDRAM (Revision 1.2). JEDEC Standard No.21-C Page 4.1.2.10-1.
Электронные документы, доступные на сайте acpi.info
31) Advanced Configuration and Power Interface Specification. Hewlett-Packard Corporation, Intel Corporation, Microsoft Corporation, Phoenix Technologies Ltd., Toshiba Corporation. Revision 3.0.
Книги
32) В.Л. Григорьев. Микропроцессор i486. Архитектура и программирование. Москва ТОО “ГРАНАЛ” 1993.
33) Ю.М. Казаринов, В.Н. Номоконов, Г.С. Подклетнов, Ф.В. Филиппов. Микропроцессорный комплект К1810. Структура, программирование, применение. Справочная книга. Москва “Высшая школа” 1990.
34) М. Гук. Аппаратные средства IBM PC. Энциклопедия. Санкт-Петербург, издательство “Питер” 2006.