Проблема ограничений, которые разработчик программы считает само собой разумеющимися, но которые на самом деле могут не выполняться, встречается гораздо чаще, но реже приводит к каким-либо серьезным последствиям. Чаще всего результатом обработки подобных данных становится прерывание работы программы с сообщением об ошибке или просто "зависание". То есть данный класс атак используется с целью проведения атаки "отказ в сервисе".
Спектр возможных ограничений, не продуманных на этапе разработке ПО, чрезвычайно широк. Это могут быть и отрицательное время или сумма платежа, и текстовое значение на месте ожидаемого числа, и строки, созданные целиком из управляющих символов, и, конечно же, пустые строки. Все это приводит к одному из главных правил разработки ПО : тщательно и полностью проверяйте те входные данные программы, которые поступают в нее от человека либо передаются по каналу связи, незащищенному от модификации.
Общие рекомендации по написанию устойчиво работающих алгоритмов (необходимое, но не достаточное условие их информационной безопасности):
не используйте экзотические и недокументированные возможности языка программирования : Вы не уверены в том, как они реализуются на самом деле;
оформляйте исходный текст ясно и четко, используйте необходимые комментарии;
используйте скобки для явного указания порядка операций : компилятор может оптимизировать выполнение выражений и начать, скажем, сложение F(1)+F(2)+F(3) со второго знака "+", тем самым вызвав сначала функцию F от 2, затем от 3, а только затем от 1 – если в функции изменяются какие-либо глобальные переменные это может привести к непредсказумым последствиям;
при всех удобных случаях используйте передачу параметров функции в качестве аргументов, а не в глобальных переменных;
используйте структурное программирование : разбивайте сложные блоки кода на процедуры с ясной структурой и легко контролируемым набором параметров;
никогда не программируйте недокументированные возможнности : технология "reverse engineering" – дизассемблирование и обратная компиляция" – на сегодняшний день достигла огромных результатов, особенно в отношении высокоуровневых языков программирования;
закрывайте файлы сразу же по окончании работы с ними, а если Вы записываете важную информацию в течение долгого времени – периодически вызывайте функции сброса файлового буфера на дисковый накопитель;
проверяйте свободное место на диске перед записью в файл : некоторые операционные системы выдают ошибки при записи на переполненный диск нестандартным образом, результат этого может быть плачевным;
блокируйте файлы и наборы данных, если Вы обращаетесь к ним по записи из нескольких параллельно работающих процессов или программ;
старайтесь как можно сильнее сократить время записи в совместно используемые файлы, а следовательно, и время их блокирования;
не будьте заранее уверенными, что программа запущена из той директории, где расположен ее исполнимый файл, – одной из первых команд после запуска программы явно смените каталог на желаемый;
при работе с внешними и сетевыми устройствами и дисками стройте циклы ожидания таким образом, чтобы из них был возможен выход по истечении определенного периода ожидания ответа – тайм-аута;
очень тщательно разрабатывайте схему синхронизации паралелльно работающих с одними и теми же данными процессов;
тщательно проверяйте алгоритмы на синдром "мертвой петли" – это ситуация, когда процесс A, начав изменять объект 1 и заблокировав его в связи с этим, ожидает снятия блокирования с объекта 2, в то время как процесс B, в то же самое время начавший изменять объект 2 и заблокировав его, ожидает снятия блокировки с объекта 1 – подобная проблема при такой схеме синхронизации теоретически неразрешима, единственный выход из нее – рассматривать объекты 1 и 2 как единое целое с возможностью только совместной блокировки;
аккуратно выделяйте и очищайте объекты в динамической памяти;
при необходимости используйте криптографию;
никогда не передавайте пароль открытым текстом;
используйте криптостойкие алгоритмы шифрования и хеширования;
вычищайте блоки оперативной памяти после того, как информация (пароли, ключи, конфиденциальные данные), находившаяся в них, стала ненужной;
всегда проверяйте длины строк и массивов перед началом работы с ними;
встрайвайте в Ваши системы требование регистрации каждого оператора с уникальным паролем и записью как можно большего количества информации о сеансе в лог-файл, недоступный для изменения операторам;
тщательно тестируйте Ваши приложения, в том числе на больших и неправильных входных данных.
Безотказность, или надежность доступа к информации, является одной из категорий информационной безопасности. Предлагается следующая схема классификации информации на 4 уровня безотказности.
Параметр |
класс 0 |
класс 1 |
класс 2 |
класс 3 |
Максимально возможное непрерывное время отказа |
1 неделя |
1 сутки |
1 час |
1 час |
В какое время отказа не может превышать указанное выше ? |
в рабочее |
в рабочее |
в рабочее |
24 часа в сутки |
Средняя вероятность доступности данных в произвольный момент времени |
80% |
95% |
99.5% |
99.9% |
Среднее максимальное время отказа |
1 день в неделю |
2 часа в неделю |
20 минут в неделю |
12 минут в месяц |
Уровень конфиденциальности информации является одной из самых важных категорий, принимаемых в рассмотрение при создании определенной политики безопасности учреждения. Предлагается следующая схема классификации информации на 4 класса по уровню ее конфиденциальности.
Класс |
Тип информации |
Описание |
Примеры |
0 |
открытая информация |
общедоступная информация |
информационные брошюры, сведения публикававшиеся в СМИ |
1 |
внутренняя информация |
информация, недоступная в открытом виде, но не несущая никакой опасности при ее раскрытии |
финансовые отчеты и тестовая информация за давно прошедшие периоды, отчеты об обычных заседаниях и встречах, внутренний телефонный справочник фирмы |
2 |
конфиденциальная информация |
раскрытие информации ведет к значительным потерям на рынке |
реальные финансовые данные, планы, проекты, полный набор сведений о клиентах, информация о бывших и нынешних проектах с нарушениями этических норм |
3 |
секретная информация |
раскрытие информации приведет к финансовой гибели компании |
(зависит от ситуации) |
При работе с информацией 1-го класса конфиденциальности рекомендуется выполнение следующих требований :
осведомление сотрудников о закрытости данной информации;
общее ознакомление сотрудников с основными возможными методами атак на информацию;
ограничение физического доступа;
полный набор документации по правилам выполнения операций с данной информацией.
При работе с информацией 2-го класса конфиденциальности к перечисленным выше требованиям добавляются следующие :
расчет рисков атак на информацию;
поддержание списка лиц, имеющих доступ к данной информации;
по возможности выдача подробной информации под расписку (в т.ч. электронную);
автоматическая система проверки целостности системы и ее средств безопасности;
надежные схемы физической транспортировки;
обязательное шифрование при передаче по линиям связи
схема бесперебойного питания ЭВМ.
При работе с информацией 3-го класса конфиденциальности ко всем перечисленным выше требованиям добавляются следующие :
детальный план спасения либо надежного уничтожения информации в аварийных ситуациях (пожар, наводнение, взрыв);
защита ЭВМ либо носителей информации от повреждения водой и высокой температурой;
криптографическая проверка целостности информации.