Я не знаю много о ядре Linux, и у меня есть несколько вопросов.
Какова основная цель отделения памяти ядра от памяти пространства пользователя? Чтобы убедиться, что пользовательское приложение не может сделать ничего плохого ядру?
Сколько существует способов для приложения уровня пользователя передать управление ядру? Что я могу придумать: include (1) вызов системного вызова, (2) отображение памяти в ядре (но я думаю, что mmap () также системный вызов) и (3) загрузка модуля ядра (но я думаю, lsmod также вызывает некоторый системный вызов). Я прав? Есть ли другие способы, которые я пропустил?
Сколько способов атаковать ядро? Могу ли я иметь некоторые краткие сведения о них?
Если я получаю привилегию root, значит ли это, что я полностью контролирую ядро? А именно, я могу делать все, что захочу с ядром и оборудованием? Или у меня все еще ограничена мощность ядра?
Я был бы очень признателен, если бы кто-нибудь смог помочь мне найти ответ на эти вопросы.
источник
Ответы:
Я постараюсь ответить на вопросы максимально кратко. Вопросы, которые вы задаете, обычно рассматриваются на курсах по ознакомительным операционным системам в университетах, но я предполагаю, что вы не прошли такой курс.
Очень желательна изоляция памяти для процессов пользовательского пространства - не только для защиты ядра от вредоносных программ пользовательского пространства, но и для защиты программ пользовательского пространства друг от друга. Обычно это называется виртуальной памятью . Это также облегчает реализацию подкачки страниц, что также желательно по другим причинам (более простая фрагментация, более простые компоновщики / загрузчики и т. Д.).
Прерывания (не все из которых контролируют приложение уровня пользователя). Отказ процессора также отнимает «контроль» у процесса (например,
wait
и т. Д., Которые также являются системными вызовами). Ядро само может решить отменить планирование приложения.Это очень широкий вопрос. Ядро с плохо реализованными системными вызовами уязвимо. Возможность записи в физическую память была бы другим способом. Существуют и другие уязвимости, которые могут возникнуть из-за плохо реализованных инструкций (например, уязвимость sysret в процессорах Intel).
Привилегии root не совпадают с привилегиями ядра. Приложение, работающее от имени пользователя root, все еще использует виртуальную память, все еще должно совершать системные вызовы, все еще должно подчиняться другим правилам, которым должно соответствовать любое приложение уровня пользователя.
Если вы хотите, чтобы я предоставил более подробную информацию о некоторых ответах, дайте мне знать.
Если кто-то может улучшить некоторые ответы, пожалуйста, не стесняйтесь указывать на это.
источник