<< Предыдущий раздел | /\ Содержание | >> Следующий раздел

Что такое "локальный взлом"

Под локальным взломом понимается несанкционированные действия (получение прав "root", нарушение работы системы и т.д.), проведенные "из под" обычного непривилегированного пользователя.

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

В подавляющем большинстве случаев локальный взлом производится при помощи так называемых "программ с флагом смены идентификатора пользователя".

SUID-ные программы: что это такое и как их искать

Что это такое


Обычно вместо громоздкого термина "программа с флагом смены идентификатора пользователя" используется "сетъюидная программа" или "сюидная программа" (калька с английского "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.

Команда

find / -type f -perm -u+s
найдет все файлы с установленным флагом setuid. Чтобы включить в список также файлы с атрибутом setgid, следует воспользоваться командой

find / -type f '(' -perm -u+s -o -perm -g+s ')'

Чтобы сразу выдать листинг найденных файлов, подойдет команда

find / -type f '(' -perm -u+s -o -perm -g+s ')' -exec ls -ld '{}' ';'

Поиск сюидных программ следует выполнять, естественно, как пользователь "root".


<< Предыдущий раздел | /\ Содержание | >> Следующий раздел