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

 

 

Прерывания

Прерывания являются одним из важнейших элементов любой вьгаислительной системы. Все внешние аппаратные средства используют прерывания для взаимодействия с центральным процессором и осуществления операций ввода-вывода. Вредоносная программа может перехватывать или изменять эти команды ввода-вывода данных. Это может пригодиться для маскировки в системе, создания скрытых каналов связи или для подслушивания разговоров.
Архитектура запросов на прерывание
На стандартной материнской плате Intel или подобной материнской плате запросом на прерывание для клавиатуры является запрос IRC 1 (всего есть 16 различных запросов на прерывание). Аббревиатура IRQ расшифровывается как Interrupt ReQuest — запрос на прерывание. В прежних системах пользователь вручную мог назначать прерывания для различных устройств. В ситемах с поддержкой технологии Plug and Play также можно изменить некоторые установленные по умолчанию прерывания. В следующей таблице представлена характеристика прерываний (таблица доступна по адресу http: //webopedia . com).
IRQ 0 Системный таймер.
Это прерывание зарезервировано для внутреннего системного таймера. Это прерывание недоступно для периферийныхустройств
IRQ 1 Клавиатура.
Это прерывание зарезервировано для контроллера клавиатуры. Даже в компьютерах без клавиатуры это прерывание предназначено исключительно для входных данных с клавиатуры
IRQ 2 Прерывание для каскадного подключения второго контроллера для прерываний IRQ 8-15
IRQ 3 Порт 2 последовательной передачи данных (СОМ 2)
Прерывание для второго последовательного порта, а иногда прерывание по умолчанию для четвертого последовательного порта (СОМ 4)
IRQ 4 Порт 1 последовательной передачи данных (СОМ 1).
Это прерывание обычно используется для первого последовательного порта. На устройствах, в которых отсутствует мышь PS/2, это прерывание практически всегда используется для последовательного подключения мыши. Кроме того, это прерывание по умолчанию для третьего последовательного порта (СОМ 3)
IRQ 5 Звуковая карта.
Это прерывание используется в качестве прерывания по умолчанию, назначаемого для звуковой карты
IRQ 6 Контроллер гибких дисков.
Это прерывание зарезервировано для контроллера гибких дисков
IRQ 7 Первый параллельный порт.
Это прерывание обычно зарезервировано для подключения принтера. При отсутствии принтера прерывание можно использовать для другого устройства, подключаемого с помощью параллельного порта
IRQ 8 Интегральная схема часов реального времени.
Это прерывание зарезервировано для таймера реального времени в системе и не может использоваться для каких-либо других целей
IRQ 9 Доступно.
Это прерывание обычно остается доступным и может использоваться для подключения периферийных устройств
IRQ 10 Доступно.
Это прерывание обычно остается доступным и может использоваться для подключения периферийных устройств
IRQ 11 Доступно.
Это прерывание обычно остается доступным и может использоваться для подключения периферийных устройств
IRQ 12 Мышь PS/2.
Это прерывание может использоваться мышью, подключаемой к шине PS/2. При отсутствии мыши PS/2 оно может использоваться для подключения других периферийных устройств, например сетевого адаптера
IRQ 13 Блок для выполнения операций с плавающей точкой/математический сопроцессор.
Это прерывание зарезервировано для устройства для выполнения. Это прерывание всегда недоступно для периферийных устройств, поскольку оно используется исключительно для внутренней сигнализации
IRQ 14 Первичный контроллер IDE.
Это прерывание зарезервировано для первичного контроллера IDE. В ситемах, где нет IDE устройств, это прерывание может использоваться в других целях
IRQ 15 Вторичный контроллер IDE.
Это прерывание зарезервировано для вторичного контроллера IDE

В IDT (Interrupt Descriptor Table — таблица дескрипторов прерываний) можно сохранить 256 записей, только 16 из которых обычно используются для аппаратных прерываний в системах х86. В IDT содержится массив 8-байтовых дескрипторов сегментов, которые называются вентилями (gate).
Перехват прерываний
В системе Windows NT с помощью прерываний обрабатываются многие системные события. Например, прерывание 0х2Е вызывается для каждого системного вызова. Хотя в наших примерах с наборами средств для взлома показано, как перехватывать отдельные ситемные вызовы, но мы также можем непосредственно перехватить прерывание 2Е. Также можно перехватывать и другие прерывания, например прерывание для клавитуры, что, в свою очередь, позволяет перехватывать комбинации нажатых клавиш.
Перехват прерывания может быть осуществлен с помощью кода, представленного на следующем рисунке.
htHcd<hlHTipls() {
IDTINFOidtJnfo; IDT ENTRY* idt_entries; IDT ENTRY* int2e_entry _asm{
sidt idtinfo
}
Отключение прерываний
включение прерываний
Получаем указатель к таблице дескрипторов прерываний
idtj3ntries = (IDTENTRT)MAKEL0NG[idt mfo.LowlDTbase.rdtJnfo.HilDTbase);
у* ********************* * ************* *******************
* Обратите внимание Мы можем исправить ЛЮБОЕ прерывание
* ограничений нет
7
int2e_entry = &(idt_entries[NT_SVSTEM_SERVICE_!NT]) _asm{ ->■ cli;
lea eax.MyKiSystemService;
mov ebx, int2e_entry;
mov [ebx],ax; <<-
shr eax, 16
mov [ebx+6],ax;
Получаем запись прерывания для конкретного прерываний (в данном случае для int 2Е)
Сохраняем новый указатель для функции, который указывает на нашу процедуру, предназначенную для замены прерывания
>- sti;
)
return 0;
Загадка программируемого контроллера прерываний
Тот, кто пробовал реализовать перехват прерывания, знает, что номера каналов IRQ, присвоенных аппаратным средствам, не соответствуют полностью записям в таблице дескрипторов прерываний. Например, мы знаем, что запросом на прерывание для клавиатуры является IRQ1. Однако прерывание 1 оказывается совсем не клавиатурой. Как такое может быть? Очевидно, выполняется преобразование между аппаратными запросами на прерывание и векторами прерываний, хранящимися в таблице дескрипторов прерываний. Ответ заключается в программируемом кон­
троллере прерываний (Programmable Interrupt Controller — PIC). Для большинства материнстких плат это Intel 8259 или совместимая микросхема. Микросхему 8259 можно запрограммировать на соответствие номеров аппаратных прерываний программным прерываниям. Это означает, что различные линии аппаратных прерываний подключаются на вход Intel 8259, а на выходе мы получаем единую линию прерываний. Микросхема 8259 управляет преобразованием в программные прерывания и информирует центральный процессор, что происходит то или иное программное прерывание.
Как правило, схема 8259 управляет 16 каналами аппаратных прерываний. По умолчанию в большинстве программного обеспечения BIOS микросхема 8259 программируется на установку соответствия между аппаратными прерываниями IRQ 0-7 и программными прерываниями 8-15. Таким образом, аппаратное прерывание клавиатуры IRQ 1 обрабатывается как программное прерывание 8, т.е. загадка преобразования IRQ в программные прерывания решена.
В системах Windows NT, Windows 2000 и Windows XP старые хитрости по перехвату прерывания для клавиатуры не сработают. Дело в том, что микросхема 8259 перепрограммируется системой Windows для установки соответствия между аппаратными прерываниями IRQ 0-15 и программными прерываниями 0x30-0x3F. Таким образом, для перехвата прерывания для клавиатуры в системах Windows нужно перехватывать программное прерывание 0x31. Вот и вторая загадка разгадана.
Безусловно, можно самостоятельно перепрограммировать ИС 8259. Таким образом мы создадим дополнительную маскировку для сокрытия драйвера с нашим набором средств для взлома. В следующем фрагменте кода показан пример перепрограммирования 8259, которое осуществляется таким образом, чтобы прерывания IRQ 0-7 соответствовали программным прерываниям 20h-27h.
mov
al, llh


out
20h, al


out
AOh, al


mov
al, 20h
; номера прерывания
начиная с
20h

out
21h, al
; 21h соответствуют
IRQ 0-7

mov
al, 28h
; номера прерывания
начиная с
28h

out
Alh, al
; Alh соответствуют
IRQ 8-15

mov
al, 04h


out
21h, al


mov
al, 02h


out
Alh, al


mov
al, Olh


out
21h, al


out
Alh, al

 

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