logo search
ОЗІ / Лекц_ї / все / Методы и средства защиты информации, 2003

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

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

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

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

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

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

  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.

Часть

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