Ошибки, приводящие к возможности атак на информацию

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

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

Для целых и дробных чисел, значений времени и тому подобных типов данных запись производится всегда в фиксированном объеме
(2 байта, 4 байта, 10 байт). А вот для строк и массивов данных проверки длины перед операциями записи необходимы. Для того чтобы заставить ЭВМ выполнить код или записать данные туда, куда у него нет прав записи, злоумышленник специально заставляет систему обрабатывать строки очень большой длины, либо помещать в массив количество элементов большее, чем его объем. В случае успеха возможно либо попадание части строки в сегмент кода или стека с последующим исполнением, либо модификация каких-либо служебных данных, что позволит затем злоумышленнику войти в систему в обход системы защиты. Естественно, что содержимое конца строки (оказывающееся после переполнения буфера в ненадлежащей области памяти) подбирается специальным образом. Сами данные или строки могут быть абсолютно бессмысленными.

Проблема неявных ограничений. Разработчик программы считает само собой разумеющимися некоторые ограничения по умолчанию, но которые на самом деле могут не выполняться. Это встречается при программировании довольно часто, но редко приводит к каким-либо серьезным последствиям. Злоумышленники, найдя некорректность обработки исходных данных, могут легко этим воспользоваться. Чаще всего результатом обработки становится прерывание работы программы с сообщением об ошибке или просто «зависание» приложения. Данные ошибки злоумышленниками используются с целью проведения атаки «отказ в сервисе».

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

 

4.6. Угрозы защиты информации в сетях и противодействие им