- •394026 Воронеж, Московский просп., 14 Введение
- •1.Обзор наиболее распространенных методов "взлома"
- •1.1. Комплексный поиск возможных методов доступа
- •1.2. Терминалы защищенной информационной системы
- •1.3. Получение пароля на основе ошибок администратора и пользователей
- •1.4. Получение пароля на основе ошибок в реализации
- •1.5. Социальная психология и иные способы получения паролей
- •2. Криптография
- •2.1. Классификация криптоалгоритмов
- •2.2. Симметричные криптоалгоритмы
- •2.2.1 Скремблеры
- •2.2.2. Блочные шифры
- •2.2.2.1. Общие сведения о блочных шифрах
- •2.2.2.2. Сеть Фейштеля
- •2.2.2.3. Блочный шифр tea
- •2.2.2.4. Aes : cтандарт блочных шифров сша
- •2.2.2.4.1. Общие сведения о конкурсе aes
- •2.2.2.4.2. Финалист aes – шифр mars
- •2.2.2.4.3. Финалист aes – шифр rc6
- •2.2.2.4.4. Финалист aes – шифр Serpent
- •2.2.2.4.5. Финалист aes – шифр TwoFish
- •2.2.2.4.6. Победитель aes – шифр Rijndael
- •2.3. Симметричные криптосистемы
- •2.3.1. Функции криптосистем
- •2.3.2. Алгоритмы создания цепочек
- •2.3.3. Методы рандомизации сообщений
- •2.3.3.1. Обзор методик рандомизации сообщений
- •2.3.3.2. Генераторы случайных и псевдослучайных последовательностей
- •2.3.4. Архивация
- •2.3.4.1. Общие принципы архивации. Классификация методов
- •2.3.4.2. Алгоритм Хаффмана
- •2.3.4.3. Алгоритм Лемпеля-Зива
- •2.3.5. Хеширование паролей
- •2.3.6. Транспортное кодирование
- •2.4. Асимметричные криптоалгоритмы
- •2.4.1. Общие сведения об асимметричных криптоалгоритмах
- •2.4.2. Алгоритм rsa
- •2.4.3. Технологии цифровых подписей
- •2.4.4. Механизм распространения открытых ключей
- •2.4.5. Обмен ключами по алгоритму Диффи-Хеллмана
- •3. Сетевая безопасность
- •3.1. Атакуемые сетевые компоненты
- •3.1.1. Сервера
- •3.1.2. Рабочие станции
- •3.1.3. Среда передачи информации
- •3.1.4. Узлы коммутации сетей
- •3.2. Уровни сетевых атак согласно модели osi
- •4. По и информационная безопасность
- •4.1. Обзор современного по
- •4.1.1. Операционные системы
- •4.1.2. Прикладные программы
- •4.2. Ошибки, приводящие к возможности атак на информацию
- •4.3. Основные положения по разработке по
- •5. Комплексная система безопасности
- •5.1. Классификация информационных объектов
- •5.1.1. Классификация по требуемой степени безотказности
- •5.1.2. Классификация по уровню конфиденциальности
- •5.1.3. Требования по работе с конфиденциальной информацией
- •5.2. Политика ролей
- •5.3. Создание политики информационной безопасности
- •5.4. Методы обеспечения безотказности
- •Заключение
- •Оглавление
4.3. Основные положения по разработке по
Общие рекомендации по написанию устойчиво работающих алгоритмов (необходимое, но не достаточное условие их информационной безопасности):
не используйте экзотические и недокументированные возможности языка программирования : Вы не уверены в том, как они реализуются на самом деле;
оформляйте исходный текст ясно и четко, используйте необходимые комментарии;
используйте скобки для явного указания порядка операций : компилятор может оптимизировать выполнение выражений и начать, скажем, сложение F(1)+F(2)+F(3) со второго знака "+", тем самым вызвав сначала функцию F от 2, затем от 3, а только затем от 1 – если в функции изменяются какие-либо глобальные переменные это может привести к непредсказумым последствиям;
при всех удобных случаях используйте передачу параметров функции в качестве аргументов, а не в глобальных переменных;
используйте структурное программирование : разбивайте сложные блоки кода на процедуры с ясной структурой и легко контролируемым набором параметров;
никогда не программируйте недокументированные возможнности : технология "reverse engineering" – дизассемблирование и обратная компиляция" – на сегодняшний день достигла огромных результатов, особенно в отношении высокоуровневых языков программирования;
закрывайте файлы сразу же по окончании работы с ними, а если Вы записываете важную информацию в течение долгого времени – периодически вызывайте функции сброса файлового буфера на дисковый накопитель;
проверяйте свободное место на диске перед записью в файл : некоторые операционные системы выдают ошибки при записи на переполненный диск нестандартным образом, результат этого может быть плачевным;
блокируйте файлы и наборы данных, если Вы обращаетесь к ним по записи из нескольких параллельно работающих процессов или программ;
старайтесь как можно сильнее сократить время записи в совместно используемые файлы, а следовательно, и время их блокирования;
не будьте заранее уверенными, что программа запущена из той директории, где расположен ее исполнимый файл, – одной из первых команд после запуска программы явно смените каталог на желаемый;
при работе с внешними и сетевыми устройствами и дисками стройте циклы ожидания таким образом, чтобы из них был возможен выход по истечении определенного периода ожидания ответа – тайм-аута;
очень тщательно разрабатывайте схему синхронизации паралелльно работающих с одними и теми же данными процессов;
тщательно проверяйте алгоритмы на синдром "мертвой петли" – это ситуация, когда процесс A, начав изменять объект 1 и заблокировав его в связи с этим, ожидает снятия блокирования с объекта 2, в то время как процесс B, в то же самое время начавший изменять объект 2 и заблокировав его, ожидает снятия блокировки с объекта 1 – подобная проблема при такой схеме синхронизации теоретически неразрешима, единственный выход из нее – рассматривать объекты 1 и 2 как единое целое с возможностью только совместной блокировки;
аккуратно выделяйте и очищайте объекты в динамической памяти;
при необходимости используйте криптографию;
никогда не передавайте пароль открытым текстом;
используйте криптостойкие алгоритмы шифрования и хеширования;
вычищайте блоки оперативной памяти после того, как информация (пароли, ключи, конфиденциальные данные), находившаяся в них, стала ненужной;
всегда проверяйте длины строк и массивов перед началом работы с ними;
встрайвайте в Ваши системы требование регистрации каждого оператора с уникальным паролем и записью как можно большего количества информации о сеансе в лог-файл, недоступный для изменения операторам;
тщательно тестируйте Ваши приложения, в том числе на больших и неправильных входных данных.