способ вызова процедуры на основе двойного стека

Классы МПК:G06F12/14 защита от обращений к памяти посторонних пользователей
G06F11/00 Обнаружение ошибок, исправление ошибок; контроль
Автор(ы):
Патентообладатель(и):Ардашев Дмитрий Васильевич (RU)
Приоритеты:
подача заявки:
2004-01-20
публикация патента:

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

Формула изобретения

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

Описание изобретения к патенту

Изобретение относится к способу защиты программного обеспечения от несанкционированного доступа.

В настоящее время способ вызова процедуры делится на обращение к процедуре и возврат из процедуры.

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

Работа с контекстом осуществляется при помощи специальных команд процессора: команды вызова процедуры и команды возврата управления вызвавшей программе.

Известен способ вызова из книги авторов Белецкий Я. Турбо Ассемблер: Версия 2.0: Учеб. пособие для студентов вузов / Пер. с польск. В.В.Яценко. - М.: Машиностроение, 1994. - 160 с., взятый в качестве прототипа. Способ заключается в вызове процедуры с использованием команды вызова, а после выполнения процедуры - в возврате управления вызвавшей программе с использованием команды возврата.

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

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

Команда возврата управления вызвавшей программе размещается в коде вызванной процедуры. Эта команда выполняет считывание сохраненного контекста и на основании полученных данных восстанавливает значения соответствующих регистров процессора.

В результате этих действий вызвавшая процедуру программа получает управление в точке адреса возврата и продолжает свое дальнейшее выполнение.

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

Существующий способ вызова процедуры не защищает программное обеспечение от несанкционированного доступа.

Указанная проблема решена при помощи способа вызова процедуры на основе двойного стека.

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

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

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

В отличие от прототипа способ вызова процедуры на основе двойного стека при передаче управления процедуре предусматривает резервирование истинного адреса возврата. Истинность резервируемого адреса возврата обеспечивается тем, что процесс резервирования адреса возврата производится непосредственно перед началом выполнения процедуры, т.е. в тот момент времени, когда искажение адреса возврата еще невозможно.

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

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

Пример.

В ходе экспериментального исследования эффективности способа вызова процедуры на основе двойного стека была произведена модификация ряда априорно уязвимого программного обеспечения.

В качестве примера можно привести результаты модификации программного обеспечения OpenSSH версии 1.2.2, содержащего уязвимость, связанную с возможностью целочисленного переполнения в модуле CRC32 Compensation Attack Detector. Ошибка целочисленного переполнения в этом модуле позволяла удаленно, т.е. через сеть, разместить в памяти уязвимой программы произвольный программный код и передать этому коду управление.

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

Класс G06F12/14 защита от обращений к памяти посторонних пользователей

способ скрытного хранения конфиденциальных данных в защищенной энергонезависимой памяти и устройство для его реализации -  патент 2527758 (10.09.2014)
способ разрушения интегральных схем памяти носителей информации -  патент 2527241 (27.08.2014)
система контроля доступа к файлам на основе их автоматической разметки -  патент 2524566 (27.07.2014)
устройство для внедрения водяного знака в информационное представление, детектор для обнаружения водяного знака в информационном представлении, способ и компьютерная программа и информационный сигнал -  патент 2510937 (10.04.2014)
способ обнаружения вредоносного программного обеспечения в ядре операционной системы -  патент 2510075 (20.03.2014)
система и способ проверки исполняемого кода перед его выполнением -  патент 2510074 (20.03.2014)
устройство хранения данных (варианты) -  патент 2506633 (10.02.2014)
система защиты информации от несанкционированного доступа к информации, содержащей сведения, составляющие государственную тайну -  патент 2504835 (20.01.2014)
система и способ для обнаружения вредоносных программ -  патент 2497189 (27.10.2013)
использование защищенного устройства для обеспечения безопасной передачи данных в небезопасных сетях -  патент 2494448 (27.09.2013)

Класс G06F11/00 Обнаружение ошибок, исправление ошибок; контроль

пассажирский самолет с системой управления общесамолетным оборудованием и самолетными системами -  патент 2529248 (27.09.2014)
резервированная многоканальная вычислительная система -  патент 2527191 (27.08.2014)
способ восстановления данных в системе управления базами данных -  патент 2526753 (27.08.2014)
система функционального тестирования карт полупроводниковой памяти -  патент 2524858 (10.08.2014)
устройство обнаружения и коррекции ошибок в параллельной магистрали -  патент 2524854 (10.08.2014)
устройство ввода-вывода -  патент 2524852 (10.08.2014)
способ устранения конфликта доступа к центру и реализующая способ система -  патент 2523935 (27.07.2014)
устройство для приема двоичной информации по двум параллельным каналам связи -  патент 2523210 (20.07.2014)
измерительное средство для функций адаптера -  патент 2523194 (20.07.2014)
система и способ автоматической обработки системных ошибок программного обеспечения -  патент 2521265 (27.06.2014)
Наверх