Брандмауэры и специальное программное обеспечение 8 Часть 4

Вид материалаРеферат

Содержание


Атрибуты SUID/SGID
Опасность применения атрибутов SUID/SGID
Подобный материал:
1   ...   15   16   17   18   19   20   21   22   ...   101

Атрибуты SUID/SGID


В главе 1 я рассказал вам о файле /etc/shadow, в котором содержатся хэширован-ные значения всех паролей системы. Чтение и модификация этого файла разрешаются только суперпользователю. Тем самым этот файл ограждается от посягательств злоумышленников, которые могут воспользоваться содержащимися в нем сведениями для получения реальных паролей системы. Кроме хэшированных паролей в этом файле хранится число дней, по истечении которых пользователю будет предложено сменить свой пароль. Однако если изменять этот файл дозволено только суперпользователю, то каким же образом обычный пользователь сможет изменить свой пароль? Очень просто. Атрибуты команды passwd таковы, что она всегда выполняется от имени суперпользователя и потому имеет полный доступ к файлу паролей.

При нормальных условиях исполняемый файл выполняется от имени вызвавшего его пользователя, то есть имеет те же самые привилегии или ограничения, что и пользователь. Однако если установить у исполняемого файла специальный атрибут, называемый SUID (Set User ID), то независимо от того, кто запускает программу, эта программа всегда будет выполняться от имени своего владельца.

Когда речь заходит о программах с атрибутом SUID, то, как правило, подразумеваются программы, выполняемые от имени суперпользователя, поскольку таково наиболее распространенное использование этого атрибута. Как правило, этот атрибут устанавливается для того, чтобы обычный пользователь мог запускать программы, которым для выполнения их функций необходимы привилегии суперпользователя.

Однако этот атрибут может понадобиться и обычному пользователю, как способ сделать доступной для остальных программу, которой иначе может пользоваться только он. Такими программами могут быть, например, средства доступа к персональным базам данных пользователя, которые этот пользователь желает сделать доступными для других пользователей.

Необходимо заметить: установка атрибута SUID в отношении файла сценария ничего не меняет. Сценарий, как и прежде, будет выполняться от имени вызвавшего его пользователя, поскольку установка этого атрибута действует только для бинарных исполняемых файлов. Чтобы добиться SUID-эффекта для сценария, можно установить атрибут SUID на все вызываемые им программы или же вызывать их при помощи специальной программы-оболочки (которая легко пишется на языке С), обладающей атрибутом SUID.

Помимо атрибута SUID есть схожий с ним атрибут SGID. Файл, для которого установлен этот атрибут, всегда выполняется от имени группы, которая обладает этим файлом. Для пользователя, который хочет сделать доступной для остальных свою личную программу, применение атрибута SGID зачастую оказывается лучшим решением, чем использование атрибута SUID.

Для каталогов атрибут SGID имеет иное значение. Обычно он устанавливается для каталога, содержащего файлы, используемые совместно несколькими пользователями. Если у каталога установлен атрибут SGID, то любому файлу, созданному в нем, в качестве группы-владельца назначается группа этого каталога, а не группа создавшего файл пользователя. Поэтому если установить этот атрибут у каталога с gif-файлами и сделать владельцем этого каталога группу gifs, то всем файлам, создаваемым в нем, в качестве владельца будет назначаться группа gifs. Если блокировать доступ к этому каталогу для всех остальных пользователей, за исключением владельца и группы, то размещенные в каталоге файлы будут доступны только пользователям, принадлежащим к группе gifs.

Последним атрибутом, который необходимо упомянуть, является так называемый «sticky bit» (липкий бит). Устанавливается он аналогично атрибутам SUID и SGID, о чем будет рассказано далее. Для исполняемых файлов этот атрибут имеет скорее историческое, чем практическое значение: в прошлом он предписывал ядру выгружать завершившуюся программу из памяти не сразу же, а лишь спустя некоторое время, что позволяло избежать постоянной загрузки с диска наиболее часто вызываемых программ. Теперь же завершившаяся программа выгружается из памяти лишь тогда, когда возникает нехватка памяти, поэтому для Linux никакой смысловой нагрузки этот атрибут не несет (в некоторых других Unix-системах он используется, но для иных целей). Для каталога этот атрибут означает, что только владельцам дозволено изменять содержащиеся в нем файлы. Если пользователь не является владельцем файла, то изменить его он не сможет. Далее мы еще рассмотрим, где и как используется этот атрибут.

Опасность применения атрибутов SUID/SGID


Неразумное количество SUID-программ, разбросанных по всей системе, может привести к проблемам. Как говорилось ранее, для некоторых программ этот атрибут является действительно необходимым, поскольку без него обычные пользователи не смогут воспользоваться этими программами. Однако список этих программ не должен содержать ничего лишнего.

В частности, в нем не должно быть программ, позволяющих пользователю выполнять произвольные команды или обращаться к командной оболочке. Как и у всякого правила, здесь могут быть свои исключения, но общий подход в данном случае следующий: если нет действительно весомых причин назначать некоторому файлу атрибут SUID, значит, делать этого не следует. Кроме того, вряд ли имеет смысл разрешать пользователям иметь SUID-программы в своих домашних каталогах.

Перечень SUID-файлов системы можно получить при помощи команды:

find / -perm +u+s -exec ls -l {} \:

В моей системе присутствуют следующие файлы SUID:

-r-sr-xr-x I root root 2105164 Aug 30 07:25 /usr/local/bin/vmware

-pws--x--x 1 root root 606031 Jul 22 20:07 /usr/local/bin/ssh1

---S--X--X 1 root bin 1647592 Jul 25 13:34 /usr/local/bin/xlock

-rwsr-xr-x 1 root root 285151 Aug 21 17:23 /usr/local/sbin/mtr

-rwsr-xr-x 1 root root 17134 Aug 27 10:55 /usr/XllR6/bin/cardinfo

-pws--x--x 1 root root 7150 Jul 27 20:25 /usr/X11R6/bin/Xwrapper

-rwsr-xr-x 1 root root 177280 Jul 28 00:32 /usr/bin/lpq

-rwsr-xr-x 1 root root 235672 Jul 28 00:32 /usr/bin/lpr

-rwsr-xr-x 1 root root 171060 Jul 28 00:32 /usr/bin/lprm

-rwsr-xr-x 1 root root 14576 Jul 27 19:17 /usr/bin/rcp

-rwsr-xr-x 1 root root 10512 Jul 27 19:17 /usr/bin/rlogin

-rwsr-xr-x 1 root root 7840 Jul 27 19:17 /usr/bin/rsh

-r-sr-xr-x 1 root bin 8703 Jul 27 19:16 /usr/bin/passwd

-rws--x--x 2 root root 556924 Jul 28 03:05 /usr/bin/suidperl

-rws--x--x 2 root root 556924 Jul 28 03:05 /usr/bin/sperl5.00502

-rwsr-xr-x 1 root root 38752 Jul 27 20:15 /usr/bin/chage

-rwsr-xr-x 1 root root 28244 Jul 27 20:15 /usr/bin/expiry

-rwsr-xr-x 1 root root 32268 Jul 27 20:15 /usr/bin/gpasswd

-rwsr-xr-x 1 root root 28320 Jul 27 20:15 /usr/bin/newgrp

-rwsr-xr-x 1 root root 13872 Jul 27 20:27 /usr/bin/chfn

-rwsr-xr-x 1 root root 13712 Jul 27 20:27 /usr/bin/chsh

-r-sr-sr-x 1 uucp uucp 125852 Jul 27 20:53 /usr/bin/cu

-r-sr-xr-x 1 uucp uucp 91568 Jul 27 20:53 /usr/bin/uucp

-r-sr-sr-x 1 uucp uucp 38492 Jul 27 20:53 /usr/bin/uuname

-r-sr-xr-x 1 uucp uucp 99656 Jul 27 20:53 /usr/bin/uustat

-r-sr-xr-x 1 uucp uucp 92720 Jul 27 20:53 /usr/bin/uux

---S--X--X 1 root root 23420 Jul 27 19:18 /usr/bin/crontab

-rwsr-xr-x 1 root root 173920 Jul 28 00:32 /usr/sbin/lpc

-rwsr-xr-x 1 root root 12544 Jul 27 20:48 /usr/sbin/ppplogin

-rwsr-xr-x 1 root root 17212 Jul 27 19:18 /usr/sbin/sliplogin

-r-sr-xr-x 1 root root 21146 Jul 27 19:22 /usr/sbin/traceroute

-r-sr-xr-x 1 uucp uucp 221348 Jul 27 20:53 /usr/sbin/uucico

-r-sr-xr-x 1 uucp uucp 101852 Jul 27 20:53 /usr/sbin/uuxqt

-r-sr-x--- 1 news uucp 101368 Jul 27 23:22 /usr/libexec/inn/bin/rnews

-r-sr-x--- 1 root news 51732 Jul 27 23:22 /usr/libexec/inn/bin/startinnfeed

-rwsr-xr-x 1 root root 16700 Jul 27 21:30 /usr/libexec/sendmail/mail.local

-r-sr-xr-x 1 root mail 317628 Jul 27 21:30 /usr/1ibexec/sendmail/sendmail

-rwsr-xr-x 1 root majordom 8268 Jul 27 19:55 /usr/1ib/majordomo/wrapper

-rwsr-sr-x 1 root root 91140 Jan 10 1995 /usr/1ib/svga/demos/3d

-rwsr-xr-x 1 root root 14576 Jul 27 19:19 /bin/ping

-rwsr-xr-x 1 root root 14000 Jul 27 20:32 /bin/su

-rwsr-xr-x 1 root root 54112 Jul 27 20:27 /bin/mount

-rwsr-xr-x 1 root root 27804 Jul 27 20:27 /bin/umount

-rwsr-sr-x 1 root root 6644 Jul 27 23:57 /opt/kde/bin/kcheckpass

-rwsr-xr-x 1 root root 371796 Jul 28 00:59 /opt/kde/bin/kppp

-r-sr-sr-x 1 root tty 38044 Jul 27 19:24 /sbin/dump

-r-sr-sr-x 1 root tty . 397068 Jul 27 19:24 /sbin/restore

-rwsr-xr-x 1 root root 13959 Aug 27 10:55 /sbin/cardctl

Глядя на список, в принципе можно понять, почему для этих файлов пришлось установить атрибут SUID. Некоторым службам с ограничением доступа он нужен для того, чтобы их могли выполнять и непривилегированные пользователи. К таковым относится, например, команда изменения пароля. Другим программам, например mount или vmware, этот атрибут необходим, поскольку они обращаются к устройствам, и т. п.

Обратите внимание на группу программ, имена которых начинаются с символов uu. Владельцем этих программ является не root, a uucp. Эти программы обязательно нужно запускать от имени пользователя uucp, поскольку иначе они не будут работать. В наше время подавляющее число систем отказалось от использования UUCP в пользу более совершенной связи через Интернет, потому технология UUCP редко где используется, однако если в вашей системе до сих пор используется UUCP, вы должны принять во внимание дополнительные соображения, связанные с безопасностью. В частности, вам надо уделить внимание организации защиты при подключении через телефонную линию. Тем не менее общий подход к безопасности этой части системы такой же, как и для остальных частей, поэтому общие соображения, не относящиеся напрямую к UUCP, вполне применимы и для этой технологии.

В качестве меры предосторожности можно посоветовать время от времени выполнять приведенную ранее команду и сохранять выданный ею список SUID-файлов на гибком диске. Тогда, если вы заподозрите что-то неладное, можно будет сравнить изначальный список, хранящийся на гибком диске, с текущим перечнем файлов SUID (для этого удобно использовать утилиту diff). Благодаря этому вы сможете выяснить, появились ли в системе без вашего ведома новые SUID-фай-лы. Процедуру проверки SUID-файлов можно автоматизировать. Для этого создайте специальный сценарий и добавьте этот сценарий в набор ежедневных задач сгоп. Результаты проверки можно высылать на ваш электронный адрес по электронной почте. Разумеется существуют более удобные средства проверки, например программное средство tripwire, однако описанная процедура является достаточно простым и быстрым способом контроля SUID-файлов. Как и в других задачах, связанных с безопасностью, полезность результатов определяется тем, как вы их интерпретируете. Еще один способ проверки файлов подразумевает использование команды rpm -V, при условии, конечно, что база данных пакетов и программа rpm не были модифицированы злоумышленником.