Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter
Журналы Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
$1000 на Android: зарабатываем на приложениях для мобильной платформы от Google $1000 НА ANDROID: ЗАРАБАТЫВАЕМ НА ПРИЛОЖЕНИЯХ ДЛЯ МОБИЛЬНОЙ ПЛАТФОРМЫ ОТ GOOGLE
27.07.2010

Пара вечеров экспериментов и неожиданно удачная идея позволили за 2 месяца заработать более $1000. Это гораздо больше, чем я мог ожидать...
Фабрика сплоитов ФАБРИКА СПЛОИТОВ
26.07.2010

Откуда берутся сплоиты? Задумывался ли ты, каким образом тусклая новость из багтрака превращается в реально работающую отмычку...

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

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

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


(toxa@real.xakep.ru) & (andrushock@real.xakep.ru)

Учимся контролировать системные вызовы Unix

Любому админу, для которого вопросы безопасности не пустой звук, известны недостатки модели управления доступом в UNIX. В самом деле, примитивная схема "Root всемогущ, а все остальные равны" плюс setuid/setgid-биты для нивелирования этой разницы для отдельных программ были неплохим решением в семидесятые, но в современном мире этого явно недостаточно. К тому же, сочетание "flawy suid program" за тридцать лет успело набить оскомину и стать головной болью не одного поколения администраторов.

Постановка задачи

Кто-то решает эту проблему радикально и использует в своих системах более современные модели доступа, прикручивая патчи, реализующие MAC, RBAC, DTE и еще много других страшных аббревиатур, а кто-то придерживается золотого правила "От добра бобра не ищут", которое применительно к старине юниксу звучит примерно так: "Ничего менять не надо, просто все должно быть под контролем".

Скорее всего, так рассуждал и Нильс Провос (Niels Provos), разработчик NetBSD (а в прошлом - и OpenBSD) из Центра по интеграции информационных технологий (CITI) Мичиганского университета. Что делает любая программа после запуска? Совершает системные вызовы на открытие/запись файлов, создание сетевых сокетов, осуществление операций ввода/вывода и т.п. Так давайте же эти вызовы контролировать, решил Нильс. Не он первый это придумал, не он, вероятно, последний. Да не просто контролировать, а самому задавать, какие вызовы программе делать позволительно, а какие - нет. Причем было бы неплохо хранить настройки в удобочитаемом виде для отдельных программ в соответствующих файлах политик (т.е. не на любимом Lisp'е или m4 :)), которые бы считывались динамически, а не компилировались в базу. Сказано - сделано. Так на свет появился Systrace (system calls tracer).

Впервые широкой общественности Systrace был представлен вместе с релизом OpenBSD 3.2. Тогда Провос был одним из девелоперов этой операционки, но затем у него возникли разногласия с неврастеничным лидером проекта Theo de Raadt, и Нильс вернулся туда, откуда пришел, - в родственный проект NetBSD, чей код и хакает по сегодняшний день, коммитя в cvs tree свежие релизы Systrace. Однако в OpenBSD поддержку этой полезной тулзы не забросили - все проблемы по портированию NetBSD-версии легли на плечи Marius Aamodt Eriksen и Nikolay Sturm.

Пробуем Systrace

При запуске Systrace принимает в качестве аргумента имя исполняемого файла и читает глобальные файлы настроек из каталога /etc/Systrace и пользовательские конфиги из $HOME/.Systrace/. Конфиги Systrace - это текстовые файлы со специальными фильтрами, определяющими, какие из сисколов, вызываемых исполняемой программой, необходимо разрешить, а какие запретить. По умолчанию в OpenBSD заготовлены полисы usr_sbin_named для сервера доменных имен named и usr_sbin_lpd для демона печати lpd.

Но для начала давай попробуем сами оттрейсить что-нибудь простенькое. По умолчанию Systrace запускает свою графическую версию, xSystrace, с менюшками и кнопочками, ожидая от пользователя нажатие permit (разрешить) или deny (запретить) в ответ на выдачу описания системного вызова, совершаемого подконтрольной программой. Не иначе, Провос любитель сверять время по xclock и резаться ночами напролет в xtetris - я не представляю, как надо не любить жизнь, чтобы держать иксы на серверах. Консольная версия интерфейса доступна по ключу -t, и я сразу же заалиасил Systrace на Systrace -t в конфиге своего шелла, чтобы избежать геморроя.

Содержание  Вперед на стр. 070-074-2





Предыдущие номера


    Rambler's Top100