проверка целостности программного кода

Проверка целостности программного кода

Библиографическая ссылка на статью:
Макарычев П.П., Карпов А.Е. Метод проверки целостности кода на основе хеширования // Современные научные исследования и инновации. 2012. № 6 [Электронный ресурс]. URL: https://web.snauka.ru/issues/2012/06/14852 (дата обращения: 20.10.2021).

Введение

Последние годы, по данным исследований антивирусных компаний, характеризуются повышением активности вредоносного кода [2]. Современные вредоносные программы представляют собой сложные технические продукты, использующие множество методов для обхода штатных средств защиты информации, обеспечиваемых операционными системами, а также средств защиты антивирусных программ. Угрозы начинают принимать черты информационной войны, о чём может свидетельствовать атака с применением компьютерного червя Stuxnet [10]. В таких условиях АСУ критического применения нуждаются в наиболее надёжных средствах защиты. Одной из тенденций в создании безопасной среды является разработка средств, обеспечивающих целостность кода, посредством выполнения его контроля.

Целостность ресурсов информационной системы – состояние ресурсов информационной системы, при котором их изменение осуществляется только преднамеренно субъектами, имеющими на него право, при этом сохраняются их состав, содержание и организация взаимодействия [1]. Контроль целостности кода заключается в проверке состояния кода исполняемых модулей. Можно выделить следующие виды контроля целостности кода:

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

Для проверки целостности используются следующие методы контроля:

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

Читайте также:  посттравматический артрит коленного сустава код мкб

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

Определение неизменяемых частей исполняемых модулей

При решении задачи определения неизменяемых частей, во-первых, была проанализирована спецификация формата PE – Microsoft Portable Executable and Common Object File Format [11]. По итогам анализа данной спецификации выделены следующие части структуры PE, которые не должны модифицироваться:

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

Помимо этого в ходе исследования, проводимого с помощью прототипа, было выявлено, что у модулей, выполняющихся в режиме ядра, разделы, имеющие флаг IMAGE_SCN_MEM_DISCARDABLE, могут выгружаться из памяти после загрузки без возможности последующего возврата в память. К таким разделам, как правило, относятся разделы “INIT” (содержат код инициализации модуля), “.reloc” (содержат информацию, необходимую для переадресации) и “.rsrc” (содержат ресурсы).

Таким образом, если исполняемый модуль – это совокупность заголовка и разделов:

061312 0617 1,

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

061312 0617 2.

Модель и алгоритм контроля целостности кода

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

Читайте также:  нес код в турции образец

Контролируемые разделы могут иметь переадресованные данные, которые будут изменяться при загрузке модуля по различным базовым адресам. Как было отмечено ранее, в проекте SecVisor [14] эта проблема решается путём выполнения проверки до применения переадресации. Поскольку в данной работе необходимо обеспечить как проверку целостности загрузки, так и времени выполнения, то такой подход не применим, поэтому предлагается переадресуемые данные при подсчёте значения хеш-функции необходимо пропускать.

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

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

061312 0617 3(1)

Пусть 061312 0617 8– исполняемый модуль, 061312 0617 9. Проверяемая информация модуля m061312 0617 10, 061312 0617 11.

Тогда эталонная проверочная информация для модуля m:

061312 0617 12

где f – функция вычисления хеша от заголовка исполняемых модулей, ExtractRelocations – функция извлечения информации о переадресации из разделов “.reloc”, g – функция вычисления хеша от раздела.

Из определения (1) следует, что хранилище эталонной проверочной информации:

061312 0617 13. (2)

Определим функцию поиска эталонной проверочной информации по значению хеш-функции от заголовка.

Пусть значение хеш-функции 061312 0617 14.

Тогда функция поиска эталонной проверочной информации выполняет отображение вида:

061312 0617 15.

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

На рисунке 1 представлен предлагаемый в данной работе алгоритм проверки целостности модуля.

Входные данные: Module – информация об исполняемом модуле; Storage – хранилище с эталонной проверочной информацией.

Читайте также:  коды в роблоксе в симуляторе ниндзя

Переменные: Status – статус проверки целостности модуля; CheckedInfo – проверяемые участки модуля; HeaderHash – значение хеш-функции от заголовка модуля; EtalonInfo – эталонная проверочная информация о модуле; I – счётчик проверяемых разделов; curScnHash – значение хеш-функции от текущего проверяемого раздела.

Результат: значение переменной Status; возможные значения – «Целостность не нарушена», «Неизвестный модуль», «Целостность модуля нарушена».

061312 0617 16

Рисунок 1 – Алгоритм проверки целостности модуля; вид – контроль комбинированный; метод – сравнение значений хеш-функции

Выводы

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

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

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

Библиографический список

Связь с автором (комментарии/рецензии к статье)

Оставить комментарий

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

&copy 2021. Электронный научно-практический журнал «Современные научные исследования и инновации».

Источник

Поделиться с друзьями
admin
Здоровый образ жизни: советы и рекомендации
Adblock
detector