Изобретение относится к способу, определенному родовым понятием п.1 формулы изобретения, т.е. к способу контроля выполнения компьютерных программ в соответствии с их назначением.
Обеспечение возможности выполнения компьютерной программы в соответствии с ее назначением является постоянной целью, которая достигается все в большей степени за счет использования различных мер.
В то время как раньше основной причиной ненадлежащего выполнения компьютерной программы были недопустимые сбои в аппаратных средствах и ошибки программирования, в настоящее время преднамеренные манипуляции при выполнении программы начинают играть все более важную роль.
За счет целенаправленного манипулирования ходом выполнения программы можно, например, пропустить определенные части программы, посредством чего можно, например, обойти проверку, предусмотренную для подтверждения права доступа.
Это может стать серьезной проблемой в карточках с интегральными схемам (ИС), хотя и не исключительно только в этой области, поскольку с одной стороны карточки с ИС находят все большее распространение в областях, где требуется защита осуществляемых операций (например, контроль доступа, финансовые сделки и т.д.), а с другой стороны такие карточки, в силу присущих им свойств, не находятся под постоянным контролем или присмотром и могут беспрепятственно стать предметом попыток противоправного манипулирования.
При использовании разнообразных уже предусмотренных мер по обеспечению защиты вероятность того, что такие противоправные действия будут успешными, весьма невысока. Однако данные ситуации нельзя исключить полностью.
Поэтому в основе настоящего изобретения лежит задача создания способа контроля предусмотренного выполнения компьютерной программы, с помощью которого преднамеренные противоправные манипуляции ходом выполнения программы практически будут исключены.
Эта задача решается в изобретении за счет признаков, указанных в отличительной части п.1 формулы изобретения. В соответствии с этим предусмотрено, что перезапись адреса возврата, хранящегося для последующего применения, и/или применение записанного с ошибками или перезаписанного адреса возврата в качестве адреса возврата запрещается.
Практическое выполнение этапов способа может осуществляться различными путями. В простейшем случае при вызове функции или в ином случае, требующем запоминания адреса возврата, запоминается не собственно адрес возврата, а дополнительная информация защиты, которая позволяет распознать, требуется ли еще запомненный адрес возврата, и поэтому не может быть перезаписан, и/или является ли запомненный адрес возврата первоначально запомненным адресом возврата или соответственно адресом возврата, который необходимо запомнить.
В первом указанном случае, т.е. при реализации защиты от перезаписи адреса возврата, информация защиты может состоять, например, из распознавания защиты записи в виде бита защиты записи или иного подобного средства, которое устанавливается при записи адреса возврата и сбрасывается после применения записанного адреса возврата в качестве адреса возврата.
Во втором указанном случае, т.е. при реализации защиты применения адреса возврата, информация защиты может состоять, например, из собственно адреса возврата или из данных, иным образом представляющих или характеризующих адрес возврата.
Указанная информация записи хранится в области памяти, к которой предпочтительно не возможен внешний доступ; "нормальное" хранение адреса возврата может осуществляться обычным образом в так называемом стеке (стековой (магазинной) памяти).
Если перед каждой попыткой записи в стек проверять, определена ли записываемая область с помощью бита защиты записи в качестве области с защитой от записи, то можно воспрепятствовать перезаписи данных, которые применяются в качестве адреса возврата.
Если проверить, в качестве альтернативы, или дополнительно, соответствуют ли используемые в качестве адреса возврата данные первоначально запомненному или запоминаемому адресу возврата, то можно воспрепятствовать тому, чтобы после запоминания адреса возврата измененные (путем противоправного манипулирования) данные применялись в качестве адреса возврата.
В обоих случаях можно, в целях предотвращения дальнейших попыток противоправных манипуляций, прервать текущее выполнение программы, и/или осуществить сброс в системе, выполняющей программу, и/или выработать предупредительную сигнализацию, и/или стереть данные, относящиеся к защите, и/или принять иные меры защиты.
Таким путем можно гарантировать, что преднамеренные манипуляции с адресами возврата не смогут привести к изменению хода выполнения программы в соответствии с ее назначением.
Тем самым найден способ, посредством которого можно в значительной степени исключить преднамеренные манипуляции, воздействующие на ход выполнения программы.
Предпочтительные варианты осуществления изобретения представлены в зависимых пунктах формулы изобретения.
Изобретение поясняется ниже на примерах осуществления, иллюстрируемых чертежами, на которых показано следующее.
Фиг. 1 - схематичное представление фрагмента системы для осуществления защиты применения адреса возврата.
Фиг. 2 - схематичное представление, наглядно поясняющее защиту от перезаписи адреса возврата и модифицированную защиту применения адреса возврата.
Показанный на фиг.1 фрагмент системы представляет собой систему, обеспечивающую выполнение компьютерной программы, которая может полностью или частично выполняться на микропроцессоре, микроконтроллере, процессоре сигналов или ином подобном средстве.
Показанный на чертеже фрагмент предназначен для управления частью системы, относящейся к адресу возврата.
Адреса возврата необходимо записывать, например, если исполняемая программа содержит процедуру вызова функции. При вызове функции (например, в случае команды LCALL в микроконтроллере 8051 фирмы Intel) осуществляется следующее:
- в памяти программы осуществляется переход (адресный) к области, в которой хранится программа, для соответствующей функции, которая должна теперь выполняться;
- выполняется соответствующая программа вызванной функции;
- осуществляется возврат в область памяти, откуда был осуществлен переход для выполнения вызванной программы.
Последний названный адрес, т.е. адрес, с которого должно продолжаться выполнение программы после выполнения вызванной функции программы, представляет собой упомянутый адрес возврата.
Для того чтобы устройство, выполняющее компьютерную программу, знало, куда оно должно осуществить переход после выполнения функции, необходимо промежуточное запоминание адреса возврата.
Следует упомянуть, что вызовы функции не являются единственными событиями, при которых требуется хранение адреса возврата. Хранение адреса возврата требуется, например, при прерываниях (программных прерываниях) или при смене задачи в многозадачной системе. Хранение адреса возврата осуществляется обычно в так называемом стеке или стековом запоминающем устройстве. Подобный стек показан на фиг.1 и обозначен ссылочной позицией 1. Блок логики 2 стека вырабатывает, в том числе, так называемый указатель стека, который указывает на ту частичную область стека 1, которая является следующей для записи или считывания. Стеки как таковые и их работа известны, так что более детальное описание может не приводиться.
В стеке 1 могут храниться не только адреса возврата, но и любые другие данные (содержимое регистров, локальные переменные и т.п.). Представляемые пояснения относятся, однако, по существу исключительным образом к манипулированию адресами возврата.
Если необходимо, как в случае команды LCALL, запомнить в стеке 1 адрес возврата, то это обеспечивается блоком логики 2 стека.
В отличие от обычных систем, в предлагаемой системе загруженный или подлежащий загрузке адрес возврата дополнительно в качестве информации защиты запоминается в еще одном ЗУ. Это ЗУ, называемое далее ЗУ защиты, на фиг.1 обозначено ссылочной позицией 3. Для ЗУ защиты 3 предусмотрен блок логики 4 ЗУ защиты, с помощью которого оно управляется, подобно тому, как это имеет место для стека 1, управляемого блоком логики 2 стека.
ЗУ защиты 3, в противоположность стеку 1, не срабатывает на воздействия, являющиеся внешними для системы, выполняющей данную компьютерную программу. Т. е. записанные в нем данные защищены от целенаправленного манипулирования, во всяком случае, от такого манипулирования, которое могло бы быть реализовано с оправданными затратами.
Блок логики 4 ЗУ защиты, в противоположность блоку логики 2 стека, срабатывает в рассматриваемом примере только в том случае, если адрес возврата должен быть записан или считан. Как вариант, можно также предусмотреть, чтобы блок логики 4 ЗУ защиты срабатывал в ответ и на другие события (помимо внешних команд для процедур записи и считывания).
Если ход выполнения программы достигает момента, когда должен быть осуществлен возврат к ранее запомненному адресу возврата, как в случае, например, команды RET, то требуемый адрес возврата может быть получен соответствующим считыванием стека 1. Перед применением получаемых при этом данных в качестве адреса возврата проверяют, идентичны ли полученные данные адресу возврата, хранящемуся в ЗУ защиты 3 в качестве информации защиты.
Для этого предусмотрен блок сравнения 5, который принимает сопоставляемые друг с другом данные из стека 1 и из ЗУ защиты 3 и осуществляет их сравнение.
Если в процессе сравнения, осуществляемого в блоке сравнения 5, устанавливается, что сопоставляемые друг с другом данные идентичны, то это означает, что получаемые из стека 1 данные соответствуют первоначально записанному адресу возврата и они не подвергались манипуляции и не записывались некорректно или на некорректном месте или соответственно не считывались некорректно или с некорректного места из-за ошибок аппаратных средств или сбоев программного обеспечения. Содержащиеся в стеке 1 данные в соответствии с этим могут квалифицироваться и применяться как верный адрес возврата. Такой вывод возможен потому, что, как упоминалось выше, целенаправленное воздействие на содержимое ЗУ защиты 3 практически невозможно.
Если при сравнении, осуществляемом в блоке сравнения 5, устанавливается, что сопоставляемые данные не идентичны, то это означает, что полученные из стека 1 данные с высокой вероятностью подверглись манипуляции или, вследствие ошибок аппаратных средств или сбоев программного обеспечения, записывались некорректно или на некорректном месте или соответственно считывались некорректно или с некорректного места. Независимо от причины установленной неидентичности, хранящиеся в стеке 1 данные не могут применяться в качестве адреса возврата, так как результатом этого было бы отклонение от предварительно определенного хода выполнения программы. Блок сравнения 5 вырабатывает в этом случае сигнал NMI, который подается на блок NMI-логики 6. Блок NMI-логики 6 осуществляет немедленное прерывание программы, и/или сброс системы, обрабатывающей данную компьютерную программу, и/или выдачу предупредительной сигнализации, и/или стирание данных, относящихся к защите.
Блок сравнения 5 в рассматриваемом примере активизируется командами, которые, как, например, команда RET, приводят к считыванию из стека 1 данных, которые должны интерпретироваться как адрес возврата. В любые другие моменты времени блок сравнения остается в неактивном состоянии.
Посредством описанных мер можно обеспечить то, что подлежащая исполнению программа может исполняться только в том случае, когда не обнаруживается ошибка в адресе возврата.
Пример, описанный со ссылками на фиг.1, может рассматриваться как практическая реализация защиты применения адреса возврата, запрашиваемого при необходимости.
Не является непременно требуемым, чтобы информация защиты, предусмотренная для соответствующих адресов возврата, представляла собой собственно адреса возврата. Как вариант, может быть предусмотрено, что в качестве информации защиты применяются только выбранные части адреса возврата или данные, представляющие или характеризующие адрес возврата любым иным образом. Блок сравнения 5 в таких случаях, естественно, был бы заменен устройством сопоставления данных, измененным соответственно конкретным условиям.
Альтернативный вариант осуществления процедуры контроля хода выполнения программ описан ниже на примере защиты от перезаписи адреса возврата, иллюстрируемой с помощью фиг. 2.
На фиг. 2 показано ЗУ, которое подразделено на первую область ЗУ в форме стека 11а и вторую область ЗУ в форме ЗУ защиты 11b.
Стек 11a соответствует показанному на фиг. 1 стеку 1. ЗУ защиты 11b примерно соответствует показанному на фиг. 1 ЗУ защиты 3; во всяком случае ЗУ защиты 11b записывается другой информацией защиты, отличной от используемой в ЗУ защиты 3.
Как и в случае ЗУ защиты 3, ЗУ защиты 11b не реагирует на воздействия вне устройства, исполняющего контролируемую компьютерную программу. Т.е. в данном варианте контроля хода выполнения программы невозможно манипулировать информацией, хранящейся в ЗУ защиты, по меньшей мере с обоснованными затратами
Информация защиты, хранящаяся в ЗУ защиты 11b, состоит из бита защиты записи, который устанавливается на "1", если содержимое соответствующей области стека не может быть перезаписано, и устанавливается на "0", если содержимое соответствующей области стека может перезаписываться
Если, как в случае команды LCALL, в стек 11а надо записать адрес возврата, то это обеспечивается обычным образом.
В дополнение к этому, в область ЗУ защиты 11b, поставленную в соответствие области стека, в которой записан адрес возврата, записывается "1", чтобы тем самым обозначить, что соответствующая область стека не может быть перезаписана.
В рассматриваемом примере стек 11а подразделен на области, охватывающие 8 битов, причем каждой 8-битовой области поставлен в соответствие бит защиты записи, записанный в 3У защиты 11b. Если исходят из того, что работают с 16-битовыми адресами, то для хранения адреса возврата требуются две области стека
Согласно показанному на фиг. 2, в стеке 11а запомнен адрес возврата. Адрес возврата состоит из части старших восьми битов (РСН) и из части младших восьми битов (PCL). Как для области стека, содержащей биты РСН, так и для области стека, содержащей биты PCL, поставлена в соответствие "1" в качестве информации защиты или бита защиты записи
Соответствующая информация защиты или биты защиты записи устанавливаются в "0", когда данные, хранящиеся в соответствующей области стека, применяются в качестве адреса возврата
При каждой попытке записать данные в стек (перезаписать хранящиеся там данные) информация защиты (бит защиты записи), соответствующая области стека, которую стремятся перезаписать, оценивается, чтобы установить, разрешена ли запись стека на данном месте.
Если соответствующая информация защиты или соответствующий бит защиты имеет значение "1", то запись в стек на данном месте не разрешена; и попытка записи квалифицируется как попытка манипуляции записанными данными или сбой аппаратных средств или программного обеспечения. Если соответствующая информация защиты или соответствующий бит защиты имеет значение "0", то запись в стек на данном месте разрешена.
Решение о допустимости записи определенной области стека проверяется с помощью схемы проверки защиты записи, которая в рассматриваемом примере реализована с помощью схемы И 12. На схему И 12 в качестве входных сигналов подаются бит защиты записи, соответствующий записываемой области стека, и сигнал "запись_стека", указывающий на попытку записи, причем сигнал "запись_ стека" может принимать значение "1", если имеет место попытка записи, и значение "0" при отсутствии попытки записи. Выходной сигнал "действительная_ запись" схемы И 12 показывает, разрешена ли преднамеренная запись соответствующей области стека ("действительная_запись" = "0") или она не разрешена ("действительная_запись" = "0"). Выходной сигнал "действительная_запись" схемы И 12 может применяться в качестве выходного сигнала NMI блока сравнения 5 по фиг. 1 для того, чтобы программу немедленно прервать, и/или осуществить сброс системы, на которой выполняется программа, и/или выработать предупредительный сигнал, и/или стереть данные, относящиеся к защите.
Дополнительно к защите перезаписи адреса возврата, в систему по фиг. 2 может быть введена защита применения адреса возврата, модифицированная по сравнению с выполнением по фиг. 1. Этот дополнительный механизм защиты состоит в том, что данные, считанные из стека, перед их применением в качестве адреса возврата проверяются на тот предмет, представляют ли они вообще адрес возврата. Это может предусматриваться для информации защиты или соответственно бита защиты записи, относящегося к соответствующей области стека. Если информация защиты или соответственно бит защиты записи, относящийся к считываемой области стека, установлен на "1" то данные, хранящиеся в соответствующей области стека, представляют собой адрес возврата.
Предпосылкой для этого является, естественно, то, что информация защиты или соответственно биты защиты записи для данных, представляющих адрес возврата, например, в связи с командой CALL или иными записываемыми в стек 11а данными, устанавливаются на "1".
Данный дополнительный механизм защиты реализуется в соответствии с показанным на фиг. 2, с помощью схемы И 13. На схему И 13 в качестве входных сигналов подаются бит защиты записи, соответствующий записываемой области стека, и сигнал "считывание_стека", указывающий на цель применения считываемых данных, причем сигнал "считывание_стека" может принимать значение "1", если, как, например, в случае команды RET, предусматривается применение адреса возврата, и сигнал "считывание_стека" может принимать значение "0" при применении с другой целью. Выходной сигнал "действительное_считывание" схемы И 13 показывает, разрешено ли применение затребованных данных в качестве адреса возврата ("действительное_ считывание" = "1") или оно не разрешено ("действительное_ считывание" = "0"). Если при затребовании адреса возврата имеет место случай, когда применение запрошенных из стека 11а данных в качестве адреса возврата посредством сигнала "действительное_считывание" = "0" квалифицировано как неразрешенное, то это может интерпретироваться как попытка манипуляции или сбой аппаратных средств или программного обеспечения и являться стимулом для применения соответствующих мер защиты. Эти меры защиты могут предусматривать немедленное прерывание выполнения программы, и/или сброс системы, на которой выполняется программа, и/или выработку предупредительного сигнала, и/или стирание данных, относящихся к защите.
Согласно вышеприведенному описанию, информация защиты, защищенная от внешнего доступа, состоит из одного бита защиты записи. Само собой разумеется, что вместо этого может применяться код, состоящий из любого количества битов с любым значением, с помощью которого не только адрес возврата, но и любые другие защищаемые данные подвергаются особой обработке для их защиты от противоправных манипуляций и ошибок.
ЗУ защиты, в котором хранится различная информация защиты, как уже упоминалось выше, является запоминающим устройством, не доступным извне. Оно предпочтительно встраивается в устройство, на котором выполняется контролируемая компьютерная программа, т.е., как правило, в микропроцессор, в микроконтроллер или процессор сигналов, где оно особенно хорошо защищено от доступа извне. Реализация недоступного извне запоминающего устройства в составе микропроцессора, микроконтроллера или процессора сигналов (например, в форме скрытого или теневого стека) относительно проста. Для этого необходима только соответствующая модификация ядра программы.
Использование вышеописанного способа не требует существенных изменений в аппаратных средствах или в программном обеспечении. В частности, стек может применяться, как обычно.
Таким образом, создан способ контроля выполнения компьютерной программы в соответствии с ее назначением, с помощью которого простым путем и без изменения программных средств можно исключить возможность целенаправленного противоправного манипулирования ходом выполнения программы, а также частично исключить ошибки аппаратных средств и программного обеспечения.
название | год | авторы | номер документа |
---|---|---|---|
ЗАЩИЩЁННОЕ ЗАПОМИНАЮЩЕЕ УСТРОЙСТВО | 2018 |
|
RU2768196C2 |
СИСТЕМЫ И СПОСОБЫ ПРЕДОТВРАЩЕНИЯ НЕСАНКЦИОНИРОВАННОГО ПЕРЕМЕЩЕНИЯ СТЕКА | 2014 |
|
RU2629442C2 |
СИСТЕМЫ И СПОСОБЫ ОТСЛЕЖИВАНИЯ ФЛАГА В ОПЕРАЦИЯХ УСТРАНЕНИЯ ПЕРЕМЕЩЕНИЯ | 2014 |
|
RU2628156C2 |
СИСТЕМЫ И СПОСОБЫ ПРОВЕРКИ АДРЕСА ВОЗВРАТА ПРОЦЕДУРЫ | 2014 |
|
RU2628163C2 |
ПОЛУПРОВОДНИКОВОЕ ЗАПОМИНАЮЩЕЕ УСТРОЙСТВО | 1997 |
|
RU2169951C2 |
УМЕНЬШЕНИЕ ЗАВИСИМОСТИ ОТ СИНХРОНИЗАЦИИ В ПОМЕТКЕ СБОРА МУСОРА | 2020 |
|
RU2805768C2 |
СИСТЕМА И СПОСОБ ПРОВЕРКИ ИСПОЛНЯЕМОГО КОДА ПЕРЕД ЕГО ВЫПОЛНЕНИЕМ | 2012 |
|
RU2510074C2 |
СИСТЕМА УПРАВЛЕНИЯ КОПИРОВАНИЕМ С ОПТИЧЕСКОГО ДИСКА | 1998 |
|
RU2229172C2 |
Устройство для контроля микропроцессорной системы | 1987 |
|
SU1474650A2 |
СИСТЕМА ИДЕНТИФИКАЦИИ ДЛЯ УДОСТОВЕРЕНИЯ ПОДЛИННОСТИ ЭЛЕКТРОННЫХ СДЕЛОК И ЭЛЕКТРОННЫХ ПЕРЕДАЧ БЕЗ ИСПОЛЬЗОВАНИЯ ИДЕНТИФИКАЦИОННЫХ КАРТОЧЕК | 1996 |
|
RU2263348C2 |
Изобретение относится к способу контроля выполнения компьютерных программ в соответствии с их назначением. Техническим результатом является защита компьютерных программ от противоправных манипуляций при их выполнении. Способ заключается в обеспечении запоминающего устройства защиты, недоступного вне системы, исполняющей контролируемую компьютерную программу, препятствии перезаписи адресов возврата, препятствии использования ошибочно запомненных адресов возврата и ошибочно перезаписанных адресов возврата. 9 з. п. ф-лы, 2 ил.
Волномер | 1927 |
|
SU11136A1 |
RU 2055588 C1, 20.12.1995 | |||
US 5274817 A, 28.12.1993 | |||
Устройство для учета числа сыгранных на граммофоне пластинок | 1928 |
|
SU10186A1 |
Авторы
Даты
2003-12-27—Публикация
1998-01-15—Подача