Обзоры
Товарищ по… спаму

Товарищ по… спаму



Читателям может показаться странным, что нынешняя статья фактически посвящена
одной-единственной и отнюдь не самой популярной программе, тогда как всего около
полугода назад мы публиковали полноценный обзор ("Компьютерное Обозрение",
# 35, 2002) даже с попыткой
некой классификации. Однако подобрать идеальное средство для борьбы со спамом
очень непросто, а SpamPal не только наверняка придется по душе многим пользователям,
не чурающимся технических подробностей, но и позволит приобщиться к последним
достижениям "антиспамовой" мысли.


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


Товарищ по... спаму

Байесовский фильтр нелишне слегка
подучить

При этом нередко именно неподготовленные и неграмотные пользователи по наивности
становятся невольными пособниками "злоумышленников". Вот совсем недавний
пример из жизни: некий "умник" догадался не просто отправить рекламное
письмо по весьма емкому списку рассылки, но и прописать этот самый список в поле
обратного адреса. Трудно сказать, какой процент реципиентов оказался достаточно
наивным, чтобы дать гневную отповедь спамеру, однако через два-три дня ситуация
уже не была такой забавной. Улеглась эта "буря" лишь после того, как
кто-то более здравомыслящий взял на себя труд разъяснить остальным суть проблемы.


Еще одна программа?

Итак, поводом для написания статьи послужило знакомство с программой SpamPal.
Созданная изначально энтузиастом-одиночкой Джеймсом Фармером (James Farmer), она
постепенно обзавелась сообществом активных пользователей, не только добровольно
выступающих в качестве бета-тестеров, но также обсуждающих и предлагающих новую
функциональность и даже помогающих в ее реализации. Благодаря этому сегодня программа
с размером инсталляционного модуля менее 400 KB обладает не только завидной устойчивостью,
но и рядом интересных возможностей, выделяющих ее среди аналогичных разработок.

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

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

Научный подход

Отсеивать нежелательную корреспонденцию по формальным признакам становится все сложнее: Web-почта избавляет спамера от необходимости использования open relays; централизованные службы почтовых рассылок уже практически неотличимы от спама. Однако универсальным и адекватным индикатором нежелательной почты по-прежнему является само содержимое письма, бессмысленное и надоедливое именно с вашей точки зрения.

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

Однако около полугода назад под все подобные изыскания удалось подвести некую
"теоретическую базу". Речь идет о работе "A Plan For Spam",
в которой ее автор Пол Грэм (Paul Graham) предложил простую статистическую методику
выявления спама. Вкратце суть ее заключается в следующем.

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

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

Более того, методом проб и ошибок Грэм выяснил, что на самом деле даже не нужно принимать в расчет все присутствующие в письме слова, достаточно ограничиться лишь 15 самыми "интересными", т. е. как можно дальше отстоящими от нейтрального показателя 0,5 (характерного для слов, которые одинаково часто встречаются и в спаме, и в обычной переписке). Впрочем, подобных эмпирических допущений в реализации метода от самого изобретателя немало, однако не исключено, что именно они и позволили добиться очень высокой точности. Экспериментальный фильтр пропускал буквально единицы сомнительных писем (0,5%) практически без ложных срабатываний (0,03%).

Кстати, по мере роста интереса к данной методике выяснилось (похоже, это оказалось новостью и для самого Грэма), что аналогичные подходы были описаны в общедоступных публикациях еще в 1998 г. — причем занимался ими даже исследовательский центр Microsoft. Тем не менее признания и популярности они не завоевали. Вероятно, алгоритм Грэма действительно оказался лучше адаптированным к реальной жизни.

Естественно, нужно понимать, что Грэм настраивал свой фильтр исключительно "под себя". Взяв любую готовую разработку, вы наверняка не получите (во всяком случае — сразу) столь же впечатляющих результатов. Поэтому все Байесовские фильтры, и дополнительный модуль для SpamPal не исключение, обеспечивают весьма гибкие возможности настройки и обучения. Пользователь может уточнять вероятность, достаточную для отнесения письма к спаму (традиционно — 0,9), количество принимаемых к рассмотрению слов и пр., а также дополнительно подключать внешние списки.


От слов к делу

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

Нужно сразу предупредить читателей, что программа не предназначена для использования "out-of-box". В том смысле, что функционировать-то она будет, но вряд ли удовлетворительно. Всем, решившим познакомиться со SpamPal поближе, следует быть готовыми разбираться с многочисленными нюансами. Благо разработчики постарались предоставить для этого достаточно удобные средства: 1) всем письмам, классифицированным как спам, в поле темы добавляется маркер **SPAM**, по которому их затем можно дополнительно обрабатывать в почтовых клиентах, 2) в конце заголовка письма дописываются несколько специальных реквизитов вида

X-SpamPal: PASS A-WLIST FROM

, позволяющих выяснить, какой модуль и по какой причине охарактеризовал сообщение таким-то образом.

Начать настройку, естественно, стоит с базовых возможностей. Не секрет, что в списки большинства RBL-служб, кроме open relays, нередко попадают и вполне благонадежные серверы, организующие электронные рассылки. Как говорилось выше, чтобы разобраться, кто именно демонстрирует избыточный волюнтаризм в отношении конкретного письма, достаточно изучить его заголовок

X-SpamPal: SPAM OSIRU 216.73.90.57

и отключить зарвавшуюся службу (в данном случае OSIRU).

Нелишне также потратить время на организацию белого и черного списков. Основу первого составит адресная книга, содержимое которой (собственно, нужны только электронные адреса) чаще всего конвертируется в обычный текст штатными средствами. Чтобы не выискивать вручную реквизиты подписок, в SpamPal можно активизировать на некоторое время функцию Auto-Whitelists (при этом в белый список автоматически будет занесен каждый, кто успеет прислать за время "амнистии" указанное число писем).

С черным списком дело обстоит несколько сложнее, поскольку разные программы организуют его по-своему. Outlook, к примеру, хранит свой в уже готовом к употреблению виде — файл Junk Senders.txt достаточно просто отыскать в системном профиле пользователя. Outlook Express, напротив, все данные складирует в реестре. Один раз выбрать нужные адреса можно и вручную, однако если делать это регулярно (например, вести общий список для нескольких пользователей), то лучше воспользоваться скриптом (и при необходимости адаптировать его), доступным на сайте SpamPal в разделе подключаемых модулей.

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

Для отсева писем по конкретным признакам пригодится модуль RegExFilter, реализующий обработку регулярных выражений. В отличие от правил, доступных в почтовых клиентах, обеспечивает полный доступ и к телу, и к заголовку письма. Используется довольно замысловатый для непосвященного синтаксис Perl, однако разобраться с основами помогут довольно толковое руководство (доступное на сайте разработчиков) и файл настроек по умолчанию, в котором сразу же стоит отключить (как минимум) все фильтры с комментариями "non ASCII characters in subject" — кириллица у заморских авторов не в чести. Вот так, к примеру, можно отсеять все письма, "вылеченные" Norton Antivirus:

%=Line: itc_drupal_b(name="Norton AntiVirus Deleted1.txt")

Имеются и другие подключаемые модули (в основном вспомогательного характера) — для протоколирования, резервирования и пр. Однако главное, что их ассортимент постоянно расширяется за счет новых идей и подходов. Соответственно, даже если основной разработчик забросит свой проект, пользователь вряд ли останется один на один со спамом и по-прежнему будет во всеоружии.


Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: