Анализ безопасности показал переоценку защиты с использованием "capabilities"
Для каждого из девятнадцати проблемных "capabilities" представлен метод получения прав полноценного суперпользователя в ситуации эксплуатации непривилегированных приложений, для которых выставлен только один из флагов "capabilities". Несмотря на то, что многие из методов расширения привилегий через проблемные "capabilities" имеют теоретический характер и требуют для эксплуатации определенных условий, по мотивам исследования уже подготовлен рабочий эксплоит, демонстрирующий процесс расширения флага CAP_SYS_ADMIN до полноценного root-доступа. Эксплоит работает только на 32-разрядных системах с Linux-ядром до версии 2.6.35 (например, Ubuntu 10.10) и дополнительно использует ошибку в реализации протокола Phonet.
Эксплоит использует CAP_SYS_ADMIN в сочетании с передачей отрицательного индекса протокола для подстановки серии фиктивных структур на уровне пользователя и инкрементирования произвольного адреса в ядре, что в конечном итоге позволяет выполнить код на уровне ядра. Представленный в эксплоите метод намеренно усложнен для демонстрации наличия не очевидных вариантов. В простейшем случае, имея права CAP_SYS_ADMIN, можно примонтировать собственную файловую систему поверх части текущей ФС. Другие варианты - осуществить подстановку команд в открытый администратором shell через формирование TIOCSTI ioctl к /dev/tty или перенаправить сетевой порт для переброса SSH-запросов на свой обработчик, предназначенный для сбора паролей.
Примечательно, что статья о недостатках "capabilities" опубликована во время начала воплощения в жизнь инициативы по замене suid-бита на "capabilities" во всех программах будущих релизов Ubuntu и Fedora. Ожидалось, что переход на "capabilities" позволит понизить опасность от эксплуатации уязвимостей в приложениях, требующих расширенных привилегий, что в итоге значительно повысит безопасность системы. В ситуации когда большинство "capabilities" позволяют обходными путями теоретически получить root-доступ, в сочетании с ранее публиковавшимися предупреждениями о необходимости переработки и аудита кода некоторых программ для полноценной поддержки "capabilities", итог инициатив по полному уходу от suid-бита может отрицательно сказаться на безопасности. В частности, приводится пример, когда suid-утилита на начальной стадии своей работы выполняет требующее повышенных привилегий действие и затем сразу сбрасывает повышенные привилегии. Если в такой утилите заменить suid на "capabilities" без добавления кода сброса полученных привилегий, то данные привилегии останутся доступны на протяжении всего времени работы программы.
В качестве примеров приложений, для защиты которых используется хотя бы один проблемный флаг "capabilities" приводятся:
- rsyslogd/syslogd (CAP_SYS_ADMIN, CAP_DAC_OVERRIDE, CAP_DAC_READ_SEARCH)
- cron (CAP_SETUID, CAP_SETGID)
- login (CAP_SETUID, CAP_SETGID, CAP_FSETID, CAP_CHOWN)
- cvs (CAP_DAC_OVERRIDE, CAP_SETUID, CAP_FSETID)
- postfix (CAP_DAC_OVERRIDE, CAP_KILL, CAP_SETUID, CAP_SETGID, CAP_SYS_CHROOT)
- apache (CAP_KILL, CAP_SETUID, CAP_SETGID)
- sshd (CAP_KILL, CAP_SYS_TTY_CONFIG, CAP_SETUID, CAP_SETGID, CAP_CHOWN)
- xinetd (CAP_SETUID, CAP_SETGID)
- procmail (CAP_SETUID, CAP_SETGID, CAP_DAC_OVERRIDE)
Проблемные "capabilities" (стоит отметить, что в списке представлены достаточно редко используемые или очевидно небезопасные флаги):
- CAP_SYS_ADMIN - включает достаточно широкий спектр административных операций, включая монтирование ФС, управление квотами и т.п. Методы расширений привилегий были представлены выше;
- CAP_SYS_TTY_CONFIG - можно изменить раскладку клавиатуры для терминала администратора, что в конечном итоге может быть использовано для выполнения не той команды, которая подразумевалась (rm вместо ls);
- CAP_MKNOD - можно создать доступное пользователю на запись блочное устройство, которое будет отождествлено с рабочим системным диском;
- CAP_SYS_PTRACE - можно выполнить подстановку кода в процессе выполнения трассировки привилегированного процесса;
- CAP_SYS_RAWIO - можно выполнить маппинг NULL-страницы для эксплуатации повсеместно встречающихся уязвимостей, связанных с разыменованием NULL-указателей. Также возможно совершение атак через FIBMAP ioctl;
- CAP_SYS_MODULE - позволяет модифицировать ядро;
- CAP_SETFCAP - имея полный доступ к файлам, легко получить полный root-доступ;
- CAP_FSETID, CAP_SETGID - можно получить привилегии GID 0 или GID staff, а затем модифицировать некоторые системные файлы доступные на запись для данных GID (например, содержимое /usr/local в Debian);
- CAP_SETUID - не запрещает сменить id на 0;
- CAP_DAC_OVERRIDE - можно модифицировать бинарный файл, который затем будет запущен пользователем root;
- CAP_SETPCAP - позволяет организовать сохранение установленных "capabilities" для дочерних процессов;
- CAP_IPC_OWNER - позволяет контролировать содержимое приватных данных в IPC;
- CAP_FOWNER, CAP_CHOWN - можно поменять права доступа на такие файлы, как /etc/shadow и /root/.ssh/*;
- CAP_SYS_CHROOT - можно подготовить chroot-окружение с подставным libc и организовать проброс из него жесткой ссылки на внешний suid root-файл, при выполнении которого в chroot функции подмененной libc будут выполнены с root-правами;
- CAP_DAC_READ_SEARCH - можно прочитать содержимое /etc/shadow и /root/.ssh/*;
- CAP_SYS_BOOT - можно загрузить подставное ядро через систему kexec_load;
- CAP_AUDIT_CONTROL - можно задействовать netlink-команды AUDIT_TTY_GET/AUDIT_TTY_SET для логгирования ввода/вывода для заданного tty и перехватить таким образом пароль root.
"Capabilities" допускающие проведение некоторых видов атак:
- CAP_KILL - можно завершить процесс, обслуживающий сетевой порт c номером выше 1024 и запустить вместо него свой обработчик;
- CAP_NET_ADMIN - позволяет организовать перенаправление сетевого порта на свой обработчик;
- CAP_NET_RAW - позволяет организовать сниффинг транзитного трафика с целью выявления паролей.
- CAP_LINUX_IMMUTABLE
- CAP_NET_BROADCAST
- CAP_NET_BIND_SERVICE;
- CAP_IPC_LOCK
- CAP_SYS_PACCT
- CAP_SYS_NICE;
- CAP_SYS_RESOURCE
- CAP_SYS_TIME
- CAP_LEASE
- CAP_AUDIT_WRITE
- CAP_MAC_OVERRIDE
- CAP_MAC_ADMIN
- CAP_SYSLOG
Источник: http://www.opennet.ru/opennews/art.shtml?num=29219
|
0 | Tweet | Нравится |
|