«Ужасы войны». Защита Microsoft Groupware Environments под Unix (Часть первая)

«Ужасы войны». Защита Microsoft Groupware Environments под Unix (Часть первая)

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

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

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

В данной статье будут описаны методы и средства для создания безопасной и устойчивой среды электронной почты. Мы сфокусируем свое внимание на защите почтовых систем основанных на программах Exchange/Outlook.

Поле битвы

Большинство больших компаний основывают свою сетевую инфраструктуру на продуктах компании Microsoft, включая Microsoft Exchange Server и Outlook Client. Комбинация этих двух программ позволяет (помимо других возможностей) вести централизованные адресные книги, интегрирование с учетными записями Windows и паролями, и эффективное календарное планирование. Для небольших инфраструктур, Microsoft, с помощью линии продуктов Small Business Server, позволяет простое получение, установку и конфигурирование основных систем электронной почты. Для больших компаний имеются существенные выгоды от наличия всех вышеупомянутых возможностей, интегрированных в глобальном масштабе. Однако, в случае применения злонамеренного кода, такое использование общих компонентов предоставляет большое поле для нападения. Даже если вы не работаете в среде Exchange/Outlook, у вас есть другой серьезный враг - спам или нежелательная и незапрашиваемая электронная почта. Согласно различным исследованиям 60-70% содержимого вашего почтового ящика является спамом, причем эти цифры постоянно растут. При этом все антиспамные решения практически не приносят реальных результатов.

Поэтому, независимо от выбранной вами среды, вам всегда придется сражаться на двух фронтах.

План нападения

Прежде чем мы начнем развертывать инфраструктуру, нам абсолютно необходимо определить защитную политику. Без четкой политики, инженеры, администраторы и обслуживающий персонал будут выполнять различные действия, которые каждый из них будет считать правильными, а пользователи вообще не будут иметь понятия, что им делать. Кроме того, хорошо продуманная политика будет технологически независима, позволяя вам менять местами и выгружать компоненты без негативного влияния на весь процесс (например, заменить sendmail+MIMEDefang на qmail+qmail-scanner+ClamAV).

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

  • Хотим ли мы делать анти-вирусные проверки на входящей почте?
  • Хотим ли мы делать анти-вирусные проверки на исходящей почте?
  • Хотим ли мы фильтровать / удалять весь приходящий спам или будем только помечать сообщения как спам, предоставляя возможность почтовым клиентам самим обрабатывать такие сообщения?
  • Хотим ли мы фильтровать / удалять все вложения определенных категорий (например удалять все выполнимые программы)?
  • Хотим ли мы делать фильтрацию содержимого (например, не спам сообщения, отвечающие некоторым критериям)?
  • Хотим ли мы сохранять список злонамеренных кодов и фильтровать / удалять сообщения, основанные на этом списке, или будем полагаться только антивирус и программу обнаружения спама?
  • Хотим ли мы генерировать, просматривать и архивировать отчеты для фильтрирующего шлюза?
Вышеупомянутый список это только начало. Правила, ограничивающие спам/вирус сообщения, могут дополняться для многих различных защитных политик. Хорошим началом при разработке защитной политики может послужить SANS Security Policy Project.

Также необходимо рассмотреть другие технические вопросы, типа:

  • Должны ли все сообщения, помеченные как "спам/вирус" удаляться сразу или их необходимо отметить и доставить конечному пользователю?
  • Необходимо ли разрешить пользователям самим помечать сообщения как спам и добавлять их в спам-накопитель?
  • Разрешено ли пользователям поддерживать их собственные "черные" и "белые" списки?
Существует много различных способов предохранения вашей почтовой среды от атак, каждый из которых приводит к определенным затратам и сложностям в реализации. Представленные ниже средства являются открытым источником и выполняются на большинстве *nix систем, включая Linux, Solaris, OS X и FreeBSD/OpenBSD. Выбор таких программ придает больше гибкости при изменении среды. Также это приводит к существенной экономии средств на внедрение (затраты только на аппаратные обеспечение).

В первой части данной статьи будут использоваться следующие программы, предназначенные для борьбы со спамом/вирусами:

    Sendmail [4]
  • Данный MTA (почтовый агент) был главным элементом Интернет почты в течение двух десятилетий. Это мощная и комплексная программа, хорошо зарекомендовавшая себя в качестве спам/вирусного фильтра для электронной почты. Главной особенностью sendmail, делающей его идеальным средством фильтрации, является встраиваемая в программное обеспечние API библиотека milter (mail filter)[6]. Этот протокол/библиотеку вы можете включать в другие компоненты вашего почтового сервера, что поможет вам наблюдать за процессом обмена почтовыми сообщениями и выполнять нужные действия или изменять/переадресовывать вывод.

    MIMEDefang [7]

  • Данное средство - sendmail milter, поддерживает настройку различных правил проверки для выполнения многих видов задач типа вирусной блокировки, блокирования / перемещения спама, обработку вложений (включая блокирование и удаление вложений) и многое другое. Для установки и запуска данная программа требует наличия Perl и нескольких дополнительных Perl модулей.

    SpamAssassin [8]

  • SpamAssassin это одно из наиболее известных средств борьбы со спамом в мире открытых источников. Данная программа регулярно дорабатывается и обновляется, она легко настраиваема и интегрируется со многими различными почтовыми серверами.
Во второй части статьи мы попробуем альтернативный подход к решению тех же самых задач с помощью Qmail, Qmail-Scanner, Clam Anti-Virus и SpamAssassin. Я строго рекомендую использование системы FreeBSD/OpenBSD [9] при настройке шлюза. Хотя все описанные здесь программы легко устанавливаются и выполняется одинаково хорошо под Linux, но вы потратите больше времени на загрузку и компиляцию/установку. Кроме того, главным преимуществом системы OpenBSD является её защита, что совсем неплохо иметь в вашем почтовом шлюзе.

Установка

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

Первое, что необходимо сделать - убедиться в том, что вы откомпилировали sendmail с поддержкой milter. Для этого можно просмотреть вывод " /usr/lib/sendmail -bv -d0.1 " и проверить наличие слова "MILTER". Если milter не поддерживается, то необходимо добавить к "devtools/Site/site.config.m4" следующие строки:

dnl Milter
APPENDDEF('conf_sendmail_ENVDEF', '-DMILTER')
После чего перекомпилировать sendmail.

Если бы вы никогда прежде не использовали CPAN [10], то теперь как раз самое время узнать о нем, т.к. это сэкономит много времени при установке Perl модулей на любой системе. Для исходной конфигурации проделайте следующее:

perl -MCPAN -e "shell" 
(Все это предполагает наличие установленного Perl). Мастер будет вести вас через параметры конфигурации для установки доступа к CPAN библиотеке. Однажды сконфигурировав CPAN доступ, вы сможете устанавливать любые Perl модули (например SpamAssassin) с помощью одной строчки в командной строке:
perl -MCPAN -e "install Mail::SpamAssassin"
После установки sendmail следующим шагом будет инсталляция MIMEDefang. Если вы не делаете автоматической компоновки через дерево портов *BSD, то я строго рекомендую начинать с MIMEDEFANG HOWTO [11]. Здесь охвачены детали установки всех необходимых компонентов для базовой конфигурации sendmail. Я предлагаю использование автоматизированного метода инсталляции CPAN, описанного выше.

Для конфигурирования sendmail как шлюза для вашей Exchange среды, вы будете должны (как минимум) добавить поддержку mailertable. Для начала необходимо отредактировать файл m4 и добавить следующее:

FEATURE('mailertable')dnl
к конфигурации, если этого там еще нет и регенерировать файл конфигурацию sendmail.

Далее необходимо включить sendmail access_db:

FEATURE('access_db')dnl
Файл mailertable обычно устанавливается в /etc/mail/mailertable и имеет следующий формат:
example.org esmtp:[exchangeserver.internal.example.org]
Каждая строка в файле говорит "почта для этого домена, должна быть переслана для обработки на следующий хост".

Далее необходимо сгенерировать базу данных mailertable с помощью команды makemap:

makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
Теперь отредактируйте /usr/mail/access, и добавьте ваши домены:
example.org RELAY 
Далее сгенерируйте файл /etc/mail/access.db с помощью команды makemap.

В зависимости от вашей установки sendmail, Вам, вероятно, придется изменять /etc/mail/local-host-names, /etc/mail/relay-domains и другие файлы конфигурации.

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

example.org IN MX 5 defender.domain.org
defender.example.org IN A 192.168.10.10
Как только вы сконфигурируете ваш Exchange сервер для возможности получения почты с sendmail шлюза, то можно начинать осуществление защитной политики для вашей электронной почты.

Процесс фильтрации всей нашей почты сосредоточится на MIMEDEFANG milter, так как эта программа находится "в потоке" и обрабатывает весь процесс. MIMEDefang делит сообщение на части во временном каталоге и выполняет процедуры фильтрации (/etc/mail/mimedefang.pl - > /etc/mail/mimedefang-filter.pl). Большая часть нашей работы будет проделана при настройке функций фильтра выполняющих обработку. Вся настройка выполняется в perl подпрограммах.

Фильтры MIMEDEFANG работают в различных точках в течение почтового диалога. Sendmail milter передает различные части почтового диалога в MIMEDEFANG, и ваши настройки фильтра могут действовать на любой стадии.

Как было сказано ранее, MIMEDefang вызывается при получении сообщения. При этом программа создает временный каталог и разбивает сообщение на части:

  • INPUTMSG - целое сообщение с заголовками
  • HEADERS - только заголовки сообщения (каждый на отдельной строке)
  • COMMANDS - список односимвольных команд
Если в сообщении были вложения, то для них создаются отдельные файлы.

После инициализации фазы сканирования, MIMEDefang анализирует почтовое сообщение и вызывает подпрограмму filter_begin. Поскольку обрабатывается каждая часть MIME, то вызывается filter или filter_multipart. В конце обработки вызывается filter_end.

После вызова filter_begin вы можете выполнить любой тип обработки на созданных MIMEDefang файлах. Реальный запуск начинается при вызове filter. Ниже приведен пример фильтра:

sub filter {

	my ($entity, $filename, $extension, $type) = @_ ;

	return action_accept if ($ext eq '.txt') ;

	return action_drop_with_warning('No compressed files!')
	if ($ext eq '.zip');

	if ($Subject =~ /viagra/i) {
		action_discard() ;
	} # if #

} # filter() #
MIMEDefang передает в подпрограмму фильтрации MIME объект, имя файла, его расширение и тип MIME. При этом определяются некоторые глобальные переменные, создаваемые из информации содержащейся в сообщении (типа темы сообщения ($Subject), списка получателей (@Recipients), адреса пересылки ($RelayAddr) и др.). В описанном выше примере фильтра, программа сначала проверяет расширение файла, если это текстовый файл, то подпрограмма пропускает его через событие action_accept. Если этот тест не пройден, то подпрограмма переходит к другому и начинает проверять не является ли файл - zip-файлом. Если это так, то вложение удаляется и пользователю сообщается об этом. Наконец, если в строке темы сообщения будет слово "Виагра" (в любом регистре), то сообщение принимается (удаленный сервер получает SMTP код подтверждения 2##), но пользователь это сообщение не увидит.

MIMEDefang имеет много подпрограмм, дающих возможность изолировать сообщения или части сообщений, отклонять подключения (посылая код ошибки SMTP 5## на удаленный сервер), перемещать вложения в отдельный каталог, вызывать внешние подпрограммы и многое другое. Имеются также встроенные подпрограммы, использующие дополнительные Perl модули для вирусной проверки. Часть процесса может использовать спам-проверку и это как раз то, когда в игру вступает SpamAssassin.

SpamAssassin выполняет проверку заголовков сообщения и тела сообщения, проводит статистический анализ, основанный на спам-справочниках (Байесов анализ). После прохождения каждой проверки генерируется значение, добавляемое к общей оценке. Когда оценка достигает определенного (пользователем или узлом) значения, сообщение помечается как спам. SpamAssassin проверки работают на стадии filter_end, и MIMEDEFANG имеет встроенный доступ к модулю SpamAssassin через подпрограмму spam_assassin_check(). Ниже представлен пример примитивного спам фильтра:

sub filter_end {

	my ($entity) = @_ ;
	my ($score, $thresh, $names, $report) =
		spam_assassin_check()

	if ($score >= 5*$thresh) {
		action_bounce("SPAM Rejected");
		return;
	} # if #

	if ($score > $thresh) {
		action_change_header("Subject", "[SPAM] $Subject") ;
	} # if #

} # filter_end() #
"Spam filter" запускает SpamAssassin, а затем смотрит, не превышает ли оценка для текущего сообщения пороговое значение больше чем в пять раз. Если это так, то подпрограмма удаляет сообщение. Если оценка только выше порогового значения, то в этом сообщении изменяется строка с темой сообщения с указанием, что это спам. Вы можете определять настройки SpamAssassin в файле /etc/mail/spamassassin/local.cf. Ниже приведен пример local.cf:
required_hits 10
blacklist_from *.msn.com
score NIGERIAN_BODY1 10
score NIGERIAN_BODY2 10
score HTML_IMAGE_ONLY 5
показывающий, что для определения спама требуется десять пунктов, что никакие почтовые сообщения от msn.com не будут приняты, и что пять пунктов будет добавлены к общей оценке, если это HTML файл с тэгом IMG. Запуск:
perldoc Mail::SpamAssassin::Conf
предоставит вам полный список реконфигурируемых параметров. Вы должны потратить несколько дней (может даже недель) для точной настройки параметров спама, чтобы достичь хороших результатов в его предотвращении. Существует одно замечание к этой установке - SpamAssassin/MIMEDefang будет выполняться как "defang" пользователь. Все добавления к Байесовой базе данных должны быть сделаны как этот пользователь.

Не отчаивайтесь, если ваши познания в Perl не совсем сильны. MIMEDEFANG HOWTO снабжен фильтром, выполняющим вирусные проверки, проверки расширений файлов и спам-проверки. И вы просто можете изменять базовую настройку.

Заключение первой части.

В данной статье была рассмотрена комбинация Sendmail, MIMEDefang и SpamAssassin как средств формирования MTA. Однако многие предпочитают альтернативный подход. Во второй части статьи мы еще раз попробуем решить тот же вопрос при помощи других средств таких как Qmail, Qmail-Scanner, Clam Anti-Virus.

Ссылки

  1. The Deadly Duo: Spam and Viruses – http://www.internetnews.com/stats/article.php/3295851
  2. SANS Security Policy Development – http://www.sans.org/resources/policies/
  3. K-9 History: The Dogs of War! –http://community-2.webtv.net/Hahn-50thAP-K9/K9History/
  4. Sendmail.org - open source site –http://www.sendmail.org/
  5. Sendmail.com - commercial sales/support – http://www.sendmail.com/
  6. http://www.milter.org/ has many resources on all types of sendmail mail filters
  7. MIMEDefang home – http://www.mimedefang.org/
  8. SpamAssassin home – http://www.spamassassin.org/
  9. *BSD Sites – http://freebsd.org/ and http://openbsd.org/
  10. The Comprehensive Perl ArchiveNetwork – http://www.cpan.org/
  11. The MIMEDefang HOWTO – http://www.rudolphtire.com/mimedefang-howto
  12. MIMEDefang LISA Slides – http://www.mimedefang.org/static/mimedefang-lisa03.pdf

Мы расшифровали формулу идеальной защиты!

Спойлер: она начинается с подписки на наш канал

Введите правильный пароль — подпишитесь!