На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Вирус CIH

Вирус CIH является самым "знаменитым" вирусом, который предназначен для перезаписи памяти EEPROM на аппаратных устройствах. Вирус СШ позволяет проводить атаки только на материнские платы, совместимые с чипсетом 430ТХ. Здесь мы представим несколько фрагментов кода вируса СШ, которые позволяют записывать данные в память BIOS. Обратите внимание, что операции выполняются в отношении регистра конфигурационных данных для чипсета 430ТХ. В зависимости от значений, записанных через этот порт в виртуальную память, отображаются различные области памяти EEPROM. Вирус "проходит" несколько областей памяти и пытается уничтожить всю хранящуюся там информацию.

Память EEPROM и синхронизация
Синхронизация, или согласование по времени, имеет огромное значение для операций с памятью EEPROM. Расскажем одну веселую историю. Хакер написал программу атаки для затирания памяти EEPROM в маршрутизаторе Cisco. Однако в оригинальный код программы атаки он не добавил таймер. В результате его код оказался слишком быстрым и он перезаписывал только каждый пятый байт! Решение проблемы заключалось в замедлении операций записи с помощью добавления задержки в несколько сотен миллисекунд между каждой операцией. Каждая микросхема немного отличается, и приходится определять значение задержки, необходимой для операций чтения и записи, конкретно для каждой микросхемы.
В этом фрагменте кода выполняется операция чтения для памяти EEPROM сетевого адаптера Ethernet 3-Com 3C5x94. Обратите внимание на вызов для создания задержки в 162 мс.
/* Чтение памяти EEPROM. */ for (i =0; i < 16; а++) {
outw(EEPROM_READ + i, ioaddr + 10);
/* Останавливаемся на 162 мс перед операцией чтения. */ usleep(162);
4 Этот код выл взят из драйвера Linux, обнаруженного в файле Зс509. с. В операционных системах с открытым исходным кодом доступно множество информации о различных драйверах. — Прим. авт.

Наборы средств для взлома 367
eepromcontents(i] ■ inw(ioaddr + 12);
printf("EEPROM index %d: %4.4x.\n", I,
eeprom_contents[i]);
Память EEPROM на сетевых адаптерах Ethernet
Вредоносный код можно внедрить в память EEPROM на сетевом адаптере Ethernet. Это оптимальная платформа для атаки, поскольку в данном случае пакеты можно анализировать и создавать при непосредственном доступе к сети. На стандартном контроллере Ethernet есть микросхема ASIC, которая обрабатывает практически все данные пакета. Внутри микросхемы ASIC есть процессор, который мы называем микромашиной (micromachine) или мини-процессором. В этом мини-процессоре используется набор команд подобно тому, как это делается в обычном процессоре. При доставке пакета по интерфейсу вызываются специальные подпрограммы. Эти подпрограммы написаны на машинном коде минипроцессора. Безусловно, машинные коды таких минипроцессоров являются секретом каждого по­ставщика. Для получения доступа к этой информации может потребоваться подписать с поставщиком соглашение о неразглашении секретной информации, поэтому мы не можем напечатать в этой книге конкретные машинные коды. Однако мы можем рассказать о теоретических возможностях проведения атак.
На контроллере сетевого адаптера Ethernet может быть установлена флэш-память и (или) память EEPROM, которые поддаются перепрограммированию с помощью драйвера устройства. Например, в сетевом адаптере Ethernet Intel InBusiness 10/100 используется память EEPROM, в которую можно записать данные с помощью программных средств. Этот адаптер работает на базе микросхемы контроллера Ethernet 82559. В этой микросхеме ASIC содержится мини-процессор и несколько буферов для хранения пакетов. К чипу 82559 подключена небольшая последовательная память EEPROM, конкретно ATMEL 93C46. Эта память способна хранить 64 16-битовых слова, т.е. ее размер составляет 128 Кбайт.
Воспользовавшись этой информацией, мы можем скрыть программный код в памяти EEPROM на сетевом адаптере Ethernet или даже полностью перезаписать эту память. Поскольку последовательная память EEPROM не подключена непосредственно к адресной шине компьютера, мы не сможем обращаться к ней непосредственно. Однако чип 82559 предоставляет память EEPROM для проведения операций чтения/записи с помощью управляющего регистра 82559. Адресное пространство для чипа 82559 управляется посредством чипсета PCI на материнской плате. Как только мы узнаем базовый адрес нашего чипа, то получим возможность доступа к различным регистрам. Адрес конкретного регистра вычисляется как смещение относительно базового адреса.
Регистры чипа82559Смещение STATUS О COMMAND 2
POINTER 4 указатель общего назначения
PORT 8 различные команды

FLASH EEFFCM
CTRMDI
12 14
16
20 доступ к флэш-памяти
доступ к последовательной памяти EEPROM
управление интерфейсом MDI
технология опережающего прерывания (Early receive byte count)
В следующей таблице перечислены управляющие байты для чипа 82559.
Команда
Значение

NOP
0

SETUP
0x1000

CONFIG
0x2000

MULTLIST
0x3000

TRANSMIT
0x4000

TDR
0x5000

DUMP
0x6000

DAG
0x7000

SUSPEND
0x40000000

INTERRUPT
0x20000000

FLEXMODE
0x80000

список шире
Диагностика
Смещение для порта памяти EEPROM составляет 14 байт от базового адреса для чипа 82559 в памяти. Можно непосредственно отправлять команды на порт EEPROM и объединять эти команды с помощью команды or.
Команда
SHIFT_CLK CS
WRITE
READ ENABLE
Значение
0x01 0x02 0x04 0x08 0x4802 shift clock EEPROM chip select
Для отправки команд последовательной памяти EEPROM программное обеспечение должно выполнять операции приведенные ниже. В нашей лаборатории на тестовой системе память чипа 82559 отображалась по адресу 0x3000. Таким образом, при выполнении операций этот адрес использовался в качестве базового. Для регистра доступа к памяти EEPROM смещение составляет 14 байт от этого адреса, т.е. он находится по адресу ОхЗООЕ Обратите внимание, что команды для управления памятью EEROM объединены с помощью оператора or.
OUT( ENABLE | SHIFT_CLK, ОхЗООЕ );
// составление 2-байтовой команды
OUT ( command, ОхЗООЕ );
// задержка для памяти EEPROM
OUT( SHIFT_CLK, ОхЗООЕ );
// задержка для памяти EEPROM

response_code = Ш(ОхЗООЕ) ; OUT( ENABLE, ОхЗООЕ );
OUT( ENABLE | SHIFT_CLK, ОхЗООЕ ); // завершение доступа к EEPROM
Чтобы определить, как работают конкретные аппаратные устройства, можно воспользоваться восстановленным исходным кодом драйверов или драйверами с открытым исходным кодом. Для операционной системы Linux создано бесчисленное количество драйверов, что является прекрасным пособием по изучению управляющих кодов и смещений для конкретных устройств. Например, рассмотрим краткий фрагмент кода драйвера ЗС5095 для операционной системы Linux, в котором продемонстрированы операции записи в память EEPROM, установленную на сетевом адаптере Ethernet 3C509.
static void write_eeprom(short ioaddr, int index, int value)
{
outw(value, ioaddr + 12); outw(EEPROM_EWENB, ioaddr + 10); usleep(6 0);
outw(EEPROM_ERASE + index, ioaddr + 10); usleep (60);
outw(EEPROM_EWENB, ioaddr + 10); usleep(60) ;
outw(value, ioaddr + 12);
outw(EEPROM_WRITE + index, ioaddr f 10);
usleep (10000);
}
При исследовании исходного кода драйвера легко заметить, что во многих значениях используются смещения битов и маски. Причина заключается в том, что для портов ввода-вывода обычно используются поля очень небольшого размера в битах. Чтобы определить точную команду, следует обратиться к спецификации конкретной микросхемы памяти EEPROM.
Большинство чипов памяти EEPROM не используются в полном объеме адаптером. В таких "тайниках" неиспользованного пространства можно спрятать данные. В некоторых случаях флэш-память или память EEPROM может содержать машинные коды, которые используются нашим мини-процессором устройства. В этом случае можно изменить машинные коды для создания копий определенных пакетов и их ретрансляции в сеть. Это довольно коварная хитрость, поскольку после перезаписи машинных кодов они уже не изменяются. Другими словами, после переустановки операционной системы "потайной ход" остается открытым. И даже при установке сетевого адаптера Ethernet в другой компьютер, в ее памяти будет оставаться "троянский" код.
Последовательная или параллельная память EEPROM
Последовательная память EEPROM не слишком удобна из-за последовательного характера операций чтения-записи. Для этой памяти используется специальная шина I2C (Inter-IC bus). Последовательная память EJEPROM работает медленнее аналогичной параллельной памяти. Обычно для операций используются два контакта, но в некоторых микросхемах для этой цели используются четыре провода.
5Иснова этот код был нами позаимствован из драйвера Linux из файла Зс509. с. — Прим.авт.

С другой стороны, доступ к параллельной памяти EEPROM может осуществляться как к статической RAM-памяти и эту память можно подключить к адресной шине. В некоторых случаях доступ к микросхемам EEPROM для записи/чтения возможен только посредством чипа PCI контроллера ввода-вывода.
Как сгорают аппаратные средства
Микросхемы последовательной памяти EEPROM можно назвать ахиллесовой пятой аппаратных средств, т.к. из-за них устройства, в которых они установлены, могут быть уничтожены с помощью вирусов. В прошлом хакеры уничтожали аппаратные средства с помощью вирусов, устанавливая высокие тактовые частоты на видеокартах или путем парковки головок жесткого диска и последующей команды по­иска. Теперь многие их этих хитростей не срабатывают. Однако можно написать вирус, который записывает данные в память EEPROM с использованием разрушающего цикла. Дело в том, что многие микросхемы рассчитаны только на определенное количество операций записи (например 1 миллион) на один байт. Это означает, что менее чем за час можно полностью уничтожить микросхему.
Последовательная память EEPROM используется все чаще в современных устройствах, поэтому шансы на физическое уничтожение устройства с помощью программного обеспечения продолжают увеличиваться. Довольно сложно провести отладку скомпрометированной памяти EEPROM, в которой присутствуют ошибки, ведь поскольку микросхема EEPROM закреплена на поверхности материнской платы, то даже при обнаружении ошибки замена микросхемы является сложной и дорогостоящей.
Производители
Ниже приведен сокращенный список производителей микросхем памяти EEPROM. Для получения более подробной информации наши читатели могут обратиться непосредственно к спецификациям устройств от производителей. Для храбрецов, которые способны открыть корпус устройства, мы даже указали номера микросхем. Некоторые хакеры даже исследуют каждую микросхему с помощью маленького фонарика в поисках идентификационный меток.
Amtel АТ2 8ХХХ
Fairchild semiconductor
National Semiconductor 93CXXX
Microchip 2 4CXXX
Крупными устройствами являются 24C32, 24C64, 24C128, 24C256, 24C5412, 24C04, 24C08, 24C16.
Для них требуются поля с двухбайтовыми полями адреса. 93СХХХ
SIEMENS
SDEXXX
SDAXXX

Другие
24СХХХ
24ХХ
АТ17ХХХ
АТ90ХХХ

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика