Я понимаю, что вы пытаетесь сделать, но я действительно беспокоюсь, что это может быть функция безопасности, которая дает вам теплое нечеткое чувство без веской причины;и это самые опасные виды защиты.(Другим примером этого может быть LSM, сидящий рядом с вашим, SElinux. Хотя я думаю, что я в меньшинстве по этому мнению ...)
Программные данные процесса - не единственноеэто влияет на его поведение.Переполнение стека, когда вредоносный код записывается в стек и попадает в него, проверяет целостность исходного текста программы.Не говоря уже о том, что злоумышленник может использовать исходный неизмененный текст программы в своих интересах .
Также, вероятно, есть некоторые проблемы с производительностью, с которыми вы можете столкнуться, если вы постоянно вычисляете DSAвнутри ядра.И вы добавляете намного больше к длинному списку кода привилегированного ядра, который может быть использован позже.
В любом случае, чтобы решить вопрос: вы можете написать модуль ядра, который создает ядроПоток, который по таймеру проходит через каждый процесс и проверяет его целостность.Это можно сделать, используя таблицы страниц для каждого процесса, сопоставляя страницы, доступные только для чтения, и проверяя их целостность.Однако это может не сработать, поскольку каждая страница памяти, вероятно, должна иметь свою собственную подпись, если только вы каким-то образом не объедините их все вместе.
Следует отметить, что общие библиотеки необходимо проверять целостность только один раз заразвертка, так как они повторно отображаются во всех процессах, которые их используют.Однако для его реализации требуется изощренность, поэтому, возможно, имейте это в разделе «хорошо иметь» вашего дизайна.
Если вы не согласны с моим обоснованием того, что это может быть не очень хорошей идеей, я быбыть очень заинтересованным в ваших мыслях.Я столкнулся с этой идеей на работе некоторое время назад, и было бы неплохо привнести свежие идеи в наше обсуждение.