Grsecurity: Управление доступом с помощью ACL.
Метки: ACL | Grsecurity | PaX | SGID | SUID
Вторник, 30 июня 2009 г.
Просмотров: 2338
Подписаться на комментарии по RSS
Управление доступом - самый большой раздел Grsecurity, но, потому что управление доступом реализуется с помощью ACL, здесь нет опций ядра, который связанны с управлением доступом, и это при том, что ACL относится к уровню ядра.
Настройка ACL делается с помощью утилиты gradm. Применение системы RBAC необязательно, но нужно учитывать, что без ACL крекер может легко обойти некоторые функции Grsecurity.
Структура ACL.
ACL (Список управления доступом) находится в файл /etc/grsec/acl. В этот файл можно включать дополнительные списки, используя С-стиль подключения заголовочных файлов (<include>), но рекомендуется хранить все списки в одном файле.
Рассмотрим структуру ACL:
<файл объект> Необязательные режимы объекта>
[+|-] <возможность>
<имя ресурса> <«мягкий» лимит> <«жесткий» лимит>
connect { <1р>/<сетевая маска>:<порт_от>-<порт_до> <тип> <протокол> }
bind {
<1р>/<сетевая маска>:<порт_от>-<порт_до> <тип> <протокол>
}
<имя ресурса> <«мягкий» лимит> <«жесткий» лимит>
}
Рассмотрим пример ACL для демона печати cupsd:
/ h
/etc/cups/certs
/etc/cups/certs/O wed
/etc/group r
-CAP_ALL
+CAP_CHOWN
+CAP_DAC_OVERRIDE
bind disabled connect disabled }
Ограничения накладываются на объекты /etc/group, /etc/cups/certs/0 и путем указания режимов объекта. Для каталога /etc/cups/certs режим не задан.
Режимы субъекта (процесса).
В Grsecurity субъектом представляется файл или процесс, к которому используется ACL (в примере выше - /usr/sbin/cupsd). Режимы субъекта позволяют управлять его поведением:
- b — включить учет процесса для этого процесса;
- d — защитить псевдофайлы /proc/<pid>/fdn/proc/<pid>/mem для этого процесса;
- h — скрытый процесс; такие процесс могут «увидеть» только процессы, для которых установлен режим v;
- к — процесс может «убивать» процессы, защищенные режимом р;
- l — включить режим обучения для процесса;
- о — отменить ACL-наследование;
- р — защитить процесс, такой процесс может убить только процесс в режиме к или другой процесс, принадлежащий этому субъекту;
- r — удалить ограничения ptrace;
- v — процесс может «видеть» скрытые процессы;
- А — защищает разделяемую память этого процесса, доступ к разделяемой памяти могут получить только процессы, принадлежащие этому субъекту;
- С — если процесс «забил тревогу», он будет «убит». Если с этим процессом связан какой-то IP-адрес, также будут «убиты» все процессы, относящиеся к этому IP-адресу;
- К — если процесс «забил тревогу», он будет «убит»;
- Т — не позволяет процессу выполнить любой троянский код;
- Р — отключает РаХ-функцию PEGEEXEC для этого процесса;
- S - отключает SEGMEXEC (РаХ);
- М - отключает MPROTECT (РаХ);
- R - отключает RANDMMAP (РаХ);
- G - отключает EMUTRAP (РаХ);
- X - включает RANDEXEC (РаХ).
РаХ-функции защиты памяти были описаны здесь.
Режимы объектов.
Объектом представляется файл или каталог. Нужно запомнить, что если для обозначения режима применяется прописная буква, то это обозначает протоколирование, а если строчная - то определяемое действие.
Для объектов могут употребляться следующие режимы:
- а — объект может быть открыт для добавления информации. Информация будет добавлена в «конец» объекта;
- с — объект может создавать каталоги;
- d — объект может удалять каталоги;
- h — объект скрыт;
- i — когда устанавливается на исполнимых файлах: ACL субъекта будет унаследован во время выполнения этого файла;
- m — объект может создавать SUID/SGID-файлы;
- р — нельзя использовать ptrace для этого объекта;
- r — объект может быть открыт для чтения;
- s — не записывать отклоненные попытки доступа к объекту;
- t — объект можно просмотреть с помощью ptrace, но нельзя изменить;
- w — объект может быть открыт для записи или добавления данных;
- х — объект можно выполнять;
- А — записывать успешное добавление информации в объект;
- С - записывать успешное создание каталога;
- D - записывать успешное удаление каталога;
- I - записывать успешное наследование ACL;
- R - записывать успешное чтение данных;
- М - записывать успешное создание SUID/SGID-файла;
- W - записывать успешную запись;
- X - записывать успешное выполнение.
Возможности.
В дополнение к ранее описанным возможностям в Grsecurity применяется псевдоним CAPALL, обозначающий все возможности. Обычно он применяется для запрещения всех возможностей, а потом для разрешения необходимых вам возможностей. Например, сейчас запрещаются все возможности, а потом разрешается возможность изменения владельца файлов:
IP ACL.
Grsecurity также дает концепцию IP ACL: это ограничения IP-адресов, портов, протоколов и типов сокетов, связанных с процессом:
<1р>/<сетевая маска>:<порт_от>-<порт_до> <тип> <протокол>}
bind {
<1р>/<сетевая маска>:<порт_от>-<порт_до> <тип> <протокол> }
В обоих случаях синтаксис идентичен: IP-адрес, соответствующая ему маска (если маска не указана, подразумевается /32), после данного следует диапазон портов (младший и старший порты разделяются дефисом), например 0-65535 (этот диапазон применяется по умолчанию). Тип сокета может быть: sock, dgram, raw_sock или any_sock. Последним указывается протокол - надо употреблять любой протокол, указанный в файле /etc/protocols. В следующем примере ограничиваются соединения с субъектом в сети 192.168.1.x, разрешаются только stream-сокеты в непривилегированном режиме:
192.168.1.1/24:1025-65535 stream tcp
}
Если же не надо управлять ни bind, ни connect, можно их отключить:
connect disabled