Контроль над комбинацией из трёх пальцев
Автор: Дэн Уилсон (Dean Wilson)
Перевод: Иван Песин


"Запущен только один сервис, система полностью пропатчена и настроен локальный брандмауэр с отвергающей политикой по умолчанию!"
"А что будет, если я нажму Ctrl-Alt-Delete?"

Введение

Одной из основных предпосылок в компьютерной безопасности, является практически полная невозможность обеспечить защиту системы, к которой у атакующего есть физический доступ. Невозможно охватить все возможные варианты событий, но можно внести небольшие изменения в систему для контроля за наиболее очевидными путями нарушения безопасности. В этом документе мы рассмотрим методы защиты от несанкционированных перезагрузок систем.

Проблема

Каждый, кто подойдёт к клавиатуре от Linux-машины может нажать клавиши Control-Alt-Delete и перезагрузить систему без регистрации в ней. Даже машины под управлением Windows, если они заблокированы, требуют корректной регистрации (либо текущего пользователя, либо пользователя с административными привилегиями) перед тем, как вы сможете перезагрузить систему. И это даже не обязательно должно использоваться со злым умыслом, часто люди, привыкшие к Windows NT или Windows 2000, нажимают Control-Alt-Delete в сессии X-Windows для блокировки экрана, или для доступа к менеджеру задач, а в место этого видят ужасное сообщение "The system is going down for reboot NOW!" и уничтожение их работы со времени последней перезагрузки.

Решение

Во многих дистрибутивах Linux, клавиатурная комбинация Control-Alt-Delete (известная также как ctrl-alt-del, или "комбинация из трёх пальцев") настроена на перезагрузку (причём немедленную! - Прим.пер.) системы. И если это приемлемо для однопользовательской домашней системы, то для рабочего места в офисе, или даже серверов, представляет ненужный риск, поскольку не требует корректной регистрации пользователя.

Для предотвращения такого поведения, мы будем перехватывать нажатия Control-Alt-Delete и вместо перезагрузки выполнять свой собственный скрипт (хорошо бы он запирал наглухо двери в комнате с серверами и попавшимся злоумышленником - Прим.пер.). Он будет контролировать несанкционированные попытки перезагрузки, и протоколировать их. Для этого нужно написать небольшой скрипт и внести изменения в конфигурационный файл '/etc/inittab', после этого остается добавить ротацию файла журнала (если вы пользуетесь 'logrotate') чтобы всё было в порядке.

Скрипт для интерпретатора bash, который выполняет всю необходимую работу, называется 'audit_cad.sh' и находится здесь. Он может вызываться в двух вариантах. С параметром '-c' он проверит наличие всех необходимых ему программ. Это наилучший метод убедиться, что ваша система удовлетворяет всем требованиям.

Если какая-то из проверок не сработает, скрипт выведет на экран сообщение об ошибке и имя отсутствующей программы. После этого скрипт продолжит проверку. Если какая-либо необходимая программа не найдена, после завершения выполнения скрипта будет возвращен код 1. (Если всё пройдёт успешно, то скрипт тоже завершит свою работу. Ключ '-c' используется исключительно для проверки. -- Прим.ред.) Вот список необходимых для работы программ:

Из всех них ручного редактирования может потребовать только программа basename, которая часто находится либо в каталоге '/usr/bin', либо в каталоге '/bin'. Обычно, скрипт в режиме проверки запускается при установке в систему для того, чтобы убедиться, все ли в порядке. Поскольку скрипт выполняется от пользователя root, стоит проверить права доступа. В идеале они должны быть равными -rwx------ (не понятно, почему не -r-x------? - Прим.пер.). Чтобы установить их введите команду 'chmod 0700 audit_cad.sh' (всё-таки я бы сделал chmod 0500 audit_cad.sh - Прим.пер.).

Если же скрипт вызывается без параметров, он делает запись в общесистемном журнале ('syslog') с указанными пользователем уровнем и типом и в отдельный файл '/var/log/shutattempt'. Это вариант, вызывающийся при нажатии Control-Alt-Delete.

В данном документе мы считаем, что скрипт называется 'audit_cad.sh' и находится в каталоге '/usr/local/sbin/'. Если вы хотите изменить эти, или другие параметры, просто откройте скрипт в редакторе и вносите необходимые изменения. Все настройки описаны в комментариях.

Теперь, когда скрипт настроен и находится на своём месте, нужно изменить обработчик события Ctrl-Alt-Delete в файле '/etc/inittab'. Нас интересует строка, говорящая процессу 'init' как обрабатывать нажатие Control-Alt-Delete. В большинстве дистрибутивов, идентификатор этого события обозначается как 'ca', а вся строка выглядит примерно так: "ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now". Важной частью этой записи является последнее поле, начинающееся с '/sbin/shutdown'. Чтобы изменить поведение системы, замените значение этого поля, на полное имя скрипта 'audit_cad.sh'. В нашем случае это будет '/usr/local/sbin/audit_cad.sh' (то есть вся строка должна будет выглядеть примерно так: "ca:12345:ctrlaltdel:/usr/local/sbin/audit_cad.sh" - Прим.пер.).

После внесения указанных изменений нужно сообщить процессу 'init' об изменениях в его конфигурации. Проще всего это сделать, выполнив команду 'telinit q', которая заставляет процесс 'init' перечитать свою конфигурацию.

Наконец мы подошли к моменту, когда можно проверить наши изменения. Перед этим я рекомендую вам закрыть все пользовательские приложения, например редакторы. Если вы где-то допустили ошибку при редактировании -- система перезагрузится, потому лучше быть уверенным, что ваша работа не исчезнет, чем пенять на автора! Когда будете готовы -- нажмите Ctrl-Alt-Delete... никакой видимой реакции быть не должно.

Если ваша система продолжает работать, проверьте системный журнал (обычно это файл '/var/log/messages' или '/var/log/syslog') и отдельный журнальный файл скрипта 'audit_cad.sh', чтобы убедится в правильном протоколировании события. Если же ваша машина таки перезагрузилась -- проверьте все изменения и повторите попытку.

Когда у вас всё заработает, нужно собраться с силами и пройти последние метры дистанции: автоматизировать обработку журнального файла. Это может варьироваться от настройки программ 'SWATCH' или 'logwatch' для посылки автоматических отчётов, до настройки ротации журнального файла. Ниже приведён простой пример настройки системы 'logrotate' (подходит как для Redhat так и для Debian). Одним файлом его можно взять здесь.

daily
rotate 7
compress
delaycompress

/var/log/shutattempt {
  nomail
  notifempty
  missingok
  create 0600 root root
}

Добавьте этот файл, предварительно назвав его audit_cad, в ваш каталог 'logrotate'. Обычно это '/etc/logrotate.d'. После этого можно не беспокоиться о том, что журнальный файл слишком сильно разрастётся.

Заключение

Хотя эта технология и позволяет обнаружить попытку перезагрузки системы, у неё есть свои минусы. Так, вы не знаете, кто именно пробует перезагрузить машину и нет никакой возможности определить это. Процесс 'init' выполняется от имени пользователя 'root', потому никаких данных о пользователе вы получить не можете.

Внеся незначительные изменения в 'audit_cad.sh' можно получить вывод команд w или who на момент нажатия Control-Alt-Del, но она не так полезна, как кажется: ведь вы получаете список правомерных пользователей, а чтобы нажать Control-Alt-Delete совершенно не нужно обладать регистрацией на машине!

Другим моментом, является то, насколько явно вы хотите показывать существование данного скрипта. Возможно, не стоит афишировать его присутствие в системе? Тогда назовите его 'shutdown' и сохраните где-нибудь в нестандартном месте.

Дальнейшее чтение

За дальнейшей информацией о формате и назначении файла 'inittab' обратитесь к команде 'man 5 inittab', а чтобы узнать полный список поддерживаемых параметров команды 'telinit', прочтите 'man 8 telnint'. Если вы не знакомы с программой 'logrotate' начните с её страницы руководства (команда'man 8 logrotate').

Dean Wilson (на этой неделе) системный администратор и временно ответственный за обновление отдельных страниц на www.unixdaemon.net


Copyright (c) 2003, Dean Wilson. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 93 of Linux Gazette, August 2003


Вернуться на главную страницу