The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

В OpenBSD предложен новый системный вызов unveil() для изоляции ФС

29.07.2018 08:57

Тео де Раадт (Theo de Raadt) представил патч с реализацией дополнительной защиты при помощи нового системного вызова unveil(), который дополняет механизм ограничения доступа к системным вызовам pledge(). Новый системный вызов планируют включить в состав выпуска OpenBSD 6.4. В настоящее время код для защиты при помощи unveil() добавлен в 37 приложений из базовой системы OpenBSD, активировать патч планируется когда число приложений будет доведено до 50.

Системный вызов unveil() предоставляет новый способ изоляции доступа к файловой системе, интегрируемый в код приложений. Суть защиты заключается в том, что первым вызовом unveil() для приложения полностью блокируется доступ ко всей ФС. После чего выборочно открывается возможность доступа для отдельных путей, с которыми может работать приложение (реализация "белого списка" - по умолчанию всё запрещено, а необходимые пути следует явно разрешить).

Поддерживаются флаги ограничения доступа, т.е. можно отдельно открыть доступ на чтение, запись и исполнение, можно запретить создание или удаление файлов. Например, можно открыть доступ на запись к /tmp, на запуск /bin/sh и на чтение /var/spool. Блокировка осуществляется через интеграцию дополнительных фильтров, работающих на уровне системных вызовов, связанных с файловыми операциями (open(), chmod(), rename() и т.п.).

  1. Главная ссылка к новости (http://undeadly.org/cgi?action...)
  2. OpenNews: В OpenBSD добавлен код программного отключения SMT (HyperThreading)
  3. OpenNews: Разбор ситуации с обвинением OpenBSD в нарушении эмбарго при исправлении уязвимости KRACK
  4. OpenNews: В состав OpenBSD-Current добавлен механизм защиты RETGUARD
  5. OpenNews: OpenBSD развивает Pledge, новый механизм изоляции приложений
  6. OpenNews: Выпуск OpenBSD 6.3
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/49042-openbsd
Ключевые слова: openbsd, unveil
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (69) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноняшка (?), 09:04, 29/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    А если открыт допуск  на запуск /bin/sh , - что еще надо подлому коту Леопольду? ))
     
     
  • 2.4, Аноним (4), 09:15, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Как и sudo на запуск любого контекста
     
     
  • 3.5, Catwoolfii (ok), 09:31, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Можно и не любого. Как настроишь, так и будет.
     
  • 3.28, Аноним (28), 18:28, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Как и sudo на запуск любого контекста
    > OpenBSD
    > sudo

    ну-ну.


     
  • 2.10, Аноним (10), 11:53, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В принципе,  в сочетании с pledge можно как раз очень сильно ограничить возможности запускаемого шелла. Но пример, действительно, не самый удачный.
     
  • 2.59, Аноним (59), 00:59, 31/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Сам по себе /bin/sh не много умеет.
     
     
  • 3.62, PereresusNeVlezaetBuggy (ok), 13:21, 31/07/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Сам по себе /bin/sh не много умеет.

    Всего лишь запускать произвольные программы и открывать произвольные файлы, угу.

     

  • 1.2, Аноним (4), 09:06, 29/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    AppArmor в бинарнике сотворили?
     
     
  • 2.24, Аноним (24), 16:30, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Тоже такая мысль сразу возникла.
     

  • 1.3, Аноним (3), 09:15, 29/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Странно ограничивать приложение из него самого. Еще и окажется, что надо исходники править и пересобрать программу, чтобы добавить доступ в нужное тебе место, которое не предусмотрели разработчики.
     
     
  • 2.6, Аноним (4), 09:35, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Разработчикам стоит просто выпилить поддержку OpenBSD для решения проблемы.
     
     
  • 3.19, Аноним (28), 12:53, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Разработчикам стоит просто выпилить поддержку OpenBSD для решения проблемы.

    Разработчикам чего? Решению какой именно проблемы?

    Боюсь, выпиливание поддержки опенка (т.е. на самом деле сознательное прибивание гвоздями к линуксизмам) не сможет заставить Экспертов Опеннета читать перед тем как комментировать и давать мудрые советы.


     
  • 3.67, Аноним (67), 10:59, 19/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Леннарт, залогиньтесь.
     
  • 2.7, anonymous (??), 11:02, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Наоборот, только приложение (автор приложения) знает какие доступы ему нужны. А пытаться угадывать через selinux/apparmor это как суслика в поле искать — можно, но нужно с ведерком по норам побегать.
     
     
  • 3.9, Prototik (ok), 11:33, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну да, и автор тоже великолепно знает, куда я хочу положить данные.
     
     
  • 4.13, anonymous (??), 12:07, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ну да, и автор тоже великолепно знает, куда я хочу положить данные.

    А что, у нас open уже мысли научился читать? Так или иначе белый путь приложение будет знать.

     
     
  • 5.20, Аноним (20), 15:12, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Так или иначе белый путь приложение будет знать.

    C:\Program Files\Program name\Temp

     
     
  • 6.21, anonymous (??), 15:17, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я могу тоже написать любой путь. Какая мысль скрыта за ним? То что на системе пользователя C:\Program Files может быть любым? Ну так приложение как-то же делает open('Temp'). Считает от cwd или еще как узнает путь до установки. В общем автор и приложение все знают, не переживайте.
     
  • 4.68, Аноним (67), 11:01, 19/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Конечно знает. Хардкоденные пути он и так знает. Нехардкоденные - прочитает из конфига.
     
  • 3.11, Аноним (10), 11:58, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Более того, именно само приложение знает, когда привилегии перестают быть нужны. Скажем, тот же web-сервер нуждается в повышенных привилегиях и доступе к произвольным каталогам обычно только на этапе инициализации, а дальше список рабочих каталогов известен, сокеты все открыты - знай, принимай подключения, отдавай страницы.
     
  • 3.14, Аноним (14), 12:23, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +8 +/
    > Наоборот, только приложение (автор приложения) знает какие доступы ему нужны

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

     
     
  • 4.15, anonymous (??), 12:31, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Я автор софта для наложения смешных эффектов на фотки.

    Вам лучше так и оставаться на прикладном уровне и пользоваться android sdk. Ограничения по сисколам пока не для вас.

     
     
  • 5.27, .. (?), 18:17, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +7 +/
    man sarcasm
     
  • 4.69, Аноним (67), 11:02, 19/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    GPS, биометрический сенсор и доступ к фитнес-трекеру забыл.
     
  • 2.16, aknor (?), 12:33, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Очевидное применение , - ограничивать любой интерпретатор  ...
     
  • 2.17, Аноним (28), 12:39, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Странно ограничивать приложение из него самого.

    Странно не слышать ни разу о "добровольном" сбросе привилегий на случай уязвимостей.
    https://www.google.ru/search?q="drop+privileges"

    > Еще и окажется, что надо исходники править и пересобрать программу, чтобы добавить доступ в нужное тебе место, которое не предусмотрели разработчики.

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

     
     
  • 3.45, Аноним (45), 00:54, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Чувак, я ничерта не понял из того что ты сказал, но ты заговорил и достучался до моего сердца.
     
  • 2.31, Аноним (31), 19:57, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если приложение может прочитать путь из конфига, оно его и будет вайтлистить, не?
     
  • 2.35, PereresusNeVlezaetBuggy (ok), 20:47, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +5 +/
    unveil — это защита от ситуаций, когда порядочная программа взламывается и кто нехороший с её помощью начинает делать то, что эта программа делать не должна. Если вам нужна защита от запуска изначально вредоносного кода, то вам к Данилову и прочим.
     

  • 1.8, Alex (??), 11:21, 29/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Это аналог firejail
    OpenBSD +1
     
     
  • 2.12, Аноним (10), 12:00, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, это не аналог firejail. Приезжайте на LVEE, расскажу подробнее. ;)
     
  • 2.50, Аноним (50), 03:43, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    firejail и используемый там seccomp на бумаге гибче, но на практике абсолютно ... большой текст свёрнут, показать
     

  • 1.18, Аноним (18), 12:42, 29/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Я в начале подумал, что системный вызов назвали unevil
     
     
  • 2.22, PereresusNeVlezaetBuggy (ok), 15:24, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Это обыгрывалось, да, только уже не помню, кем. :))
     

  • 1.23, Аноним (23), 16:06, 29/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    когда хотели изобрести SELinux, но не догадались вынести список файлов в отдельный конфиг, чтобы не патчить весь софт.
     
     
  • 2.25, Аноним (28), 17:02, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > когда хотели изобрести SELinux, но не догадались вынести список файлов в отдельный
    > конфиг, чтобы не патчить весь софт.

    Когда лапчато-перепончатые не в курсе, но гордо задранную гузку после высказывания особо ценного мнения имеют.

     
  • 2.26, anonymous (??), 18:00, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Когда кто-то хотел сумничать, но громко напузырял. Пути сцеплены с логикой приложения. И разделять их можно только от безисходности (это база проектирования любой системы), собственно selinux и реализует костыльный вариант.
     
     
  • 3.29, Аноним (29), 19:27, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Что в SELinux костыльного? Реализация в ядре, гибкая настройка всего и всея в юзерспайсе. Опенбздишнекам стоило бы поучиться, а не дрчить протезной лапой, как обезьяна в "Кремниевой долине"
     
     
  • 4.30, adaww (?), 19:45, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    чувааак ! тут недавно нет бсд 8 вышла...;) с тем же pkgsrc...не нравится опенка ибашЪ юзай ее или фрю. и не иби мозги...
     
  • 4.32, Аноним (31), 20:38, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Все. Потому что написание правил selinux заслуженно считается крайне трудоемким занятием, требующим сотни человекочасов для тестирования всех случаев.

    А это скорее аналог sandboxing, как в chrome и firefox.

     
     
  • 5.36, PereresusNeVlezaetBuggy (ok), 20:54, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Верно. Как раз для Chrome уже давно реализована песочница на базе pledge(), теперь к ней добавляется и unveil. Для unveil() ещё нужна доработка, но в целом уже работает. С Firefox, к сожалению, всё не так хорошо, но уже есть пара патчей, добавляющих поддержку pledge(), а там и до unveil() недалеко.
     
     
  • 6.37, Аноним (31), 20:55, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В лялихе не через pledge, там seccomp.
     
     
  • 7.38, PereresusNeVlezaetBuggy (ok), 21:07, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Угу. К SECCOMP ещё несколько лет назад была масса вопросов (вроде возможности отыграть назад, фактически, выключая seccomp), сейчас — может, под давлением pledge? — часть из них решилась.
     
     
  • 8.40, Аноним (31), 21:28, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Насчет отыграть не в курсе 8212 можно ссылку ... текст свёрнут, показать
     
     
  • 9.46, PereresusNeVlezaetBuggy (ok), 01:29, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    PR_SET_NO_NEW_PRIVS появился в 3 5 только, если я правильно разобрался ... текст свёрнут, показать
     
     
  • 10.60, A. Stahl Is Gay (?), 13:04, 31/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Если я правильно понял описание, то это для того, чтобы потомки не могли делать ... текст свёрнут, показать
     
     
  • 11.63, PereresusNeVlezaetBuggy (ok), 13:25, 31/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    И это тоже, так как в seccomp, насколько помню, привилегии просто наследуются В... текст свёрнут, показать
     
  • 4.34, PereresusNeVlezaetBuggy (ok), 20:43, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В OpenBSD механизмы ограничения системных вызовов были тогда, когда на Linux не было вообще ничего подобного. Это уже далеко не первое поколение.
     
     
  • 5.65, Аноним (65), 23:50, 05/08/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    RSBAC, позволяющий ограничить все что угодно в линухе, появился в 2000 году. В то время опенок еще даже не был в состоянии загрузится на реальном железе(впрочем и сейчас с железом которому менее 10 лет у опенка жесткие проблемы).
    А ты продолжай врать.
     
     
  • 6.66, PereresusNeVlezaetBuggy (ok), 02:22, 06/08/2018 [^] [^^] [^^^] [ответить]  
  • +/
    1. «Появился» он в виде патча, а не в mainline ядре. Напомните, когда он стал частью дефолтного ядра в каком-либо крупном дистрибутиве? Потому что сравнивать доступный где-то патч и изначально доступную и работающую функциональность как-то некорректно, не находите?

    Впрочем, я уже поправился по соседству, говоря про SELinux, — надо было здесь тоже, признаю.

    2. OpenBSD работал на реальном железе и куче архитектур с момента рождения. В отличие от изначально x86-only Linux (я очень рад за ядро Linux, что сейчас оно может куда больше, чем в 1995-м). «А ты продолжай врать».

     
  • 4.42, Аноним (42), 22:48, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Я сам линуксоид, но SELinux - переусложненная хрeнь, которая, мягко говоря, не украшает стек. Костыльного в ней то, что профили по умолчанию долго пилились методом проб и ошибок в стиле "Запускаем нечто, оно вылетает. Ого, оно оказывается еще и такой доступ требует? Даем!" Это позорище! Профиль безопасности должен быть частью самого приложения, авторы лучше знают, что приложению надо. Так что даешь unveil(), но только более мощный.
     
     
  • 5.44, Аноним (44), 00:24, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не знают и не могут знать.

    man pam
    man nss

     
     
  • 6.47, PereresusNeVlezaetBuggy (ok), 01:32, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А это как раз много «хорошего» говорит об архитектуре PAM и NSS.

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

     
     
  • 7.55, Crazy Alex (ok), 19:15, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще-то это называется "API" и "information hiding". Приложение должно знать то, что оно само делает. Как именно работают используемые им сервисы, оно знать и не должно. В том числе и куда они лезут - это уровень системы.
     
     
  • 8.57, PereresusNeVlezaetBuggy (ok), 19:42, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Это было бы information hiding, если бы таковые форки, открытие файловых дескрип... текст свёрнут, показать
     
  • 6.49, Аноним (50), 03:00, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ты бы ещё LD_PRELOAD вспомнил
     
  • 4.53, КО (?), 10:16, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Реализация в ядре, гибкая настройка всего и всея в юзерспайсе.

    И маленький ньюанс.
    Для ускорения всего и вся занесли чать Самбы в ядро (ну чтоб меньше переключений контекста).
    Все тру... И тут Селинукс начал вопить - куски йадра утекают всеть - запретить. Правда и сам не мог объяснить толком что именно и ссылался на забавные имена файлов в корневой системе. Завели баг, все пучком.
    - разработчи селунукса : надо чтоб пакеты помечались пусть сделают
    - самбисты : это к ядерщикам, они их генерят
    - ядерщики : это не к нам, мы такой фигней не маемся - пишите правила
    - писатели правил : это что? нам писать правило можно все из ядра в сеть? а зачем тогда все? Самбисты - метьте пакет.
    - самбисты : да сказано же, мопед ядерщиков
    - ядерщики : мопед не наш, мы только объяву разместили, пишите правила...

    В общем, забавная была переписка.
    Поэтому и считается что правила проще создавать самому и в динамике отслеживать.
    Типа вот я запросил, попользовался и больше не надо. Чем один раз и на всегда.

     
  • 3.51, Ordu (ok), 04:11, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > собственно selinux и реализует костыльный вариант.

    SELinux -- это не костыльный вариант. Это классический корпоративный оверинжиниринг.

     
     
  • 4.56, Crazy Alex (ok), 19:17, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Который при этом так же классчиески работает в корпоративных системах, не привязан к заморочкам самого приложения и допускает отдельный аудит правил. А вот как сделать аудит того, что предлагают в топике, без аудита всего кода приложения - не представляю.
     
     
  • 5.58, Ordu (ok), 22:04, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да-да, я о том же Корпоративный оверинжиниринг, попытка решить 200 проблем одн... большой текст свёрнут, показать
     
  • 2.33, PereresusNeVlezaetBuggy (ok), 20:41, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    1. SELinux появился куда позднее, скажем, systrace — который в OpenBSD уже давно успели выпилить.

    2. SELinux не позволяет изменить привилегии после инициализации приложения, то есть программа всегда работает с максимально допустимыми привилегиями.

    3. SELinux куда сложнее, в плохом смысле этого слова, и заточен прежде всего под соответствие требованиям законодательства (США), а не реальные потребности.

     
     
  • 3.39, PereresusNeVlezaetBuggy (ok), 21:21, 29/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    ... и тут я немного наврал:
    хотя systrace был добавлен в OpenBSD в 2002 году, а SELinux в ядро — в 2003-м, но именно презентован SELinux в виде, доступном для использования, был всё же раньше, в 2000-м.
     

  • 1.41, Ordu (ok), 22:24, 29/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А ограничения наследуются дочерними процессами?
     
     
  • 2.43, антончик (?), 00:13, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Тоже задался таким вопросом. Можно было бы написать шелл-враппер для старта программы и явно указать куда ей можно ходить, чтоб в ~/.ssh даже не думала заглядывать.
     
     
  • 3.52, Аноним (52), 06:48, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Получается с unveil нужно еще системное приложение писать, для программ которые его пока не поддерживают. Типо файрволла, только с правилами путей?
     
     
  • 4.54, PereresusNeVlezaetBuggy (ok), 13:07, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Написать можно, но смысл теряется: немалая часть путей при типовом использовании pledge/unveil актуальна только на этапе инициализации, а при использовании внешнего приложения получается, что мы всегда позволяем максимум требуемого всегда.
     
  • 2.48, PereresusNeVlezaetBuggy (ok), 01:36, 30/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Для pledge это определяется вторым аргументом, он позволяет задать ограничения именно для запускаемых через exec бинарников. Для unveil семантика ещё до конца не устаканилась, что-то может поменяться, — изначально эта функциональность вообще планировалась как часть pledge, но постепенно стало понятно, что нужен другой принцип работы, поэтому и системный вызов отдельный.
     

  • 1.61, Урри (?), 13:14, 31/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    подпишусь ка я...
     
  • 1.64, Daemon (??), 23:25, 01/08/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Тео видимо на тяжелые наркотики с пива перешел ))))
     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру