В Systemd реализована поддержка изоляции системных вызовов для запускаемых сервисов
В качестве примера помещения процесса в sandbox-окружение приводятся следующие настройки:
[Service] ExecStart=/bin/echo "I am in a sandbox" SystemCallFilter=brk mmap access open fstat close read fstat mprotect arch_prctl munmap write
В общем виде принцип работы seccomp filter сводится к ограничению доступа к системным вызовам, при этом логика выставляемых ограничений задаётся на уровне защищаемого приложения, а не через задание внешних ограничений, как в случае AppArmor или SELinux. В код программы добавляется структура с перечнем допустимых системных вызовов (например, ALLOW_SYSCALL) и реакции в случае несовпадения (например, KILL_PROCESS). Доступ к системным вызовам определяется в виде правил, оформленных в BPF-представлении (Berkeley Packet Filter), которое получило распространение в системах фильтрации сетевых пакетов.
Система seccomp filter позволяет реализовывать достаточно сложные правила доступа, учитывающие передаваемые и возвращаемые аргументы. Программа сама определяет какие системные вызовы ей необходимы и какие параметры допустимы, все остальные системные вызовы блокируются, что позволяет ограничить возможности атакующего в случае эксплуатации уязвимости в защищённом при помощи seccomp приложении. Возможность задания фильтров аргументов позволяет также защититься от большинства атак, эксплуатирующих уязвимости в системных вызовах. Например, выявленные за последние годы критические уязвимости в glibc и ядре Linux, такие как AF_CAN, sock_sendpage и sys_tee, успешно блокируются при надлежащем использовании seccomp. В настоящее время поддержка seccomp filter реализована в таких популярных серверных приложениях, как OpenSSH и vsftpd, патчи с поддержкой seccomp filter уже поставляются в ядре Linux из состава Ubuntu 12.04.
Источник: http://www.opennet.ru/opennews/art.shtml?num=34352
|
0 | Tweet | Нравится |
|