Содержание статьи
- Перекрытие адресных диапазонов
- Остановка вентиляторов
- Разрушение дисплея
- Разрушение дисковых устройств
- Манипуляции с программно-управляемыми напряжениями
- Превышение потребляемой мощности
- Заключение
- Источники информации
- Электронные документы, доступные на сайте superflash.com или ssti.com
- Электронные документы, доступные на сайте atmel.com
- Электронные документы, доступные на сайте jedec.org.
- Книги
Перекрытие адресных диапазонов
На материнской плате есть много интерфейсов, использующих классический принцип
"общей шины", например ISA и PCI. Напомним, что все адресуемые устройства на
таких шинах подключены параллельно и каждому назначен свой диапазон адресов. При
выполнении цикла обращения к заданному устройству, на шину выставляется его
адрес. Устройство, опознавшее свой адрес, выдает (если это цикл чтения) или
принимает (если это цикл записи) данные. В каждый момент времени на шине
взаимодействуют два устройства – инициатор шинного цикла и исполнитель,
опознавший свой адрес. Все остальные устройства отключены от шины и удерживают
свои интерфейсные цепи в высокоомном (высокоимпедансном) состоянии. Также
напомним, что стандарт Plug-and-Play, определяет механизмы, позволяющие
автоматически назначать диапазоны адресов каждому устройству на шине. Для этого,
каждое адресуемое устройство имеет конфигурационные регистры, от содержимого
которых зависит, какой диапазон адресов присвоен данному устройству. То есть
адреса программируемые.
И где же среди вышеизложенных банальностей притаилась опасность? Допустим,
некоторый адрес (например, в пространстве портов ввода-вывода) назначен
одновременно нескольким устройствам. Для этого достаточно некорректно
запрограммировать конфигурационные регистры (ошибочно или злонамеренно).
Представим себе выполнение цикла чтения данных по такому адресу. Буферные
элементы нескольких устройств одновременно включатся и выдадут информацию на
одни и те же линии. Допустим, один из буферов выдает на линию логический "0" (то
есть, его выходной транзистор соединяет эту линию со схемной "землей"). Второй
выдает на ту же линию логическую "1" (то есть, его выходной транзистор соединяет
эту линию с плюсовой цепью питания). Два рассмотренных транзистора образуют цепь
короткого замыкания между "питанием" и "землей".
Хотя на практике все не так драматично. При рассмотренном сценарии через
интерфейсные цепи действительно могут проходить токи, существенно превышающие
штатные. Но, во-первых, сопротивление выходных цепей далеко от нуля. Во-вторых,
длительность шинных циклов, а, следовательно, и длительность интервалов времени,
в течение которых будет иметь место бросок тока – менее одной микросекунды (если
конечно это не блоковая передача). По указанным причинам рассмотренный сценарий
имеет мало шансов вызвать необратимые повреждения оборудования. Подробности в
[26-27].
Остановка вентиляторов
Для минимизации шума и энергопотребления, практически все современные
материнские платы поддерживают программное управление скоростью вращения
вентиляторов, вплоть до полной остановки. Такое управление распространяется на
вентилятор процессора и другие вентиляторы, получающие питание от платы и обычно
не распространяется на вентилятор, находящийся в блоке питания, он питается от
+12V "в обход" платы.
Управление осуществляет подсистема аппаратного мониторинга, в большинстве плат
она расположена в составе микросхемы MIO. Примеры в [21], [24]. Сигналы,
формируемые этой подсистемой, управляют силовыми транзисторами, коммутирующими
напряжение +12V на двигатели вентиляторов. Поскольку программная модель данной
подсистемы не стандартизована, действия, которые нужно выполнить для остановки
вентиляторов (в какие регистры что записать) для каждой платы различны. Этим
задача вирусописателей несколько усложняется. Вместе с тем, формализованное
описание платформы, имеющееся в таблицах ACPI, иногда содержит эту информацию.
Подробности в [31].
Заметим, что в современных платформах имеются механизмы защиты от перегрева,
часть из которых не блокируется программно, поэтому быстрого выхода из строя,
скорее всего не произойдет. Будет снижение производительности или аварийное
выключение. Вместе с тем, систематическая работа в тяжелом тепловом режиме в
течение длительного времени, может существенно уменьшить срок службы компонентов
системного блока.
Разрушение дисплея
Как известно, частоты строчной и кадровой разверток зависят от программной
настройки регистров видео адаптера, и существует возможность некорректного
задания указанных частот. В мониторах, использующих электронно-лучевую трубку
(CRT), как и в телевизорах, формирование высокого напряжения для питания анода
трубки, является дополнительной обязанностью выходного каскада строчной
развертки. Если частота развертки существенно отличается от нормы, некоторые
элементы монитора могут подвергаться электрической перегрузке. Вместе с тем,
большинство используемых сегодня мониторов имеют защиту от данной опасности и
если частота кадровых или строчных синхроимпульсов некорректна, блок разверток
выключается.
По той же причине ушел в прошлое сценарий прожога люминофора трубки, основанный
на том, что при отсутствии кадровых синхроимпульсов будет отсутствовать кадровая
развертка, и на экране появится яркая горизонтальная полоса.
Вместе с тем, напомним, что в современных мониторах используется встроенный
процессор. Для хранения его программы (Firmware), обычно используется Flash ROM.
Если данный монитор поддерживает процедуру программного обновления содержимого
Flash ROM (например, через интерфейс DDC или USB), вероятность
несанкционированной модификации существует.
Разрушение дисковых устройств
Здесь есть два класса угроз. Во-первых, искажение программы автономного
процессора (Firmware), с использованием команд, обеспечивающих его "перешивку",
определенных в спецификациях ATA/ATAPI. Во-вторых, разрушение механических узлов
в результате некорректного позиционирования головок.
Контроллеры флоппи-дисководов, а также "древних" жестких дисков с интерфейсом
MFM обычно не выполняют никаких проверок над параметрами команд. Если при
выполнении позиционирования задан номер цилиндра, превышающий физически
существующее количество цилиндров, головки упрутся в ограничитель и механизм
позиционирования будет подвергнут физической перегрузке. К тому же ток,
проходящий через обмотки механизма позиционирования, в этой ситуации будет
повышен. Но для большинства современных жестких дисков такой сценарий
невозможен. Из-за несоответствия логической и физической геометрии диска, а
также с целью оптимизации алгоритмов позиционирования, номер цилиндра,
поступающий по интерфейсу, подвергается ряду проверок, поэтому реакцией на
неверный номер цилиндра будет отмена выполнения операции и код ошибки в
статусном регистре накопителя, а не "долбление" головок в ограничитель.
К нашумевшему когда-то сценарию разрушения накопителя путем ввода механизма
позиционирования в резонанс, автор относится скептически.
Манипуляции с программно-управляемыми напряжениями
Многие современные материнские платы, с целью повышения разгонного потенциала,
допускают программное управление напряжениями питания процессора, чипсета,
памяти и других устройств. На таких платах присутствуют программно-доступные
регистры, записывая информацию в которые, можно изменять управляющие коды,
поступающие на регуляторы напряжения. Разумеется, подать напряжение, превышающее
нормальное в несколько раз, с помощью данного механизма не удастся, обычно
пределы регулировки 10-20 процентов от штатного значения. Массовому появлению
вирусов, использующих это, препятствует и тот факт, что описываемый механизм
реализован по-разному в разных моделях материнских плат, вирусу придется
распознавать плату и использовать библиотеку модулей поддержки под каждую плату.
Теоретически реализуемо, но сложно.
Превышение потребляемой мощности
Разумеется, мощность, потребляемая компьютером, существенно зависит от действий
выполняемой программы. Существуют так называемые, стресс-тесты, это программы,
одновременно создающие большую нагрузку на все компоненты системного блока
(процессор, память, видео контроллер, жесткий диск и т.д.), в результате чего,
потребляемая мощность может возрасти в 2 и более раз по сравнению со
среднестатистическим значением. Иногда это приводит к отказу блока питания.
Иногда отказ блока питания сопровождается дымом.
Но меньше эмоций. Даже если Вы уверены в причинно-следственной связи между
запуском некой программы и отказом блока питания, то такие утверждения как
"программа спалила блок питания" являются ошибочными. На самом деле, скорее
всего, был использован блок питания недостаточной мощности, и при запуске данной
программы мощность достигла значения, недопустимого для данного конкретного
блока питания. Это все равно бы случилось при запуске другого ресурсоемкого
приложения. В то же время, при запуске той же программы, этого не произошло бы,
при использовании более мощного и надежного блока питания. Стресс-тест в данном
случае просто нашел "узкое место", что и является его функцией, а не создал
новую неисправность.
Заключение
Автор надеется, что данный материал поможет вытеснить "голливудские стереотипы"
из такой сложной и интересной области, как информационная безопасность, заменив
их академическим подходом к исследованию и решению возникающих проблем.
Также попытаюсь заранее ответить на вопрос, связанный с тем, что в статье
содержится информация, которая может быть использована для создания вредоносного
кода. Во-первых, конфиденциальной информации здесь нет. Все вышеизложенное
является результатом систематизации содержимого только открытых источников по
цифровой схемотехнике и системному программированию, а также личного опыта
автора. Во-вторых, статья написана не для профессиональных "вредителей" (которые
уже давно знакомы с перечисленными уязвимостями), а для специалистов,
занимающихся эксплуатацией и обслуживанием техники, как известно "предупрежден,
значит вооружен".
А в том, что этот мир такой хрупкий, я не виноват …
Источники информации
Электронные документы, доступные на сайте
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.