LINUX.ORG.RU

Разработка замкнутой программной среды

 , , ,


0

1

В рамках курсовой работы необходимо разработать замкнутую программную среду для Linux.

В целом нужно создать безопасную конфигурацию ОС по аналогии с astra-linux SE Смоленск 1.6, реализовать ЗПС и устранить возможность ее обхода через запись с /proc/pid/mem.

На сайте астры есть различные руководства и описания систем безопасности, как включить ту же ЗПС, руководства по разработке ПО для астры, установке. Однако я не нашел исходников, те что есть - https://wiki.astralinux.ru/pages/viewpage.action?pageId=1998854 для новых версий выдают 404, то есть файлов там нет.

Насколько я понял, для работы в зпс нужно будет подписывать ПО цифровым ключом, при собственной разработке как провернуть это я не представляю.

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



Последнее исправление: Gunburgender (всего исправлений: 1)

Гуглите «песочница», «безопасный запуск программ», ...

anonymous
()

SELinux.

Познакомьтесь с этой системой. Правда, в Astra Linux она не используется, ибо западло было бы использовать разработку АНБ. Но для решения Вашей задачи оно вполне годно.

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

Ну, в принципе, и всё.

UPD. «Теорию» начинать копать отсель — https://ru.wikipedia.org/wiki/Модель_Белла_—_Лападулы

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)

Исходя из следующей модели:

  1. Администратором ЗПС является root. Ему доступно изменение настроек ЗПС.
  2. Возможность получения пользователем привилегий администратора с использованием уязвимостей как ядра, так и системного ПО — уже дает возможность исполнять свой код, таким образом оставляем данные проблемы за гранью нашего небольшого уютного ЗПС.

Я бы предложил следующую реализацию:

  1. В ядре создается список, который будет хранить контрольные суммы всех исполняемых файлов. Для простоты можешь просто использовать radix tree.

  2. Добавляется простой procfs интерфейс, который позволяет при наличии привилегий администратора добавить контрольную сумму в список из пункта 1.

  3. В загрузчик исполняемых файлов со стороны ядра встраивается механизм, который производит вычисление контрольной суммы исполняемого файла, после чего производит поиск результата в списке из пункта 1. При отсутствии контрольной суммы в списке возвращаешь -EACCES.

  4. В загрузчик исполняемых файлов со стороны ядра встраивается механизм, запрещающий запуск интерпретаторов вне #!, тем самым закрывая возможность использовать интерпретаторы для обхода ЗПС.

  5. Отключается доступ к механизмам ptrace для пользователей.

  6. Изменяются параметры доступа в procfs для всех процессов пользователей на read-only.

Это довольно простая концепция, которую будет просто реализовать даже человеку, который ранее не работал с ядром.

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

Deleted
()
Ответ на: комментарий от Deleted

В смысле, не понял?

А мандатка то тут каким хером? Ему ЗПС нужен, а не разграничение прав доступа.

За тем хером, что в SELinux уже и ЗПС и мандатка в чистом виде реализованы. Учитывая Ваш же предыдущий комментарий, сразу и в ядре.

Ссылка на статью дана для того, чтобы у человека было хотя бы какое «теоретическое обоснование» для своего курсача. Именно эта модель в SELinux и применяется. Но у этой модели есть свои недостатки, которых лишена реализация, применяемая в Astra. Она там некая патентованная. Думаю, в рамках курсача он слегка задолбается реализовывать подобную «идеальную» модель.

UPD. Вдобавок (перечитал Ваш коммент), не факт что рут будет рулить системой всегда. В SELinux его, кстати, в правах тоже ограничивать. И серьёзно.

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 2)
Ответ на: комментарий от Deleted

К IMA хорошо бы иметь...

TPM. Это такая... «несколько более сложная» реализация.

Moisha_Liberman ★★
()
Ответ на: комментарий от Deleted

Так ему же реализовать нужно, а не использовать готовое :)

Deleted
()
Ответ на: комментарий от Deleted

Молча.

Есть некое приложение. При включённом SEL его запускаем, предсказуемо обламывается. Смотрим

grep 'yourapplication' /var/log/audit/audit.log | audit2allow -a -M yourapplication_local

Далее устанавливаем для него политику и делаем reboot:

semodule -i yourapplication_local.pp;reboot

Без reboot система политику не применит. Перезагрузить модули безнаказанно тут не получится.

Приговор — читать SELinux administration guide вплоть до полного просветления.

Moisha_Liberman ★★
()
Ответ на: Молча. от Moisha_Liberman

Приложение обламывается на этапе запуска, или при использовании каких-либо системных вызовов уже после того, как приложение запустилось?

Deleted
()
Ответ на: Мне ещё раз повторить с каким документом... от Moisha_Liberman

Мой вопрос выше был не по причине того, что я не знаю как работает SELinux, а должен был тебя навести на мысль о том, что ты, вероятнее всего, не прав.

Так что будь добр рассказать мне, на каком этапе SELinux запретит исполнение.

Deleted
()
Ответ на: комментарий от Deleted

Мне безразлично с чем был связан вопрос.

В контексте данного обсуждения (реализации системы, аналогичной применяемой в Astra Linux для ЗПС), это оффтоп. Изучение дополнительных материалов по теме производится в личное время Самостоятельно.

Ну либо не изучается вовсе.

Moisha_Liberman ★★
()
Ответ на: Мне безразлично с чем был связан вопрос. от Moisha_Liberman

SELinux не запретит запуск приложения, а отфутболит его на этапе запуска системных вызовов, мой некомпетентный друг.

Это значит, что никакой замкнутой программной средой данная схема не является.

Так что перед тем, как советовать кому-то читать что-то — начни с прочтения сам.

Deleted
()
Ответ на: Нннуда... от Moisha_Liberman

Ты не понимаешь разницы между замкнутой программной средой и разграничением прав доступа.

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

Если у тебя исполняется недоверенный код, то это уже не ЗПС.

Deleted
()

Единственное что добавлю...

Так это то, что если будете экспериментировать с SELinux, то делайте это не на «боевой системе», а в сторонке. Иначе можно многие скорби хапнуть. Это не просто «галочка», типа кликнул и всё работает. Security labels должны применяться ко всей системе и может получиться нехорошо, если система жёстко ляжет. Под SEL даже не всё может работать, кстати.

Можете так же AppArmor посмотреть. Идея в принципе как в SEL, но более простенько. Например, при копировании файла из SEL с ним передаётся его контекст безопасности. AppArmor столь глубоко не лазит.

В остальном... В удалённых всё написано. =)))

Moisha_Liberman ★★
()
Ответ на: комментарий от anonymous

Автор волен решать что ему делать.

Либо посмотреть как люди делают и дальше принять решение как улучшить. Либо велосипедить с нуля чего-то на эту тему, в рамках курсача, учитывая то, что средств в аналоги вбито было мама не горюй сколько. И со стороны АНБ (SELinux они заплтчили) и со стороны инфотекса и прочих организаций в РФ.

Вопроса при чём здесь «виртуальные машины» я не задаю просто потому, что боюсь услышать ответ. =))) Это во-первых. А, во-вторых, потому, что vm это не панацея и существуют методы выхода за пределы vm. Но в контексте обсуждавшейся темы, это всерьёз и надолго. =)))

Moisha_Liberman ★★
()

В целом нужно создать безопасную конфигурацию ОС

Я не знаю как подступиться к теме в принципе, с чего начать,

Начни с определения, что такое безопасная конфигурация ОС и замкнутая программная среда. Напиши список требований.

anonymous
()
Ответ на: комментарий от anonymous

Да всё нормально.

Сам посмеялся. =)

Просто, если раскрыть тему, то в той же hardened gentoo, где SELinux на всю голову, там root может сделать emerge -uDN @world, обновив систему. Но вот выполнить программу, которая только что обновилась от его учётной записи, открыв некие файлы и получить доступ к их содержимому, уже нет. Без дополнительных усилий.

Просто, это работает. Я вот о чём. У этой реализации есть недостатки, но проще за основу я и не знаю что взять.

Впрочем, дело это ТС, как скажет так и будет. Если вопросы будут, чем смогу помогу. А так-то, пока из треда вышел. Всем успехов.

Moisha_Liberman ★★
()

вообще то это тянет не на курсовую, а на диссертацию, если получится реализовать, как в Астре

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.