Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #95, НОЯБРЬ 2006 г.

Личная неприкосновенность для тукса

Денис «dhsilabs» Колисниченко

Хакер, номер #095, стр. 095-114-5


# lidsconf -A -s /usr/X11/bin/X -o CAP_SYS_RAWIO -j GRANT

А теперь разрешим Web-серверу Apache привязываться к непривилегированному порту:

# lidsconf -A -s /usr/sbin/httpd -o CAP_BIND_NET_SERVICE -j GRANT

Более безопасным будет вариант разрешения привязки Apache к портам 80 и 443:

# lidsconf -A -s /usr/sbin/httpd -o CAP_BIND_NET_SERVICE \

80-80,443-443 -j GRANT

Синтаксис команды требует указания диапазона портов, поэтому, чтобы задать один порт (к примеру, 80), нужно ввести «80-80».

Практика

Вот теперь можно приступить к защите ОС Linux. Разработка ACL для всей системы - непростая и объемная задача, поэтому я рекомендую создать shell-сценарий, содержащий вызовы lidsconf. Первой командой будет lidsconf –Z. Эта директива удаляет все ранее существующие ACL. Сценарий можно поместить в /etc/lids, что сделает его невидимым за пределами LFS-сессии.

Какие же системные файлы и каталоги требуют защиты LIDS? В первую очередь необходимо защищать содержимое каталогов /bin, /sbin, /lib, /usr/bin, /usr/lib, /usr/sbin и конфигурационные файлы в каталоге /etc. Подавляющее большинство конфигов в этом каталоге требуют доступ в режиме «только чтение», поэтому сначала можно установить для всего каталога режим READONLY, а затем разрешить доступ к некоторым отдельным файлам в WRITE, глобально или для определенных субъектов. Здесь наиболее важными файлами являются passwd/passwd- и shadow/shadow-: нужно запретить доступ к этим файлам (DENY) всем субъектам, кроме субъектов /bin/login, su и /usr/sbin/sshd, им полагается доступ READONLY.

Но мы еще не учли утилиту /usr/bin/passwd. Ей нужен WRITE-доступ к файлу /etc/shadow, чтобы пользователь мог изменить свой пароль. Ирония заключается в том, что при смене пароля файл /etc/shadow создается заново, а не просто модифицируется, в результате чего изменяется инод (inode) файла. А поскольку LIDS привязывается не к имени, а к иноду файла, после его изменения LIDS уже не будет защищать сам файл.

Кроме этого, программе passwd нужно предоставить WRITE-доступ ко всему каталогу /etc, поскольку запись файла - это изменение каталога. Если на месте passwd окажется бинарик злоумышленника, то он сможет получить доступ ко всем файлам в каталоге /etc. К сожалению, не существует простого способа решения этой проблемы: нужно либо использовать альтернативную схему аутентификации, например LDAP, либо открыть WRITE-доступ к /etc. Есть, правда, еще один способ, самый безопасный, но очень неудобный для администратора. Заключается он в запрещении WRITE-доступа к /etc. Для того чтобы изменить свой пароль, пользователь должен будет обратиться непосредственно к админу.

Чтобы определить, к каким файлам и каталогам нужно обращаться тому или иному приложению, необходимо отслеживать системные вызовы open(), chdir(), mkdir() и т.д. Немного облегчить эту задачу позволяет LIDS-FAQ, расположенный по адресу http://www.lids.org/lids-faq/lids-faq.html. В нем ты найдешь ACL для различных приложений: login, su, MySQL, BIND, OpenSSH, Apache. Удачи.

INFO

Если по какой-то причине тебе потребовалось отключить LIDS, то при загрузке системы передай ядру параметр security=0.

Назад на стр. 095-114-4  Содержание