Анализ возможностей создания каналов несанкционированного доступа к информации с использованием уязвимостей чипсета
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
Введение
Споры о том, насколько реально физическое разрушение тех или иных узлов компьютера и возможностей создания каналов несанкционированного доступа к информации с использованием уязвимостей чипсета в результате действия вредоносных программ, начались задолго до появления "Персональных компьютеров", видимо сразу, после того как возникли понятия "процессор" и "программа". Вместе с тем и сегодня, когда мир уже многократно переживал атаку вирусов, разрушающих содержимое ROM BIOS, встречаются люди, заявляющие о принципиальной невозможности такого сценария. Существует и противоположная крайность - описание картин дыма и огня, вырывающихся из системного блока, якобы в результате запуска таинственного фрагмента машинного кода размером несколько десятков байт.
Проникновение в BIOS ROM
Как известно, авторы вирусов начали использовать эту уязвимость еще около 10 лет назад, практически сразу после того, как в качестве носителя BIOS стали применяться микросхемы электрически перепрограммируемых ПЗУ (Flash ROM). В сложившейся ситуации, минимизация угрозы стала заботой не только авторов антивирусных программ, но и разработчиков аппаратного обеспечения, в частности, материнских плат. Отметим, что полностью исключить опасность несанкционированной модификации BIOS невозможно, так как для этого пришлось бы отказаться от "законной" возможности его обновления.
В качестве примера рассмотрим платформу на чипсете Intel 815, , использующую микросхему BIOS SST 49LF004A. Перечислим все действия программы, выполняемые при стирании сектора и записи данных в микросхему Flash ROM для такой платформы. Протокол доступа к микросхеме Flash ROM, описанный ниже, используется как программами обновления BIOS, так и вредоносными программами, цель которых - искажение или стирание содержимого микросхемы BIOS.
) Микросхема BIOS подключена к "южному мосту" чипсета посредством интерфейса LPC (Low Pin Count). Для доступа к содержимому BIOS на предмет чтения и записи, а также передачи управляющих команд и контроля текущего состояния микросхемы Flash ROM, используется 16-мегабайтный диапазон FF000000h-FFFFFFFFh в адресном пространстве памяти. Чтобы программные обращения к указанному диапазону транслировались в физические циклы чтения и записи на интерфейсе LPC, конфигурационные регистры "южного моста" чипсета должны быть установлены следующим образом.
В 16-битном регистре BIOS_CNTL (его координаты в конфигурационном пространстве Bus=0, Device=1Fh, Function=0, Register=4Eh-4Fh) бит 0 нужно установить в "1". Это снимает блокировку циклов записи и разрешает их трансляцию на интерфейс LPC.
В 8-битном регистре FWH Decode Enable 1 (его координаты в конфигурационном пространстве Bus=0, Device=1Fh, Function=0, Register=E3h) биты 7-0 нужно установить в "1". Это обеспечивает трансляцию циклов чтения и записи на интерфейс LPC для всех адресных диапазонов, используемых при взаимодействии с микросхемой BIOS.
) Микросхема SST 49LF004A, используемая в качестве носителя BIOS, имеет объем 512 Кбайт и разделена на 8 блоков по 64 Кбайт. Каждый блок имеет свой регистр защиты записи (Block Locking Register). Например, для блока 0, расположенного по адресам FFF80000h-FFF8FFFFh, адрес регистра Block Locking Register равен FFB80002h. Для разрешения стирания и записи блока, бит 0 этого регистра должен быть установлен в "0". Манипуляции с регистрами микросхемы Flash ROM, расположенными в пространстве памяти, выполняются с помощью стандартных инструкций архитектуры x86, обеспечивающих чтение и запись ячеек памяти, например MOV.
) Для запуска операции стирания блока или сектора требуется выполнить последовательность из шести циклов записи заданных байтов по заданным адресам. Использование многоцикловых последовательностей для запуска операций стирания и записи, снижает вероятность случайного искажения содержимого Flash в результате программного сбоя.
) Для запуска операции записи байта требуется выполнить последовательность из четырех циклов записи заданных байтов по заданным адресам. Отметим, что перед выполнением записи, для сектора, в который выполняется запись, необходимо выполнить стирание.
Об аппаратной защите BIOS и ее эффективности
Как было показано выше, для перезаписи содержимого Flash ROM, программа должна выполнить три действия: перенастроить чипсет для обеспечения доступа к микросхеме BIOS, перенастроить регистры блокировки записи, входящие в состав самой микросхемы BIOS и, наконец, передать приказ записи или стирания. На каждом из этих трех этапов действуют механизмы защиты BIOS от несанкционированной модификации. Рассмотрим подробнее эти механизмы, а также причины, по которым они в ряде случаев оказываются неэффективными. Приведенная информация поможет выработать методику, позволяющую исследовать заданную материнскую плату на предмет наличия рассматриваемой уязвимости.
) Регистр BIOS_CNTL, рассмотренный выше входит в состав "южного моста" чипсета, его бит 0 управляет блокировкой циклов записи, адресованных микросхеме BIOS. Бит 1 того же регистра (это бит BLE, BIOS Lock Enable) позволяет установить режим, при котором попытка снять защиту записи будет перехватываться BIOS, а точнее, при попытке установить бит 0 в "1" будет генерироваться прерывание SMI (System Management Interrupt) с передачей управления специальной процедуре, входящей в состав BIOS. Причем, если BIOS при старте установит такой режим перехвата, программно выключить его чипсет не позволяет, этот режим будет выключен только после аппаратного сброса (по сигналу RESET).
К сожалению, разработчики BIOS обычно