Chroot-окружение.
Метки: chroot | FTP | root
Вторник, 26 мая 2009 г.
Просмотров: 3384
Небезопасные сервисы - это потенциальные дыры в системе безопасности. Взломав такой сервис, хакер часто получает возможность исполнять команды от имени пользователя, который запустил этот сервис. Если сервис работает от пользователя 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-серверу. Ведь теперь можно так заполнить каталоги /var/ftp/bin, /var/ftp/etc и /var/ftp/lib, чтобы запуск FTP-сервера был возможен. Прежде всего нужно создать минимальную файловую систему:
-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, хакер не сможет получить его права.
