Библиотека сайта rus-linux.net
Sendmail – Архитектура и принципы разработки
Глава 17 из 1 тома книги "Архитектура приложений с открытым исходным кодом".
Оригинал: "Sendmail"
Автор: Eric Allman
Перевод: Vlad http://vlad8.com/
17.6. Безопасность
В том, что касается безопасности, у sendmail была беспокойная жизнь. Некоторая часть из плохой славы была заслужена, но некоторая нет, так как концепция “безопасности” менялась на наших глазах.
Интернет начинался как база пользователей размером в несколько тысяч человек, главным образом из академических и исследовательских кругов. Во многом это был более добрый и мягкий интернет, нежели тот, что мы знаем сегодня. Сеть была спроектирована таким образом, чтобы поощрять распространение материалов, а не создание фаерволов (эта концепция вообще не существовала в первые дни). Сегодня сеть — это опасное, враждебное место, наполненное спамерами и хакерами. Все чаще она описывается как зона боевых действий, а в зоне военных действий есть потери среди мирных жителей. Трудно писать сетевые сервера безопасно, особенно если протокол хоть чуть-чуть сложен. Практически все программы имели как минимум небольшие проблемы; даже обычные реализации TCP/IP были успешно атакованы. Высокоуровневые языки показали, что также не являются панацеей, и даже добавили свои собственные уязвимости. Появилась необходимая фраза-предупреждение: “Не доверяй всем вводимым данным”, не важно от кого они получены. Недоверие к вводимым данным включает в себя и вторичные данные, например, от DNS-серверов и фильтров milter. Как и большинство первых сетевых программ sendmail был слишком доверчивым в своих первых версиях.
Но самой главной проблемой sendmail было то, что ранние версии работали под администратором. Права администратора были необходимы для открытия слушающего сокета SMTP, для чтения информации о передаче почты индивидуальных пользователей и для доставки почты в почтовые ящики индивидуальных пользователей и их домашние папки. Однако на большинстве сегодняшних систем концепция почтового ящика была отделена от концепции пользователя системы, что эффективно исключило необходимость в административном доступе, за исключением открытия слушающего сокета SMTP. Сегодня sendmail имеет возможность отказываться от прав администратора до того, как начинает обрабатывать соединение, исключая эту проблему для тех систем, которые могут поддерживать такую возможность. Стоит заметить, что на тех системах, которые не доставляют почту прямо в почтовые ящики пользователей, sendmail также может запускаться в окружении с запущенной программой chroot, что дает возможность дальнейшей изоляции прав пользователей.
К сожалению, по мере того, как sendmail получал репутацию программы с низкой безопасностью, его начали обвинять в проблемах, которые к нему не имели отношения. Например, один системный администратор дал запись к своей папке /etc для всего мира и затем обвинил sendmail, когда кто-то заменил ему файл /etc/passwd. Подобные инциденты заставили нас серьезно заняться безопасностью, включая явную проверку владельца и режимов файлов и папок, к которым у sendmail был доступ. Эти опции были настолько драконовскими, что мы были вынуждены добавить параметр DontBlameSendmail для возможности их отключения.
Есть и другие аспекты безопасности, которые не относятся к защите адресного пространства самой программы. Например, увеличение количества спама вызвало увеличение сбора адресов. Команды SMTP VRFY и EXPN были специально спроектированы для валидации индивидуальных почтовых адресов и расширения содержимого почтовых списков соответственно. Эти команды впоследствии стали настолько широко использоваться спамерами, что большинство сайтов их полностью отключило. Это прискорбно, так как данная команда иногда использовалась некоторыми анти-спам агентами для валидации подразумеваемых адресов отправки.
Аналогично, защита от вирусов какое-то время рассматривалась как проблема десктоп-приложений, но сейчас проблема выросла до такой степени, что сейчас любой коммерческий агент передачи почты должен иметь антивирусную проверку. Остальные требования безопасности на сегодняшний день включают обязательное шифрование важных данных, защиту от потери данных и принудительное исполнение законных требований, например, для закона о защите информации о здоровье.
Одним из принципов, которым sendmail следовал с самого начала, была надежность – каждое сообщение должно было быть доставлено либо возвращено обратно отправителю. Но проблема joe-jobs (когда атакующий подделывает обратный адрес сообщения, рассматриваемая многими как уязвимость) привела к тому, что многие сайты отключили возможность отправки уведомлений об отклонении доставки. Если проблема с доставкой может быть определена пока еще SMTP-соединение открыто, сервер может сообщить о проблеме неисполнением команды, но после того, как SMTP-соединение закрыто, неверно адресованное сообщение тихо исчезнет.
На сегодняшний день большинство легальных писем доставляются за один раз, поэтому информация о проблемах отправки получается, однако в принципе в мире главной стала позиция «безопасность важнее надежности».
Продолжение статьи: Эволюция sendmail