<< Предыдущий раздел | /\ Содержание | >> Следующий раздел
Под локальным взломом понимается несанкционированные действия (получение прав "root", нарушение работы системы и т.д.), проведенные "из под" обычного непривилегированного пользователя.
При этом не следует считать всех зарегистрированных в системе пользователей потенциальными злоумышленниками -- зачастую взлом "снаружи" проводится в два этапа: сначала получаются права обычного пользователя (к примеру, путем похищения пароля), а затем уже эксплуатируется какая-нибудь локальная "дырка".
В подавляющем большинстве случаев локальный взлом производится при помощи так называемых "программ с флагом смены идентификатора пользователя".
Что это такое
Обычно вместо громоздкого термина "программа с флагом смены идентификатора пользователя" используется "сетъюидная программа" или "сюидная программа" (калька с английского "suid program") -- этот термин мы и будем употреблять далее.
Сюидная программа -- это программа, которая исполняется с правами (uid) не запустившего ее пользователя, а того, кому принадлежит файл программы. Реже используется смена идентификатора группы ("эсгидная программа" -- "sgid program").
Внешне сюидная программа отличается тем, что в правах доступа, показываемых командой "ls -l", вместо символа "x" в правах владельца стоит "s":
bobby:~% ls -l /usr/X11R6/bin/nxterm -rws--x--x 1 root root 127668 Aug 4 1998 /usr/X11R6/bin/nxterm bobby:~% _ |
Сюидные программы используются в тех случаях, когда для выполнения некоей операции требуются права "root". В основном это требуется для авторизации и для доступа к неким файлам/ресурсам, недоступным обычному пользователю.
Примерами сюидных программ являются rlogin (права нужны для создания сокета с номером порта < 1024), passwd (для записи в файл /etc/passwd или для чтения/записи /etc/shadow), xterm/nxterm (для получения устройства виртуального терминала), x11amp (для получения realtime-приоритета).
Вообще говоря, в настоящее время сюидность считается одной из самых неудачных (или, по крайней мере, самых неудачно реализованных) концепций в Unix. Программ, которым реально требуется сюидность, не так уж много -- в типичной установке из дистрибутива RedHat 5.2 их около полусотни.
|
Возникает вопрос: если сюидность -- неудачная концепция, то как же надо
было делать? Ответ -- т.н. "capabilities", или отдельные права на
выполнение отдельных операций (вместо "всемогущего" root). Концепция
"capabilities" введена стандартом POSIX.1e и поддерживается в ядрах
Linux начиная с 2.2. Документация на эту тему есть по адресу
http://www.kernel.org/pub/linux/libs/security/linux-privs/зеркало в России -- http://www.ru.kernel.org/pub/linux/libs/security/linux-privs/ |
Одно из применений сюидности при взломе -- непосредственно после взлома создать root-сюидную программу, позволяющую интерактивно вводить команды (на эту роль хорошо подходит любой shell), или же запускающую shell с правами "root".
Поэтому надо уметь находить имеющиеся на компьютере сюидные программы -- во-первых, чтобы знать программы, в которых потенциально могут обнаружиться дыры, а во-вторых, чтобы обнаруживать уже произведенный взлом.
Как установить и удалить атрибут setuid
Поскольку атрибут setuid входит в права доступа файла, то для манипуляций с ним используется команда chmod. Для установки этого атрибута служит команда
(избегайте этого!), а для удаления --chmod u+s файл
chmod u-s файл
Атрибут setgid отличается тем, что символ "s" отображается вместо "x" в правах доступа группы, а не владельца:
bobby:~% ls -l /usr/bin/man -rwxr-sr-x 1 root man 31756 Sep 5 1998 /usr/bin/man bobby:~% _ |
Для его установки/удаления команде chmod указывается "g+s" и "g-s" соответственно.
|
Семантика атрибута "s" при неустановленном атрибуте "x", а также атрибута "s" на директории существенно отличается, и эти случаи мы рассматривать не будем. |
Поиск сюидных программ
Для поиска имеющихся на диске сюидных программ используется команда find.
Команда
найдет все файлы с установленным флагом setuid. Чтобы включить в список также файлы с атрибутом setgid, следует воспользоваться командойfind / -type f -perm -u+s
find / -type f '(' -perm -u+s -o -perm -g+s ')'
Чтобы сразу выдать листинг найденных файлов, подойдет команда
find / -type f '(' -perm -u+s -o -perm -g+s ')' -exec ls -ld '{}' ';'
Поиск сюидных программ следует выполнять, естественно, как пользователь "root".
<< Предыдущий раздел | /\ Содержание | >> Следующий раздел