Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Chroot-окружение.

Рубрика: Безопасность -> Укрепляем Linux
Метки: | |
Вторник, 26 мая 2009 г.
Просмотров: 10967

Небезопасные сервисы - это потенциальные дыры в системе безопасности. Взломав такой сервис, хакер часто получает возможность исполнять команды от имени пользователя, который запустил этот сервис. Если сервис ра­ботает от пользователя root, можно представить, что хакер сделает с системой.

     Идеально было бы запускать сервисы в «песочницах» - то есть задать такие ограничения для сервиса, при которых хакер не может разрушить систему или повлиять на работу прочих сервисов. Такой «песочницей» представляется chroot-окружение.

     Идея chroot-окружения крайне проста: в некотором каталоге создается минимальная структура ка­талогов, необходимая для запуска этого сервиса, которая эмулирует корневую файловую систему, то есть в этом подката­логе будут подкаталоги /bin, /lib, /etc и другие.


     В каталоге /bin будут только те выполняемые файлы, которые надобны конкретному сервису, в каталоге /lib - только те библиотеки, которые необходимы этому сервису, а в каталоге /etc - конфигурационные фай­лы самого сервиса, а не конфигурационные файлы всей системы.

     При запуске сервиса выполняется системный вызов chroot() (изменение кор­невого каталога), где в качестве параметра задается каталог, который содержит нужную структуру каталогов, похожую на корневую файловую систе­му.

     Большинство известных сервисов поддерживают запуск в chroot-окружении (на­пример, Apache и BIND). Может быть несколько chroot-каталогов - по одному на каждый сервис, который выполняется в chroot-окружении. Что это дает? При взломе сервиса хакер получит доступ не к корневой файловой системе, а только к тому каталогу, который был сде­лан для сервиса корневым.

     Рассмотрим создание такого окружения для анонимного FTP-сервера. Анонимный FTP-сервер дает доступ к пуб­личным файлам любому пользователю, при этом надо указать только свой e-mail, но этот любой пользователь с таким же успехом может указать любой e-mail.

     Давать доступ ко всей файловой системе сервера крайне нежелательно. Нужно ограничить доступ сервера только час­тью файловой системы, например каталогом /var/ftp. Сразу после регис­трации анонимного пользователя FTP-сервер вызывает chroot(), а затем вызывается chdir() для перехода на только что определенный корень фай­ловой системы.

     На рисунке выделенная область применяется в качестве корневой файло­вой системы FTP-сервера. Когда анонимный пользователь введет команду cd/bin, он перейдет не в каталог /bin, а в каталог /usr/ftp/bin.

Chroot-окружение для анонимного FTP-сервера

     Создание Chroot-окружения.

     Самое сложное - определить, какие файлы будут обязательны FTP-серверу. Ведь теперь можно так заполнить каталоги /var/ftp/bin, /var/ftp/etc и /var/ftp/lib, чтобы запуск FTP-сервера был возмо­жен. Прежде всего нужно создать минимальную файло­вую систему:

# ls -l /var/ftp/bin total 364

-r— 1 root root 313 May 9 2007 bin.md5

-rwxr-xr-x2 root root 19016 Feb 13 2008 compress

-rwxr-xr-x2 root root 64705 Feb 17 2008 cpio

-rwxr-xr-x 4 root root 63555 Mar 21 2007 gzip

-rwxr-xr-x2 root root 46888 Jan 29 2006 Ls

-rwxr-xr-x2 root root 155560 Sep 30 2007 tar

lrwxrwxrwx 1 root root 4 Jun 15 2008 zcat -> gzip

#ls -1 /var/ftp/lib Total 1484

-rwxr-xr-x2 root root 89547 Mar 5 2008 ld-2.2.5.so

lrwxrwxrwx 1 root root 13 Jun 12 2008 Id-linux. so. 2

-> ld-2.2.5.so

-rwxr-xr-x2 root root 1260480 Mar 23 2008 libc-2.2.5.so

lrwxrwxrwx 1 root root 13 Jun 15 2008 libc.so.6 ->

libc-2.2.5.so

-rwxr-xr-x 2 root root 89424 Mar 5 2008 libnsl-2.2.5. so

lrwxrwxrwx 1 root root 15 Jun 15 2008 libnsl.so.l ->

libnsl-2.2.5 . so

-rwxr-xr-x 2 root root 45415 Mar 5 2008 libnsl_files-2 . 2 . 5 . so

lrwxrwxrwx 1 root root 15 Jun 15 2008 libnsl_files.

so.2 -> libnsl_files-2 . 2 . 5 . so

-r— 1 root root 260 May 5 2008 libs.md5

lrwxrwxrwx 1 root root 19 Jun 15 2008 libtermcap.so.2 -> libte

# ls -l /var/ftp/etc

total 12

-r--r--r-- 1 root root 53 Aug 22 2006 group

-rw-r—r—1 root root 409 May 5 2008 Id.so.cache

-rw-r—r— 1 root root 0 May 5 2008 ld.so.conf

-r--r--r— 1 root root 79 Aug 22 2006 passwd

     «Побег из песочницы»

     К сожалению, Linux-реализация chroot-окружения не такая надежная, как, например, BSD-реализация. Если процесс запущен в chroot-окружении от имени пользователя root (а от имени этого пользователя за­пускается достаточно много сервисов), то он может «бежать из песочницы», используя всем известные технологии. Звучит парадоксально, но так оно и есть: демоны, запущенные от имени root, являются наиболее уязвимыми к атаке.

     Если нужно запускать не root-сервис в «песочнице», предотвратив та­ким образом возможность получения полномочий пользователя root, не надо запускать в «песочнице» его от имени root, иначе он сможет из нее «убе­жать».

     Решение просто: нельзя создавать учетные записи с полномочиями root в chroot-окружении. Если не будет пользователя root, хакер не сможет получить его права.