Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #70, ОКТЯБРЬ 2004 г.

Блеск и нищета Systrace

Антон Карпов & Андрей Матвеев

Хакер, номер #070, стр. 070-074-5


К сожалению, избавить тот же ping от suid-бита с помощью Systrace не удастся. Провос стал заложником собственной концепции программы, разрешив любому пользователю создавать свои политики и запускать Systrace. Дабы счастливые юзеры не побежали добавлять as root в свои рулесы, пришлось разрешить использование фичи privilege elevation только в случае, когда Systrace запущен от рута. Получается, чтобы избавиться от рутовых прав, нужны... права рута. Глупо, согласен. Это вторая вещь, которая меня бесит в Systrace, после ее графической версии :). Вероятно, данная возможность находит применение лишь тогда, когда некоторый демон запускается от рута, дропает свои форки до прав подключенных юзеров (или подобного непривилегированного пользователя), а потом требует рутовые права, допустим, чтобы прочитать файл паролей для авторизации пользователя. Тогда админ запускает демон под контролем Systrace, разрешив тому повышать свои привилегии на определенные системные вызовы (bind, read, execve и т.д.).

Обрати внимание, что для privilege elevation требуются именно ПРАВА рута, так что прокол в системе Systrace можно попробовать компенсировать за счет грамотной настройки sudo(8).

Хакеры наоборот

Итак, Systrace позволяет нам отслеживать системные вызовы и предлагает вариант избавления от suid'ных программ путем контроля повышения привилегий. Разумеется, принцип работы Systrace более сложный, чем может показаться на первый взгляд, за подробностями обращайся к описанию от Провоса на его странице www.citi.umich.edu/u/provos/. Список рассылки, посвященный Systrace, - http://monkeymail.org/mailman/listinfo/Systrace/.

А теперь тебе домашнее задание ;). Как известно, два года назад ftp-сервер популярного irc-клиента BitсhX был взломан, а сам клиент забэкдорен. Теперь backdoor-патч к BitchX можно найти по адресу www.securityfocus.com/archive/1/280009. Для успешного выполнения миссии тебе нужно пропатчить бичиксу, запустить ее в Systrace и попытаться отловить вредоносный вызов бэкдора. Удачи. И не делай ничего под рутом! :)

Анатомия системных вызовов

Системные вызовы - это низкоуровневые обращения непосредственно к ядру операционной системы для выполнения определенной функции. Во время написания программы ты, как правило, используешь вызовы функций из системной библиотеки (libc, в Linux - glibc), которые в процессе выполнения программы все равно транслируются в syscalls (кстати, ничто не мешает тебе кодить системные вызовы напрямую).

Поддерживаемые эмуляции

В настоящее время Systrace нэйтивно, т.е. в чистом виде присутствует в NetBSD, OpenBSD и OpenDarwin. Под Linux и FreeBSD есть только порты, причем от версии под фряху попахивает старьем, что печально. Искренне надеюсь, что скоро увижу свежий порт Systrace где-нибудь в /usr/ports/sysutils/systrace или даже в /usr/src/security/systrace.

Systrace на страже дерева портов

Если ты захочешь проконтролировать собираемую из портов программу, то при компиляции добавь параметр USE_SYSTRACE:

# cd /usr/ports/games/xpilot

Назад на стр. 070-074-4  Содержание  Вперед на стр. 070-074-6