| RSS



Меню

Bookmark and Share


Статистика
Ваш IP: 3.21.12.122
Вы используете: v





Сейчас на сайте:

Тех поддержка ->

Облако тэгов
ОС видио Tor Обратная сторона антенна 4.6 PHP Эксплоит Windows Server 2008 qip Virtual chroot kernel proc sysctl tune FreeBSD bridge Boot Disk Bluetooth GEO game directx Emulator Python Shell DDoS червь Conficker вирус троян Лаборатория Касперского пиратство apple iPhone ИТ-отрасль Щеголев Microsoft экономический кризис Twitter социальная сеть анонимность Лицензия Open Source ASP.NET MVC уязвимость MySQL база данных файлообмен закон франция пират Skype мобильный Deutsche Telekom Хакер киберпреступник Trend Micro кибератака Германия робот утечка данных персональные данные ноутбук интернет Китай цензура ядро Linux Торвальдс Windows Vista Acer Linux патент браузер Firefox Internet Explorer Opera Net Applications Safari Intel Linux Foundation Moblin Oracle патч банкомат кардер HSM IBM X-Force Cofee сша кибервойна Эстония Dell ИТ-специалист хакерские атаки Pirate Bay контроль кибербезопасность язык программирования The Pirate Bay Пиратская партия утечка информации приговор Mozilla Chrome безопасность Госдума СМИ Windows 8 Баллмер взлом Пентагон ботнет Украина Facebook Cisco cloud Windows XP нетбук торрент музыка биометрический nokia ФБР IP-адрес CIPAV Comcast sms RSA java Google CAPTCHA Symantec спам конфиденциальная информация инсайдер Perimetrix антивирус тест Anti-Malware Windows 7 операционная система Windows провайдер авторское право RapidShare UNIX свиной грипп шантаж дети EFF BluWiki копирайт экстремизм Panda Security cloud computing McAfee Cybercrime Response Unit Bottle Domains HTTPS ICANN студент шпионское ПО Норвегия школьник New York Times XSS YouTube Warner Music кибершпионаж КНДР Ubuntu свободное ПО AMD ATI касперский Россия РФ сервер хостинг фальшивый антивирус Comodo CA Wi-Fi D-Link суд пароль блог фишинг Одноклассники медведев контрафакт мошенник штраф Sony GPS по Gumblar JAVASCRIPT хакеры вредоносное ПО Yahoo ФАС компьютер Софт MPAA кибероружие PandaLabs Red Hat Минкомсвязи сбой ASUSTeK Computer мошенничество Доктор Веб ВКонтакте Cyber-Arc исходный код PCI DSS МВД фильтр порнография BREIN свобода слова Казахстан GEMA Autodesk сисадмин Gmail кредитная карта кибермошенник LiveJournal шифрование криптография Deep Purple банк нанотехнологии Wikipedia zero-day ColdFusion выборы кража данных DNS BIND Android BASIC атака Black Hat Mac OS X Click Forensics Clampi домен фсб Прокуратура Уголовное дело icq Barrelfish киберпреступность Sophos AT&T ошибка Electa Gamma Knife OpenBSD DARPA военные Сайт Visual Studio 2010 .NET Framework 4 Chrome OS электронная почта турция конференция спамер FTC полиция российская ОС Koobface Великобритания БЕЛОРУССИЯ грузия BSA Bittorrent облачные вычисления Azure Европа Dr.Web Билл Гейтс спецслужбы Cryzip Живой Журнал Royal Bank of Scotland смартфон Canonical Pwn2Own F-Secure Symbian Hotmail фильм

Главная » Статьи » Общие Статьи

Еще одна аппаратная угроза или проникновение в SPD ROM №1

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

В ранее опубликованной статье "Проникновение в BIOS ROM" №1 и №2, были рассмотрены уязвимости, позволяющие вредоносным программам стереть или модифицировать содержимое микросхемы BIOS и таким образом, вывести из строя материнскую плату. Напомним, что такой сценарий возможен потому, что в качестве носителя BIOS используется микросхема электрически перепрограммируемого постоянного запоминающего устройства (Flash ROM), допускающая перезапись непосредственно в системе.

Как известно, микросхемы такого типа используются в современных компьютерах не только в качестве носителей BIOS. Практически все модули оперативной памяти (DIMM), начиная от PC66 SDRAM, содержат микросхему SPD (Serial Presence Detect), в которой хранятся параметры модуля. При старте, BIOS считывает содержимое SPD и таким образом определяет количество модулей DIMM, их расположение по разъемам, размер, архитектуру, быстродействие и другие параметры. В соответствии с прочитанной информацией выполняется инициализация контроллера памяти. Содержимое SPD также считывают диагностические утилиты и именно благодаря этому, они могут определить, память какого производителя установлена в компьютере.

Механизм доступа к SPD поддерживает не только чтение, но и перезапись содержимого микросхем. Именно в этом и состоит уязвимость, описанию которой посвящена данная статья. Материал проиллюстрирован исходными текстами программ, выполняющих чтение и запись SPD.

Технические подробности

В качестве устройства SPD, устанавливаемого на модулях памяти, используется микросхема 24C02 фирмы Atmel, детально описанная в [13], либо аналоги. Ее размер – 256 байт. Назначение каждого байта определяется стандартами, описанными в документах [14-18]. Для каждого типа памяти, от SDRAM до DDR3 используется свой стандарт на содержимое SPD. Отметим, что "классические" документы [14-18] нормируют использование младших 128 байт SPD. Старшие 128 байт (байты с адресами 128-255) резервируются для производителя модуля или компьютера. Один из вариантов их применения – хранение так называемых "оверклокерских профилей", то есть информации, необходимой при "разгоне" подсистемы памяти.

Доступ к микросхемам SPD осуществляется по 2-проводной последовательной шине SMBus (System Management Bus), детально описанной в [11-12]. Контроллер этой шины находится в составе "южного моста" чипсета. Примеры реализаций в [1-7]. Некоторые типы "южных мостов", например VIA VT82C586B, описанный в [5] вместо полноценного контроллера SMBus поддерживают только набор сигнальных линий, состояние которых можно считывать и устанавливать. При этом протокол шины реализуется программно.

Шина SMBus также используется для доступа к регистрам тактового генератора, некоторых видов термодатчиков и других устройств. Некоторые подробности ее функционирования рассмотрены в ранее опубликованной статье "Тактовый генератор и разгон" №1 и №2.

Механизм доступа к SPD

Рассмотрим последовательность действий, которую должна выполнить программа для чтения или записи микросхем SPD, находящихся на модулях памяти. Как было показано выше, доступ к ним осуществляется посредством контроллера System Management Bus. В каждом чипсете этот контроллер реализован по-разному, и, разумеется, в рамках одной статьи невозможно описать все варианты его реализации. Поэтому рассмотрим конкретный пример – чипсет Intel 845PE, использующий "южный мост" Intel ICH4 (82801DB), описанный в [2]. Используя документацию на микросхемы чипсета, например [1-7], заинтересованный читатель сможет самостоятельно разработать процедуры для поддержки других платформ, либо адаптировать приведенную процедуру, для реализаций, несущественно отличающихся от рассмотренной. Отметим, что в рассматриваемом чипсете (как и во многих других чипсетах) набор программно-доступных регистров контроллера SMBus содержит два блока регистров.

Первый блок - конфигурационные регистры, используемые для выделения системных ресурсов контроллеру (диапазон ввода-вывода, номер линии запроса на прерывание) и задания некоторых опций его функционирования. Эти регистры находятся в конфигурационном пространстве, подробности в [9-10]. Использование функций PCIBIOS для доступа к конфигурационному пространству описано в [8].

Второй блок – операционные регистры, непосредственно управляющие операциями чтения и записи на шине SMBus. Эти регистры находятся в пространстве ввода-вывода.

Для чтения SPD необходимо выполнить следующие действия.

1) Программирование конфигурационных регистров LPC Bridge. Локализуем в конфигурационном пространстве блок регистров с координатами Bus=0, Device=1Fh, Function=0. Это устройство LPC Bridge, входящее в состав "южного моста" Intel ICH4. Его идентификаторы: Vendor ID = 8086h, Device ID = 24C0h. В этом блоке, по адресу 00F2h расположен 8-битный регистр Function Disable Register. Бит 3 указанного регистра управляет разрешением доступа к конфигурационным регистрам контроллера SMBus: 0=доступ разрешен, 1=доступ запрещен. Устанавливаем указанный бит в "0", то есть, разрешаем доступ. Это необходимо, так как в некоторых платах, BIOS перед загрузкой ОС оставляет этот бит в состоянии "1" , при этом доступ к контроллеру SMBus по умолчанию запрещен. Подробности в [2].

2) Программирование конфигурационных регистров контроллера SMBus. Локализуем в конфигурационном пространстве блок регистров с координатами Bus=0, Device=1Fh, Function=3. Это устройство SMBus Controller, входящее в состав "южного моста" Intel ICH4. Его идентификаторы: Vendor ID = 8086h, Device ID = 24C3h. Назначаем диапазон портов ввода-вывода для контроллера SMBus, для этого записываем значение базового адреса диапазона в регистр SMB_BASE по адресу 0020h. В регистре Command Register, расположенном по адресу 0004h устанавливаем бит 0 (I/O Space Enable bit) в "1", что обеспечивает разрешение доступа к диапазону портов ввода-вывода контроллера SMBus. Разрешаем функционирование контроллера SMBus, для этого устанавливаем в "1" бит 0 регистра по адресу 0040h (это бит SMBus Host Enable регистра SMBus Host Configuration). Если BIOS, перед загрузкой ОС, оставил контроллер SMBus в разрешенном состоянии (это можно определить по состоянию разрешающих битов, описанных выше), программа не должна повторно выполнять его разрешение, в этом случае пропускаем данные действия. Подробности в [2].

3) Начинаем взаимодействие с контроллером SMBus через его диапазон портов ввода-вывода. Базовый адрес этого диапазона, присвоенный контроллеру на шаге 2, ниже обозначен как SMB_Base. Если контроллер уже был включен на момент запуска программы и шаг 2 был пропущен, то в качестве SMB_Base используем исходное значение базового адреса (установленное процедурой BIOS POST). Обнуляем статусные биты в регистре Host Status (SMB_Base+0) для подготовки контроллера к очередной операции. Биты этого регистра используют дисциплину Read/Write Clear, и обнуляются при записи "1" в них. Подробности в [2].

4) Передаем 8-битный адрес ячейки микросхемы SPD, которую требуется прочитать. Он записывается в регистр Host Command (SMB_Base+3). При выполнении транзакции на шине SMBus, значение этого регистра передается в поле Command. Подробности в [11-12].

5) Передаем 8-битный адрес микросхемы SPD, к которой выполняется обращение. Он записывается в регистр Transmit Slave Address (SMB_Base+4). При выполнении транзакции на шине SMBus, значение этого регистра передается в поле Slave Address. Формат адреса устройства: биты 7-4 при адресации SPD всегда равны 1010b. Биты 3-1 определяют номер микросхемы SPD для одного из восьми модулей DIMM: 000b=DIMM0 … 111b=DIMM7. Бит 0 определяет тип операции: 0=запись, 1=чтение.

Пример: для чтения SPD модуля DIMM2 необходимо установить 10100101b = A5h.

6) Запускаем выполнение транзакции, параметры которой были подготовлены на шагах 4 и 5. Для этого необходимо записать код операции в регистр Host Control (SMB_Base+2). В соответствии с документом [2], для запуска операции передачи байта используется код 01001000b = 48h. Отметим, что направление передачи байта (чтение или запись), определяется битом 0 регистра Transmit Slave Address, установленного на шаге 5.

7) После выполнения шага 6, контроллер SMBus начинает операцию чтения байта из SPD. Программа должна ожидать завершения операции. Опрашиваем состояние бита Host Busy, это бит 0 регистра Host Status (SMB_Base+0). По значению Host Busy=1 определяем момент начала операции, затем ожидаем Host Busy=0, то есть завершения операции. Отсутствие ожидаемого события в течение заданного интервала (около 50 мс) интерпретируется как ошибка – таймаут шины.

8) Считываем из регистра Host Data 0 (SMB_Base+5) байт, прочитанный из SPD. Его значение достоверно только при отсутствии ошибок.

9) Проверяем отсутствие ошибок. Для этого считываем регистр Host Status (SMB_Base+0) и анализируем статусные биты. Согласно документу [2], после успешного завершения транзакции, состояние битов 4-1 должно быть 0001b. Маскируем указанное битовое поле и проверяем его значение.

Процедура записи SPD

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

На шаге 5, при передаче адреса микросхемы SPD, для операции чтения, бит 0 регистра Transmit Slave Address устанавливается в "1". Для операции записи он устанавливается в "0".

Между шагами 5 и 6 необходимо передать значение записываемого байта в регистр Host Data 0 (SMB_Base+5).

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

После выполнения транзакции, микросхема 24C02 выполняет внутреннюю процедуру записи полученного байта в одну из 256 ячеек, адрес которой был передан на шаге 4. В соответствии с принципами функционирования Flash ROM, после завершения записи, информация не разрушается при снятии напряжения питания и для ее изменения нужна повторная запись. Подробности в [13].

(Продолжение следует)

Источники информации

Электронные документы, доступные на сайте 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.

Электронные документы, доступные на сайте semiconductors.philips.com.

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.

Категория: Общие Статьи | Добавил: aka_kludge (06.03.2009)
Просмотров: 2100 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
    Главная      
...
На службе : дней

16:49
Обновить


Пользователи
aka_kludge
qwerty
LeadyTOR
aka_Atlantis
AdHErENt
mAss
Sissutr
hiss
DrBio
tHick

Поиск


Copyright tHR - TeAM 2024 г. admin: aka_kludge (ICQ:334449009) Moderator's: LeadyTOR, ... Яндекс.Метрика