Grsecurity: ACL, ограничение ресурсов.
Метки: ACL | Grsecurity | limit
Вторник, 30 июня 2009 г.
Просмотров: 2350
Подписаться на комментарии по RSS
Ограничение ресурсов.
Ограничение ресурсов процесса задается в виде:
Доступны следующие ресурсы:
- RES_AS — ограничение адресного пространства (в байтах).
- RES_CORE — максимальный размер файла core (в байтах).
- RES_CPU — максимальное процессорное время (в мс).
- RES_DATA — максимальный размер данных (в байтах).
- RES_FSIZE — максимальный размер файла (в байтах).
- RES_LOCKS — максимальное число блокировок файлов.
- RES_MEMLOCK — максимальное число блокировок памяти (в байтах).
- RES_NOFILE — максимальное число открытых файлов. Нужно помнить, что минимально допустимое число открытых файлов равно 3 — для STDOUT, STDIN и STDERR.
- RES_NPROC — максимальное число процессов.
- RES_RSS — максимальный RSS (в байтах).
- RES_STACK — максимальный размер стека (в байтах).
Все эти ресурсы уже были описаны ранее (в файле /etc/limits).
Для некоторых ресурсов можно задать время, по умолчанию время задается в миллисекундах, что не очень удобно. Нужно употреблять единицы s (секунды), m (минуты), d (дни). Для ресурсов, где лимит надо задать в байтах, удобно употреблять единицы К (1000 байтов), М (1 000 000) и G (1 000 000 000). Если ограничений не накладывается, надо указать строку unlimited.
Примеры ограничения ресурса:
RES_NPROC 2 3
RES_NOFILE 10 10
Выше были перечислены лимиты Linux, Grsecurity предоставляет свой собственный лимит - RES_CRASH, препятствующий атакам переполнения буфера. Когда сервис непрерывно терпит крах, возможно, хакер пытается подобрать корректное смещение для переполнения буфера.
Ограничив число сбоев приложения за конкретный период времени, надо препятствовать такому способу атаки. Синтаксис RES_CRASH следующий:
Например:
Если предел сбоев достигнут, выполнение сервиса будет прекращено на указанный период времени. В случае с исполнимыми файлами с установленным флагом SUID/SGID дополнительно пользователь будет «выброшен» из системы на 30 минут, а любые запущенные им процессы будут прекращены.
Наследование субъекта.
Grsecurity поддерживает наследование ACL для упрощения самого ACL. Наследование используется ко всем субъектам, за исключением тех, которые не были специально отмечены флагом о. Лучше всего продемонстрировать наследование на примере:
/
/bin rx /etc r /tmp rw
-CAP_ALL
connect disabled bind disabled }
/usr/loca/bin/someapp {
/ h
/etc rw
/var h
+CAP_SETUID }
При обработке второго ACL-списка Grsecurity проверит существование ACLL для каждого компонента пути (в конкретном примере для /usr/local/bin, /usr/local, /usr и /). В этом случае ACL существует только для /. Его ACL будет унаследован субъектом /usr/local/bin/someapp.
Предыдущий пример может быть переписан так:
/bin rx /etc r /tmp rw -CAP_ALL
connect disabled bind disabled
/usr/local/bin/someapp {
/ h
/bin rx
/etc r
/tmp rw
-CAP_ALL
+CAP_SETUID
connect disabled
bind disabled }
Конфликт двух ролей (например, в первом случае для /etc применяется режим r, а во втором rw), будет решен в пользу субъекта (то есть в конкретном случае будет использован режим /etc rw).