Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter Хакер в ВКонтакте Приложение Хакер для Facebook Хакер на Formspring.me
Журнал Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
Взлом как образ мысли Взлом как образ мысли
Интервью с человеком, который, как оказалось, является не только талантливым пентестером в одной из крупных ИБ-компании, но и хакером-ветераном, который уверенными шагами вышел на свет и прикоснулся к истории российской хак-сцены....
Полный гид по накрутке онлайн-голосований Полный гид по накрутке онлайн-голосований
Конкурсы с голосованием привлекают большое количество посетителей, а трафик, как известно, — это деньги. Особый интерес вызывают конкурсы, где за победу предлагаются лакомые призы....

Хакер № 10/04 (70)

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

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

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


Первое, что приходит в голову, - протрейсить команду вывода содержимого текущей директории: Systrace -t ls. Систрейс сразу же выдаст первый системный вызов, запрашиваемый программой ls, и спросит, разрешить или запретить его выполнение. Как Answer вбей permit или deny. Если значение какого-либо вызова тебе непонятно - читай соответствующие доки, сисколлы описаны во втором разделе справочных страниц (man 2 <имя_сисколла> ). Так, вызов за вызовом, ты прошагаешь вместе с ls до победного конца, получив в итоге файл политик (policy) в $HOME/.Systrace/. Для ls это будет bin_ls - полный путь до оттрейсенной программы с префиксом "_" вместо "/". В дальнейшем при запуске ls через Systrace (c флагом -a, apply policy), последняя будет читать конфиг политик, не задавая вопросов, только если не встретит новый сисколл. Результат полного трейса ты можешь видеть на скриншоте:

Очевидно, что любая, даже самая простая прога совершает приличное количество вызовов, большинство из которых стандартны и неопасны. Поэтому проще всего составить правила, по умолчанию разрешающие ограниченное множество вызовов. Тогда при запуске Systrace спросит тебя только о новых вызовах, не упомянутых в policy. Самый простой способ получить полис для программы - запустить Systrace с ключом -A (allow all, в результате чего все syscalls будут разрешены и программа выполнится), а затем поправить файл политики под свои нужды. Очевидно, что для подозрительной программы данный подход не подходит.

Играем в политику

Взглянем на сгенерированный файл политики bin_ls. Первая строчка - путь до программы и тип эмуляции вызовов (к примеру, native-* для OpenBSD, linux-* для Linux). Все последующие строки в общем виде можно записать так: <системный вызов> <условие> <действие> . С системными вызовами все понятно, условия (conditions) представляют собой аргументы сисколла, а основных действий всего два - permit и deny. Для открытия файла условием может выступать его имя, для сокета - тип, для юзера - уникальный идентификатор и т.д. В общем случае обработка фильтра полиса производится с помощью четырех ключевых слов:

eq - верно, если аргумент вызова в точности соответствует заданному. Пример: native-fsread: filename eq "/home/toxa/.Systrace" then permit.

match - выполняется раскрытие (глоббинг) пути до файла. Например, правило native-execve: filename match "$HOME/bin/*" then permit будет действовать для всех файлов каталога bin в домашней дире пользователя.

re - верно, если правило попадает под заданное регулярное выражение. Любители перла и регекспов, салют :).

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





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


    Rambler's Top100