СПОСОБ ВЫЗОВА ПРОЦЕДУРЫ НА ОСНОВЕ ДВОЙНОГО СТЕКА Российский патент 2005 года по МПК G06F12/14 G06F11/00 

Описание патента на изобретение RU2265241C2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример.

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

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

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

Похожие патенты RU2265241C2

название год авторы номер документа
СИСТЕМЫ И СПОСОБЫ ПРОВЕРКИ АДРЕСА ВОЗВРАТА ПРОЦЕДУРЫ 2014
  • Герцон Гидеон
  • Старк Джаред В.
  • Дискин Гал
RU2628163C2
Система и способ формирования журнала при исполнении файла с уязвимостями в виртуальной машине 2018
  • Монастырский Алексей Владимирович
  • Павлющик Михаил Александрович
  • Пинтийский Владислав Валерьевич
  • Аникин Денис Вячеславович
  • Кирсанов Дмитрий Александрович
RU2724790C1
СПОСОБ ЗАЩИТЫ МУЛЬТИМЕДИЙНЫХ ДАННЫХ 2006
  • Гримен Гисле
  • Менх Кристиан
RU2449494C2
Микропроцессор 2017
  • Волин Владимир Сергеевич
  • Абдуразаков Марат Рустамович
RU2666458C1
СИСТЕМА И СПОСОБ РАСПРЕДЕЛЕННЫХ ВЫЧИСЛЕНИЙ 2010
  • Богданов Александр Яковлевич
RU2554509C2
Система и способ обнаружения вредоносного кода в файле 2016
  • Головкин Максим Юрьевич
  • Монастырский Алексей Владимирович
  • Пинтийский Владислав Валерьевич
  • Павлющик Михаил Александрович
  • Бутузов Виталий Владимирович
  • Карасовский Дмитрий Валериевич
RU2637997C1
СПОСОБ ЗАЩИТЫ ХОДА ВЫПОЛНЕНИЯ ПРОГРАММЫ 2000
  • Бальдишвайлер Михаэль
RU2254608C2
АКТИВНЫЙ АППАРАТНЫЙ СТЕК ПРОЦЕССОРА 2013
  • Семёнов Андрей Андреевич
  • Усанов Дмитрий Александрович
RU2530285C1
Вычислительная система 1989
  • Бабаян Борис Арташесович
  • Волконский Владимир Юрьевич
  • Горштейн Валерий Яковлевич
  • Ким Александр Киирович
  • Назаров Леонид Николаевич
  • Сахин Юлий Хананович
  • Семенихин Сергей Владимирович
SU1777148A1
Система и способ создания антивирусной записи 2018
  • Гордейчик Сергей Владимирович
  • Солдатов Сергей Владимирович
  • Сапронов Константин Владимирович
RU2697954C2

Реферат патента 2005 года СПОСОБ ВЫЗОВА ПРОЦЕДУРЫ НА ОСНОВЕ ДВОЙНОГО СТЕКА

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

Формула изобретения RU 2 265 241 C2

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

Документы, цитированные в отчете о поиске Патент 2005 года RU2265241C2

Устройство для контроля микропроцессорной системы 1987
  • Гладштейн Михаил Аркадьевич
  • Комаров Валерий Михайлович
  • Шубин Николай Алексеевич
  • Альтерман Игорь Зелимович
SU1474650A2

RU 2 265 241 C2

Авторы

Ардашев Д.В.

Даты

2005-11-27Публикация

2004-01-20Подача