Новый системный вызов в OpenBSD — tame(2)
nicm@ и deraadt@ представили новый системный вызов, позволяющий максимально просто добавить в приложение возможность отказаться от излишних привелегий. Новый механизм призван дополнить недавно портированный и более сложный в использовании capsicum (4), а также ранее существоваший systrace (4).
Самое интересное то, что новый сисколл позволяет четко отделить фазу инициализации процесса от его основной части, и наложить более строгие ограничения на последнюю. Ведь известно, что во время инициализации используется гораздо больше привелегий. Доступные флаги ограничений выбраны как разумный компромисс между гранулярностью и простотой использования на основе тщательного аудита устройства програмного обеспечения из base system, а также портов, наборы оптимизированы под наиболее популярные паттерны. Более сложным приложениям стоит посмотреть в сторону вышеупомянутого capsicum.
К обьявлению так же прилагаются патчи для 29-ти компонентов базовой системы которые демонстрируют использование tame (2), вот например дифф для нового сисколла для одного из демонов bgpd (он разделен на части по модели privsep, которые общаются между собой с использованием фреймворка imsg):
+#include
…
+ tame(TAME_MALLOC | TAME_UNIX | TAME_CMSG);
Такой подход позволяет разработчикам максимально просто и быстро ограничить потенциальный вред от уязвимостей в своем софте, соответственно, есть шансы что он будет использоваться более часто и широко чем гораздо более сложные для программиста capsicum и правильный privsep, или в определенном смысле менее гибкие и непростые в администрировании selinux/systrace и co.
openbsd, security