Безопасность и программа sendmail
Категория: Электронная почта | Автор: admin | 1-06-2010, 03:41 | Просмотров: 4043

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

Недавнее послабление американских федеральных законов, касающихся экспорта систем шифрования, позволило оснастить программу sendmail собственными механизмами шифрования. Версии 8.11 и более поздние поддерживают систему SMTP-аутентификации и SSL (Secure Sockets Layer — протокол защищенных сокетов). Протокол SSL в sendmail называется TLS (Transport Layer Security — безопасность транспортного уровня) и реализован в виде дополнения STARTTLS к протоколу SMTP. Ему соответствуют шесть новых конфигурационных параметров, связанных с файлами сертификатов и ключей.

В этом параграфе мы рассмотрим эволюцию модели безопасности программы sendmail. В конце кратко описан протокол SASL.

Безопасность программы sendmail постоянно усиливалась, и теперь программа, прежде чем довериться содержимому, скажем, файлов .forward или aliases, тщательно проверяет права доступа к ним. Как правило, подобные меры предосторожности действительно необходимы, но иногда все же требуется их ослабить. С этой целью в программе появилась опция DontBlameSendmail, название которой ("не обвиняй sendmail") подсказывает системным администраторам, что после изменения опции все действия программы станут небезопасными.

У опции DontBlameSendmail много возможных значений. По умолчанию она равна safe. Полный список значений можно найти в файле sendmail/conf.c.

 

Владельцы файлов

 

Программа sendmail различает трех специальных пользователей: DefaultUser, TrustedUser и RunAsUser. По умолчанию все агенты доставки работают от имени пользователя DefaultUser, если не заданы специальные флаги. При наличии в файле /etc/passwd записи "mailnull" или "sendmail" именно эта запись будет соответствовать пользователю DefaultUser. В противном случае пользователю будут сопоставлены значения UID и GID, равные 1, что эквивалентно учетной записи "daemon". Мы рекомендуем применять учетную запись "mailnull". Добавьте ее в файл /etc/passwd со звездочкой в поле пароля, с пустым полем идентификатора команд, с пустым полем начального каталога и группой "nogroup". Этой учетной записи не должны принадлежать никакие файлы.

Пользователь TrustedUser может владеть файлами баз данных и псевдонимов. Ему разрешается запускать демон и перестраивать файл aliases. Этот пользователь не соответствует классу TRUSTED_USERS программы sendmail, который определяет, кто имеет право менять заголовок "From" сообщений.

Пользователю RunAsUser соответствует значение UID, которое присваивается программе sendmail при открытии сокета, подключенного к порту 25. Привилегированные порты, номера которых меньше 1024, могут открываться только суперпользователем, следовательно, программа sendmail первоначально работает от имени пользователя root. Тем не менее после завершения указанной операции программа может взять себе другое значение UID. Это уменьшает вероятность возможных угроз безопасности, если программа sendmail запускается обманным путем.

По умолчанию, однако, программа продолжает выполняться от имени пользователя root. Если потребуется поменять установку для учетной записи RunAsUser, придется многое изменить. Пользователю RunAsUser принадлежит очередь почтовых сообщений, он может читать все включаемые файлы и файлы баз данных, осуществлять запись в журнальные файлы, запускать программы и т.д. Может уйти несколько часов на поиск всех файлов и каталогов, владелец которых должен быть изменен.

 

Права доступа

 

С точки зрения безопасности программы sendmail важное значение имеют права доступа к определенным файлам и каталогам. Установки, приведенные в табл. 19.16, считаются безопасными.

Таблица 19.16. Атрибуты каталогов программы sendmail

Каталог

Владелец

Режим

Назначение/содержимое

/var/spool/ mqueue

RunAsUser

700

Очередь почтовых сообщений

/, /var, /var/spool

root

755

Компоненты путевого имени каталога mqueue

/etc/mail/*

TrustedUser

644

Таблицы, конфигурационный файл, файлы псевдонимов

/etc/mail

TrustedUser

755

Родительский каталог для разных файлов

/etc

root

755

Путь к каталогу mail

 

Программа sendmail не будет читать файлы с ослабленными правами доступа (например, файлы, доступные для записи группе или остальным пользователям, а также файлы, находящиеся в каталогах, которые доступны для записи группе или остальным пользователям). Такая предосторожность вызвана тем, что многие операционные системы позволяют пользователям отдавать свои файлы в "чужие руки" с помощью команды chown (в основном это относится к системам, производным от System V).

В частности, программа sendmail очень тщательно проверяет полное путевое имя любого файла псевдонимов и файла .forward. Это сказывается на управлении списками рассылки программы Majordomo. Если список рассылки находится, например, в каталоге /usr/local, все путевое имя должно быть надежным; ни один компонент его не должен иметь право записи для группы. Это усложняет владельцу списка работу с файлом псевдонимов. Чтобы проверить текущее положение дел, запустите команду

# sendmail -v -bi

 

Флаг -bi заставляет программу проинициализировать базу данных псевдонимов и выдать предупреждение, если права доступа не подходят.

Программа sendmail не читает файл .forward, если значение счетчика ссылок на него превышает единицу, а путь к каталогу небезопасен (права доступа ослаблены).

Отключить многие ограничения на доступ к файлам можно с помощью опции DontBlameSendmail.

 

Безопасная пересылка почты в файлы и программы

 

Мы рекомендуем применять в качестве агента программной доставки утилиту smrsh, а не /bin/sh, и назначить агентом локальной доставки утилиту mail.local, а не /bin/mail. О них рассказывалось в параграфе 19.8. Обе программы входят в дистрибутив sendmail. Для их активизации необходимо добавить в mc-файл команды

 

FEATURE ('smrsh’ ,   ‘путь_к_программе_smrsh')

FEATURE ('local_lmtp’,   'путь_к_программе_mail.local')

 

 

Если путевые имена не указаны, по умолчанию принимаются следующие установки: /usr/libexec/smrsh и /usr/libexec/mail.local.

По умолчанию программа smrsh запускает только программы, находящиеся в каталоге /usr/adm/sm.bin. Она игнорирует заданные пользователями путевые имена и пытается искать запрашиваемые команды в собственном каталоге. Она также блокирует некоторые метасимволы интерпретатора команд, в частности '<' — оператор переадресации входного потока. В каталоге sm.bin допускается наличие символических ссылок, поэтому создавать копии программ не потребуется.

Приведем несколько примеров команд вместе с возможными интерпретациями программы smrsh:

 

vacation eric                     выполняется /usr/adm/sm.bin/vacation eric

cat /etc/passwd                   отклоняется, программы cat нет в каталоге sm.bin

vacation eric < /etc/passwd       отклоняется, оператор < не разрешен

 

 

Опция SafeFileEnvironment программы sendmail контролирует, куда можно записывать сообщения, если в файле aliases или .forward задано перенаправление почты в файл. Эта опция заставляет программу выполнить системный вызов chroot, вследствие чего корневым каталогом файловой системы станет не /, a /safe или любой другой заданный в опции каталог. Например, если в файле псевдонимов задается перенаправление почты в файл /etc/passwd, то на самом деле сообщения будут записываться в файл /safe/etc/passwd.

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

Агенты доставки тоже могут запускаться в среде с измененным корневым каталогом. В настоящий момент соответствующая опция содержится в настройках агента, но в скором времени "перекочует" в файл конфигурации m4.

 

Опции конфиденциальности

 

В программе sendmail имеются опции конфиденциальности, которые определяют:

  • какие сведения о системе можно узнать из внешнего мира при помощи протокола SMTP;
  • что требуется от узла на противоположном конце SMTP-соединения;
  • могут ли пользователи просматривать или обрабатывать очередь почтовых сообщений.

В табл. 19.17 приведены текущие значения опций конфиденциальности. Самая актуальная информация содержится в каталоге /sendmail/conf.c дистрибутива.

Таблица 19.17. Значения переменной PrivacyOptions

Значение

Интерпретация

public

Проверка конфиденциальности/безопасности не производится

needmailhelo

Требуется SMTP-команда HELO (идентифицирует удаленный узел)

noexpn

Не допускается SMTP-команда EXPN

novrfy

Не допускается SMTP-команда VRFY

needexpnhelo

Не допускается раскрытие адреса (команда EXPN) без команды HELO

needvrfyhelo

Не допускается проверка адреса (команда VRFY) без команды HELO

noverb1

Не допускается "многословный" режим команды EXPN

restrictmailq

Только пользователи группы, которой принадлежит каталог mqueue, могут просматривать очередь сообщений

restrictqrun

Только владелец каталога mqueue может обрабатывать очередь сообщений

noetrn2

Не допускается асинхронная обработка очереди

authwarnings

К сообщениям добавляется заголовок "Authentication-Warning" (это установка по умолчанию)

noreceipts

Запрещает выдачу кодов состояния доставки

nobodyreturn

При выдаче кода состояния доставки не возвращается тело сообщения

goaway

Отменяются все статусные SMTP-запросы (EXPN, VRFY и т.д.)

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

2 ETRN — это команда протокола ESMTP, которая используется узлами с коммутируемым доступом. Она запрашивает обработку очереди только для сообщений данного узла.

 

Мы рекомендуем сделать в mc-файле "консервативные" установки:

define('confPRIVACY_OPTIONS',   '’goaway, authwarnings, restrictmailq, restrictqrun'')

 

По умолчанию установлена лишь опция authwarnings. Обратите внимание на удвоенные кавычки: некоторые версии препроцессора m4 требуют этого для предотвращения интерпретации запятых в списке значений.

 

Запуск программы sendmail при помощи команды chroot

 

Те, кто беспокоится о влиянии программы sendmail на файловую систему, могут запускать ее с помощью команды chroot в специальном корневом каталоге вроде /jail ("тюрьма"). Создайте в этом каталоге минимальную файловую систему, включив в нее файл /dev/null, важные файлы каталога /etc (passwd, group, resolv.conf, sendmail.cf, таблицы баз данных, mail/*), необходимые программе sendmail совместно используемые библиотеки, двоичные файлы sendmail, каталог очереди почтовых сообщений и требуемые журнальные файлы.

Команда для запуска программы sendmail будет выглядеть так:

# chroot /jail /usr/sbin/sendmail -bd -q30m

 

Отражение атак типа 'отказ от обслуживания’

 

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

Опция MaxDaemonChildren ограничивает число процессов sendmail. Она не позволяет программе sendmail захватить все вычислительные ресурсы системы, но зато дает возможность хакерам очень легко "завалить" сервис SMTP. Опция MaxMessageSize защищает каталог очереди от переполнения, но если задать значение опции слишком низким, “жертвами" могут оказаться обычные сообщения. Нужно уведомить пользователей о существующем ограничении на размер сообщения, чтобы они не удивлялись, если письмо вдруг вернется обратно. Размер сообщения обычно может быть достаточно большим.

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

Несмотря на все меры предосторожности, трудно предусмотреть ситуацию, когда кто-то начинает бомбардировать систему письмами. Это очень неприятная проблема.

В университете штата Колорадо для каждого студента (всего их 25000) создается почтовая учетная запись, а стандартным почтовым клиентом является программа pine. Один студент устроился на работу в местный компьютерный магазин, и хозяин попросил студента предоставить ему копию файла паролей. Затем компания разослала рекламное сообщение всем пользователям, упомянутым в файле паролей, пакетами по 1000 получателей за раз. В результате строка "То" получилась очень длинной.

Программа pine была скомпилирована так, чтобы отвечать не только отправителю, но и всем получателям. Многие студенты ответили на рекламу письмами с вопросами вроде "Зачем вы прислали мне эту чушь?", и, естественно, письма оказались разосланы всем, кто был упомянут в строке "То". В результате сервер был полностью выведен из строя. Он не мог обрабатывать не только почту, но и любые другие запросы. Программа sendmail захватила все ресурсы процессора, очередь почтовых сообщений стала огромной, и все выполняемые задания зависли. Пришлось отключать компьютеры от сети, а затем заходить в почтовый буфер каждого пользователя и вручную удалять сообщения.

 

Фальсификации

 

Подделать почту раньше было, что называется, "раз плюнуть". В программу sendmail версии 8.10 входят средства SMTP-аутентификации, позволяющие проверять подлинность машины-отправителя. До версии 8.10 любой пользователь мог подделать сообщение так, как если бы оно поступило из вашего собственного домена. И даже в версии 8.10 проверку все еще нужно включать отдельно, с помощью опции AuthMechanisms.

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

При установленной опции authwarnings программа sendmail добавляет заголовок "Authentication-Warning" к любому исходящему сообщению, которое выглядит подделанным. Тем не менее многие пользовательские почтовые агенты по умолчанию скрывают этот заголовок.

Если фальшивая почта поступает с компьютера, находящегося под вашим административным контролем, можно попытаться отловить нарушителя. Демон identd позволяет узнать реальное регистрационное имя отправителя письма. Программа sendmail посылает обратный запрос к машине-отправителю, чтобы работающий там демон identd сообщил ей имя пользователя, пославшего почту. Если демон на удаленной машине не работает, то ничего выяснить не удастся. Если удаленный компьютер является однопользовательской рабочей станцией, то ее владелец может настроить демон identd так, чтобы тот возвращал заведомо неправильный ответ. Если же удаленный компьютер — это большая многопользовательская система (такая, к примеру, как во многих университетских вычислительных центрах), то демон identd возвращает реальное регистрационное имя пользователя, которое программа sendmail включает в заголовок сообщения.

Во многих организациях демон identd не работает с внешним миром: он блокируется брандмауэром. Применять демон имеет смысл только внутри организации, так как компьютерам, находящимся под посторонним административным контролем, нельзя доверять.

Несколько лет назад, когда мы впервые начали экспериментировать с демоном identd, один студент решил подшутить над своими коллегами по курсовому проекту. Он посылал им письма от имени руководителя проекта, в которых говорил, что они плохо выполняют свою работу и должны работать лучше. К сожалению, однажды он допустил синтаксическую ошибку, и письмо вернулось руководителю. Программа sendmail благодаря протоколу IDENT сама сообщила нам имя нарушителя, включив в сообщение такую строку:

The original message was received at Wed,  9 Mar 1994 14:51 -0700 from студент@benji.Colorado.EDU [ 128 .138.126.10]

 

А в заголовке было сказано нечто иное:

From: руководитель@cs.Colorado.EDU

 

Мораль: занимаясь хакерством, хотя бы не допускайте синтаксических ошибок! В соответствии с нашими правилами, учетная запись студента была отключена до конца семестра, чего, наверное, он и сам хотел. Он не справлялся с курсовым проектом, и его коллегам приходилось часто выполнять работу за него.

 

Безопасность сообщений

 

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

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

Две другие системы, позволяющие повысить конфиденциальность сообщений, — это S/MIME и PGP. Обе они описаны в документах RFC. Мы предпочитаем PGP, так как эта программа широко доступна и написана великолепным шифровальщиком Филом Циммерманом (Phil Zimmermann), которому мы доверяем.

 

SASL: простой протокол защиты и аутентификации

 

Программа sendmail версии 8.10 (и более поздних версий) поддерживает систему SMTP-аутентификации, определенную в документе RFC2554. Она основана на протоколе SASL (Simple Authentication and Security Layer).

SASL — это базовый механизм аутентификации, который может быть встроен в ряд других протоколов. Пока что его используют программа sendmail и демон imapd компании Cyrus. В протоколе SASL реализованы две основные концепции: идентификатор авторизации и идентификатор аутентификации. Эти идентификаторы могут быть связаны с правами доступа к файлам, паролями UNIX, билетами Kerberos и т.д. Библиотека функций SASL состоит из двух частей: модуля аутентификации и модуля шифрования. В связи с федеральными ограничениями на экспорт систем шифрования, программа sendmail версии 8.10 использует только модуль аутентификации. В начале 2000 г. ограничения были ослаблены, поэтому модуль шифрования, который изначально планировалось включить в коммерческую версию sendmail, стал общедоступен в версии 8.11.

Библиотеку Cyrus SASL можно найти по следующему адресу:

ftp://ftp.andrew.cmu.edu/pub/cyrus-mail

 

Инструкции по инсталляции и настройке библиотеки сложноваты для понимания, поэтому мы советуем посетить Web-страницу Клауса Ассмана (Claus Assmann), посвященную использованию SASL в программе sendmail:

http://www.sendmail.org/~ca/email/auth.html

 

Новый модуль шифрования описан в документе RFC2487 и реализован в программе sendmail в виде дополнения STARTTLS к протоколу SMTP

Протокол TLS аналогичен протоколу SSL. используемому многими Web-узлами.


 (голосов: 0)
Версия для печати | Комментариев: 0
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.


 
Логин
Пароль
 

 
Locations of visitors to this page