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

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

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

Вот о таких алгоритмах фильтрации и пойдет речь в настоящей статье.

ЧЕМ ВРЕДЕН СПАМ?

Вредоносность спама всякий склонен оценивать по-разному. В какой-то мере он даже полезен: раз сообщения так интенсивно рассылаются, значит, это кому-то нужно, и эффективность данного способа рекламы достаточно велика. Если бы все пользователи сети перестали обращать на спам внимание, отправители потеряли бы к нему интерес. Из сотен абсолютно ненужных писем иной раз попадаются и полезные сообщения. Сам автор таким способом обнаружил несколько компаний, с которыми теперь тесно сотрудничает, и доход от этого сотрудничества покрыл все издержки и расходы на получение и чтение остальных спамерских сообщений (ирония судьбы состоит в том, что фильтр против спама, алгоритм которого описывается в настоящей статье, был создан как раз совместно с этими компаниями).

Со спамом обычно связывают два вида убытков: необходимость оплаты «паразитного» трафика (или времени при модемном соединении) и психологический дискомфорт вследствие получения больших количеств абсолютно неинтересных адресату сообщений, порой непристойного характера.

Собственно говоря, стоимость трафика Internet сейчас столь низка, что апеллировать к убыткам вследствие затрат на прием нежелательной корреспонденции могут лишь те, кому ежедневно приходится принимать или передавать сотни мегабайт спама. Однако и в этом случае доля спама в общем объеме трафика зачастую оказывается крайне невелика. Нерадивые сотрудники компаний причиняют куда больший ущерб тем, что загружают на свой ПК из сети файлы MP3 и видеоролики, наподобие «Масяни».

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

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

ОРУЖИЕ ВОЗМЕЗДИЯ

Если со спамом не бороться, то объем «паразитного» трафика будет неуклонно возрастать, вплоть до полной парализации Сети, занятой передачей бесполезных сообщений.

Основные способы борьбы со спамом следующие:

  • официальное признание спама незаконным на государственном (и межгосударственном) уровне;
  • объявление бойкота тем компаниям/товарам/услугам, которые не гнушаются рекламировать себя подобным образом;
  • выявление и уничтожение «сорных» сообщений на транзитных и конечных почтовых узлах;
  • ведение списков узлов, используемых для массовых рассылок непрошеной корреспонденции, и отказ устанавливать с ними соединение по TCP/IP;
  • массированные атаки узлов рассылки спама с целью выведения их из строя.

Последний способ мы отвергнем сразу, поскольку его законность весьма сомнительна (правда, это не мешает его широкому использованию на практике).

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

Всякая система фильтрации должна удовлетворять следующему необходимому минимуму требований:

  • фильтр должен выявлять максимально возможное количество «сорных» сообщений;
  • идентификацию сообщения желательно производить непосредственно на стадии его получения, не дожидаясь, пока оно целиком поступит на сервер (таким образом удается существенно уменьшить «паразитный» трафик);
  • идентифицированные как спам сообщения должны удаляться без уведомлений получателя/отправителя (в противном случае «паразитный» трафик не только не уменьшится, но и увеличится, что категорически недопустимо);
  • фильтр не должен отказывать узлу в приеме сообщения до тех пор, пока не убедится в том, что это сообщение — «сорное» (иначе пострадают все остальные пользователи узла);
  • ни при каких обстоятельствах нельзя допустить, чтобы фильтр давал ложные срабатывания, ошибочно удаляя сообщения обычных пользователей;
  • всю необходимую для своей работы информацию фильтр должен черпать из сети самостоятельно, не требуя специального обслуживания.

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

Еще большие неудобства создают «черные» списки, куда включаются адреса всех узлов, когда-либо использовавшихся спамерами для рассылки сообщений. Однако исключительно спамерских узлов в сети не существует! Спамеры задействуют для своих целей ресурсы общего пользования, обслуживающие большое количество человек. Так что же, всем им теперь другой сервер искать? Можно смириться, когда дело касается бесплатных почтовых ящиков (хотя и их постоянная смена никому не доставит радости), но ведь в «черные» списки попадают и платные почтовые серверы крупных провайдеров!

К тому же полностью перекрыть поток спама посредством «стоп-листов» невозможно в принципе, хотя бы потому, что спамеру необязательно прибегать к услугам сервера исходящей почты, при желании этим сервером может стать он сам, просто воспользовавшись достаточно быстрым каналом. По признанию самих спамеров, для массовой рассылки вполне хватает и скромного модемного соединения на 33 Кбит/с. Если спамер употребляет динамический IP-адрес (который и обходится ему дешевле, чем постоянный), то для его отключения придется заблокировать всех клиентов данного провайдера, а среди них могут вполне оказаться и те, чьи письма представляют для обороняющегося узла определенный интерес (например, служебная корреспонденция от нештатных сотрудников организации).

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

НАЖИВКА ДЛЯ СПАМЕРА

Прежде чем браться за создание фильтра, спаму необходимо дать строгое определение, в рамках которого и будет действовать фильтр. На первый взгляд такой подход выглядит излишним бюрократизмом — все мы прекрасно знаем, как выглядит спам. Но в этом-то и заключалась главная ошибка многих разработчиков: как можно фильтровать то, чему нет ни названия, ни определения!

Условимся считать спамом незапрошенную массовую рассылку писем с близким или идентичным содержанием (см. также врезку «Технологии полиморфизма и антиполиморфизма»). Определение «незапрошенная» здесь ключевое. Если мы сможем надежно отличить запрошенную рассылку от незапрошенной, то ключ к созданию оружия возмездия окажется в наших руках! Один из вариантов решения выглядит так: на одном или нескольких серверах входящей почты регистрируется несколько ящиков, единственной задачей которых будет накопление «сорной» корреспонденции в качестве образца для выявления «сорных» сообщений на остальных ящиках.

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

  • имена подставных ящиков должны состоять всего из одного-двух символов (многие спамеры находят свои жертвы методом прямого перебора адресов, поэтому чем короче имя, тем интенсивнее на него посылаются непрошеные сообщения);
  • имена подставных ящиков следует равномерно распределить по всему алфавиту, поскольку заранее неизвестно, как отсортированы те или иные базы спамеров и отсортированы ли они вообще;
  • имена подставных ящиков желательно распределить по максимальному количеству доменов, так как это увеличивает вероятность раннего обнаружения очередной атаки;
  • фильтр должен автоматически отвечать на все приходящие непрошеные сообщения, чтобы спамеры пометили этот адрес как проверенный и стали отправлять на него сообщения с удвоенной энергией;
  • фильтр периодически «засвечивает» подставные адреса на форумах, досках объявлений и телеконференциях, поскольку все они активно используются спамерами для пополнения своих баз.

Через некоторое время спам так и будет сыпаться на ваш сервер. Чтобы не оплачивать чужой трафик из своего кармана, такой сервер лучше расположить на самом медленном и дешевом канале в Internet (все равно скорость приема спама для вас не критична). Естественно, подобную «контртеррористическую» акцию лучше проводить не в одиночку, а совместно с несколькими компаниями — это снизит неизбежные издержки каждой из них по отдельности. И чем больше серверов будет участвовать в качестве «приманки» в накоплении образцов «сорных» сообщений, тем выше вероятность, что к моменту поступления непрошеной корреспонденции на защищаемый почтовый сервер у вас уже будет ее образец.

Тривиальная проверка всех поступающих писем на их принадлежность к базе спама позволяет надежно идентифицировать «сорные» сообщения, сведя процент ложных срабатываний к минимуму. (Некоторые фильтры удаляют письма, одновременно пришедшие на адреса нескольких сотрудников, полагая, что массовость рассылки — явный признак спама. Увы! Подобная фильтрация только мешает! Дублирование корреспонденции — вполне законное и достаточно широко распространенное явление, не имеющее никакого отношения к спаму. К тому же существует и такая вещь, как запрошенные рассылки, на которые может быть подписана добрая половина всех сотрудников.)

Однако своевременно удалить непрошеные сообщения из почтовых ящиков своих клиентов — только половина дела! Хорошо бы вообще воспрепятствовать их поступлению на сервер, тем или иным способом уменьшая «паразитный» трафик до разумного минимума.

КАК УМЕНЬШИТЬ ТРАФИК

Существенно уменьшить «паразитный» трафик без вреда для остальных пользователей невозможно потому, что в Internet для этого нет соответствующих механизмов! В момент установления соединения TCP/IP с почтовым сервером последний не может однозначно сказать, является ли удаленный узел спамерским или нет. Даже если данный узел уже был замечен в массовой рассылке непрошеной корреспонденции, мы не имеем морального права отказывать ему в подключении! Ведь спамер мог использовать и какой-нибудь общедоступный узел (например, один из компьютеров Internet-кафе), а полученный от провайдера динамический IP-адрес может быть выдан в настоящий момент совершенно другому лицу! Коротко говоря, IP-адрес надежно идентифицирует спамера лишь тогда, когда с данного адреса не поступает ничего, кроме спама, что случается, прямо скажем, нечасто.

Имя отправителя, вносимое в поле FROM, также ни о чем не говорит, поскольку никаких гарантий, что спамер не воспользовался чужим именем, у нас нет! Как показывает практика, подавляющее большинство спамеров предпочитают пользоваться чужими или фиктивными именами, и некоторые из них никогда не используют одно и то же имя дважды.

Содержимое корреспонденции — тот ключ, который позволяет надежно идентифицировать «сорные» сообщения, автоматически отделив зерна от плевел. Обнаружив, что несколько первых строк тела (не заголовка!) письма совпадают с эталонными образцами из базы «сорных» сообщений (о которой мы поговорим ниже), сервер может моментально разорвать TCP/IP-соединение, избежав получения всего послания целиком. Однако заголовок электронного письма зачастую составляет значительную часть от его общего объема, поэтому существенного снижения «паразитного» трафика добиться таким образом не удается. Скорее всего, он даже возрастет, поскольку реакцией удаленного узла на разрыв соединения TCP/IP будет попытка передать ненужное нам сообщение вновь. Поэтому лучше соединение TCP/IP не разрывать, а «замораживать» его, имитируя глубокую «задумчивость» сервера, и периодически «пробуждаться» на короткое время. Если интервалы между такими «пробуждениями» окажутся меньше, чем максимальное время неактивности, допускаемое удаленным узлом, то он не станет разрывать установленное соединение до окончания передачи письма, которое будет поступать на наш сервер со скоростью приблизительно один пакет IP в минуту, что на канале Internet никак не скажется.

Удерживая спамера на линии, но перекрыв ему «кислород», мы некоторым образом затрудняем рассылку непрошеных сообщений, делая ее неэффективной и экономя пропускную способность своих каналов. В качестве превентивной оборонительной меры можно затормозить и остальные соединения TCP/IP, устанавливаемые в данный момент со «спамерским» сервером, поскольку, с большой степенью вероятности, по ним также поступает спам (особенно если адреса отправителя, заносимые в поле FROM, совпадают с «сорным» сообщением).

Открытое, но «замороженное» соединение TCP/IP «карман не тянет» (если только сервер настроен правильно, так как большое количество одновременно установленных соединений TCP/IP увеличивает использование оперативной памяти и даже может вызвать отказ в обслуживании), но на некоторое время выводит сервер спамеров из игры, тем самым значительно уменьшая трафик.

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

РЕЗУЛЬТАТЫ ПРАКТИЧЕСКИХ ИССЛЕДОВАНИЙ

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

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

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

Тем не менее предложенный подход может успешно использоваться корпоративными пользователями.

Крис Касперски — независимый эксперт в области компьютерной безопасности. С ним можно связаться по адресу: kpnc@programme.ru.


Технологии полиморфизма и антиполиморфизма

Тривиальный алгоритм сравнения содержимого писем очень легко обмануть, если при отправке сообщения каким-либо образом изменять его содержимое. Спамер может добавить то или иное количество пробелов в некоторых местах, заменить их табуляцией, вместо русских букв «a», «o» и «к» использовать сходные по начертанию английские «a», «o» и «k». Письма в формате HTML безболезненно переносят еще большее количество изменений (достаточно, например, вставить несколько незначащих или несуществующих тегов в текст, тем самым его машинное представление исказится до неузнаваемости). Поэтому разработка надежного алгоритма сравнения становится весьма непростой задачей. Фильтр против спама должен уметь правильно интерпретировать формат HTML, выбрасывая из него все ненужное, а также быть готов к тому, что написание отдельных слов сообщения окажется тем или иным образом искажено.

Используя словари синонимов, спамеры могут значительно изменять внешний облик своих посланий, практически не искажая их смысл. Адекватной контрмерой станет проверка поступающих сообщений по тем же самым словарям и перевод письма в некоторый «метафизический» псевдокод. Между тем написать полиморфный вирусный генератор намного сложнее, чем полиморфный генератор спамерских сообщений! Так что времена полиморфного спама уже не за горами, и приступать к разработке надежных фильтров следует уже сейчас. Конечно, трудоемкость разработки и отладки соответствующего анализатора намного превышает сложность разработки всех остальных компонентов фильтра целиком, но она представляет наиболее интересную задачу. Это передовой край науки, объединяющий в себе последние достижения в области нейросетей, распознавания образов и машинного перевода.