Блеск и нищета Systrace Антон Карпов & Андрей Матвеев Хакер, номер #070, стр. 070-074-3 sub - верно, если в аргументе вызова присутствует заданное подвыражение. Например: native-connect: sockaddr sub ":515" then permit будет работать для коннектов как по UDP, так и TCP-протоколу. Да, ты верно догадался, это правило подошло бы демону печати. Как правило, сетевой сервис запускается от рута, опуская привилегии до прав подключенного юзера либо до прав специально заведенного для этих целей пользователя (например, sshd, www, named, _dhcp), но ему все еще нужен root на начальном этапе, хотя бы для того чтобы забиндить tcp/udp-порт в диапазоне от 0 до 1024. Так работают почти все сервисы - sshd, httpd, named. Наконец, полно сервисов, которым все еще нужны полноценные права рута и которые знать не знают, что такое privilege separation. Избежать потенциально опасной ситуации можно, написав правило, в котором было бы указано, какие действия демону позволено совершать (какие файлы читать, к каким портам цепляться), а какие - нет. Зачем контролировать? Если ты все еще задаешься вопросом, зачем нам контролировать системные вызовы программ, то "поздравляю тебя, Шарик, ты балбес". Для хаксора это бесценная возможность прикинуть, действительно ли только что стрейденный бинарник (сорсы, ясное дело, часто не дают) свежайшего сплоита будет лезть на уязвимый BIND, переполняя бедняге буфер и ломая chroot, или вместо этого забиндит рутшелл на машине хакерюги, а то и отправит к праотцам всю порноколлекцию эксплоитов и приватных ддосеров. Просто натрави Systrace на новый 0day_l33t_p10it и смотри, что тот будет делать. Думаю, named-эксплоиту ни к чему совершать системный вызов вроде этого: /home/toxa/test/l33tpl01t, pid: 22366(0)[4036], policy: /home/toxa/test/l33tpl01t, filters: 13, syscall: native-execve(59), filename: /bin/sh, argv: sh -c rm -rf / Для администраторов и остальных нормальных людей Systrace - это возможность контролировать процессы путем составления жесткого конфига. Как пример - уже упоминавшийся здесь полис /etc/Systrace/usr_sbin_named, где серверу имен разрешено принимать соединения только по 53/udp, взаимодействовать с доверенными DNS-серверами, осуществляя трансфер зонных файлов по 53/tcp, и читать только те файлы, которые нужны для его работы. Если в named будет найдена новая уязвимость (а она будет найдена, я уверен, ведь не секрет, что BIND - та еще поделка), взломщику будет нечего ловить, т.к. хакнутый named не сможет выполнить код, открывающий шелл на каком-нибудь порту, - политика не позволит. Нетрудно догадаться, что Systrace дает возможность поиграться с сокрытием файлов и директорий. Например, следующая строчка в bin_ls запретит просмотр содержимого каталога /etc для всех пользователей, не входящих в админскую группу wheel: native-fsread: filename eq "/etc" then deny[enoent] log, if group != wheel Да не просто запретит. Systrace позволяет опционально добавлять в конец правила код возвращаемой ошибки (errorcode) и/или протоколировать сисколл (log). Errorcode - это текстовая запись кода ошибки (посмотри man 2 errno), который будет возвращен программе в ответ на запрошенный системный вызов. В моем примере это ошибка "Такой файл не существует": |