LXF83:AppArmor
|
|
|
Армированный Linux
AppArmor – отличный, гибкий инструмент безопасности для Linux. Его создатель, Криспин Коуэн, поведает вам о нем.
Основная беда безопаснос- ти приложений – невоз- можно сказать, как пове- дет себя ваше прило- жение в нестандартных условиях: число состоя- ний и вариантов ввода слишком велико, чтобы исчерпывающе протестировать даже небольшую программу. Когда это вылива- ется в проблему? Когда некто обнаружива- ет, что определённый набор входных дан- ных приводит к некорректному поведению программы, и разрабатывает приложение, эксплуатирующее найденную уязвимость (подобные приложения так и называют – эксплойты, exploits).
Для решения проблемы эксплойтов и разработан AppArmor. AppArmor обеспе- чивает безопасность приложений, застав- ляя их делать только то, что они обяза- ны делать и не более того. Конкретно, AppArmor контролирует файлы и функции POSIX.1e (см. man 7 capabilities), к которым приложение имеет доступ, пос- кольку контроль над этими ресурсами и привилегиями на вашей машине и есть мечта злоумышленника. В данной статье мы разъясним, как настроить и исполь- зовать AppArmor для защиты ваших про- грамм и системы от атак.
AppArmor полностью интегрирован в SUSE Linux 10.1, SLES 9 SP3 и SUSE Linux Enterprise 10. Он устанавливается и работа- ет по умолчанию, но использует скромный набор профилей (об этом позже). Намного больший набор профилей можно найти в /etc/apparmor/profiles/extras/; вы можете скопировать их в /etc/apparmor.d, где хранятся активные профили. В SUSE, интерфейс пользователя Yast содержит кнопку AppArmor, которая выводит гра- фический эквивалент описываемых здесь инструментов genprof и logprof.
AppArmor вступил в жизнь как пропри- етарная система, но после приобретения Immunix Inc в 2005 году фирмой Novell приложение выпускается по лицензии GPL. С тех пор AppArmor был портирован на Slackware, Ubuntu и Pardus Linux, турецкий дистрибутив.
Для установки AppArmor в Ubuntu, выполните
sudo dpkg -i apparmor-* libapparmor1_2.0-0ubuntu2_i386.deb linux-image-2.6.15-21-386_2.6.15-21.32mr1_i386.deb
Заметьте, что эти пакеты включают новое ядро, поскольку для поддержки AppArmor необходима небольшая заплатка для ядра. Ubuntu основан на Debian, так что пакеты прекрасно подойдут для Debian, MEPIS и прочих систем на базе Debian. Если вы хотите использовать AppArmor в другой системе Linux, потребуется его пор- тировать – см. врезку «Двигаемся дальше» на странице 47.
Обезопасим NTPD
Теории достаточно; обратимся к примеру. Рассмотрим NTPD, Network Time Protocol Daemon. Он обеспечивает синхронизацию вашей системы с главным сервером вашей локальной сети или с интернетом – важная задача! Однако для изменения вашего сис- темного времени NTPD потребуются при- вилегии суперпользователя (root), а так- же открытый сетевой порт, чтобы узнавать время на главном сервере. В итоге получа- ется убойная комбинация: открытый сете- вой порт и доступ к процессам с правами суперпользователя – классический пример из руководства по безопасности. Злодей, нашедший уязвимость в коде NTPD, смо- жет атаковать демона NTP и получить права суперпользователя на вашем компьютере. Права суперпользователя отнять нельзя – ведь тогда NTPD не сможет менять время; открытый сетевой порт удалить тоже нельзя – тогда NTPD не сможет узнавать время. Тут-то и поможет AppArmor, огра- ничив привилегии NTPD посредством про- филя безопасности. Вот AppArmor-профиль для программы ntpd:
/usr/sbin/ntpd { #include <abstractions/base> #include <abstractions/nameservice> capability ipc_lock, capability net_bind_service, capability setgid, capability setuid, capability sys_chroot, capability sys_resource, capability sys_time, /drift/ntp.drift rwl, /drift/ntp.drift.TEMP rwl, /etc/ntp.conf r, /etc/ntp/drift* rwl, /etc/ntp/keys r, /etc/ntp/step-tickers r, /tmp/ntp* rwl, /usr/sbin/ntpd rix, /var/lib/ntp/drift rwl, /var/lib/ntp/drift.TEMP rwl, /var/lib/ntp/drift/ntp.drift r, /var/lib/ntp/var/run/ntp/ntpd.pid w, /var/log/ntp w, /var/log/ntp.log w, /var/run/ntpd.pid w, }
Сейчас ntpd запускается от имени root, то есть имеет доступ ко всем функциям POSIX.1e. Но этот профиль ограничивает доступ ntpd семью функциями, описанными в коде. Будучи root-процессом, ntpd мог бы читать, записывать и запускать любой файл в файловой системе, но теперь ему доступ- ны только файлы, описанные в профиле. Что же произойдёт, при наличии данно- го профиля, если злоумышленник припас программу-эксплойт, направленную против ntdp? Будьте спокойны: ничего. У него нет прав на выполнение, а значит, простой shell-код [«полезная нагрузка» эксплойта, выполняющая задуманные злоумышленни- ком действия, – прим. ред.] вида exec(sh) не пройдет. Если ntpd зачем-либо потребу- ется командная оболочка (shell), злоумыш- ленник сможет запустить ее, но только из- под профиля, и сможет читать и записывать лишь файлы, принадлежащие ntpd на осно- вании профиля. Короче говоря, злоумыш- ленник сможет разве что изменить ваше системное время. AppArmor разрешил ntpd выполнять только конкретные операции – в литературе по безопасности это называет- ся запуском приложения с наименьшими привилегиями.