- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF83:AppArmor
Материал из Linuxformat.
(Новая: == Армированный Linux == ''AppArmor – отличный, гибкий инструмент безопасности для Linux. Его создатель, '''Криспи...) |
|||
| Строка 2: | Строка 2: | ||
''AppArmor – отличный, гибкий инструмент безопасности для Linux. Его создатель, '''Криспин Коуэн''', поведает вам о нем.'' | ''AppArmor – отличный, гибкий инструмент безопасности для Linux. Его создатель, '''Криспин Коуэн''', поведает вам о нем.'' | ||
| - | Основная беда безопаснос- | ||
| - | ти приложений – невоз- | ||
| - | можно сказать, как пове- | ||
| - | дет себя ваше прило- | ||
| - | жение в нестандартных | ||
| - | условиях: число состоя- | ||
| - | ний и вариантов ввода слишком велико, | ||
| - | чтобы исчерпывающе протестировать даже | ||
| - | небольшую программу. Когда это вылива- | ||
| - | ется в проблему? Когда некто обнаружива- | ||
| - | ет, что определённый набор входных дан- | ||
| - | ных приводит к некорректному поведению | ||
| - | программы, и разрабатывает приложение, | ||
| - | эксплуатирующее найденную уязвимость | ||
| - | (подобные приложения так и называют – | ||
| - | эксплойты, exploits). | ||
| - | + | Основная беда безопасности приложений – невозможно сказать, как поведет себя ваше приложение в нестандартных условиях: число состояний и вариантов ввода слишком велико, чтобы исчерпывающе протестировать даже небольшую программу. Когда это выливается в проблему? Когда некто обнаруживает, что определённый набор входных данных приводит к некорректному поведению программы, и разрабатывает приложение, эксплуатирующее найденную уязвимость (подобные приложения так и называют – эксплойты, exploits). | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | AppArmor | + | Для решения проблемы эксплойтов и разработан AppArmor. AppArmor обеспечивает безопасность приложений, заставляя их делать только то, что они обязаны делать и не более того. Конкретно, AppArmor контролирует файлы и функции POSIX.1e (см. man 7 capabilities), к которым приложение имеет доступ, поскольку контроль над этими ресурсами и привилегиями на вашей машине и есть мечта злоумышленника. В данной статье мы разъясним, как настроить и использовать AppArmor для защиты ваших программ и системы от атак. |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | 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. |
| - | + | ||
| - | Immunix Inc в 2005 году фирмой Novell | + | AppArmor вступил в жизнь как проприетарная система, но после приобретения Immunix Inc в 2005 году фирмой Novell приложение выпускается по лицензии GPL. С тех пор AppArmor был портирован на Slackware, Ubuntu и Pardus Linux, турецкий дистрибутив. |
| - | приложение выпускается по лицензии GPL. | + | |
| - | С тех пор AppArmor был портирован на | + | |
| - | Slackware, Ubuntu и Pardus Linux, турецкий | + | |
| - | дистрибутив. | + | |
Для установки AppArmor в Ubuntu, выполните | Для установки 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 | 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. |
| - | новое ядро, поскольку для поддержки | + | |
| - | AppArmor необходима небольшая заплатка | + | |
| - | для ядра. Ubuntu основан на Debian, так | + | |
| - | что пакеты прекрасно подойдут для Debian, | + | |
| - | MEPIS и прочих систем на базе Debian. | + | |
| - | Если вы хотите использовать AppArmor в | + | |
| - | другой системе Linux, потребуется его | + | |
| - | + | ||
| - | на странице 47. | + | |
=== Обезопасим NTPD === | === Обезопасим NTPD === | ||
| - | Теории достаточно; обратимся к примеру. | + | Теории достаточно; обратимся к примеру. Рассмотрим NTPD, Network Time Protocol Daemon. Он обеспечивает синхронизацию вашей системы с главным сервером вашей локальной сети или с интернетом – важная задача! Однако для изменения вашего системного времени NTPD потребуются привилегии суперпользователя (root), а также открытый сетевой порт, чтобы узнавать время на главном сервере. В итоге получается убойная комбинация: открытый сетевой порт и доступ к процессам с правами суперпользователя – классический пример из руководства по безопасности. Злодей, нашедший уязвимость в коде NTPD, сможет атаковать демона NTP и получить права суперпользователя на вашем компьютере. |
| - | Рассмотрим NTPD, Network Time Protocol | + | |
| - | Daemon. Он обеспечивает синхронизацию | + | Права суперпользователя отнять нельзя – ведь тогда NTPD не сможет менять время; открытый сетевой порт удалить тоже нельзя – тогда NTPD не сможет узнавать время. Тут-то и поможет AppArmor, ограничив привилегии NTPD посредством профиля безопасности. Вот AppArmor-профиль для программы ntpd: |
| - | вашей системы с главным сервером вашей | + | |
| - | локальной сети или с интернетом – важная | + | |
| - | задача! Однако для изменения вашего | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | время на главном сервере. В итоге | + | |
| - | + | ||
| - | + | ||
| - | суперпользователя – классический пример | + | |
| - | из руководства по безопасности. Злодей, | + | |
| - | нашедший уязвимость в коде NTPD, | + | |
| - | + | ||
| - | суперпользователя на вашем компьютере. | + | |
| - | Права суперпользователя отнять | + | |
| - | нельзя – ведь тогда NTPD не сможет менять | + | |
| - | время; открытый сетевой порт удалить тоже | + | |
| - | нельзя – тогда NTPD не сможет узнавать | + | |
| - | время. Тут-то и поможет AppArmor, | + | |
| - | + | ||
| - | + | ||
| - | для программы ntpd: | + | |
/usr/sbin/ntpd { | /usr/sbin/ntpd { | ||
#include <abstractions/base> | #include <abstractions/base> | ||
| Строка 121: | Строка 45: | ||
/var/run/ntpd.pid w, | /var/run/ntpd.pid w, | ||
} | } | ||
| - | Сейчас ntpd запускается от имени root, | + | Сейчас ntpd запускается от имени root, то есть имеет доступ ко всем функциям POSIX.1e. Но этот профиль ограничивает доступ ntpd семью функциями, описанными в коде. Будучи root-процессом, ntpd мог бы читать, записывать и запускать любой файл в файловой системе, но теперь ему доступны только файлы, описанные в профиле. |
| - | то есть имеет доступ ко всем функциям | + | {{Врезка |
| - | POSIX.1e. Но этот профиль ограничивает | + | | Выравнивание = right |
| - | доступ ntpd семью функциями, описанными | + | | Ширина = 200px |
| - | в коде. Будучи root-процессом, ntpd мог бы | + | | Заголовок = Википедия |
| - | читать, записывать и запускать любой файл | + | | Заголовок снизу = 1 |
| - | в файловой системе, но теперь ему | + | | Содержание = '''Википе́дия''' — свободная энциклопедия. |
| - | + | }} | |
| - | Что же произойдёт, при наличии | + | |
| - | + | Что же произойдёт, при наличии данного профиля, если злоумышленник припас программу-эксплойт, направленную против ntdp? Будьте спокойны: ничего. У него нет прав на выполнение, а значит, простой shell-код [«полезная нагрузка» эксплойта, выполняющая задуманные злоумышленником действия, – прим. ред.] вида exec(sh) не пройдет. Если ntpd зачем-либо потребуется командная оболочка (shell), злоумышленник сможет запустить ее, но только из-под профиля, и сможет читать и записывать лишь файлы, принадлежащие ntpd на основании профиля. Короче говоря, злоумышленник сможет разве что изменить ваше системное время. AppArmor разрешил ntpd выполнять только конкретные операции – в литературе по безопасности это называется запуском приложения с наименьшими привилегиями. | |
| - | программу-эксплойт, направленную против | + | |
| - | ntdp? Будьте спокойны: ничего. У него нет | + | |
| - | прав на выполнение, а значит, простой | + | |
| - | shell-код [«полезная нагрузка» эксплойта, | + | |
| - | выполняющая задуманные | + | |
| - | + | ||
| - | не пройдет. Если ntpd зачем-либо | + | |
| - | + | ||
| - | + | ||
| - | под профиля, и сможет читать и записывать | + | |
| - | лишь файлы, принадлежащие ntpd на | + | |
| - | + | ||
| - | + | ||
| - | системное время. AppArmor разрешил ntpd | + | |
| - | выполнять только конкретные операции – в | + | |
| - | литературе по безопасности это | + | |
| - | + | ||
| - | привилегиями. | + | |
Версия 04:10, 10 марта 2008
Армированный 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 выполнять только конкретные операции – в литературе по безопасности это называется запуском приложения с наименьшими привилегиями.


