Генерирование ACL.
Метки: ACL | SSH
Пятница, 3 июля 2009 г.
Просмотров: 1772
Подписаться на комментарии по RSS
Создание ACL - достаточно утомительная и рутинная задача, поэтому даже для опытных пользователей Grsecurity, рекомендуется употреблять встроенный режим обучения для создания начального ACL. Процесс автоматического создания ACL был рассмотрен в предыдущей статье. Сейчас будет рассмотренно создание ACL для демона sshd.
После долгой деятельности Grsecurity в режиме обучения был получен следующий ACL:
/ h
/bin h
/bin/bash x
/dev h
/dev/log rw
/dev/ptmx rw
/dev/pts
/dev/pts/1 rw
/dev/tty rw
/etc r
/etc/grsec h
/lib rx
/proc h
/proc/1817
/proc/1819
/usr h
/usr/lib/libcrack.so.2.7 rx
/usr/lib/libglib-1.2.so.0.0.10 rx
/var h
/var/empty/sshd
/var/log
/var/log/lastlog rw
/var/log/wtmp w
/var/run/utmp rw
/root
-CAP_ALL
+CAP_DAC_OVERRIDE
+CAP_SETGID
+CAP_SETUID
+CAP_SYS_CHROOT
+CAP_SYS_TTY_CONFIG
bind 0.0.0.0/32:0 dgram ip
connect 192.168.9.100/32:53 dgram udp
}
Задавать правила для /рrос/<число> не нужно, потому что число (РШ) будет изменяться при каждом запуске процесса, поэтому удаление записей для /ргос/<число> надо записать так:
/рrос
Обязательно нужно снять флаг h с /ргос .
Аналогично терминал не всегда будет pts1, поэтому надо обеспечить rw-доступ (чтение/запись) ко всем /dev/pts:
Правило bind сейчас разрешает привязку к любому порту и любому интерфейсу. Учитывая, что идет настраивание демона SSH, надо четко указать порт 22:
Инструкцию connect тоже нужно подправить. В данной инструкции перечислены адреса компьютеров, с которыми элемент может соединяться (но некоторые могут соединяться с субъектом!).
Автоматически сгенерированный ACL содержит правило, разрешающее элементу соединяться с сервером имен (192.168.9.100). Но ведь серверов имен может быть несколько. Обычно их 2, а это правило разрешает соединение только с одним сервером - с тем, с которым соединялась программа во время режима обучения.
Если этот сервер недоступен, программа будет обращаться к другому серверу имен, указанному в конфигурационных файлах системы, но не сможет данного сделать, потому что второй сервер не указан в ACL. Указывать два (или более) сервера надо так:
10.0.0.1:53 dgram udp 10.0.0.2:53 dgram udp }
Если серверов больше двух и не охота все их указывать, надо использовать следующую инструкцию, разрешающую подключение к любому серверу имен (порт 53):
Не надо забыватб, что SSH-демону может понадобиться соединение с демоном AUTH (IDENT), работающим по 113 порту. В момент обучения такого соединения не произошло, поэтому в автоматически сгенерированном ACL и слова нет о IDENT. Исправим это:
192.168.0.0/8:113 dgram ip 10.0.0.0/24:113 dgram ip }
Как и в предыдущем случае, надо разрешить соединение с любым IDENT-сервером:
Рассмотрим окончательный листинг ACL для элемента /usr/sbin/sshd:
/ h
/bin h
/bin/bash x
/dev h
/dev/log rw
/dev/ptmx rw
/dev/pts rw
/dev/tty rw
/etc r
/etc/grsec h
/lib rx
/proc h
/usr h
/usr/lib/libcrack.so.2.7 rx
/usr/lib/libglib-1.2.so.0.0.10 rx
/var h
/var/empty/sshd /var/log
/var/log/lastlog rw
/var/log/wtmp w
/var/run/utmp rw
/root -CAP_ALL
+CAP_DAC_OVERRIDE +CAP_SETGID +CAP_SETUID +CAP_SYS_CHROOT +CAP_SYS_TTY_CONFIG bind 0.0.0.0/32:22 dgram ip connect {
192.168.9.100/32:53 dgram udp 192.168.9.200/32:53 dgram udp 192.168.0.0/16:113 dgram udp } }
Однако это еще не все. В этом примере применяется режим элемента о. Надо задать несколько дополнительных режимов, например:
- h - чтобы скрыть процесс от ненужных глаз (но тогда не надо забывать «прятать» объект /var/run/sshd.pid);
- А — чтобы защитить разделяемую память процесса;
- Т — для защиты от троянов;
- X — для активации RANDEXEC.
Учитывая новые режимы, первая строка описания элемента будет выглядеть так:
Также желательно ограничить сбои процесса — не более двух за час: