- •Введение
- •Основные понятия и определения предмета защиты информации
- •Правовое обеспечение информационной безопасности
- •Статья 272 ук рф
- •Статья 273 ук рф
- •Статья 274 ук рф
- •Статья 146 ук рф
- •Статья 147 ук рф
- •Организационно – распорядительная документация
- •Концепция защиты свт и ас от нсд к информации
- •1.3. Санкционированный и несанкционированный доступ
- •1.4. Угрозы безопасности и каналы реализации угроз
- •1.5. Основные принципы обеспечения информационной безопасности
- •1.6. Ценность информации
- •1.7. Меры обеспечения безопасности компьютерных систем
- •1.8. Характеристика способов защиты компьютерной информации
- •2. Разграничение доступа к ресурсам
- •Политики безопасности
- •Дискреционные политики безопасности
- •Мандатные политики безопасности
- •Контроль доступа, базирующийся на ролях
- •Политика безопасности сети
- •3. Идентификация и аутентификация субъектов
- •3.1. Классификация подсистем идентификации и аутентификации субъектов
- •3.2. Парольные системы идентификации и аутентификации пользователей
- •Методы и средства криптографической защиты
- •4.1. Принципы криптографической защиты информации
- •4.2. Традиционные симметричные криптосистемы
- •4.2.1. Шифрование методом замены
- •Шифрование методом Цезаря
- •Простая моноалфавитная замена
- •Шифр Гронсфельда
- •Шифрование методом Вернама
- •4.2.2. Шифрование методами перестановки
- •Метод простой перетановки
- •Алгорита Гамильтона
- •Шифрование методом гаммирования
- •4.3.Элементы криптоанализа
- •4.4. Современные симметричные системы шифрования
- •4.5. Асимметричные криптосистемы
- •4.5.1. Принципы асимметричного шифрования
- •4.5.2. Однонаправленные функции
- •Целочисленное умножение
- •Модульная экспонента
- •4.5.3. Алгоритм шифрования rsa
- •Алгоритм формирования ключевой пары пользователем а
- •Шифрование и дешифрование сообщений в криптосистеме rsa
- •Действия получателя а
- •Действия отправителя b
- •Действия пользователя a
- •4.6. Сравнение симметричных криптосистем с асимметричными
- •Контроль целостности информации. Электронно-цифровая подпись
- •5.1. Проблема обеспечения целостности информации
- •Алгоритм вычисления контрольной суммы
- •5.2. Функции хэширования и электронно-цифровая подпись
- •5.3. Инфраструктура открытых ключей pki
- •Структура, сервисы и архитектура pki
- •Политика и регламент pki
- •Программные средства поддержки pki
- •Хранение и распределение ключевой информации
- •Типовые схемы хранения ключевой информации
- •Алгоритм идентификации и аутентификации для схемы 1
- •Алгоритм идентификации и аутентификации для схемы 2
- •Защита баз данных аутентификации в ос Windows nt и unix
- •Алгоритм хэширования lanman
- •Алгоритм хэширования ntlm
- •Иерархия ключевой информации
- •Распределение ключей
- •Распределение ключевой информации с использованием центров распределения ключей
- •Прямой обмен сеансовыми ключами между пользователями
- •Протокол Диффи-Хеллмана
- •Протоколы безопасной удаленной аутентификации пользователей
- •Протокол chap (Challenge Handshaking Authentication Protocol)
- •Протокол одноразовых ключей s/key
- •Реализация метода «запрос-ответ» в oc Windows при сетевой аутентификации
- •Алгоритм формирования ответа
- •7. Защита от разрушающих программных воздействий
- •7.1. Понятие разрушающего программного воздействия
- •Модели взаимодействия прикладной программы и рпв
- •Компьютерные вирусы как класс рпв
- •Классификация файловых вирусов по способу заражения
- •Перезаписывающие вирусы
- •Вирусы-компаньоны
- •Защита от рпв. Изолированная программная среда
- •Эвристическая методика выявления рпв в bios
- •8. Защита информации в компьютерных сетях
- •8.1. Основные угрозы и причины уязвимости сети internet
- •Классификация типовых удаленных атак на интрасети.
- •Анализ сетевого трафика
- •Подмена доверенного субъекта
- •Введение ложного объекта компьютерной сети
- •Отказ в обслуживании (DoS)
- •Сканирование компьютерных сетей
- •Ограничение доступа в сеть. Межсетевые экраны
- •Фильтрующие маршрутизаторы (пакетные фильтры)
- •Шлюзы сетевого уровня
- •Шлюз прикладного уровня
- •Виртуальные частные сети (vpn)
- •Доменная архитектура в Windows nt. Служба Active Directory
- •Протокол skip
- •Централизованный контроль удаленного доступа. Серверы аутентификации
- •Прокси – сервер
- •9. Защита программного обеспечения
- •9.1. Проблема защиты программного обеспечения
- •Модульная архитектура технических средств защиты по
- •9.3.Функционирование подсистем и модулей системы защиты по
- •9.4.Электронные ключи hasp
- •9.4. Защита по от изучения
- •9.4.1. Базовые методы нейтрализации систем защиты
- •Понятие и средства обратного проектирования
- •Локализация кода модуля защиты
- •Базовые методы противодействия отладчикам
- •Защита от отладчиков реального режима
- •Защита от отладчиков защищенного режима
- •Базовые методы противодействия дизассемблированию по
- •Защита от отладки
- •Использование недокументированных инструкций
- •Шифрование кода программы
- •Лабораторный практикум
- •10.1. Помехоустойчивые коды
- •10.2. Алгоритм кодирования и декодирования Хаффмена
- •Порядок выполнения лабораторной работы
- •Контрольные вопросы
- •Дискреционная модель политики безопасности
- •Порядок выполнения лабораторной работы
- •Контрольные вопросы
- •Подсистемы парольной аутентификации пользователей
- •Порядок выполнения лабораторной работы
- •Контрольные вопросы
- •Методы криптографической защиты информации
- •Порядок выполнения лабораторной работы
- •Контрольные вопросы
- •Литература
Защита от отладки
Данные типы защит строятся на том факте, что в режиме отладки не эмулируются отдельные особенности процессоров, связанные с конвейеризацией.
Пример 9.7.
00000100: 810600010200 add word ptr [100], 01
00000106: B406 mov ah,06 – прямой ввод через консоль
00000108: B207 mov dl,07
0000010A: CD21 int 21h
0000010C: C3 Ret
В данном примере первая команда модифицирует сама себя и при этом становится на байт короче. Защита основана на том, что при выполнении первой команды, несколько следующих уже загружены в конвейер, и поэтому выполнение первой команды на реальном процессоре их никак не затронет.
В режиме же отладки, достаточно часто адрес следующей команды вычисляется после выполнения предыдущей, и, как правило, отладчики сбрасывают очередь команд на каждом шаге, вызывая трассировочное прерывание.
Если команда cmd1 изменит «образ» команды cmd2, стоящей в очереди в конвейере, на «образ» cmd2`, то это никак не отразится на ходе выполнения программы на реальном процессоре, поскольку процессор перейдет к исполнению следующей команды из очереди (cmd2). В режиме же трассировки после выполнения команды cmd1 произойдет вызов трассировочного прерывания. При возврате из прерывания очередь команд сбрасывается и из памяти выбирается модифицированная команда cmd2', что изменяет логику работы программы.
Отладчик «увидит» пример 9.7 следующим образом:
0100 8106000102 Add word ptr [100], 01
0105 00B406B2 Add [si-4DFA],Dh
0109 07 pop es
010A CD21 int 21h
010C C3 ret
Аналогичный эффект демонстрировался в примере 8.8.
Пример 9.8.
...
mov byte ptr _cmd2,0F9h ; 0F9h -- код операции stc
_cmd2:
clc ; clc выполнится без отладчика, stc – под отладчиком
jc tracing
... ; код "нормального" режима
... ; выполнения программы
tracing:
... ; работа под отладчиком!
В данном примере команда mov byte ptr _cmd2, 0F9h (cmd1) осуществляет замену следующей команды clc (cmd2) на stc (cmd2'). При работе на реальном процессоре вместо команды stc будет выполнена «старая» команда clc, которая к этому моменту уже находится в очереди команд. При выполнении этого фрагмента под отладкой очередь команд будет сброшена и выполнится команда stc, что вызовет переход по метке tracing.
Использование недокументированных инструкций
Один из подходов, используемый для затруднения отладки и дизассемблировании программ, заключается в привлечении редко используемых инструкций центрального процессора (ЦП), недокументированных инструкций, или инструкций, имеющих скрытый результат [Error: Reference source not found]. Не все злоумышленники хорошо знакомы с подобными инструкциями и скрытыми возможностями ЦП, что затрудняет исследование ими программ. Недостаток данных методов – жесткая привязка к процессору. Кроме этого, не гарантируется поддержка недокументированных инструкций в будущих процессорах, а значит совместимость с ними разработанных защит.
Достаточно часто для защиты ПО от исследования используют недокументированное использование префиксов инструкций.
Префиксы в кодах инструкций делятся на следующие типы:
Префиксы блокировки и повторения – говорят о том, что код инструкции относится к действиям блокировки или повторения.
Префиксы переопределения сегмента - указывают на то, с каким сегментом должна осуществляться работа команды. Соответствие между значениями префиксов и сегментами приведено в таблице 9.3.
Табл. 9.3. Соответствия префиксов и кодируемых ими сегментов
Значение префикса |
Сегмент |
2Eh |
CS |
36h |
SS |
3Eh |
DS |
26h |
ES |
64h |
FS |
65h |
GS |
3. Префиксы переопределения размеров операндов (префикс 66h). Данный префикс используется в 16-разрядном режиме для манипулирования с 32-битными операндами и наоборот.
4. Префиксы переопределения размеров адреса (префикс 67h).
Если в процессорной инструкции используется более одного префикса из одной группы, то ее действие документально не определено. Приведем наиболее типичные приемы использования недокументированных команд и недокументированных возможностей процессора INTEL.
1. Недокументированное использование префикса переопределения размеров операндов. Согласно стандарту он используется только при наличии в команде каких-либо операндов. Однако на практике для реального процессора данный префикс может быть поставлен перед любой командой, и это будет работать на реальном процессоре. Например, реальный процессор примет инструкцию 0x66 CLI (использование префикса перед оператором запрещения прерываний). В связи с тем, что данная возможность не документирована, то, как правило, отладчики и дизассемблеры не принимают подобные инструкции и отказываются корректно интерпретировать подобный код.
2. То же самое следует сказать и про префиксы переопределения размеров адреса. Данные префиксы согласно документации используются только в командах, оперирующих с адресами памяти. Их использование с другими командами не документировано, но процессор будет выполнять эти команды. В качестве примера такой инструкции можно привести инструкцию 0x67 STI.
3. Префиксы переопределения сегментов также могут встречаться перед любой командой, в том числе и в командах, не обращающихся к памяти. Например, команда CS:NOP корректно выполняется, а многие дизассемблеры сбиваются при ее интерпретации.
4. Использование дублирующих префиксов, то есть запись префиксов вида 0x66, 0x66 непосредственно перед командой. Хотя фирма INTEL не гарантирует корректную работу своих процессоров при обнаружении такого рода инструкций, но фактически все процессоры правильно интерпретируют данные ситуации. Иное дело – отладчики и дизассемблеры, которые спотыкаются и начинают некорректно вести себя.
Следует отметить также, что процессором INTEL корректно выполняются и инструкции вида DS:FS:CS:Mov ax, [100] (последний префикс перекрывает все остальные), а многие отладчики и дизассемблеры сбиваются при их анализе.
5. Обращение к недокументированным регистрам. В процессорах INTEL регистры в настоящее время кодируются тремя битами следующим образом (таблица 9.4).
Табл. 9.4. Кодирование регистров в инструкциях
-
Код
Инструкция
000
ES
001
CS
010
SS
011
DS
100
FS
101
GS
110
Зарезервирован
111
Зарезервирован
Две последние кодовые комбинации (110 и 111) в настоящее время зарезервированы и не используются. При попытке их использования вызывается исключительная ситуация 06h, которую можно перехватить. Отладчики же и дизассемблеры при встрече с подобными инструкциями начинают вести себя странно и непредсказуемо. Одни не генерируют при этом прерывания, чем и выдают себя, другие начинают некорректно работать. Поведение же дизассемблеров в этом случае тоже разнообразно. Ниже приведен пример того, как различные дизассемблера воспринимают подобные инструкции.
HIEW 8E ??? F8 clc C3 retn |
Qview 8EF8 mov !s, ax C3 ret
|
IDA Pro Db 8E Db 0F8 DB C3 |
Несуществующие регистры можно эмулировать в обработчике прерывания int 06h.
