Как я могу запретить другим Linux модулям ядра получать доступ к некоторым обычным файлам? - PullRequest
0 голосов
/ 01 мая 2020

Проблема в том, чтобы запретить доступ к некоторым файлам (файлам из моего "черного списка"). Это означает, что никто кроме меня (моего собственного модуля ядра) не может ни читать, ни изменять эти файлы.

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

Но я не сдался, я продолжил изучение этой проблемы.

Я заменил некоторые поля таблицы системных вызовов указателями на свои собственные функции. Таким образом мне удалось запретить любому модулю USER получать доступ к файлам из моего черного списка; Кроме того, этот подход не зависит от разрешений файла или владельца файла. Однако ключевое слово «пользовательские модули». Я имею в виду, что любой модуль ядра все еще может легко получить доступ к файлам из моего черного списка посредством вызова, например, функции filp_open(). Я просмотрел исходные коды Linux и оказалось, что все эти системные вызовы (open, openat, ...) являются простыми обертками и не более того.

Не могли бы вы мне помочь? Есть ли способ сделать что-то с filp_open, подобное тому, что я делал с системными вызовами? Любые другие решения (без перехвата) приветствуются.

1 Ответ

4 голосов
/ 01 мая 2020

То, что вы просите, невозможно. Теоретически , этого можно достигнуть, запустив ядро ​​под пользовательским гипервизором или запустив на нестандартном оборудовании, но это будет крайне Сложно (если не невозможно) достичь в реальности.

Вы не можете защитить ядро ​​от самого себя. В любом обычном сценарии (т.е. без выделенного оборудования или гипервизора) ядро ​​Linux работает на самом высоком уровне привилегий на машине и, следовательно, может отменить любые внесенные вами изменения, если оно того пожелает. Если вашему модулю нужно запретить доступ к какому-либо файлу всему ядру , то в том, что вы делаете, концептуально что-то не так. Более того, вы, похоже, предполагаете, что другие модули ядра будут как-то «заинтересованы» в том, чтобы связываться с вашим модулем: почему это так?

Более того, даже изменение разрешений или переопределение системных вызовов не решает никаких проблем: если вы не правильно не настроите блокировку ядра (ядро> = v5.4) и / или другие меры безопасности, такие как подпись модуля (и в идеале также безопасную загрузку), пользователь root всегда может вставлять модули и подрывать ваши «меры безопасности».

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...