The OpenNET Project / Index page

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



"OpenBSD развивает Pledge, новый механизм изоляции приложений"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"OpenBSD развивает Pledge, новый механизм изоляции приложений"  +/
Сообщение от opennews (??), 10-Ноя-15, 17:36 
Тео де Раадт (Theo de Raadt) представил (http://www.openbsd.org/papers/hackfest2015-pledge/mgp00001.html) на конференции Hackfest 2015 новый механизм изоляции системных вызовов Pledge (http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/...), продолжающий развитие идей, реализованных в появившейся в OpenBSD 5.8 (https://www.opennet.ru/opennews/art.shtml?num=43156) подсистеме tame (http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-5.8/man2/tame...). Pledge уже интегрирован в ветку OpenBSD-CURRENT и будет доступен в релизе OpenBSD 5.9. В настоящее время механизмы защиты Pledge задействованы в 70% утилит базовой системы, к релизу OpenBSD 5.9 планируется обеспечить полный охват всех утилит.


По своей сути Pledge напоминает множество других механизмов ограничения доступа к системным вызовам, таких как seccomp, capsicum и systrace, но в отличие от них разработан с оглядкой на максимальное упрощение применения. Из-за усложнений, связанных с необходимости построения правил, включающих отдельные вызовы, прошлые попытки повсеместного  применения изоляции системных вызовов при помощи systrace оказались безрезультатны. Единицы программ были защищены, но основная масса так и осталась без изменений. Для решения данной проблемы решено было создать новый метод формирования политик безопасности, который мог бы был легко применён ко всем приложениям базовой системы, без необходимости вникать в детали. В итоге за шесть месяцев существования Pledge на его использование переведено более 400 утилит  OpenBSD.

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


Анализ закономерностей обращения к системным вызовам в штатных утилитах OpenBSD показал, что имеется типичный сценарий использования системных вызовов: достаточно большое число системных вызовов используется на этапе инициализации, после чего обращение к ним существенно сокращается. Обычно для обеспечения защиты достаточно добавить вызов pledge() в участок кода после инициализации, но до начала основного цикла.


Классы системных вызовов включают (http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/...) stdio (ввод/вывод), rpath (только чтение файлов), wpath (запись файлов), cpath (создание файлов), tmppath (работа со временными файлами), inet (сетевые сокеты), unix (unix-сокеты), dns (резолвинг в DNS), getpw (доступ на чтение к базе пользователей), ioctl (вызов ioctl), proc (управление процессами), exec (запуск процессов), id (управление правами доступа) и т.п.  


Например, для программы cat, которая только читает файлы, можно указать pledge("stdio rpath", NULL),  для mkdir - pledge("stdio rpath cpatch wpatch fattr", NULL), а для patch -  pledge("stdio rpath cpatch wpatch tmpath fattr", NULL). Подобные ограничения позволят работать с файлами, но не дадут создавать сокеты и запускать другие приложения. Насколько pledge более прост для внедрения можно судить по утилите file: при использовании systrace для лимитирования системных вызовов требовалось 300 строк кода, в то время как pledge позволяет обойтись двумя вызовами pledge.


<center><a href="http://www.openbsd.org/papers/hackfest2015-pledge/mgp00028.h... src="https://www.opennet.ru/opennews/pics_base/0_1447166009.jpg&q... style="border-style: solid; border-color: #606060; border-width: 1px;max-width:100%;" title="" border=0></a></center>


URL: https://news.ycombinator.com/item?id=10537268
Новость: https://www.opennet.ru/opennews/art.shtml?num=43295

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от Аноним (-), 10-Ноя-15, 17:36   +4 +/
В итоге получается примерный аналог AppArmor, но с указанием профиля безопасности не во внешнем файле, а в исходном коде программы.

Особенно интересно будет с доступом к конкретным файлам, а не файлами вообще (как в примерах). Захотел переместить файл, оставив симлинк - лови привет :)

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #8, #15

2. Сообщение от Fyfy (?), 10-Ноя-15, 18:27   –19 +/
Что только люди не делают лиж бы не писать на нормальных языках типа  Scala/Java....
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #5, #6, #16

5. Сообщение от Аноним (-), 10-Ноя-15, 18:39   +4 +/
> Что только люди не делают лиж бы не писать на нормальных языках типа  Scala/Java....

От дурака-программиста "нормальные" языки не защищают.
Кроме того, языки, в которых скорость разработки ставится превыше ресурсоэффективности конечного продукта - весьма способствуют разаведению таких программистов.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2

6. Сообщение от Аноним (-), 10-Ноя-15, 18:44   +9 +/
нормальные языки @ жава. Чот ржу
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #17

7. Сообщение от PascalRD (ok), 10-Ноя-15, 18:45   –1 +/
Отличный костыль!
Ответить | Правка | Наверх | Cообщить модератору

8. Сообщение от Elhana (ok), 10-Ноя-15, 18:52   +11 +/
Отличие в том, что AppArmor/SELinux ты как админ можешь отключить, когда он заебал (и большинство так и делают), а pledge() нет, кроме как выпилив из исходников.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #10, #12, #14, #27, #33

9. Сообщение от Anonymous_ (?), 10-Ноя-15, 19:52   +2 +/
Елегантное решение
Ответить | Правка | Наверх | Cообщить модератору

10. Сообщение от anonymous (??), 10-Ноя-15, 20:20   –1 +/
Зато с pledge() меньше вероятность того, что внесенные ограничения будут мешать работать с программой, так как их определяют сами разработчики, а не мейнтенер дистрибутива
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #29, #48

12. Сообщение от Аноним (-), 10-Ноя-15, 20:28   +4 +/
специально для вас есть слайд:
http://www.openbsd.org/papers/hackfest2015-pledge/mgp00005.html
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #42

13. Сообщение от Pilat (ok), 10-Ноя-15, 20:28   +/
Не проще ли полностью виртуализировать операционные системы, а потерю производительности скомпенсировать отказом от пожиралок CPU типа питон, php и скриптовых языков.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #19, #20

14. Сообщение от Аноним (-), 10-Ноя-15, 20:46   +1 +/
> когда он заебал (и большинство так и делают)

это применимо большей частью к selinux'у

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8

15. Сообщение от Аноним (-), 10-Ноя-15, 20:47   –2 +/
> В итоге получается примерный аналог AppArmor

а вообще в самом-самом итоге получится примерный аналог minix

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

16. Сообщение от Аноним (-), 10-Ноя-15, 21:00   +1 +/
Которые написаны на С/С++
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2

17. Сообщение от YetAnotherOnanym (ok), 10-Ноя-15, 22:11   +/
Как понять фразу "нормальные языки на жава" или "нормальные языки при жава"?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #18

18. Сообщение от Аноним (-), 10-Ноя-15, 22:31   +/
http://advice-dog.ru/dog/%D0%BD%D0%BE�...

так понятнее?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17

19. Сообщение от Аноним (-), 10-Ноя-15, 22:31   +/
> Не проще ли полностью виртуализировать операционные системы, а потерю производительности
> скомпенсировать отказом от пожиралок CPU типа питон, php и скриптовых языков.

много производительности не бывает

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #13

20. Сообщение от rob pike (?), 10-Ноя-15, 22:49   +3 +/
Виртуализация не является решением проблем безопасности.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #13 Ответы: #23

23. Сообщение от Аноним (-), 10-Ноя-15, 23:35   +/
> Виртуализация не является решением проблем безопасности.

Виртуализация вообще не решает большинство проблем, а лишь плодит новые. Но админам локалхостов или гогнохостингов этого, разумеется, не понять.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #20 Ответы: #25, #32

24. Сообщение от Аноним (-), 11-Ноя-15, 00:10   +/
Кто сказал, что безопасность - это просто?
Ответить | Правка | Наверх | Cообщить модератору

25. Сообщение от angra (ok), 11-Ноя-15, 02:04   +/
Точно, ни проблему бессмертия, ни мира во всем мире, ни даже "трубы горят" виртуализация не решает. Но может она и не для этого была придумана? Ведь все таки небольшое(на фоне всей совокупности проблем человечества) количество проблем она отлично позволяет решить. В том числе и проблемы в области компьютерной безопасности.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23 Ответы: #31

26. Сообщение от бедный буратино (ok), 11-Ноя-15, 04:07   +/
Ну, это не новость, это уже старость.

Оно ещё под именем tame сколько развивалось, потом переименовалось, и презентаций уже было несколько штук.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #38

27. Сообщение от бедный буратино (ok), 11-Ноя-15, 04:08   –3 +/
Вы абсолютно не понимаете специфики OpenBSD
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #47

28. Сообщение от pavlinux (ok), 11-Ноя-15, 04:57   +2 +/
> Подобные ограничения позволят работать с файлами, но не дадут создавать сокеты и запускать другие приложения.

Вопрос из Отдела Логики РАН: Я живу на Арбате, купил себе КАМАЗ, с 8 до 23 передвижение на них в центре запрещено. Не долбойоп ли я?

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #34

29. Сообщение от pavlinux (ok), 11-Ноя-15, 05:00   +2 +/
Реквестую в каждый бинарник хардкодить Manifest.xml с набором пермишенов. :D
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

31. Сообщение от rob pike (?), 11-Ноя-15, 05:27   +1 +/
Решать проблемы безопасности виртуализацией - все равно что решать RAIDом проблему сохранности данных. Это во-первых.

Во-вторых, некоторые побочные свойства виртуализации могут, разумеется, быть использованы в том числе и применительно к вопросам безопасности. Но.
Безопасность - это регламент.
Защита - только часть его (наряду с такими аспектами как аудит, сценарии, анализ и идентификация угроз, экономическое обоснование).
Технические средства защиты - только малая часть ее.
Конкретные технологии, используемые в технических средствах защиты - только малая часть их.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #25 Ответы: #40

32. Сообщение от Классический анонимуз (?), 11-Ноя-15, 05:48   –1 +/
У нас в конторе под кило серваков, всё под vmware или hyperV. Storage - общий мегаSAN за 100500 нефти.

Как обеспечивать безотказную работу этих 100500 разных корпоративных систем без лоховской виртуализации?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23 Ответы: #35

33. Сообщение от Какаянахренразница (ok), 11-Ноя-15, 06:05   +/
> Отличие в том, что AppArmor/SELinux ты как админ можешь отключить, когда он заебал
> (и большинство так и делают), а pledge() нет, кроме как выпилив из исходников.

... или заменив функционал этого pledge() за заглушку.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8

34. Сообщение от бедный буратино (ok), 11-Ноя-15, 08:08   +/
живи в КАМАЗе
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #28

35. Сообщение от pkdr (ok), 11-Ноя-15, 09:37   +/
Читайте мануалы к вмвари, там много всего есть про отказоустойчивость, ну или саппорт теребите, если заплатили так много денег за то, что в теории вы бы могли сделать совершенно бесплатно (если судить по заданному здесь вопросу вы никаких особенно навороченных фич вмвари не используете).
Ну а то, что вы вляпались в hyperv - уже ваши собственные проблемы, не надо было вообще наступать на эту кучку отходов жизнедеятельности Баллмера.

И у вас есть точка отказа: "общий мегаSAN за 100500 нефти" - такие штуки хоть и очень надёжны, но тоже со свистом и бурным весельем вылетают несмотря на все подключения несколькими линками, многоконтроллерность, вроде-бы-как-отсутствие-точек-отказа и прочие очень полезные, но не спасающие на 100% фичи.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32 Ответы: #36, #39

36. Сообщение от Классический анонимуз (?), 11-Ноя-15, 10:51   +/
Вообще-то вопрос был на высказывание: "Виртуализация вообще не решает большинство проблем, а лишь плодит новые. Но админам локалхостов или гогнохостингов этого, разумеется, не понять." HyperV тоже вполне себе работает, переходят на него из-за "дешевле".

Вопрос: как делать отказоустойчивость 1k серверов (с очень разным набором софта) сделать без виртуализации?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #35 Ответы: #37, #50

37. Сообщение от 6ap (?), 11-Ноя-15, 12:04   +1 +/
В том и дело, что вы потратили кучу денег и даже не поняли куда. Это делалось 100 лет назад с помощью солярных зон и хербита, это делается сейчас с помощью линукс контейнеров и хербита, это делалось в локальном и даже географически отказоустойчивом варианте с помощью veritas storage foundation. По сути потратили на gui-панельки и тратите на невероятный оверхед, особенно для vmware.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #36 Ответы: #41

38. Сообщение от Аноним (-), 11-Ноя-15, 14:01   +1 +/
> Ну, это не новость, это уже старость.
> Оно ещё под именем tame сколько развивалось, потом переименовалось, и презентаций уже
> было несколько штук.

Это как раз нормальная новость - первый анонс, ещё про tame(), честно говоря, был несколько рановат.

Но, в любом случае, искреннее спасибо автору новостей про OpenBSD.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #26

39. Сообщение от rob pike (?), 11-Ноя-15, 14:06   +/
Можно еще рекомендации Microsoft почитать, в частности Microsoft’s Preferred Architecture for Exchange

> In the PA, all servers are physical, multi-role servers. Physical hardware is deployed rather than virtualized hardware for two reasons:
> The servers are scaled to utilize eighty percent of resources during the worst-failure mode.
> Virtualization adds an additional layer of management and complexity, which introduces additional recovery modes that do not add value, as Exchange provides equivalent functionality out of the box.”

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #35

40. Сообщение от angra (ok), 11-Ноя-15, 15:23   +/
Ты вообще читал пост, на который отвечаешь? Ну давай специально для тебя дам другие примеры проблем. Виртуализация не решает проблему тупых пользователей, виртуализация не решает проблему ущербного workflow, придуманного тупыми пользователями, виртуализация не решает проблему безграмотных админов, нанятых тупыми пользователями, виртуализауция не решает проблему тупых быдлокодеров, пишущих программы тупым пользователям. В общем не решает всего того, что ты назвал регламентом. Но среди технических средств защиты виртуализация одно из самых эффективных. Во многом из-за того, что позволяет техническими средствами снизить потенциальный урон по причине нетехнических факторов. Собственно как и RAID для сохранности данных. Но можно конечно быть тупым идеалистом и плакаться на несовершенство мира вместо решения реальных проблем.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31 Ответы: #43

41. Сообщение от angra (ok), 11-Ноя-15, 15:28   –1 +/
Я тебе сейчас очень страшную вещь скажу - зоны солярки, джейлы БСД и контейнеры в линуксе это все тоже виртуализация. Просвещайся: https://en.wikipedia.org/wiki/Operating-system-level_virtual...
Ну и vmware ты небось видел только как vmware workstation на винде. Почитай про их серверные продукты.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #46

42. Сообщение от Elhana (ok), 11-Ноя-15, 17:19   +/
Я его видел и не подразумевал в предыдущем комментарии, что отключение защиты это хорошо.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

43. Сообщение от rob pike (?), 11-Ноя-15, 17:58   +/
> позволяет техническими средствами снизить потенциальный урон по причине нетехнических факторов

Решать административные проблемы техническими средствами - верный путь к успеху.

> как и RAID для сохранности данных

RAID не является решением проблемы сохранности данных.
Решением проблем сохранности данных является бэкап.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #40 Ответы: #44, #54

44. Сообщение от angra (ok), 11-Ноя-15, 22:33   +/
>Решать административные проблемы техническими средствами - верный путь к успеху.

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

>RAID не является решением проблемы сохранности данных.
>Решением проблем сохранности данных является бэкап.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43 Ответы: #45

45. Сообщение от rob pike (?), 11-Ноя-15, 23:04   +/
> сетовать на несовершенство мира

Этого никто не предлагал. В частности, администратичные проблемы решаются административными средствами.

> пропажа данных даже за последнюю секунду уже является неприемлемым вариантом

Для начала я бы посоветовал не смешивать пропажу данных и недоступность данных в течение какого-то времени.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #44

46. Сообщение от 6ap (?), 12-Ноя-15, 10:10   +1 +/
Пожалуй, промолчу ...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41

47. Сообщение от cmp (ok), 12-Ноя-15, 12:41   +/
Прогрессирующий нарцисизм? спасибо не надо
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #27 Ответы: #49

48. Сообщение от Аноним (-), 12-Ноя-15, 16:56   +1 +/
>  Зато с pledge() меньше вероятность того, что внесенные ограничения будут мешать работать с программой, так как их определяют сами разработчики, а не мейнтенер дистрибутива

Если разработчикам не лень написать правило для pledge, почему им должно быть лень написать правила для AppArmor?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

49. Сообщение от Аноним (-), 12-Ноя-15, 16:58   –2 +/
> Прогрессирующий нарцисизм? спасибо не надо

Не этот, а главный. Security by bullshit :)

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #47

50. Сообщение от pkdr (ok), 12-Ноя-15, 19:26   +/
> Вопрос: как делать отказоустойчивость 1k серверов (с очень разным набором софта) сделать без виртуализации?

Смотрю на ~650 OpenVZ контейнеров (а есть ещё множество сервисов, которые крутятся вне контейнеров) с очень разным набором софта и понимаю, что да, это можно сделать и без виртуализации.
Ну правда большинство контейнеров даже не в отказоустойчивом кластере - помрёт железный сервер с контейнерами, ну и фиг с ним, отряд не заметит потери бойца.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #36

51. Сообщение от Анонимemail (51), 14-Ноя-15, 17:54   –1 +/
А низзя еще вместо того чтобы переписывать софт простую утилитку pledge, которая выставляет заданные юзером ограничения и exec'ает софт? Типа: pledge [-options] ./myapp [-options]
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #52

52. Сообщение от Аноним (-), 30-Мрт-16, 00:02   +/
> А низзя еще вместо того чтобы переписывать софт простую утилитку pledge, которая
> выставляет заданные юзером ограничения и exec'ает софт? Типа: pledge [-options] ./myapp
> [-options]

Низзя. Потому что извне нельзя нормально узнать, какому процессу в какой момент какие привилегии можно порезать.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #51

53. Сообщение от anony (?), 14-Апр-16, 23:58   +/
поддержка pledge() в разных языках программирования https://gist.github.com/ligurio/f6114bd1df371047dd80ea9b8a55...
Ответить | Правка | Наверх | Cообщить модератору

54. Сообщение от None (??), 08-Янв-20, 13:40   +/
Ну да, а решением всех медицинских проблем является клонирование.
Сейчас столько инструментов есть, начиная с презираемого вами резервирования диска, теневых копий, репликации, что для того, чтобы понадобилось бекап поднимать - это надо либо просрать всё, что можно, либо чтоб ракета в датацентр попала.
Ну и к тому же бекап это просто копия - которая может проэкспайриться и оказаться уничтожена - так что помимо него нужны ещё и отдельные инструменты мониторинга изменений, проверки целостности. Да и даже банального перевода в р/о данных, не подлежащих правке, типа архивов. То есть нужен инструмент, который скажет "шеф всё пропало" и что надо поднимать бекап (потому что пользователи могут далеко не сразу распознать, что какой-то редкоиспользуемый документ пропал).
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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